28c0ed7349
Пакеты НРД из INBOX ИШ (K…, 508…) распознаются по содержимому: квитанция о регистрации (или отказ), уведомление GS036, отчёт о статусе GS116 (сквитовано / не сквитовано), отчёт об исполнении MS010, ошибка. В ZIP ответа НРД и выгрузках для регулятора (16 и 16/1) — папки «01 Квитанция о регистрации поручения — K1699092» и т. д., «Опись.txt» с назначением и реквизитами каждого документа и «Документы НРД.pdf» (читаемое представление, печать через Chromium; без него — HTML). В карточке перевода ответы НРД подписаны так же. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 lines
2.3 KiB
Go
44 lines
2.3 KiB
Go
package lkgateway
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestClassifyNSDDoc(t *testing.T) {
|
|
cases := []struct{ pkg, body, code, title string }{
|
|
{"K1699092", `<Batch><Document><reg_no>14462249</reg_no><reg_date>2026-09-16 16:03:53</reg_date><contragent_doc_id>20608</contragent_doc_id><abort_code /><abort_cause /></Document></Batch>`,
|
|
"REG", "Квитанция о регистрации поручения"},
|
|
{"K1", `<Batch><Document><reg_no>1</reg_no><contragent_doc_id>20608</contragent_doc_id><abort_code>12</abort_code><abort_cause>Нет встречного</abort_cause></Document></Batch>`,
|
|
"REG_REJECT", "Отказ в регистрации поручения"},
|
|
{"50818777", `<BizSvc>GS036</BizSvc><GS036><Ntfctns><NtfctnTxt> отсутствии встречного поручения к поручению депо</NtfctnTxt></Ntfctns><Ntfctns><NtfctnHdr>Код операции</NtfctnHdr><NtfctnTxt>16</NtfctnTxt></Ntfctns></GS036>`,
|
|
"GS036", "Уведомление об отсутствии встречного поручения (GS036)"},
|
|
{"50818779", `<BizSvc>GS116</BizSvc><AcctOwnrTxId>20608</AcctOwnrTxId><AcctSvcrTxId>14462249</AcctSvcrTxId><MtchgSts><Mtchd><Rsn><Id>MACH</Id></Rsn></Mtchd></MtchgSts>`,
|
|
"GS116", "Отчёт о статусе поручения (GS116)"},
|
|
{"50818781", `<BizSvc>MS010</BizSvc><AcctOwnrTxId>20608</AcctOwnrTxId><SctiesMvmntTp>DELI</SctiesMvmntTp><SttldQty><Qty><Unit>10</Unit></Qty></SttldQty><SfkpgAcct><Id>HL171004001C</Id></SfkpgAcct>`,
|
|
"MS010", "Отчёт об исполнении поручения (MS010)"},
|
|
}
|
|
for _, c := range cases {
|
|
d := classifyNSDDoc(c.pkg, c.body)
|
|
if d.Code != c.code || d.Title != c.title {
|
|
t.Errorf("%s: %s «%s», ожидали %s «%s»", c.pkg, d.Code, d.Title, c.code, c.title)
|
|
}
|
|
}
|
|
ms := classifyNSDDoc("50818781", cases[4].body)
|
|
if !ms.Done || !strings.Contains(ms.About, "списание") {
|
|
t.Errorf("MS010: %+v", ms)
|
|
}
|
|
var acc string
|
|
for _, kv := range ms.Fields {
|
|
if kv[0] == "Счёт депо" {
|
|
acc = kv[1]
|
|
}
|
|
}
|
|
if acc != "HL171004001C" {
|
|
t.Errorf("счёт депо: %q (%v)", acc, ms.Fields)
|
|
}
|
|
if f := nsdDocFolder(1, classifyNSDDoc("50818777", cases[2].body)); f != "02 Уведомление об отсутствии встречного поручения (GS036) — 50818777" {
|
|
t.Errorf("папка: %q", f)
|
|
}
|
|
}
|