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