Анкета участника: ответ НРД принимается автоматически — квитанция и ответ сервиса
Квитанции ЭДО НРД (пакеты C, «Уведомление о получении Пакетов…») разбираются: для нашей анкеты (#M2MPF…) — отметка «доставлена в НРД» с временем, ошибка первичной обработки — отказ с текстом квитанции. Ответ сервиса: INFO — «принята в обработку», OK — принята, ERROR — отказ с кодом; документ-ответ M2MTransferParticipantForm — регистрация подтверждена. Всё видно в строке «Исходящих», на странице анкеты и в плашке раздела НРД. После запуска bj перечитывает квитанции за день отправки, если отметки ещё нет (22.10 на 9 квитанция пришла раньше). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -28,6 +28,9 @@ type participantReg struct {
|
||||
Codes []string `json:"codes,omitempty"`
|
||||
RespText string `json:"resp_text,omitempty"`
|
||||
RawFile string `json:"raw_file,omitempty"`
|
||||
// Квитанция ЭДО НРД о получении пакета (пакет C): НРД получил анкету, первичная обработка прошла.
|
||||
DeliveredAt time.Time `json:"delivered_at,omitempty"`
|
||||
Package string `json:"package,omitempty"` // имя пакета из квитанции (#M2MPF….ZIP)
|
||||
}
|
||||
|
||||
var participantRegMu sync.Mutex
|
||||
@@ -98,7 +101,7 @@ func saveParticipantReg(mut func(*participantReg)) {
|
||||
// StatusClass, StatusText — статус отправки анкеты для строк списков (класс бейджа и текст).
|
||||
func (r participantReg) StatusClass() string {
|
||||
switch {
|
||||
case r.RespAt.IsZero():
|
||||
case r.RespAt.IsZero(), strings.EqualFold(r.Status, "INFO"):
|
||||
return "awaiting_decision"
|
||||
case strings.EqualFold(r.Status, "ERROR"):
|
||||
return "rejected"
|
||||
@@ -108,8 +111,12 @@ func (r participantReg) StatusClass() string {
|
||||
|
||||
func (r participantReg) StatusText() string {
|
||||
switch {
|
||||
case r.RespAt.IsZero() && !r.DeliveredAt.IsZero():
|
||||
return "Доставлена в НРД · ждём ответ"
|
||||
case r.RespAt.IsZero():
|
||||
return "Ждёт ответа НРД"
|
||||
return "Отправлена · ждём квитанцию НРД"
|
||||
case strings.EqualFold(r.Status, "INFO"):
|
||||
return "Принята НРД в обработку"
|
||||
case strings.EqualFold(r.Status, "ERROR"):
|
||||
if len(r.Codes) > 0 {
|
||||
return "Отклонена НРД · " + strings.Join(r.Codes, ", ")
|
||||
@@ -143,7 +150,16 @@ func recordParticipantReply(status string, resp *m2m.M2MTransferResponse, rawFil
|
||||
// participantAccepted — последняя отправленная анкета принята НРД.
|
||||
func participantAccepted() bool {
|
||||
r := loadParticipantReg()
|
||||
return !r.RespAt.IsZero() && !strings.EqualFold(r.Status, "ERROR")
|
||||
return !r.RespAt.IsZero() && !strings.EqualFold(r.Status, "ERROR") && !strings.EqualFold(r.Status, "INFO")
|
||||
}
|
||||
|
||||
// recordParticipantFormReply — НРД прислал документ-ответ на анкету (M2MTransferParticipantForm):
|
||||
// регистрация подтверждена.
|
||||
func recordParticipantFormReply(rawFile string) {
|
||||
saveParticipantReg(func(r *participantReg) {
|
||||
r.RespAt, r.Status, r.Codes = time.Now(), "OK", nil
|
||||
r.RespText, r.RawFile = "НРД подтвердил регистрацию участника", rawFile
|
||||
})
|
||||
}
|
||||
|
||||
// participantBanner — плашка наверху раздела НРД: анкета не отправлена, ждёт ответа или отклонена.
|
||||
@@ -158,7 +174,9 @@ func participantBanner() template.HTML {
|
||||
"Без регистрации участника НРД не принимает запросы на переводы. Проверьте анкету и отправьте её."
|
||||
switch {
|
||||
case r.SentAt.IsZero():
|
||||
case r.RespAt.IsZero():
|
||||
case r.RespAt.IsZero() && !r.DeliveredAt.IsZero():
|
||||
cls, head, body = "stc-run", "Анкета участника M2M доставлена в НРД — ждём ответ", "Квитанция НРД "+r.DeliveredAt.In(listMSK).Format("02.01.2006 15:04:05")+": пакет получен, ошибок нет. Плашка пропадёт, когда НРД примет анкету."
|
||||
case r.RespAt.IsZero(), strings.EqualFold(r.Status, "INFO"):
|
||||
cls, head, body = "stc-run", "Анкета участника M2M ждёт ответа НРД", "Отправлена "+r.SentAt.In(listMSK).Format("02.01.2006 15:04")+". Плашка пропадёт, когда НРД примет анкету."
|
||||
case strings.EqualFold(r.Status, "ERROR"):
|
||||
cls, head = "stc-err", "НРД отклонил анкету участника M2M"
|
||||
|
||||
Reference in New Issue
Block a user