52 lines
5.4 KiB
Markdown
52 lines
5.4 KiB
Markdown
# Фоновая «Проверка данных» — прогресс
|
||
|
||
Идея владельца (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. [x] Hangfire `DataQualityJob` (ночью 02:20 UTC, по организациям) + recompute по запросу; счётчики
|
||
в `data_quality_results` (учёт «это разные товары»); живые детальные списки по запросу.
|
||
2. [x] Админка: страница `/catalog/data-quality` (счётчики по проверкам + детальные списки + время
|
||
последней проверки) + ненавязчивый бейдж «N товаров требуют внимания» на дашборде (исчезает при 0);
|
||
iOS — те же эндпоинты `/api/data-quality/*`.
|
||
3. [x] Массовое исправление из списка: «Задать группу», «Задать цену», «Сгенерировать штрихкоды»;
|
||
дубли — «Это разные товары» (dismiss) + ссылка на карточку. (Объединение дублей — позже, по ТЗ.)
|
||
4. [x] Отключение проверок — тумблеры на странице (PUT settings, CSV в организации); счётчик/бейдж
|
||
исчезают сами при исправлении (живые списки + recompute).
|
||
5. [x] Тесты: 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/себестоимость — отдельная тема.
|