Тест DEPO: SEC_CODE = код бумаги в НРД (кодировщик НДЦ), как в настоящем пакете; предупреждение, если кода нет
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,6 +43,7 @@ var depoTestOutcomes = []struct{ Code, Title string }{
|
||||
|
||||
type DepoTestLine struct {
|
||||
Ref, ISIN, Qty, Outcome, Code string
|
||||
Code2 string // код бумаги в НРД, ушедший в SEC_CODE
|
||||
State, DOL, Comment string // результат джобы по строке FTV_M2M_LINES
|
||||
}
|
||||
|
||||
@@ -157,8 +158,17 @@ func depoTestExec(rc *RuntimeConfig, run *DepoTestRun, pace time.Duration, stopO
|
||||
// 1. шапка и строки
|
||||
place := rc.Snapshot().NSD.SectionID
|
||||
var lines []depoLine
|
||||
for _, l := range run.Lines {
|
||||
lines = append(lines, depoLine{Ref: l.Ref, ISIN: l.ISIN, Code: l.ISIN, Amount: parseQty(l.Qty), Place: place})
|
||||
for i, l := range run.Lines {
|
||||
// SEC_CODE — код бумаги в НРД (как в настоящем пакете M2M): по ISIN+коду джоба находит бумагу в DEPO
|
||||
code := depoNSDCode(db, l.ISIN)
|
||||
if code == "" {
|
||||
code = l.ISIN
|
||||
globalDepoTests.update(id, func(r *DepoTestRun) {
|
||||
r.Steps = append(r.Steps, DepoTestStep{At: time.Now(), Title: "Бумага " + l.ISIN + ": кода НРД (кодировщик «НДЦ») в DEPO нет — SEC_CODE = ISIN, джоба может не найти бумагу", State: "WARN"})
|
||||
})
|
||||
}
|
||||
globalDepoTests.update(id, func(r *DepoTestRun) { r.Lines[i].Code2 = code })
|
||||
lines = append(lines, depoLine{Ref: l.Ref, ISIN: l.ISIN, Code: code, Amount: parseQty(l.Qty), Place: place})
|
||||
}
|
||||
dir := "IN"
|
||||
if run.Direction == "out" {
|
||||
@@ -251,6 +261,15 @@ func depoTestExec(rc *RuntimeConfig, run *DepoTestRun, pace time.Duration, stopO
|
||||
depoTestFinish(db, id, run.GUID)
|
||||
}
|
||||
|
||||
// depoNSDCode — код бумаги в НРД из DEPO (кодировщик «НДЦ»).
|
||||
func depoNSDCode(db *sql.DB, isin string) string {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
|
||||
defer cancel()
|
||||
var c string
|
||||
_ = db.QueryRowContext(ctx, fsql.DT04, sql.Named("i", strings.ToUpper(strings.TrimSpace(isin)))).Scan(&c)
|
||||
return strings.TrimSpace(c)
|
||||
}
|
||||
|
||||
func depoTestFinish(db *sql.DB, id, guid string) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||
defer cancel()
|
||||
|
||||
Reference in New Issue
Block a user