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,59 @@
|
||||
//go:build live
|
||||
|
||||
package lkgateway
|
||||
|
||||
// Живой прогон цикла QUIK МНП на боевом модуле (клиент BR859, 1 шт. T).
|
||||
// Запуск: go test -tags live -run TestQuikLiveCycle ./internal/lkgateway/ -v
|
||||
// Требует Quik.WritesEnabled=true в setup.json (тест включает временно и возвращает).
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestQuikLiveCycle(t *testing.T) {
|
||||
rc, err := NewRuntimeConfig("/var/lib/bj/.bj/setup.json")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
q := rc.Snapshot().Quik
|
||||
was := q.WritesEnabled
|
||||
q.WritesEnabled = true
|
||||
if err := rc.UpdateQuik(q); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { q := rc.Snapshot().Quik; q.WritesEnabled = was; _ = rc.UpdateQuik(q) }()
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 6*time.Minute)
|
||||
defer cancel()
|
||||
guid := "LIVETEST-" + time.Now().Format("150405")
|
||||
|
||||
code, contract, err := quikResolveClient(ctx, rc, "4500", "000000")
|
||||
t.Logf("resolve (неизвестный паспорт): code=%q contract=%q err=%v", code, contract, err)
|
||||
|
||||
in, out, err := quikM2MInstruments(ctx, rc.Snapshot().Quik)
|
||||
t.Logf("инструменты: ввод=%s вывод=%s err=%v", in, out, err)
|
||||
|
||||
// +1: Ввод ЦБ (M2M)
|
||||
l, err := QuikInDeposit(ctx, rc, guid, "BR859", "БР-859", "RU000A107UL4", 1, "7722061076", "Депозитарий-контрагент (тест M2M)")
|
||||
if err != nil {
|
||||
t.Fatalf("deposit: %v", err)
|
||||
}
|
||||
t.Logf("deposit: state=%s instr=%s steps=%d", l.State, l.InstrNo, len(l.Steps))
|
||||
|
||||
// -1: Вывод ЦБ (M2M) → подпись
|
||||
l, err = QuikOutRegister(ctx, rc, guid, "BR859", "БР-859", "RU000A107UL4", 1, "7722061076", "", true)
|
||||
if err != nil {
|
||||
t.Fatalf("register: %v", err)
|
||||
}
|
||||
t.Logf("register: state=%s instr=%s", l.State, l.InstrNo)
|
||||
l, err = QuikOutSign(ctx, rc, guid, "RU000A107UL4", "LIVETEST: подпись")
|
||||
if err != nil {
|
||||
t.Fatalf("sign: %v", err)
|
||||
}
|
||||
t.Logf("sign: state=%s instr=%s", l.State, l.InstrNo)
|
||||
for _, x := range globalQuikLinks.ForGUID(guid) {
|
||||
t.Logf("link %s/%s: %s (%s) steps=%d", x.Direction, x.ISIN, x.State, x.StateRu(), len(x.Steps))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user