Документы НРД по поручению: папки с понятными названиями, опись и PDF
Пакеты НРД из 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>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user