feat(bj): модуль ЛК на PostgreSQL, обмен с DEPO, боевой ЛК с имитатором НРД, QUIK, НПР
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk) - трансферные таблицы FTV_M2M: создание при установке, события, справочник участников - сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO - боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК - онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML) - модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
{{define "content"}}
|
||||
<div class="hero">
|
||||
<h1 class="hero-greeting">Входящие переводы</h1>
|
||||
<span class="hero-status">Запросы на перевод, где контрагент (или робот в сценарии 3333) — передающая сторона. Нужно ответить: принять или отказать по каждой бумаге.</span>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Список ({{len .Items}})</h2>
|
||||
{{if .Items}}
|
||||
<table>
|
||||
<thead><tr><th>Получен</th><th>GUID</th><th>От кого</th><th>ЦБ</th><th>Статус</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
{{range .Items}}
|
||||
<tr>
|
||||
<td>{{msk .ReceivedAt}}</td>
|
||||
<td><code>{{short 8 .GUID}}</code></td>
|
||||
<td>{{$nm := m2mParty .SenderCode}}{{if not $nm}}{{$nm = m2mParty .SenderINN}}{{end}}{{if $nm}}<strong>{{$nm}}</strong><br>{{end}}<code>{{.SenderCode}}</code>{{if .SenderINN}} · ИНН {{.SenderINN}}{{end}}</td>
|
||||
<td>{{len .Securities}}</td>
|
||||
<td>{{$s := inStatus .}}<span class="badge {{$s.Class}}">{{$s.Text}}</span>{{if $s.Outcome}} <span class="badge {{if eq $s.Outcome "Принято"}}confirmed{{else if eq $s.Outcome "Отказано"}}rejected{{else}}awaiting_decision{{end}}">{{$s.Outcome}}</span>{{end}}{{if .DepoSummary}}<br><span class="badge {{if eq .DepoRecommend "confirm"}}confirmed{{else if eq .DepoRecommend "reject"}}rejected{{else}}awaiting_decision{{end}}" style="font-size:11px;margin-top:4px" title="Сверка с DEPO — эмуляция ответа, ничего не отправлено">сверка: {{.DepoSummary}}</span>{{end}}</td>
|
||||
<td><a href="/admin/incoming/{{.ID}}">{{if eq .Status "answered"}}просмотр{{else}}ответить{{end}} →</a></td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{else}}
|
||||
<p class="muted">Входящих переводов нет. Они появляются, когда другая сторона инициирует перевод к нам (напр. робот НРД в сценарии 3333 «Выступить принимающей стороной»).</p>
|
||||
{{end}}
|
||||
<p class="muted" style="font-size:12px;margin-top:10px">🔄 Страница обновляется автоматически при появлении нового входящего.</p>
|
||||
</div>
|
||||
<script>
|
||||
// Авто-обновление: раз в 7с опрашиваем фид; если состав/статусы входящих
|
||||
// изменились — перезагружаем страницу, чтобы всегда видеть актуальные данные.
|
||||
(function(){
|
||||
function sig(d){
|
||||
if(!d||!d.pending) return String(d&&d.count||0);
|
||||
return d.pending.map(function(p){return p.id+':'+(p.count||0);}).sort().join(',');
|
||||
}
|
||||
var last=null;
|
||||
async function tick(){
|
||||
try{
|
||||
var r=await fetch('/admin/incoming/feed',{headers:{'X-Requested-With':'fetch'}});
|
||||
if(!r.ok) return;
|
||||
var d=await r.json(); var s=sig(d);
|
||||
if(last!==null && s!==last){ location.reload(); return; }
|
||||
last=s;
|
||||
}catch(e){}
|
||||
}
|
||||
tick(); setInterval(tick, 7000);
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
Reference in New Issue
Block a user