Some checks are pending
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
S10-1: YearDemoSeeder — POST /api/admin/seed-demo?years=1. - 8 групп × 25 товаров = 200, 30 контрагентов, 80 приёмок равномерно по году, 1500 розничных продаж с месячной сезонностью (Dec пик ×1.6, Jul-Aug спад ×0.7), 20 customer-returns, 8 demands, 10 losses, 3 transfers, 5 inventories. - Маркер артикулов Y1- (параллельно с DEMO-короткий сидер). Гард на существующую активность чтобы не лить хаос поверх ручной работы. - Bulk StockMovement + переагрегация Stocks в конце транзакции — 16.5s на dev-vm vs 60+s если бы per-document SaveChanges. S10-2: DashboardController + 4 виджета: - GET /api/dashboard/top-products?days&limit — top-N по gross-выручке (без net-вычета returns; для точного есть /api/reports/sales). - GET /api/dashboard/low-stock?limit — Stock.Quantity ≤ Product.MinStock. - GET /api/dashboard/recent-sales?limit — последние N посt'ed чеков. - GET /api/dashboard/margin?days — Σ(LineTotal) - Σ(qty × Product.Cost), marginPercent к выручке. - /api/sales/retail/stats расширен revenueThisWeek + transactionsThisWeek. - Frontend: components/DashboardWidgets.tsx с 4 виджетами через React.lazy + Suspense. SignalR SalePosted инвалидирует все 4. - KPI блок: today / week / month + avg-ticket (4 плитки, prev-month стал delta на month-плитке). Проверено на стэйдже год-демо: top-5 за 365 дн. — «Колбаса сервелат 300г» 286440 ₸ / 32 транзакции. Margin 40% за 30 дн. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
56 lines
3.5 KiB
Markdown
56 lines
3.5 KiB
Markdown
# 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»).
|
||
Каталог-плитки (товары/контрагенты/склады/точки) остаются ниже.
|
||
- [ ] **3. Глобальный search Cmd+K** — палитра команд: товары/контрагенты/
|
||
документы/страницы, подсветка совпадений, recent items.
|
||
- [ ] **4. Dark mode полировка** — найти страницы без `dark:`, добавить
|
||
Tailwind dark-префиксы, скрин до/после на топ-10 страниц.
|
||
|
||
## Журнал
|
||
|
||
### 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 показывает
|
||
«Колбасу сервелат» лидером по году.
|