food-market/docs/pos-scale-2026-10-11/REPORT.md
nns 6f97e327b1
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
docs(pos): отчёт по протоколу весов Масса-К + «Проверка оборудования» (скриншот Win11)
Протокол и тулзы — готовы и проверены (50/50 юнит-тестов по реальным байтам;
окно «Проверка оборудования» запущено на Windows 11). НЕ выполнено: live-чтение
веса через виртуальную пару COM на VM (драйвер com0com требует доверия издателю —
решение владельца) и реальные весы с грузом в магазине (нужен человек с гирей).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 08:54:53 +05:00

94 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Касса 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` — та же сводка со скриншотом.