From 4d3880395ed5bb95b6aff7bb60878c53500165c3 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 08:29:33 +0500 Subject: [PATCH] =?UTF-8?q?docs(data-quality):=20=D0=B2=D1=81=D0=B5=205=20?= =?UTF-8?q?=D0=BF=D1=83=D0=BD=D0=BA=D1=82=D0=BE=D0=B2=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B=20+=20=D1=80=D0=B5=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0?= =?UTF-8?q?=20seed-demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/data-quality-progress.md | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/data-quality-progress.md b/docs/data-quality-progress.md index 97c9c9c..bc171f4 100644 --- a/docs/data-quality-progress.md +++ b/docs/data-quality-progress.md @@ -26,14 +26,26 @@ - `unknown-cost` — ОТЛОЖЕНО до FIFO (себестоимость «неизвестна», а не «0»). ## План / статус -1. [ ] Hangfire-задача: лёгкая, низкий приоритет, по организациям; ночной полный проход + - recompute по запросу. Считает счётчики по каждой проверке (с учётом «это разные товары»). -2. [ ] Админка: панель «Проверка данных» (счётчики + детальные списки), бейдж на главной/каталоге, - время последней проверки; iOS — те же API. -3. [ ] Массовое исправление: «Задать группу», «Задать цену», «Сгенерировать штрихкоды»; дубли — - «Это разные товары» / открыть оба. -4. [ ] Отключение отдельных проверок в настройках; предупреждение исчезает при исправлении. -5. [ ] Тесты (unit/integration/e2e), деплой, скриншоты; реальные числа на витрине/Демо. +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/себестоимость — отдельная тема.