# 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. ## Чек-лист - [ ] **1. P2-12 Loyalty (программы + карты)** — Domain `LoyaltyProgram` (Percentage|FixedAmount|PointsAccrual) + `LoyaltyCard`. EF + миграция. CRUD-controller + `POST /api/loyalty/cards/issue`. RetailSale: автоприменение к привязанному CounterpartyId, поле `LoyaltyBonusApplied`. Web `/loyalty/programs` + `/loyalty/cards`. Тесты + UI smoke. - [ ] **2. P2-13 Promotions (промокоды/акции)** — Domain `Promotion` (org-scoped, период, Percent|FixedDiscount, Code). RetailSale: ручной ввод кода / авто-применение к корзине. Web `/promotions`. Тесты. - [ ] **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).