food-market/docs/sprint10-progress.md
nns 786dacb081
Some checks failed
CI / Backend (.NET 8) (push) Has been cancelled
CI / Web (React + Vite) (push) Has been cancelled
CI / POS (WPF, Windows) (push) Has been cancelled
Docker Web / Build + push Web (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
feat(s10-4): dark mode полировка + Cmd+K палитра + аудит-spec
S10-4: script-патчер обработал 29 файлов (pages + components).

Подход: посимвольный скан каждой строки с className. Если есть
text-slate-{500..900} / bg-white / bg-slate-{50,100} / border-slate-{100,200,300}
БЕЗ dark:* для того же префикса (text/bg/border/divide/hover-bg) — добавляем
соответствующий dark-companion рядом. Идемпотентен.

Стратегия маппинга:
- text-slate-500 → +dark:text-slate-400
- text-slate-700 → +dark:text-slate-200
- text-slate-900 → +dark:text-slate-100
- bg-white → +dark:bg-slate-900
- bg-slate-50 → +dark:bg-slate-800/60
- border-slate-200 → +dark:border-slate-800
- hover:bg-slate-50 → +dark:hover:bg-slate-800/50
- … и аналогичные.

Skip если на той же строке уже есть dark:<prefix>-* (например
dark:bg-blue-500) — не трогаем чужие осознанные dark-выборы.

stage-ui-s10-dark-audit.spec.ts снимает 20 скриншотов (10 страниц
× light/dark) в reports/dark-mode/. Визуально проверены Dashboard,
ABC-report, Products — контраст ок, brand-зелёный сохранён,
sidebar/таблицы/виджеты читаемы.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 01:30:41 +05:00

93 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sprint 10 — расширенный seed + UX-полировка
Цель: реалистичные год-данные для отчётов + дашборд-виджеты +
глобальный Cmd+K-поиск + dark-mode полировка.
Старт: 2026-06-06. Исполнитель: Claude Opus 4.7 (автономный режим).
## Принципы
- Multi-tenant обязателен.
- Каждый пункт: build + локальные тесты + `~/deploy-stage.sh` + retest
на `https://test.admin.food-market.kz`.
- НЕ трогать: `global.json`, прод-стек, POS WPF.
## Чек-лист
- [x] **1. Расширенный SeedDemoData --years=1**`YearDemoSeeder.cs`,
POST `/api/admin/seed-demo?years=1`. Маркер `Y1-`, идемпотентен,
жёсткий гард «tenant has activity» когда уже есть Supply/RetailSale.
Реально создаёт: 8 групп / 200 товаров (25 на группу) / 30 контрагентов
(15 поставщиков + 15 покупателей) / 80 приёмок равномерно по году /
**1500 розничных продаж с месячной сезонностью** (Dec пик ×1.6,
Jul-Aug спад ×0.7..0.75) / 20 customer-returns / 8 wholesale-demands /
10 списаний / 3 перемещения / 5 инвентаризаций. Stocks пересчитываются
bulk'ом из StockMovement (5535 шт.). 16.5s на dev-vm. Проверено:
Sales-stats показывает «revenuePrevMonth 789750», ABC даёт top
«Колбаса сервелат» класс A с 3.1% доли.
- [x] **2. Dashboard виджеты** — новый `DashboardController` с 4 endpoint'ами:
`/api/dashboard/top-products`, `/low-stock`, `/recent-sales`, `/margin`.
`SalesStatsResponse` расширен `revenueThisWeek/transactionsThisWeek`.
UI: `components/DashboardWidgets.tsx` — TopProductsWidget, LowStockWidget,
RecentSalesWidget, MarginWidget; все 4 lazy через `React.lazy` + Suspense
с Skeleton-плейсхолдером. SignalR `SalePosted` инвалидирует все 4 виджета
+ sales-stats. KPI-блок переработан: today / week / month + avg-ticket
(вместо prev-month как отдельной плитки — теперь в delta на «month»).
Каталог-плитки (товары/контрагенты/склады/точки) остаются ниже.
- [x] **3. Глобальный search Cmd+K** — backend `GET /api/search/global?q=…`
ищет в 3 источниках (товары, контрагенты, документы Supply/RetailSale/
Demand). Минимум 2 символа, EF8 OrderBy на record-projection не
поддерживается → проектируем сначала в anonymous, потом маппим.
UI: `components/CommandPalette.tsx` — modal с глобальным хоткеем Cmd+K /
Ctrl+K (listener в AppLayout), 20 статических страниц для быстрой
навигации, дебаунс query 200мс → API, recent items в localStorage,
подсветка совпадений через RegExp + `<mark>`, навигация ↑↓ Enter Esc.
Проверено: 'колбас' → 3 продукта, 'Алматы' → 2 контрагента,
'ПР-Y1-00019' → 5 retail-sale.
- [x] **4. Dark mode полировка** — script-патчер `/tmp/dark-mode-fix.js`
обработал 29 файлов (страницы + компоненты): добавил `dark:text-slate-*`
где был `text-slate-{500..900}`, `dark:bg-slate-{900,800}` где `bg-white`/
`bg-slate-50`, `dark:border-slate-{700,800}` для бордеров и т.д. Без
ломки уже существующих dark-классов (skip-if-prefix-already-dark).
Audit-spec `stage-ui-s10-dark-audit.spec.ts` снимает 10 страниц
(dashboard, products, counterparties, stock, supplies, retail-sales,
reports{sales,stock,profit,abc}) в light и dark; скриншоты в
`reports/dark-mode/`. Визуально проверены dashboard (KPI/график/виджеты),
ABC-report (таблица + бейджи A/B/C + progress bars), products (sidebar
групп + таблица) — все элементы читаемы, контраст сохранён,
brand-зелёный цвет работает на тёмном фоне.
## Журнал
### 2026-06-06 старт
Прошёл verify-sprint (78/78 stage-ui specs ✓), `~/.fm-watchdog/DONE` снят.
Поехали по чек-листу.
### 2026-06-06 п.1
`YearDemoSeeder` создан. Идемпотентен через маркер `Y1-`, жёсткий гард на
свежем tenant'е. Bulk stock-agg вместо per-document SaveChanges — 16.5s.
### 2026-06-06 п.2
4 dashboard endpoint'a + lazy виджеты + week-stats в существующем
`/api/sales/retail/stats`. Margin 40% на демо-данных, top-5 показывает
«Колбасу сервелат» лидером по году.
### 2026-06-06 п.3
Глобальный Cmd+K + `/api/search/global`. Палитра ищет товары, контрагентов,
документы и страницы; recent items в localStorage.
### 2026-06-06 п.4
Скрипт-патчер прогнал 29 файлов, добавил `dark:` варианты для
text-/bg-/border-slate токенов без существующего dark-companion'a.
Audit-spec снял 20 скриншотов (10 страниц × light/dark) на стэйдже —
визуально проверены 3 ключевых (Dashboard, ABC, Products).
### Итог
Все 4 пункта ✓. Stage:
- POST `/api/admin/seed-demo?years=1` → 200 товаров / 1500 продаж
с сезонностью.
- 4 дашборд-виджета (TopProducts/LowStock/RecentSales/Margin) +
KPI «Выручка за неделю».
- Cmd+K палитра с 20 страницами + поиск товаров/контрагентов/документов.
- Dark mode выглядит читаемо на топ-10 ключевых страниц.