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
+7
View File
@@ -229,6 +229,7 @@ func NewServer(cfg ServerConfig) (*Server, error) {
registerLKAPI(mux, rc, svc) // API для модуля личного кабинета клиента (bj-lk)
registerHealth(mux)
registerQuikOps(mux, rc, svc)
registerOneCOps(mux, rc)
registerNPR(mux, adminTpl, rc)
registerAuth(mux, rc)
registerSetCallback(mux, svc, rc)
@@ -347,6 +348,12 @@ func (s *Server) Run(ctx context.Context) error {
quikSendHook = func(ctx context.Context, req *m2m.M2MTransferRequest) error {
return quikOutgoingBeforeSend(ctx, s.rc, req)
}
// Проверка поручений в 1С (модуль onec-back, включается отдельно): перевод — в НРД после решения 1С.
onecSendHook = func(ctx context.Context, req *m2m.M2MTransferRequest) (bool, error) {
return onecGate(ctx, s.rc, req)
}
healthRegister("onec-check", 2*time.Minute)
go superviseLoop(ctx, "onec-check", s.rc, s.onecLoop)
healthRegister("poll-quik", 30*time.Second)
go superviseLoop(ctx, "poll-quik", s.rc, s.quikCycleLoop)
go superviseLoop(ctx, "quik-recipients", s.rc, s.quikRecipientsLoop) // справочник получателей M2M в МНП до 20:00