From 47b183a072e16d1cb3e94f707d0127477756318e Mon Sep 17 00:00:00 2001 From: zuevav Date: Tue, 6 Oct 2026 17:16:14 +0300 Subject: [PATCH] =?UTF-8?q?QUIK:=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D1=8B=20?= =?UTF-8?q?=C2=AB=D0=A2=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=87=D1=82=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=C2=BB=20/=20=C2=AB=D0=A7=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C?= =?UTF-8?q?=C2=BB=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=C2=AB=D1=81?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20/=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Система работает автоматически, ручного режима нет: выбор — только читать QUIK (настройка и проверка: ничего не блокирует, не разблокирует, не меняет лимиты) или читать и писать (боевая работа). В проверке МНП строка «Режим работы с QUIK»: только чтение — сведение (ℹ), а не предупреждение, с объяснением, как включить боевую работу. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- internal/lkgateway/onboarding_test.go | 2 +- internal/lkgateway/quikdb_handlers.go | 6 +++--- internal/lkgateway/quikready.go | 11 ++++++----- internal/lkgateway/web/templates/admin_wizard.html | 4 ++-- internal/lkgateway/web/templates/part_quik.html | 4 ++-- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/internal/lkgateway/onboarding_test.go b/internal/lkgateway/onboarding_test.go index 5c62bed..e3427a1 100644 --- a/internal/lkgateway/onboarding_test.go +++ b/internal/lkgateway/onboarding_test.go @@ -714,7 +714,7 @@ func TestQuikModeAndCertHint(t *testing.T) { h.saveQuikMode(w, r) return w.Body.String() } - if msg := post(url.Values{"mode": {"auto"}, "account": {"L01-00000F00"}}); !strings.Contains(msg, "автоматически") { + if msg := post(url.Values{"mode": {"auto"}, "account": {"L01-00000F00"}}); !strings.Contains(msg, "чтение и запись") { t.Fatalf("ответ: %q", msg) } s := rc.Snapshot().Quik diff --git a/internal/lkgateway/quikdb_handlers.go b/internal/lkgateway/quikdb_handlers.go index 9e8f7fa..1b08363 100644 --- a/internal/lkgateway/quikdb_handlers.go +++ b/internal/lkgateway/quikdb_handlers.go @@ -124,7 +124,7 @@ func (h *setupHandlers) saveQuikCycle(w http.ResponseWriter, r *http.Request) { } // saveQuikMode — POST /admin/setup/quik/mode (мастер): как bj работает с QUIK — одним выбором вместо набора -// флажков. check — только сверка (в МНП bj не пишет, поручения вводят сотрудники); auto — bj ведёт поручения +// флажков. check — только чтение (bj читает, в МНП ничего не меняет); auto — чтение и запись, боевая работа: bj ведёт поручения // сам: исходящие (блокировка, списание или снятие) и входящие (зачисление). Тонкая настройка (инструменты, // коды клиентов, поручения из терминала, имитация) — в «Настройке», здесь не трогается. Экран сохраняет // выбор сразу (X-BJ-Ajax — ответ строкой), без JavaScript — обычной формой. @@ -142,9 +142,9 @@ func (h *setupHandlers) saveQuikMode(w http.ResponseWriter, r *http.Request) { if r.PostForm.Has("account") { s.Account = strings.TrimSpace(r.FormValue("account")) } - msg := "только сверка — в QUIK bj ничего не пишет" + msg := "только чтение — bj ничего в QUIK не меняет" if auto { - msg = "автоматически — bj ведёт поручения в QUIK сам" + msg = "чтение и запись — боевая работа: bj сам блокирует, списывает и зачисляет в QUIK" if s.Account == "" { msg += "; укажите торговый счёт" } diff --git a/internal/lkgateway/quikready.go b/internal/lkgateway/quikready.go index 7b0ce47..1f4f04c 100644 --- a/internal/lkgateway/quikready.go +++ b/internal/lkgateway/quikready.go @@ -18,7 +18,7 @@ import ( // MNPCheck — одна строка проверки МНП. type MNPCheck struct { Title string `json:"title"` - State string `json:"state"` // ok | warn | err + State string `json:"state"` // ok | info (сведение, не проблема) | warn | err Detail string `json:"detail"` } @@ -107,11 +107,12 @@ func quikMNPCheck(ctx context.Context, s QuikMNPSettings) []MNPCheck { switch { case !s.WritesEnabled: - add("Автоматический цикл M2M", "warn", "запись в МНП выключена — bj не ставит и не снимает блокировки (Настройка → QUIK МНП)") + // не проблема, а начальный режим: подключились и читаем, в QUIK ничего не меняем + add("Режим работы с QUIK", "info", "только чтение: bj подключён к QUIK и читает данные, но ничего в нём не меняет — не блокирует и не разблокирует бумаги, не меняет лимиты. Когда будете готовы к боевой работе, включите «Чтение и запись» (в мастере — «Как bj работает с QUIK», в настройке — «Автоматический цикл M2M в МНП»)") case s.Emulate: - add("Автоматический цикл M2M", "warn", "включена имитация — шаги проходят без записи в МНП") + add("Режим работы с QUIK", "warn", "включена имитация — шаги проходят без записи в МНП") case !s.AutoOut && !s.AutoIn: - add("Автоматический цикл M2M", "warn", "запись разрешена, но исходящие и входящие поручения в МНП не регистрируются автоматически") + add("Режим работы с QUIK", "warn", "запись разрешена, но исходящие и входящие поручения в МНП не регистрируются автоматически") default: var on []string if s.AutoOut { @@ -123,7 +124,7 @@ func quikMNPCheck(ctx context.Context, s QuikMNPSettings) []MNPCheck { if s.PollTerminal { on = append(on, "поручения из терминала") } - add("Автоматический цикл M2M", "ok", "включён: "+strings.Join(on, ", ")+"; торговый счёт "+quikAccount(s)) + add("Режим работы с QUIK", "ok", "чтение и запись (боевая работа): "+strings.Join(on, ", ")+"; торговый счёт "+quikAccount(s)) } since := time.Now().AddDate(0, 0, -30) diff --git a/internal/lkgateway/web/templates/admin_wizard.html b/internal/lkgateway/web/templates/admin_wizard.html index 79ab66a..02dba1f 100644 --- a/internal/lkgateway/web/templates/admin_wizard.html +++ b/internal/lkgateway/web/templates/admin_wizard.html @@ -473,8 +473,8 @@
- - + +
diff --git a/internal/lkgateway/web/templates/part_quik.html b/internal/lkgateway/web/templates/part_quik.html index d95375e..ca534d6 100644 --- a/internal/lkgateway/web/templates/part_quik.html +++ b/internal/lkgateway/web/templates/part_quik.html @@ -98,10 +98,10 @@ (function(){ var rows=document.getElementById('mnp-rows'), dot=document.getElementById('mnp-dot'); function esc(s){return String(s).replace(/[&<>"]/g,function(c){return{'&':'&','<':'<','>':'>','"':'"'}[c]})} - var ic={ok:'✓',warn:'⚠',err:'✗'}; + var ic={ok:'✓',info:'ℹ',warn:'⚠',err:'✗'}; function run(){ rows.innerHTML='Проверяю…'; fetch('/admin/setup/quik/mnp-check',{cache:'no-store'}).then(function(r){return r.json()}).then(function(d){ - rows.innerHTML=d.checks.map(function(c){return ''+ic[c.state]+''+esc(c.title)+''+esc(c.detail)+''}).join(''); + rows.innerHTML=d.checks.map(function(c){return ''+(ic[c.state]||'')+''+esc(c.title)+''+esc(c.detail)+''}).join(''); dot.className='dot '+d.state; document.getElementById('mnp-at').textContent='проверено '+d.at; }).catch(function(){ rows.innerHTML='Проверка не выполнилась'; }); } document.getElementById('mnp-run').onclick=run;