Some checks are pending
Sprint 9 пункт 3 (mobile-адаптация):
- DataTable: min-w-max sm:min-w-[640px] → узкие таблицы (Loyalty, Promotions)
влезают на 375px без horizontal-scroll, широкие (Products) скроллятся
внутри overflow-auto родителя.
- Mobile-audit спека (stage-ui-s9-mobile-audit) — 20 screenshot'ов в
reports/mobile/ (375 + 768 viewport × 10 страниц + seed-demo).
Smoke: no console-errors, layouts читаемы.
Sprint 9 пункт 4 (P2-9 PWA):
- public/manifest.webmanifest — read-only PWA владельца. Shortcuts:
Дашборд, Sales/Profit/Stock отчёты. display=standalone (homescreen icon).
- public/sw.js — service worker:
• SPA navigate: network-first + offline-fallback на /offline.html.
• GET /api/*: network-first + cache-fallback (read-only кеш).
• CSS/JS/SVG: stale-while-revalidate.
• Мутации (POST/PUT/DELETE): не вмешиваемся, сеть.
- public/offline.html — статический fallback с кнопкой «Открыть дашборд».
- index.html: <link rel='manifest'>, apple-touch-meta, lang=ru-KZ.
- main.tsx: navigator.serviceWorker.register('/sw.js') в production only
(dev hot-reload не мешает).
- deploy/nginx.conf: /sw.js no-cache, /manifest.webmanifest правильный
content-type, /offline.html static.
Stage e2e:
- stage-ui-s9-loyalty.spec (4/4 ✓): programs/cards/promotions endpoints
+ UI рендер + SALE20 на 500₸ → total=400 (валидно через API).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
31 lines
2.4 KiB
Markdown
31 lines
2.4 KiB
Markdown
# Sprint 9 — лояльность, акции, mobile-адаптация, PWA
|
||
|
||
Цель: программы лояльности (баллы/% скидка) для постоянных покупателей,
|
||
промокоды/акции в чеке, починить узкие экраны (телефон/планшет),
|
||
PWA-обёртка владельца для отчётов с homescreen-икоником.
|
||
|
||
Старт: 2026-06-01. Исполнитель: Claude Opus 4.7 (автономный режим).
|
||
|
||
Это последний автономно-безопасный спринт. Дальше нужен человек:
|
||
ОФД-интеграция, MoySklad-токены, POS WPF на Windows, kz-локализация,
|
||
прод-деплой.
|
||
|
||
## Принципы
|
||
|
||
- Multi-tenant обязателен (`OrganizationId` на каждой новой таблице, query filter).
|
||
- Каждый пункт: `dotnet build` + локальные тесты + `~/deploy-stage.sh` + retest на `https://test.admin.food-market.kz` (включая mobile viewport 375x667).
|
||
- НЕ трогать: `global.json`, прод-стек (admin.food-market.kz), POS WPF.
|
||
|
||
## Чек-лист
|
||
|
||
- [x] **1. P2-12 Loyalty (программы + карты)** — Phase9b миграция. `LoyaltyProgramsController` + `LoyaltyCardsController` (/issue, /lookup, /block). RetailSale: input.LoyaltyCardNumber → расчёт скидки/баллов; Post начисляет в card.Balance. UI: `/loyalty/programs`, `/loyalty/cards`. Тесты: 3/3 integration + 2/2 stage.
|
||
- [x] **2. P2-13 Promotions (промокоды/акции)** — `Promotion` (Percent|FixedDiscount, Scope, jsonb-массивы Guid, период, Code unique per org). `PromotionsController`. RetailSale: input.PromotionCode → lookup+matchingSubtotal+snapshot. UI: `/promotions`. Тесты: 2/2 integration + 2/2 stage.
|
||
- [ ] **3. Mobile-адаптация** — 375x667 + 768x1024 audit всех ключевых страниц. Таблицы → карточный режим на узких. Sidebar → drawer (уже есть). Screenshots до/после.
|
||
- [ ] **4. P2-9 PWA владельца (read-only)** — manifest.json + SW + offline-fallback на /dashboard/sales/profit/stock. Установка на homescreen. Lighthouse-аудит.
|
||
|
||
## Журнал
|
||
|
||
### 2026-06-01 — старт
|
||
|
||
Sprint 8 закрыт (`docs/sprint8-progress.md`, 4/4 ✓, 8/8 stage e2e). Перехожу к пункту 1 (Loyalty).
|