Карточка поручения: уведомление НРД GS036 «нет встречного поручения» (по референсу строки) — в статусе, в ответах НРД и в оповещении о просрочке
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package lkgateway
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// GS036 «об отсутствии встречного поручения» связывается с поручением по референсу строки.
|
||||
func TestNoCounterNotice(t *testing.T) {
|
||||
at := time.Date(2026, 9, 28, 17, 50, 2, 0, time.Local)
|
||||
pkgIndexCache.mu.Lock()
|
||||
old, oldAt := pkgIndexCache.list, pkgIndexCache.at
|
||||
pkgIndexCache.list = []pkgIndexEntry{
|
||||
{dir: "Z2895760", mt: at, body: "<BizSvc>GS036</BizSvc><NtfctnTxt> отсутствии встречного поручения к поручению депо</NtfctnTxt><NtfctnHdr>Референс</NtfctnHdr><NtfctnTxt>M2M20260928HEKR0</NtfctnTxt>"},
|
||||
{dir: "K2895751", mt: at, body: "<reg_no>14463891</reg_no><contragent_doc_id>21952</contragent_doc_id>"},
|
||||
}
|
||||
pkgIndexCache.at = time.Now().Add(time.Hour)
|
||||
pkgIndexCache.mu.Unlock()
|
||||
defer func() {
|
||||
pkgIndexCache.mu.Lock()
|
||||
pkgIndexCache.list, pkgIndexCache.at = old, oldAt
|
||||
pkgIndexCache.mu.Unlock()
|
||||
}()
|
||||
|
||||
if got, ok := findNoCounterNotice("M2M20260928HEKR0"); !ok || !got.Equal(at) {
|
||||
t.Fatalf("уведомление не найдено: %v %v", got, ok)
|
||||
}
|
||||
if _, ok := findNoCounterNotice("M2M20260928M5XQC"); ok {
|
||||
t.Fatal("чужой референс")
|
||||
}
|
||||
|
||||
w := &OrderWatch{Direction: "out", OrderAt: at.Add(-time.Minute), LateAt: at.Add(5 * time.Minute), NoCounterAt: at}
|
||||
if s := w.StatusRu(); !strings.Contains(s, "контрагент ещё не подал встречное поручение 16/1") {
|
||||
t.Fatalf("ждём встречное: %q", s)
|
||||
}
|
||||
w.Direction = "in"
|
||||
if s := w.StatusRu(); !strings.Contains(s, "поручение 16 передающего") {
|
||||
t.Fatalf("входящий: %q", s)
|
||||
}
|
||||
w.Direction, w.MS010At = "out", at.Add(53*time.Minute)
|
||||
if s := w.StatusRu(); !strings.Contains(s, "исполнено") || !strings.Contains(s, "задержка на стороне контрагента") {
|
||||
t.Fatalf("исполнено с задержкой: %q", s)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user