1С: проверка поручений МНП перед отправкой в НРД

Часть модуля onec-back, по умолчанию выключена, включается в настройках
(«Проверка поручений в 1С»). Исходящий перевод после блокировки бумаг в
МНП ждёт решения 1С и в НРД не уходит, пока 1С не подтвердит каждое
поручение; при отказе bj снимает поручения в QUIK с причиной из 1С и
отклоняет перевод в журнале и кабинете клиента.

- onec.instr / onec.instr_queue / onec.set_decision в базе bj: 1С читает
  очередь и пишет решение под логином onec_bj (только эти права); чтение
  очереди отмечает связь с 1С.
- bj-onec-admin (root, через bj-keymedia): логин onec_bj, вход только с
  IP 1С по TLS (pg_hba.conf), listen_addresses, ufw; revoke закрывает вход.
- onecLoop: отправка подтверждённых, отказы, снятие клиентом в QUIK,
  поручения из терминала, сроки решения и потеря связи — оповещения.
- Карточка заявки: блок «Проверка 1С», решение оператора вместо 1С.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 20:13:59 +03:00
parent e51962c5bb
commit 21d5f33394
13 changed files with 1598 additions and 5 deletions
+9 -1
View File
@@ -248,7 +248,8 @@ func (s *Service) CreateLKTransfer(ctx context.Context, rc *RuntimeConfig, u LKU
if emu, _ := lkEmulateNSD(rc); emu && lkEmuSender != nil {
sender = lkEmuSender
}
if _, err := s.SendBuiltRequestVia(ctx, sender, req, lkInvestorUUID(u.Contract), nil); err != nil {
resp, err := s.SendBuiltRequestVia(ctx, sender, req, lkInvestorUUID(u.Contract), nil)
if err != nil {
var nd *igw.NotDeliveredError
if errors.As(err, &nd) {
// НРД сейчас не принимает пакеты: заявка сохранена и уйдёт сама, когда связь восстановится
@@ -262,6 +263,13 @@ func (s *Service) CreateLKTransfer(ctx context.Context, rc *RuntimeConfig, u LKU
_ = lkMarkStatus(ctx, rc, id, "error")
return res, fmt.Errorf("заявка сохранена, но не отправлена: %w", err)
}
if resp.Status == onecWaitStatus { // проверка поручения в 1С (onec_check.go)
_ = lkMarkStatus(ctx, rc, id, "checking")
return LKTransferResult{
OK: true, RequestID: id, GUID: string(req.Header.GUID), Status: "checking",
Message: "Заявка принята и проходит проверку. После неё будет отправлена в НРД. Итог появится в разделе «Мои заявки».",
}, nil
}
_ = lkMarkStatus(ctx, rc, id, "sent")
return LKTransferResult{
OK: true, RequestID: id, GUID: string(req.Header.GUID), Status: "sent",