Интерфейс: без служебных пометок у оператора — «(TEST3)» в подаче 16/1, стенд разработки в справке API ЛК, «для теста»

Проверка шаблонов (23.10.2026): кнопок и форм режима разработки вне devOn нет; убраны тексты:
- подтверждение подачи 16/1 — без «(TEST3)» (контур выбирается в настройках);
- справка API ЛК — адрес <адрес bj> вместо стенда 10.10.10.22, путь к спецификации в репозитории — только в режиме разработки;
- предупреждение «боевой ЛК при тестовом контуре» — про тест «боевой ЛК → тестовый НРД» только в режиме разработки;
- «Залить одному клиенту» — без «(для теста)».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-23 16:08:06 +03:00
parent 32d88fc42a
commit 3a3bfa82af
3 changed files with 9 additions and 9 deletions
@@ -61,7 +61,7 @@ LISTEN=127.0.0.1:8099 ./bj-lk</pre>
<div class="card">
<h2>API личного кабинета (ESIA Finance V1)</h2>
<p class="muted">Bridge-and-Join-s реализует контракт ESIA Finance V1 на стороне back-office. ЛК клиента отправляет нам заявку, мы возвращаем подтверждение и потом колбэк со статусом. Полная спецификация: <code>docs/lk-contract/v1/openapi.yaml</code>.</p>
<p class="muted">Bridge-and-Join-s реализует контракт ESIA Finance V1 на стороне back-office. ЛК клиента отправляет нам заявку, мы возвращаем подтверждение и потом колбэк со статусом. {{if devOn}}Полная спецификация: <code>docs/lk-contract/v1/openapi.yaml</code>.{{end}}</p>
</div>
<div class="card">
@@ -69,7 +69,7 @@ LISTEN=127.0.0.1:8099 ./bj-lk</pre>
<p>HTTP <strong>Basic</strong>. Учётные записи и пароли согласуются с командой ЛК.</p>
<pre>curl -u "lk-user:lk-password" \
-H "Content-Type: application/json" \
http://10.10.10.22:8080/api/v1/back_office/claims/</pre>
http://&lt;адрес bj&gt;:8080/api/v1/back_office/claims/</pre>
{{if devOn}}<p class="muted">На M2 (дев-стенд) аутентификация отключена; включится на M3 — параллельно с подключением реального ЛК.</p>{{end}}
</div>
@@ -77,9 +77,9 @@ LISTEN=127.0.0.1:8099 ./bj-lk</pre>
<h2>2. Создание заявки M2M</h2>
<p><code>POST /api/v1/back_office/claims/</code></p>
<p>Тело — JSON, кодировка UTF-8. Минимально нужно: анкета инвестора, ИНН передающего и принимающего депозитария, информация о стоимости, массив ценных бумаг с количеством и счетами, подписанный XML заявления (base64).</p>
<pre>curl -X POST http://10.10.10.22:8080/api/v1/back_office/claims/ \
<pre>curl -X POST http://&lt;адрес bj&gt;:8080/api/v1/back_office/claims/ \
-H "Content-Type: application/json" \
-d @docs/lk-contract/v1/examples/claim-request.json</pre>
-d @claim-request.json</pre>
<p>Ответ <code>201 Created</code>:</p>
<pre>{
"id": "c02a1d5e-c2af-4799-bab4-953f133c5133",
@@ -92,14 +92,14 @@ LISTEN=127.0.0.1:8099 ./bj-lk</pre>
<div class="card">
<h2>3. Получение заявки и её статуса</h2>
<p><code>GET /api/v1/back_office/claims/{id}</code></p>
<pre>curl http://10.10.10.22:8080/api/v1/back_office/claims/c02a1d5e-c2af-4799-bab4-953f133c5133</pre>
<pre>curl http://&lt;адрес bj&gt;:8080/api/v1/back_office/claims/c02a1d5e-c2af-4799-bab4-953f133c5133</pre>
<p>Возвращает полную карточку с историей FSM, ответом НРД и решением принимающей стороны (когда оно пришло).</p>
</div>
<div class="card">
<h2>4. Список заявок</h2>
<p><code>GET /api/v1/back_office/claims</code> с query-фильтрами: <code>status</code>, <code>investor_id</code>, <code>created_from</code>, <code>created_to</code>, <code>limit</code>, <code>offset</code>.</p>
<pre>curl "http://10.10.10.22:8080/api/v1/back_office/claims?status=confirmed&limit=20"</pre>
<pre>curl "http://&lt;адрес bj&gt;:8080/api/v1/back_office/claims?status=confirmed&limit=20"</pre>
</div>
<div class="card">
@@ -268,7 +268,7 @@
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center">
{{if and (not .It.OrderSubmitted) .DraftReceived}}
<form method="post" action="/admin/incoming/{{.It.ID}}/submit-order" onsubmit="return confirm('Подать поручение 16/1 (тип ЭД ORDXM) в НРД (TEST3)?');">
<form method="post" action="/admin/incoming/{{.It.ID}}/submit-order" onsubmit="return confirm('Подать поручение 16/1 (тип ЭД ORDXM) в НРД?');">
<button type="submit" class="btn btn-ok">▶ Подать поручение 16/1 в НРД</button>
</form>
{{end}}
@@ -675,7 +675,7 @@
{{if devOn}} <input type="hidden" name="emulate_nsd_form" value="1">
<label style="display:flex;align-items:flex-start;gap:8px;font-weight:400;flex-basis:100%;margin-top:6px"><input type="checkbox" name="emulate_nsd" style="width:auto;margin-top:3px" {{if .Settings.LK.EmulateNSD}}checked{{end}} onchange="this.form.submit()"> <span><b>Имитация НРД</b> — заявки ЛК проходят сверку с DEPO, блокировку в QUIK и получают статус в ЛК, но в НРД не отправляются: ответ контрагента имитирует bj.{{if and (eq .Settings.LK.ActiveEnv "prod") (not .Settings.LK.EmulateNSD)}} <span style="color:var(--warn)">Сейчас включена принудительно: боевой ЛК при тестовом профиле ИШ ({{.Settings.NSD.Profile}}).</span>{{end}}</span></label>{{end}}
</form>
{{if lkProdOnTestNSD}}<p style="margin:10px 0 0;padding:9px 12px;border-radius:8px;background:var(--warn-weak);font-size:13px"><b>Боевой ЛК на сервере с тестовым контуром НРД ({{.Settings.NSD.Profile}}).</b> Заявки клиентов здесь не берутся — их обрабатывает боевой сервер bj; берутся только заявки теста «боевой ЛК → тестовый НРД». Портфели ДЕПО в ЛК отсюда не заполняются.</p>{{end}}
{{if lkProdOnTestNSD}}<p style="margin:10px 0 0;padding:9px 12px;border-radius:8px;background:var(--warn-weak);font-size:13px"><b>Боевой ЛК на сервере с тестовым контуром НРД ({{.Settings.NSD.Profile}}).</b> Заявки клиентов здесь не берутся — их обрабатывает боевой сервер bj{{if devOn}}; берутся только заявки теста «боевой ЛК → тестовый НРД»{{end}}. Портфели ДЕПО в ЛК отсюда не заполняются.</p>{{end}}
<div id="lk-portfolio" style="margin-top:14px;padding:12px 14px;border:1px solid var(--border);border-radius:10px">
<b>Заполнение портфеля ДЕПО бумагами из DEPO</b> {{if .Settings.LK.PortfolioSync.Enabled}}<span class="badge confirmed">включено{{if .Settings.LK.PortfolioSync.AllClients}} — все клиенты{{else}} — по списку{{end}}</span>{{else}}<span class="badge draft">выключено</span>{{end}}
<p class="muted" style="margin:6px 0 8px;font-size:13px">Для клиентов из списка — каждые 10 секунд, для всех клиентов — раз в 5 минут (одним запросом к DEPO) bj сверяет портфель клиента в DEPO и отправляет его в ЛК (<code>/portfolio/import</code>, портфель ДЕПО) — только если остатки изменились. Номер гос. регистрации — из экспорта QUIK, раздел счёта — «Основной», хранение — НРД. Бумаги без номера гос. регистрации не отправляются (ЛК отвергает весь импорт).</p>
@@ -707,7 +707,7 @@
<p class="muted" style="font-size:12px;margin:4px 0 0">Заполнено из базы DEPO (префикс счёта) и значений по умолчанию — можно изменить. Пример: счёт ВТНКЦ00000816 и шаблон ДД-{n} → договор ДД-816.</p>
</details>
<form method="post" action="/admin/setup/lk-portfolio" id="lkpf-client" style="margin:10px 0 0;padding-top:10px;border-top:1px dashed var(--border)">
<div style="font-size:13px;font-weight:600;margin-bottom:4px">Залить одному клиенту (для теста)</div>
<div style="font-size:13px;font-weight:600;margin-bottom:4px">Залить одному клиенту</div>
<div style="display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap">
<label style="display:flex;flex-direction:column;gap:3px;font-size:12px;min-width:320px">Клиент DEPO — ФИО, портфель или счёт
<input id="lkpf-q" autocomplete="off" placeholder="нажмите — список клиентов; или ФИО, портфель, счёт"></label>