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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
Весовой товар и поиск по штрихкоду — прогресс
Реальный сценарий владельца (09.10.2026): весов с печатью этикеток НЕТ. Штрихкоды весовых товаров (631 шт, вид «27xxxxx», 7 цифр) — коды, которые владелец сам генерирует и задаёт в карточке товара. Кассир сканирует код товара, вес — с весов на кассе (или вручную). Задача ЗАМЕНЯЕТ прежнюю про весовые этикетки.
Легенда: [x] готово · [~] частично · [ ] не начато.
Найденные баги (корень)
- (а) Весовая «этикетка» сопоставлялась с товаром по артикулу:
ByBarcodeимел|| (parsed.IsWeighted && p.Article == lookup)→ вода с артикулом 12345 находилась по PLU 12345 из «этикетки» 2112345015007 и возвращала 1,5 кг. Поиск по ШК НЕ должен матчить по артикулу нигде. - (б) Разбор весовых этикеток был включён по умолчанию (
WeightedBarcodeSettings. Enabled=true,Organization.WeightBarcodeEnabledDEFAULT true, префикс 27 в ценовых) → внутренние/обычные коды принимались за весовые.
План / статус
- Разбор весовых этикеток ВЫКЛ по умолчанию (
WeightedBarcodeSettings.Enabled=false,Organization.WeightBarcodeEnabled=false+ Phase40 выключает у существующих). Поиск по ШК (ByBarcode) — сначала точное совпадение (вкл. «27xxxxx»); матч по артикулу убран везде. - Настройка орг «Весы с печатью этикеток»: выкл по умолчанию; при вкл — префиксы +
формат; сначала точный ШК, потом разбор.
OrganizationSettingsController. - Касса: весовой товар → вес с весов (Масса-К/CAS) или ручной ввод (модалка); сумма =
цена/кг × вес; подпись «1,235 кг × 690 ₸/кг».
ScaleMonitor+ Scan/AddWeighed flow. - Генератор ШК: штучный — EAN-13; весовой — короткий «27+N» (next-free) или EAN-13 по
weightedCodeFormat; уникальность.GenerateUniqueWeightedShortCodeAsync. /api/pos/v1/sync: +unitShort(«шт»/«кг»/«л») рядом сunitCode(ОКЕИ); в строках возврата тоже; sharedUnitShort; docs/mobile-api.md обновлён.- [~] Тесты: unit 321/321 ✓ (WeightedBarcode/UnitShort/ScaleMonitor/PosBarcode); integration MobileApi 9/9 ✓. full-chain + деплой — ниже.
Автопоиск весов (данные sysadmin: МойСклад-касса спамит «Порт не выбран»/«Таймаут»)
- Автоскан всех COM (вкл. USB-COM CH340/Prolific) × Масса-К/CAS × скорости; кнопка
«Найти весы» в верхней панели; найденный порт запоминается (kv) и восстанавливается.
ScaleDiscovery+AppServices.DiscoverScaleAsync/RestoreScaleFromSettings. - Весы не отвечают → «Весы не подключены» + ручной ввод; опрос только при весовом товаре.
- В логе — одна запись о потере/восстановлении связи (тест: 100 опросов → 1 запись).
Что НЕ трогаем
Прод, shared-postgres, global.json, gateway nginx, sklad.