adc22ef206
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
101 lines
8.3 KiB
HTML
101 lines
8.3 KiB
HTML
{{define "content"}}
|
||
{{if .Flash}}<div style="padding:12px 16px;background:var(--ok-weak);border-radius:8px;margin-bottom:16px">{{.Flash}}</div>{{end}}
|
||
<p class="muted" style="font-size:12.5px;margin:0 0 10px">{{quikRecipientsInfo}}</p>
|
||
<div class="card">
|
||
<style>
|
||
.qk-steps{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
|
||
.qk-step{padding:6px 10px;border-radius:9px;border:1.5px solid var(--border);font-size:12.5px;background:var(--card-2)}
|
||
.qk-step.ok{border-color:color-mix(in srgb,#16a34a 45%,transparent);background:color-mix(in srgb,#16a34a 12%,var(--card));color:#0f7a37;font-weight:600}
|
||
.qk-step.bad{border-color:color-mix(in srgb,#dc2626 45%,transparent);background:color-mix(in srgb,#dc2626 10%,var(--card));color:#b3261e;font-weight:600}
|
||
.qk-state{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700}
|
||
.qk-state.registered{background:color-mix(in srgb,#d97706 15%,var(--card));color:#9a6b12}
|
||
.qk-state.signed,.qk-state.deposited{background:color-mix(in srgb,#16a34a 15%,var(--card));color:#0f7a37}
|
||
.qk-state.denied{background:var(--card-2);color:var(--muted)}
|
||
.qk-state.error{background:color-mix(in srgb,#dc2626 15%,var(--card));color:#b3261e}
|
||
.qk-state.manual{background:color-mix(in srgb,#2563eb 12%,var(--card));color:#1d4ed8}
|
||
</style>
|
||
<h2>Цикл M2M: поручения, которые ведёт bj</h2>
|
||
<p class="muted" style="font-size:12.5px">Записи в МНП: <b>{{if .Cycle.WritesEnabled}}включены{{else}}выключены{{end}}</b> · исходящие: {{if .Cycle.AutoOut}}авто{{else}}вручную{{end}} · входящие: {{if .Cycle.AutoIn}}авто{{else}}вручную{{end}} · поручения из терминала: {{if .Cycle.PollTerminal}}подхватываются{{else}}не отслеживаются{{end}} — <a href="/admin/setup#sec-quik-cycle">настроить</a>.</p>
|
||
{{if not .Links}}<p class="muted">Пока пусто.</p>{{else}}
|
||
<table style="font-size:12.5px">
|
||
<thead><tr><th>Когда</th><th>Перевод</th><th>Направление</th><th>Клиент</th><th>Бумага</th><th>Поручение МНП</th><th>Состояние</th><th>Последний шаг</th></tr></thead>
|
||
<tbody>{{range .Links}}<tr>
|
||
<td style="white-space:nowrap">{{msk .UpdatedAt}}</td>
|
||
<td>{{if .IsTerminal}}<span class="muted">из терминала</span>{{else}}<a href="/admin/claims?guid={{.GUID}}"><code>{{short 8 .GUID}}</code></a>{{end}}</td>
|
||
<td>{{if eq .Direction "out"}}↗ вывод{{else}}↘ ввод{{end}}</td>
|
||
<td><code>{{.ClientID}}</code>{{if .Contract}} <span class="muted">{{.Contract}}</span>{{end}}</td>
|
||
<td><code>{{.ISIN}}</code> × {{.Qty}}</td>
|
||
<td>{{if .InstrNo}}<b>№{{.InstrNo}}</b>{{else}}—{{end}}</td>
|
||
<td><span class="qk-state {{.State}}">{{.StateRu}}</span>{{if .Err}}<div style="color:#b3261e;font-size:11.5px">{{.Err}}</div>{{end}}</td>
|
||
<td class="muted" style="font-size:11.5px">{{with .LastStep}}{{.Action}}: {{.Reply}}{{end}}</td>
|
||
</tr>{{end}}</tbody>
|
||
</table>{{end}}
|
||
</div>
|
||
|
||
{{if .Cycle.PollTerminal}}
|
||
<div class="hero">
|
||
<h1 class="hero-greeting">Поручения QUIK (M2M)</h1>
|
||
<span class="hero-status">Неторговые поручения на вывод/ввод ЦБ из Модуля неторговых поручений QUIK. Бумаги по ним уже заблокированы на позиции клиента. Режим — только чтение{{if .DBName}} (БД {{.DBName}}){{end}}.</span>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<h2>Как это работает</h2>
|
||
<p class="muted" style="line-height:1.7">
|
||
Клиент подаёт «Вывод ЦБ (M2M)» из терминала QUIK / мобильного / ЛК → сервер QUIK проверяет остаток и <strong>блокирует бумаги</strong> → поручение попадает в экспортную таблицу МНП → <strong>bj читает его отсюда</strong>, проверяет по депозитарию и отправляет перевод в НРД (MOEX МОСТ) → по ответу НРД поручение <em>подписывается</em> (списание) либо <em>снимается</em> (разблокировка).
|
||
<br>Сейчас реализовано <strong>чтение</strong>; запись (подпись/снятие/регистрация) — следующий этап.</p>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<h2>
|
||
{{if .OnlyActive}}Активные поручения{{else}}Все поручения M2M{{end}} ({{len .Items}})
|
||
<span style="float:right;font-size:13px;font-weight:400">
|
||
{{if .OnlyActive}}<a href="/admin/quik?all=1">показать все</a>{{else}}<a href="/admin/quik">только активные</a>{{end}}
|
||
· <a href="/admin/setup#quik">настройки</a>
|
||
</span>
|
||
</h2>
|
||
{{if .Error}}<p style="color:var(--err)">{{.Error}}</p>{{end}}
|
||
{{if .Items}}
|
||
<div style="overflow-x:auto">
|
||
<table>
|
||
<thead><tr>
|
||
<th>№ / ID</th><th>Зарегистрировано</th><th>Клиент</th><th>Договор</th>
|
||
<th>Бумага (ISIN)</th><th>Кол-во</th><th>Заблок.</th><th>Депозитарий получателя (ИНН)</th><th>Статус</th>
|
||
</tr></thead>
|
||
<tbody>
|
||
{{range .Items}}
|
||
<tr>
|
||
<td><code>{{.Number}}</code><br><span class="muted" style="font-size:11px">id {{.InstrID}}{{if .ExtID}} · ext {{.ExtID}}{{end}}</span></td>
|
||
<td style="white-space:nowrap">{{.Registered}}</td>
|
||
<td><code>{{.ClientID}}</code></td>
|
||
<td>{{.AgreeServ}}</td>
|
||
<td>{{if .ISIN}}<code>{{.ISIN}}</code>{{end}}{{if .SecCode}}<br><span class="muted" style="font-size:11px">{{.SecCode}} / {{.ClassCode}}</span>{{end}}</td>
|
||
<td style="text-align:right">{{.Volume}}</td>
|
||
<td style="text-align:right">{{if .QtyBlocked}}<b>{{.QtyBlocked}}</b>{{else}}—{{end}}</td>
|
||
<td>{{if .RecipINN}}<code>{{.RecipINN}}</code>{{else}}<span class="muted">—</span>{{end}}
|
||
{{if .PassExpense}}<br><span class="muted" style="font-size:11px">+ расходы</span>{{end}}
|
||
{{if .CloseIIA}}<br><span class="muted" style="font-size:11px">закрытие ИИС</span>{{end}}</td>
|
||
<td>
|
||
{{if eq .Status 0}}<span class="badge awaiting_decision">{{.StatusName}}</span>
|
||
{{else if eq .Status 1}}<span class="badge confirmed">{{.StatusName}}</span>
|
||
{{else}}<span class="badge rejected">{{.StatusName}}</span>{{end}}
|
||
{{if .Deny}}<br><span class="muted" style="font-size:11px">{{.Deny}}</span>{{end}}
|
||
</td>
|
||
</tr>
|
||
{{end}}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
{{else if not .Error}}
|
||
<p class="muted">Поручений M2M пока нет{{if .OnlyActive}} в активном статусе — <a href="/admin/quik?all=1">посмотреть все</a>{{end}}. Они появятся, когда клиент подаст «Вывод ЦБ (M2M)» в QUIK.</p>
|
||
{{end}}
|
||
</div>
|
||
{{else}}
|
||
<div class="card">
|
||
<h2>Поручения из терминала QUIK — не отслеживаются</h2>
|
||
<p class="muted" style="line-height:1.6">Опция «Принимаем поручения M2M из QUIK» выключена: клиентам и фирме не разрешена подача «Вывод ЦБ (M2M)» из терминала / мобильного приложения, поэтому bj их не опрашивает и не показывает. Все переводы ведутся через заявки bj (таблица выше).
|
||
<br>Если брокер откроет клиентам эту возможность (классы INSTROUTM2M/INSTRINM2M в QuikAdmin), включите опцию в <a href="/admin/setup#quik">Настройка → QUIK МНП → Цикл M2M</a> — bj начнёт подхватывать такие поручения и создавать по ним заявки оператору.
|
||
<br><span style="font-size:12px">В перспективе: при подключении модуля управления правами клиентов (QuikAdmin) опция будет назначаться клиенту автоматически вместе с нужными классами.</span></p>
|
||
</div>
|
||
{{end}}
|
||
{{end}}
|