food-market/docs/data-quality-progress.md
2026-10-09 08:29:33 +05:00

5.4 KiB
Raw Permalink Blame History

Фоновая «Проверка данных» — прогресс

Идея владельца (08.10): «система в фоне не спеша должна выявлять товары без группы и выводить это как предупреждение, что необходимо задать им группу». Расширяем на основные проблемы данных. Правило: минимум как у МойСклада, где можно — лучше.

Легенда: [x] готово · [~] частично · [ ] не начато.

Сверка с МойСкладом

  • У МойСклада нет отдельного дашборда «проверка данных». Есть фильтры в списке ассортимента: по папке/группе (можно отобрать «без папки»), по архивности; отчёт «Остатки» с фильтром отрицательных. Поиск дублей штрихкодов/названий как встроенной фичи у них нет (ловится только при вводе дубля штрихкода — ошибка).
  • Делаем лучше: выделенная панель «Проверка данных» со счётчиками по каждой проблеме, фоновый расчёт (не грузит БД в часы продаж), массовое исправление из списка, детект дублей (штрихкод; имя+единица «возможно, дубль») с «это разные товары», отключение проверок, ненавязчивый бейдж, то же через API для iOS.

Проверки (поправка: PLU убран; без-штрихкода — для старых/импорта)

  • no-group — товар в корневой группе / «Без группы» (нужно задать группу).
  • no-sale-price — нет цены продажи (продать нельзя).
  • no-barcode — нет штрихкода (кроме услуг; новые получают автоматически — это для старых/импорта).
  • dup-barcode — один штрихкод у разных товаров.
  • dup-name-unit — одинаковое название+единица у разных товаров («возможно, дубль»).
  • negative-stock — товары в минусе: НЕ дублируем уведомления, ссылаемся на центр (задача 01b34).
  • unknown-cost — ОТЛОЖЕНО до FIFO (себестоимость «неизвестна», а не «0»).

План / статус

  1. Hangfire DataQualityJob (ночью 02:20 UTC, по организациям) + recompute по запросу; счётчики в data_quality_results (учёт «это разные товары»); живые детальные списки по запросу.
  2. Админка: страница /catalog/data-quality (счётчики по проверкам + детальные списки + время последней проверки) + ненавязчивый бейдж «N товаров требуют внимания» на дашборде (исчезает при 0); iOS — те же эндпоинты /api/data-quality/*.
  3. Массовое исправление из списка: «Задать группу», «Задать цену», «Сгенерировать штрихкоды»; дубли — «Это разные товары» (dismiss) + ссылка на карточку. (Объединение дублей — позже, по ТЗ.)
  4. Отключение проверок — тумблеры на странице (PUT settings, CSV в организации); счётчик/бейдж исчезают сами при исправлении (живые списки + recompute).
  5. Тесты: unit 303 (InternalBarcode и пр.) + integration (счётчики/список/bulk/dismiss) + e2e-браузер (бейдж+панель) ✅; деплой на стенд ✅; скрины dq-panel-*, dq-dashboard-*. Реальные числа (seed-demo, 50 товаров + 3 добавленных с проблемами): Без группы 3, Без цены 3, Без штрихкода 0, Дубль ШК 0, Возможный дубль (имя+ед.) 1, Товары в минусе 20 (ссылкой на центр). Прим.: после фикса «без группы» считает только служебный корень «Все товары» (было 50 ложно → 3).

Итог

Все 5 пунктов выполнены ([x]). Фоновая «Проверка данных» минимум как у МойСклада (фильтры без группы/без штрихкода) + лучше: выделенная панель со счётчиками, детект дублей, массовое исправление, «это разные товары», отключение проверок, бейдж, то же через API для iOS. unknown-cost — после FIFO. Все [x] → touch ~/.fm-watchdog/DONE.

Что НЕ трогаем

Прод, shared-postgres, global.json, gateway nginx, sklad. FIFO/себестоимость — отдельная тема.