# Simple Mode — прогресс Задача: по умолчанию у всех организаций «Простой режим» — только базовые функции розничного учёта. Включить «Расширенный режим» может только SuperAdmin и только для конкретной организации. Данные при переключении не удаляются; при повторном включении всё видно. Старт: 2026-10-04. ## Чек-лист - [x] 1. Domain + миграция `Organization.IsAdvancedMode` (bool, default false, backfill false) - [x] 2. API `PUT /api/super-admin/organizations/{id}/advanced-mode` + аудит + `/api/me.advancedMode`; org-admin → 403 - [ ] 3. Серверная защита: `[RequiresAdvancedMode]` → 403 ProblemDetails на скрытых модулях - [ ] 4. Web: меню, маршруты, дашборд фильтруются; прямой переход → страница «Недоступно» - [ ] 5. Упрощённые формы (товар / контрагент / документы) — скрыть «не нужные» поля, значения сохраняются - [ ] 6. SuperAdmin UI — бейдж «Простой/Расширенный» + переключатель с подтверждением - [ ] 7. Тесты (unit + integration + e2e); патч quality-watchdog при необходимости - [ ] 8. Деплой стейджа + `docs/simple-mode.md` ## Простой режим — что видно - Главная: выручка за сегодня, что заканчивается, последние продажи - Товары и группы товаров - Контрагенты (единый список — поставщики и покупатели) - Склад: Приёмка, Оприходование, Списание, Инвентаризация, Возврат поставщику, Остатки - Продажи: Продажи, Возвраты покупателей - Отчёты: Продажи, Прибыль, Остатки на дату - Сотрудники и роли, Настройки магазина (включая ОФД), Импорт товаров - 2FA в профиле — остаётся ## Расширенный режим — что добавляется - Оптовые отгрузки (Demand) - Перемещения между точками - Лояльность - Промокоды / акции - ABC-анализ - Аудит организации - Несколько типов цен (в простом — одна цена продажи) - Bulk-операции и сохранённые пресеты в таблицах - Telegram-бот владельца - SSO - Переключатель языка (в простом только русский) - Продвинутые виджеты дашборда ## Журнал ### 2026-10-04 — Шаг 1 ✓ - `Organization.IsAdvancedMode` (bool, default false) + XML-док, что переключает только SuperAdmin. - Миграция `20261004100000_Phase29a_IsAdvancedMode` — идемпотентный `ADD COLUMN IF NOT EXISTS` с `DEFAULT false`; все существующие орги получают `false`. - Snapshot обновлён (`AppDbContextModelSnapshot.cs`). - Применено на dev-БД: 5/5 организаций `IsAdvancedMode = false`. - `dotnet build food-market.api` — ✓ (0 error, warnings — старые, не наши). ### 2026-10-04 — Шаг 2 ✓ - `PUT /api/super-admin/organizations/{id}/advanced-mode { "enabled": bool }` в `SuperAdminOrganizationsController` — `[Authorize(Roles="SuperAdmin")]`. Админ орги получает 403 от стандартного Authorize-фильтра (роль Admin ≠ SuperAdmin); в контроллере сверху уже `[Authorize(Roles="SuperAdmin")]` — не нужно отдельного `Forbid()`. - Запись в `SuperAdminAuditLog`: ActionType `EnableAdvancedMode` / `DisableAdvancedMode`, Description, Changes `{"before":…,"after":…}`, IpAddress. Идемпотентный переключатель: если состояние совпадает — 200 без аудит-записи. - Архивную орг переключать нельзя — 409. - `/api/me` отдаёт `advancedMode` (bool). SuperAdmin без org → false (это ОК — он работает через `/api/super-admin/...`). - `OrgRow` / `OrgDetail` в SuperAdmin list / detail — добавлено `IsAdvancedMode`. - Маршрут: `/api/super-admin/...` (с дефисом), так как существующий контроллер уже использует этот стиль; задача упоминала `superadmin` без дефиса — выбрал существующий стиль. - `dotnet build food-market.api` — ✓ (0 error).