docs(pos): отчёт по протоколу весов Масса-К + «Проверка оборудования» (скриншот Win11)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions

Протокол и тулзы — готовы и проверены (50/50 юнит-тестов по реальным байтам;
окно «Проверка оборудования» запущено на Windows 11). НЕ выполнено: live-чтение
веса через виртуальную пару COM на VM (драйвер com0com требует доверия издателю —
решение владельца) и реальные весы с грузом в магазине (нужен человек с гирей).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nns 2026-10-11 08:54:53 +05:00
parent 19cbdbbf11
commit 6f97e327b1
3 changed files with 123 additions and 0 deletions

View file

@ -0,0 +1,93 @@
# Касса ALL MARKET — реальный протокол весов Масса-К (11.10.2026)
Отчёт по задаче: заменить угаданный протокол весов на реальный (по замеру с
ноутбука магазина) и сделать отдельную программу «Проверка оборудования» для
sysadmin без входа в кассу.
## Что сделано
### Приоритет 0 — «ALL MARKET — Проверка оборудования» (без входа/сервера/БД)
Отдельная программа `food-market.pos.hwcheck` (новый exe), ссылается ТОЛЬКО на
`pos.core` ради модулей оборудования. **Не умеет быть кассой**: нет экрана входа,
нет подключения к серверу, нет работы с БД продаж/каталога, нет токенов и сетевых
запросов. Обычная касса с входом в zip для sysadmin НЕ входит.
Окно (Avalonia, светлая тема, русский): весы (ручной выбор порта/скорости/протокола,
«Найти весы», «Прочитать вес сейчас», «Запустить/Остановить» с live-весом ~350 мс,
сырой hex кадра), COM-порты с пометкой «занят другой программой», принтеры Windows
(только чтение — очередь не трогаем, число заданий), сканер (контрольная цифра
EAN-13/EAN-8 + отличие сканера от ручного набора по интервалу), «Сохранить/
Копировать отчёт». **Тестовая печать ВЫКЛ по умолчанию**, включается только
запуском с `--allow-test-print` (ключ даёт владелец) — в zip два ярлыка.
Запущена и проверена на реальной Windows 11 (VM 192.168.1.231) — см.
`vm-hwcheck-launch.png`: окно отрисовано, определены порт **COM1** и принтер
«Microsoft Print to PDF», кнопка «Тестовая печать» неактивна, поле сканера активно.
### Реальный протокол весов (пп. 1–6)
По фактическому замеру sysadmin (11.10, ноутбук магазина, при закрытой кассе
МойСклад): весы Масса-К (USB-COM CH340) отвечают **только на 57600 8N1**;
рукопожатие **ENQ(0x05)→ACK(0x06)**; запрос веса **DC1(0x11)** → кадр
**SOH STX «флаг вес единица» CTRL ETX EOT** (например
`01 02 'S 0.000kg' 'q'(0x71) 03 04`).
- `pos.core/Hardware/SerialScale.cs` — `ISerialTransport` (абстракция для тестов) +
`SystemSerialTransport` (8N1, DTR/RTS), `MassaK.ParseFrame/Handshake/ReadFrame/
ReadWeight`. **Control-байт НЕ валидируем** (смысл не подтверждён) — только пишем
сырой hex (чтобы по кадрам с грузом уточнить). Единицы kg; «г/g» → /1000.
- `pos.core/Hardware/ScaleDiscovery.cs` — чтение + **стабильность по двум одинаковым
чтениям** (флаг весов не интерпретируем); автопоиск **57600 и Масса-К-кадр —
первыми**, общий бюджет ~12 с, занятые порты отмечаются отдельно → кассиру
«порт занят (закройте кассу МойСклад)», а не «весы не найдены».
- `pos` — `ComScale` стал тонким адаптером; настройки хранят `scale_proto` и по
умолчанию **MassaKFrame/57600**; если сохранённые весы не отвечают — автопоиск
молча + ручной выбор в настройках. `ProbeRunner (--probe-hw)` печатает сырой hex.
- Весовой товар на кассе (п. 6): вес берётся через `ScaleMonitor` (опрос по
требованию, мягкая деградация); нет связи → **ручной ввод веса остаётся** (как
сейчас), с понятным сообщением. Логика не менялась — уже была корректной.
### Юнит-тесты (п. 5) — 50/50 зелёных
`tests/food-market.UnitTests/MassaKScaleTests.cs` на фейковом порту
(`FakeScaleTransport`): разбор **реального нулевого кадра**
`01 02 53 20 20 30 2E 30 30 30 6B 67 71 03 04`, вес 1.235 / 12.500 / отрицательный /
граммы, мусор до SOH, обрезанный кадр без ETX, мусор без SOH, рукопожатие с ACK и
без ACK, полный цикл, стабильность. `BarcodeScanTests.cs`: контрольная цифра
EAN-13/EAN-8 и классификация ввода.
### Сборки (п. 7 + Приоритет 0) — в ~/pos-release/
- **Проверка оборудования:**
`allmarket-pos-win-x64-20261011-0839-hardware-check.zip`
SHA256 `f4f5a53ffedc4c7e55452d6fad1c139848340e57232553d33f1ea7f8bc449623`
(внутри: `foodmarket.Pos.HwCheck.exe`, два ярлыка-bat, `README.txt`).
- **Диагностическая касса (с новым протоколом):**
`allmarket-pos-win-x64-20261011-0840-probe.zip`
SHA256 `67b9e72cdbc163ed9f93c49f2724e10740c1430d16a6c6d1f6954ef69a47c1f4`.
Linux-сборку не ломали (System.IO.Ports/System.Management общие; WMI под
`OperatingSystem.IsWindows()`). pos.core/pos/hwcheck собираются, тесты зелёные.
## Что проверено
- Протокол — **по фактическим байтам** (юнит-тесты, 50/50).
- Программа «Проверка оборудования» **запускается на реальной Windows 11**,
определяет COM-порт и принтер, отрисовывает русский интерфейс, тестовая печать
выключена (скриншот `vm-hwcheck-launch.png`).
## Что НЕ проверено (нужен человек / решение владельца)
1. **Живое чтение веса через виртуальную пару COM на VM (п. 8) — НЕ выполнено.**
com0com — подписанный установщик `Setup_com0com_v3.0.0.0_W7_x64_signed.exe`
скачан и запущен (`/S`, exit 0), но **виртуальная пара COM10/COM11 не
зарегистрировалась**: на Win11 установка драйвера требует либо интерактивного
подтверждения доверия издателю (нельзя нажать по ssh), либо импорта сертификата
издателя в хранилище доверенных — это **ослабление доверия ОС**, я не стал делать
автономно. Нужно решение владельца: разрешить доверить сертификат издателя
com0com и установить драйвер на тест-VM (один раз), после чего я доведу
эмулятор весов + live-чтение + скриншоты.
2. **Реальные весы с грузом (гирей) в магазине — НЕ проверялись** (нет доступа к
железу; касса МойСклад и ноутбук магазина не трогали). Нужен человек с гирей:
положить груз, сверить вес и «стабильно», прислать сырые hex-кадры с грузом —
тогда уточним смысл флага и control-байта (сейчас они логируются, но не
интерпретируются).
## Файлы
- `vm-hwcheck-launch.png` — окно «Проверка оборудования» на Windows 11.
- `index.html` — та же сводка со скриншотом.

View file

@ -0,0 +1,30 @@
<!doctype html><meta charset="utf-8"><title>Касса — протокол весов Масса-К + Проверка оборудования (11.10)</title>
<style>body{font:15px system-ui;margin:0;padding:24px;max-width:1000px;margin:auto;background:#f8fafc;color:#0f172a}
h1{font-size:22px}h2{font-size:17px;margin-top:28px}
figure{margin:0 0 20px;background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}
figcaption{padding:8px 12px;font-size:13px;color:#475569;background:#f1f5f9}img{display:block;width:100%}
code{background:#eef2f7;padding:1px 5px;border-radius:4px;font-size:13px}
.ok{color:#16a34a}.no{color:#dc2626;font-weight:600}ul{line-height:1.6}</style>
<h1>Касса ALL MARKET — реальный протокол весов Масса-К + «Проверка оборудования»</h1>
<p>11.10.2026. Протокол весов заменён на реальный (по замеру с ноутбука магазина);
сделана отдельная программа диагностики оборудования без входа в кассу.</p>
<h2>Автопроверки</h2>
<ul>
<li class="ok">✓ Разбор реального кадра <code>01 02 53 20 20 30 2E 30 30 30 6B 67 71 03 04</code> → 0.000 кг, флаг 'S', control 0x71</li>
<li class="ok">✓ Веса 1.235 / 12.500 / отрицательный / граммы; мусор до SOH; обрезанный кадр; без ACK — обработаны</li>
<li class="ok">✓ Рукопожатие ENQ→ACK и запрос DC1 на фейковом порту; стабильность по двум чтениям</li>
<li class="ok">✓ Контрольная цифра EAN-13/EAN-8; сканер vs ручной ввод</li>
<li class="ok">✓ Юнит-тесты оборудования: 50/50 зелёных</li>
<li class="ok">✓ «Проверка оборудования» запускается на реальной Windows 11 (скриншот ниже)</li>
<li class="no">✗ Живое чтение веса через виртуальную пару COM на VM — НЕ выполнено (драйвер com0com требует доверия издателю; нужно решение владельца)</li>
<li class="no">✗ Реальные весы с грузом (гирей) в магазине — НЕ проверялись (нужен человек)</li>
</ul>
<h2>Скриншот — Windows 11</h2>
<figure>
<figcaption>«ALL MARKET — Проверка оборудования» на Win11 (VM): без входа; определены COM1 и принтер; тестовая печать выключена; поле сканера активно.</figcaption>
<img src="vm-hwcheck-launch.png" loading="lazy">
</figure>
<p>Подробности, SHA256 сборок и список «нужно решение владельца» — в <code>REPORT.md</code>.</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB