Commit graph

267 commits

Author SHA1 Message Date
nns 6f97e327b1 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>
2026-10-11 08:54:53 +05:00
nns d04d1d53fa docs(site): отчёт/скриншоты круга 2 обновлены после догоняющих правок (44/44)
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 Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Закрыты хвосты (kb/quickstart, дубль H1 в cash-with-scales, 100k, перенос «₸/мес»),
передеплой на test; живой grep по /kb/* и /blog/* — чисто.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 01:36:02 +05:00
nns 5c5f92de52 docs(site): отчёт и скриншоты проверки круга 2 (44/44) + verify-скрипт
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 Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Проверка на живом test.food-market.kz после деплоя: React #418 ушёл, дефолтный
«Бизнес» 10 000, чужих систем учёта 0 (Kaspi/маркетплейсы только «в разработке»),
типографика KB, sitemap со слэшами, мобильные правки (Android «Назад», ползунки
−/+, состав панели), честные /status и /kb/billing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 01:29:07 +05:00
nns 304b72dc04 docs(site): обновлён отчёт проверки (10/10, повторный прогон на живом test.food-market.kz)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:21:09 +05:00
nns ad747bf58c docs(site): отчёт и скриншоты проверки исправлений test.food-market.kz (10/10)
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
docs/site-fixes-2026-10-10/{index.html,REPORT.md,screenshots}; tools/site-fixes-verify.mjs
(Playwright-проверка: signup plan/конфигурация/цена, мобильное меню, без промисов/REPLACE_ME).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 00:03:01 +05:00
nns 5cb2c5934c test(uat): покрытие P1-P2 98% / P3 81% — цели go/no-go достигнуты
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
- browser-прогон доведён правками СМЫСЛА: filter:period (react-datepicker), точный sort
  по заголовку, смены (сид+драйвер открытия→POST), sort:vat (showVat), фильтр товаров (панель)
- build-coverage: цели go/no-go (P1-P2 95, P3 80, P4 70)
- матрица/цифры → docs/uat-coverage.html

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:53:59 +05:00
nns b04d3f0d0c feat(pos): окно выбора товара при скане ШК с несколькими карточками (дубли ШК)
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
- PosStore.FindAllByBarcode; SaleViewModel.ScanCandidates/IsScanPickerOpen + PickScanCandidate
- SaleView: модалка выбора; сервер by-barcode уже отдаёт items, веб-приёмка уже показывает выбор

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:04:20 +05:00
nns 30b39a7bcb docs(migration): сверка после фикса ревью — остатки 0, документы точны, долги по контрагенту
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:58:26 +05:00
nns 99c2fc1e5a feat(migration-review): долги топ-20, UI «начальный остаток при переносе», дельта-таймер, прогресс
Some checks failed
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 Web / Build + push Web (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
- docs/migration-debts-top20.md: топ-20 долгов (контрагент-уровень) + находка (paymentout agent=орг)
- MoneyAccountsPage: строка «Начальный остаток при переносе из МойСклад на <дата>» для МС-счетов
- systemd food-market-migration-delta.timer (каждые 10 мин) — непрерывная дельта до перехода
- прогресс: раздел «Исправления по ревью» (все 4 пункта)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:43:44 +05:00
nns b1bdf5c228 fix(migration): не схлопывать разные карточки МойСклада по артикулу + актуализировать объяснение сверки
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>
2026-10-09 20:11:06 +05:00
nns b49abfdbd7 feat(prod): запуск admin.food-market.kz — бэкапы (hourly/daily/офсайт), restore-verify, мониторинг, deploy-prod
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
- prod-backup.sh (tier hourly 48ч / daily 30д + uploads), prod-backup-offsite-pull.sh (DR на dev-vm)
- prod-restore-verify.sh: restore во временную БД + сверка числа строк, дроп
- prod-monitor.sh: api/web/public/БД/диск/5xx → Telegram владельцу (+ --test)
- deploy-prod.sh: guard'ы (prod-postgres, .env chmod600, не dev-пароль, quick-login off,
  SEED_DEMO_DATA=false, issuer), бэкап ДО миграций, только --yes, НЕ в ночных
- systemd таймеры (backup-hourly/daily, monitor, offsite-pull); docs/prod-runbook.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:31:55 +05:00
nns a7b8bbc593 feat(prod): compose прокидывает SEED_SUPERADMIN_PASSWORD/SEED_DEMO_DATA + прогресс запуска прода
Some checks failed
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
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Docker Public / Build + push Public (test + latest) (push) Has been cancelled
Docker Public / Deploy :test → test.food-market.kz (push) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:21:38 +05:00
nns 7229a50a74 docs(migration): перенос завершён на стенде — сверка 0/объяснено, дельта работает
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:59:25 +05:00
nns 18578e2f0c fix(migration): сверка остатков — скоуп по орг (Демо тоже засеян из МС) + классификация 42 расхождений
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
- reconcile: ORG-фильтр во всех SQL (остатки/выручка/балансы/долги) — без него Демо-магазин
  (те же msId из МС) суммировался и давал ложные расхождения остатков
- орг «FOOD MARKET» чистая: 30944 товара = 30944 msId, stocks == Σдвижений
- остатки: 42 расхождения классифицированы — 35 дубль-ШК в МС (слияние, нет аналога, объяснено
  + решение), 7 живой аккаунт (±1-4, дельта). Все объяснены построчно
- delta подтверждён: подтянул 4 живые продажи

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:58:19 +05:00
nns 574de0dafb feat(pos): CLI-диагностика оборудования кассы --probe-hw и тест-печать --test-print
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
- ProbeRunner: COM-порты (имя/VID/PID/описание через WMI), open→close (занят/свободен без
  удержания), опрос весов Масса-К+CAS 9600 (таймаут 1.5с), принтеры Windows (имя/порт/драйвер,
  БЕЗ печати), HID-клавиатуры (возможные сканеры). --port COMx — один порт; занятый не трогаем.
- --test-print "<принтер>": отдельный флаг, ESC/POS тест-чек «ТЕСТ ALL MARKET» через spooler
  (winspool RAW). Без флага ничего не печатается.
- WinExe → AttachConsole(parent) для видимого вывода; --out пишет чистый UTF-8 JSON.
- System.Management (WMI, только Windows, под guard'ами). Проверено на Win11 VM: выход <10с,
  COM1/принтер/HID определяются, test-print на несуществующий принтер — мягкая ошибка (код 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:45:57 +05:00
nns 8be44055a2 docs(migration): сверка после полного прогона — выручка/балансы точны, остатки: найден фантом-сид
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
- reconcile: выручка по документам (точно до копейки), plotseries как справка; чеки сходятся
- delta_sync: camelCase ключи job (created/skipped), повторный опрос, audit tolerant — дельта
  подтверждена (новый чек из МС подтянут: created 1)
- НАЙДЕНО: 30000 строк stocks без движений (прежний прямой сид) → пересобрать из движений

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:30:02 +05:00
nns 110ecf551d feat(migration): дельта-драйвер + рунбук дня перехода + сверка балансов/долгов
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
- scripts/migration/delta_sync.py: раз в N мин updated>=lastSync по всем типам,
  удаления через /audit, состояние в ~/.fm-watchdog, перекрытие окна 2 мин
- docs/migration-runbook.md: фазы A/B/C, откат на МойСклад, надёжность, ограничения токена
- reconcile.py: секции балансов счетов (report/money/byaccount) и долгов (403-ограничение)
- progress: Parts 5/6/7 закрыты

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 16:36:14 +05:00
nns 2d57ceab54 feat(migration): сверка по числу документов + loss/purchasereturn/enter перенесены
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
loss 3068/3068, purchasereturn 550/550, enter 72/72 — сходятся точно. Приёмки 7130
(Δ -1 к живому МС). Розничные продажи — перенос продолжается (резюм по offset).
scripts/migration/reconcile.py сравнивает МойСклад vs ALL MARKET (read-only) →
docs/migration-reconciliation.md. Счётчики МС растут (живой аккаунт) → нужна дельта.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:01:29 +05:00
nns 417030827f docs(migration): enter 72/72 + retaildemand мигратор проверен (оплата верна), прогон 97k идёт
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>
2026-10-09 15:41:06 +05:00
nns a517c32fee docs(migration): приёмки перенесены и проверены (7130) — документный мигратор работает
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>
2026-10-09 15:24:36 +05:00
nns d3b1a7d3df docs(migration): документный мигратор работает — приёмки переносятся с остатками
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>
2026-10-09 14:50:22 +05:00
nns 4667d8e1a7 docs(migration): статус — Part 1 (инвентаризация) + Part 3 (орг) done; Part 2 справочники на реальных данных
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Пайплайн справочников проверен на реальном аккаунте: орг «FOOD MARKET» на стенде,
контрагенты 628 (МС 627) и группы 53 перенесены, товары (31k) импортируются в фоне.
Документы (110k), сверка и дельта — спроектированы (migration-design.md), основной
объём впереди (многочасовой прогон). global.json не трогал; в МойСклад только чтение.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:31:37 +05:00
nns a2ee85bc12 docs(migration): инвентаризация источника МойСклад + дизайн мигратора (Part 1)
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
Решение владельца 09.10: полный перенос магазина из МойСклада в ALL MARKET с историей.
- scripts/migration/ms_inventory.py — read-only инвентаризация источника.
- docs/migration-source-inventory.md: орг «FOOD MARKET», ~31k товаров, 627 контрагентов,
  ~110k документов (97 707 чеков, 7 125 приёмок, 3 068 списаний…), 7 558 строк остатков,
  1 склад/точка/орг, касса наличных, 1 тип цены; gap-анализ модели + цели сверки.
- docs/migration-design.md: идемпотентность по msId, хронология документов, МСК→UTC,
  тиыны, резюмируемость, порядок этапов, сверка, дельта, runbook.
- docs/migration-progress.md: план Part 1–7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:26:35 +05:00
nns 2b751dc129 test(uat): измеримое покрытие — прогон + HTML с цифрами (P1–P3 80%, P4 37%)
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/uat-coverage.html — цифры по экрану/приоритету/общим. Цели (P1–P3 ≥95%, P4 ≥70%)
пока НЕ достигнуты (переход на ALL MARKET в приоритете) — остаток задокументирован в
docs/uat-coverage-progress.md, продолжим после перехода.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:09:46 +05:00
nns 3f416e71ad test(uat): измеримое покрытие — экстрактор элементов из кода + браузерный прогон
- tools/extract-controls.ts: статически из web/src/pages достаёт все интерактивные
  элементы каждого экрана (поиск/фильтры/сортировки/пагинация/экспорт/тумблеры/
  действия) → docs/uat-coverage.expected.json (36 экранов, 195 элементов; приоритеты).
- scenarios/stage-ui-uat-coverage.spec.ts: читает expected, в браузере задействует
  каждый элемент (фиксирует запрос с параметром/действие), пишет reports/uat-covered.json.
- tools/build-coverage.ts: сводит → docs/uat-coverage.{json,html} с % по экрану/
  приоритету/общим (цель P1–P3 ≥95%, P4 ≥70%).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:27:31 +05:00
nns a539c31cbc docs(uat): часть C отчёта (per-control в браузере) + прогресс done + nightly step 3d
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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:11:33 +05:00
nns 605c1bac2c test(uat): браузерные per-control проверки + гейтинг прав по прямым URL
- stage-ui-uat-controls: в браузере контролы списков шлют правильный параметр
  (поиск→search, сортировка→sort, фильтр→свой параметр, пагинация→page=2,
  экспорт→/export&format), + жизненный цикл документа приёмки (провести чекбоксом
  «Проведено»→POST /post, снять→/unpost, удалить→DELETE). 16/16 ✓. Семантику
  параметр→строки независимо держит filters-sweep.
- stage-ui-uat-permissions: кассир/кладовщик по ПРЯМОМУ URL к админ-разделам видят
  «Нет доступа» (RoleGuard), разрешённые разделы открываются. 2/2 ✓.
- docs/uat-per-control-progress.md — реестр экранов × контролов.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:06:02 +05:00
nns 12406d2503 docs(weighted): финальный итог — оба бага устранены, ворота зелёные
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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:31:12 +05:00
nns d465d82248 docs(weighted): unitShort в sync + обновлён mobile-api и прогресс
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>
2026-10-09 11:18:33 +05:00
nns d0fee10e96 fix(barcode): весовой разбор выкл по умолчанию; поиск по ШК — точное совпадение
Реальный сценарий владельца: весов с печатью этикеток нет, штрихкоды весовых —
обычные коды «27xxxxx» в карточке. Исправлены два бага:
- поиск по ШК матчил весовой PLU по АРТИКУЛУ (вода арт.12345 → 1,5 кг) — убрано,
  поиск по штрихкоду больше нигде не матчит по артикулу;
- разбор весовых этикеток был дефолт-ON (WeightedBarcodeSettings.Enabled,
  Organization.WeightBarcodeEnabled) и ловил обычные коды — теперь дефолт OFF.

- ByBarcode: сначала точное совпадение штрихкода (вкл. короткие «27xxxxx»),
  разбор этикетки — только если включён в орг И точного ШК нет.
- Phase40: WeightBarcodeEnabled DEFAULT false + выключение у существующих орг;
  WeightedCodeFormat('short'|'ean13')/WeightedCodePrefix(27)/WeightedCodeDigits(5).
- Генератор ШК нового весового товара: короткий «<prefix>+N цифр» (27xxxxx, next-free)
  или EAN-13 по настройке; уникальность.
- Настройки орг отдают/принимают формат кода весовых.
- Sync отдаёт unitShort («шт»/«кг»/«л») рядом с unitCode (ОКЕИ) — shared UnitShort.
- Тесты: MobileApi (exact-only по умолчанию; не матчит артикул; PLU как ШК при вкл) 9/9;
  unit WeightedBarcode/UnitShort 16/16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:02:43 +05:00
nns 7ede21321b docs(filters-sweep): финальный итог — ворота зелёные, остаток работ
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
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:39:23 +05:00
nns 4986d85b73 test(uat): расширить mobile-UAT до 16 экранов P1-P4 + обновить отчёт
stage-ui-uat-mobile проходит по 16 спискам P1-P4 на 390px (каталог/контрагенты/
склад/приёмки/продажи/деньги/отчёты/сотрудники): без h-scroll, console-ошибок и 5xx.
Отчёт дополнен: UI-гейтинг по ролям (menu-walk 3/3), окно кассы Windows 11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:37:57 +05:00
nns 28e8d08c55 rebrand: реальное окно кассы на Windows 11 с новым лого ALL MARKET
Снято на win11-kassa-test VM (foodmarket.Pos.exe --demo, software-рендер,
захват из интерактивной сессии). Заголовок окна «ALL MARKET · Касса», крупное
лого all market, «Касса» рядом, экран продажи целиком, таскбар Windows 11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:37:16 +05:00
nns d380e186a8 feat(uat): дружелюбный заголовок валидации + mobile-UAT 390px + отчёт
- ValidationFilter (FluentValidation-путь): русский заголовок «Проверьте
  правильность заполнения» через ModelErrorTranslator вместо дефолтного англ.
  «One or more validation errors occurred» (сообщения полей уже были русскими).
- stage-ui-uat-mobile.spec.ts: P1-экраны на 390px без h-scroll/console/5xx +
  проверка «Остатки» (артикул/штрихкод, тумблер «показать нулевые»).
- docs/uat-report-2026-10-09.md: матрица покрытия (уже-зелёное vs проверено
  сейчас) по требованию владельца; галерея скринов reports/uat-mobile/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:16:47 +05:00
nns 1cc3c0a9dc test(e2e): filters-sweep — смысловая проверка фильтров списков
Независимо считает ожидаемый набор строк/итог (не «200 OK»): свежая temp-орг,
контролируемый сид (внук-со-стоком/ребёнок-ноль/родитель-минус/поиск/услуга в
3-уровневой группе), сверка для каждого контрола. Покрыто: stock includeZero,
negativeOnly, groupId/productGroupId (3 уровня вложенности), store-specific,
поиск по артикулу/штрихкоду, сортировка по количеству, пагинация (разбиение),
экспорт-с-фильтром; catalog groupId/productGroupId/isService. 21/21 ✓ на стенде.
Добавлено в nightly (step 3c) и quality-watchdog (step 12) на хосте.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:11:29 +05:00
nns d7db011331 test(sales): привести oversell-тест к политике «продажа в минус разрешена»
RetailOversellingTests ждал 409 на продажу сверх остатка — устаревшая политика.
По решению владельца 08.10 продажа в минус разрешена и создаёт предупреждение об
отрицательном остатке. Тест переписан: проведение успешно, остаток уходит в минус,
создан negative-stock alert. Плюс обновлён docs/filters-sweep-progress.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:01:56 +05:00
nns 193ba49ecb fix(stock): «показать нулевые» и фильтр по группе показывают товары без прихода
Остатки строились ОТ таблицы Stocks (JOIN Products), поэтому товары без строки
Stock (ни разу не приходованные) не попадали в список вообще, а includeZero лишь
снимал фильтр Quantity!=0 у существующих строк. То же в отчёте «Остатки на дату»,
в экспорте и в фильтре по группе (iOS получал total 0).

- GetStock/ExportStock: выборка ОТ Products (не-услуги, не-архивные) с остатком
  коррелированным подзапросом (товар без Stock = 0). Склад выбран → строка склада;
  без склада → агрегат «Все склады». Нулевые видны при includeZero; negativeOnly и
  пагинация/сортировка/поиск/экспорт работают и для нулевых. Остаток/ед./штрихкод
  дотягиваются batch-запросом по id страницы (EF8 не переводит подзапросы в SELECT+ORDER BY).
- Отчёт «Остатки на дату»: includeZero добавляет товары без движений (Qty 0);
  фильтр по группе теперь с вложенностью.
- groupId/productGroupId — синонимы с вложенными группами на всех списках остатков
  и в каталоге (List + Export). Раньше catalog?productGroupId молча игнорировался.
- Штрихкод рядом с артикулом в списке/экспорте — различать одноимённые товары
  (4× «BIOBLAS шампунь» с разными артикулами из МойСклада — не удалять).
- Demo (30 894 товара): без флага 12, includeZero → 30 894, <500мс/страница.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 09:44:50 +05:00
nns 80070cbace rebrand: переснять скриншоты кассы после фикса лого/бейджа (3a0f9e2)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
now-pos-sale.png / now-pos-login.png были сняты 17:41, до фикса 3a0f9e2 (18:07).
Переснято с текущего UI: лого ALL MARKET ~140px, «Касса» через разделитель,
бейдж «Отложенные 2» целиком внутри кнопки.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 08:51:55 +05:00
nns 4d3880395e docs(data-quality): все 5 пунктов выполнены + реальные числа seed-demo
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
2026-10-09 08:29:33 +05:00
nns 261a720b52 feat(data-quality): фоновая «Проверка данных» — бэкенд (п.1,3,4)
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
Hangfire DataQualityJob (ночью 02:20 UTC) считает по орг. счётчики проблем: без группы
(корень/«Без группы»), без цены продажи, без штрихкода (кроме услуг), дубль штрихкода,
возможный дубль имя+единица; товары в минусе — ссылкой на центр (не дублируем). Результаты
в data_quality_results (Phase43), живые детальные списки — по запросу.
API /api/data-quality: сводка, {check}/products, recompute, dismiss («это разные товары»),
bulk set-group/set-price/generate-barcodes, PUT settings (отключение проверок). unknown-cost
отложен до FIFO; PLU убран (поправка владельца). Integration-тест: счётчики/список/bulk/dismiss.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 08:11:57 +05:00
nns f6cd1063f1 docs(parity): все 10 пунктов выполнены — паритет с МойСкладом достигнут
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 07:43:05 +05:00
nns 87c4d16ed1 docs(parity): пасс 3 — 9/10 [x]; остаётся full-chain + 2 POS-десктоп мелочи
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
2026-10-09 07:24:48 +05:00
nns 9ca907ce47 docs(parity): пасс 2 — пп.2,7,9 закрыты; 1,5 продвинуты; 7 из 10 [x]
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
2026-10-09 06:55:51 +05:00
nns 8c163e63fc docs(parity): п.4 бэкенд готов; п.5 from-supply добавлен
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
2026-10-09 06:16:46 +05:00
nns ad2e3b3117 feat(purchases): создать возврат поставщику на основании приёмки (п.5 слайс)
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
POST /api/purchases/supplier-returns/from-supply/{supplyId}: черновик возврата с
преднабором строк из проведённой приёмки (товар/кол-во/цена), поставщик/склад/валюта
и ссылка ReferenceSupplyId. Integration-тест: преднабор + связь.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 06:16:33 +05:00
nns ddf7918eb1 docs(parity): прогресс — пп.3,4,6,8 готовы; 1,2,7,9 частично; 5 основной незакрытый
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 06:11:50 +05:00
nns 0f1574df64 feat(web): привычные названия денег (ПКО/РКО) + прибыль на главной + статусы с подсказкой
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 Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
П.7: типы денег названы привычно — «Приход наличных (ПКО)», «Расход наличных (РКО)»,
«Входящий/Исходящий платёж», «Перевод между счетами».
П.8: блок «Прибыль за сегодня/месяц» на дашборде (во всех режимах, /api/dashboard/margin),
с пометкой «приблизительно; точно после FIFO».
П.9: общий DocStatusBadge (Черновик/Проведён/Завершена) с tooltip «что это значит»,
применён на списках Приёмок/Продаж/Инвентаризаций.
П.6: проверено — Оприходование/Списание в простом режиме не прячутся (отдельные пункты).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 06:04:18 +05:00
nns 0ca0d6cc3b feat(catalog): карточка товара как МойСклад+ — обязательно только наименование
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
Правки владельца 08.10 (п.4 паритета):
- Сохранить можно при наличии Наименования. Единица не обязательна в запросе →
  дефолт «шт»; группа → корень. Штрихкод ОБЯЗАТЕЛЕН у любого товара: нет в запросе/
  импорте → автогенерация внутреннего EAN-13 (верная контр. цифра, префикс не
  пересекается с весовыми/ценовыми префиксами орг. — InternalBarcode).
- Цена продажи не обязательна для сохранения; но ПРОДАТЬ без неё нельзя — касса и
  розничная продажа дают «У товара «X» нет цены продажи» (можно ввести вручную).
- Быстрое создание из кассы/приёмки: POST /api/catalog/products/quick (имя + опц.
  штрихкод/цена/весовой).
- Снят FluentValidation NotEqual(Guid.Empty) на единицу (контроллер подставляет дефолт).

Тесты: unit InternalBarcode 3/3 (валидный EAN-13, не парсится как весовой, обходит
префиксы); integration 3/3 (создание по одному имени, продажа без цены → 400, quick).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 05:45:38 +05:00
nns 92befd1f05 docs(pos): мгновенный старт — замеры до/после, МойСклад-разбор, установщик Windows
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
- docs/moysklad-pos-startup.md: прямой замер «Кассы МойСклад» (Celeron N4120, 99–113 с
  до готовности; каталог перезаписывается целиком, полный JSON+FTS) — подтверждённые
  причины, не догадки.
- docs/pos-progress.md: раздел «Мгновенный старт» — что сделано (касса из локальной базы +
  фоновый синк, дельта остатков, gzip-каталог ×7.3, синк вне UI-потока) + таблица замеров
  (Linux/стенд + Win11 VM + 1 ядро как прокси Celeron). Цель <2 с тёплый старт на слабом
  CPU достигнута (<1 с). Серверный кэш снимка осознанно не делали (риск памяти, путь
  «раз на установку»).
- deploy/pos-install.ps1: установщик Windows (исключение Defender + прогрев + ярлык);
  холодный старт 10 с → 4,5 с. deploy/pos-win-measure.ps1 — скрипт замеров на VM.
- docs/pos.md: обновлён раздел первого запуска + варианты/стоимость подписи exe (не покупали).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 05:11:34 +05:00
nns 0dc8703712 docs(stock): прогресс+mobile-api — все пункты 1–11 закрыты (п.12 отложен владельцем)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
Пасс 3: касса (индикатор+предупреждение+офлайн), Web Push (VAPID), e2e колокольчика.
Итог: unit 299/299, integration 4/4, POS 4/4, e2e-браузер 2/2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 04:03:01 +05:00