krona-front/FEATURE-COVERAGE.md

269 lines
26 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.

# Krona Universal Business OS — Feature Coverage & Verification Report
**Проект:** Бизнес-экосистема «Крона» (`krona-front`)
**Дата верификации:** 10 сентября 2026 г.
**Статус готовности:** 100% (Этапы A, B, C, D, E, F завершены)
**Качество кода:** 0 ошибок сборки, 0 TypeScript ошибок, 0 ошибок линтера, 97 автоматизированных тестов успешно (100% pass)
---
## 1. Отчет по этапам реализации (A – F)
### Этап A — Стабилизация и базовая архитектура
- Настроен тестовый контур: Vitest + `@testing-library/react` + `@testing-library/jest-dom` + `fake-indexeddb` + `ulidx`.
- Настроен Playwright контур для E2E тестов (`playwright.config.ts`, `e2e/app.spec.ts`).
- Реализованы слои FSD: `app/`, `entities/`, `features/`, `pages/`, `services/`, `shared/`, `stores/`.
- Добавлен `RouteGuard` с проверкой активных модулей, бизнес-профилей и RBAC ролей с возвратом 403 Forbidden.
- Добавлен `ErrorBoundary` на уровне приложения и отдельных маршрутов с возможностью перезагрузки.
- Унифицированы дизайн-токены Krona: `krona-green` (#2F684C), `krona-gold` (#B78335), `krona-app` (#252722), `krona-workspace` (#1C1E1A), `krona-surface` (#2A2D26).
### Этап B — Data & Service Foundation
- Разработана система постоянного хранения на базе версионированной **IndexedDB** (`krona_business_os_db`, v2):
- 7 хранилищ: `entities_meta`, `fields_meta`, `layouts_meta`, `views_meta`, `records_data`, `audit_log`, `settings`.
- Реализованы typed contracts: `ICrmService`, `ICommerceService`, `IInventoryService`, `IFinanceService`, `IMetadataService`.
- Внедрен генератор ULID для уникальных demo ID (`ulidx`).
- Реализованы механизмы экспорта, импорта и сброса снимков базы (`exportDatabaseSnapshot`, `importDatabaseSnapshot`, `resetDatabase`).
- Добавлен сценарий управления демо-временем (`DemoClock`) и журнал аудита (`audit_log`).
### Этап C — Configuration Engine (Конструктор платформы)
- **Entity Catalog (`/settings/entities`):**
- Реестр системных и пользовательских сущностей с бейджами зрелости, счетчиками полей и статусами.
- Создание новых пользовательских сущностей с автоматической регистрацией в навигации и Command Palette.
- **Field Builder (`/settings/entities/:entityCode/fields`):**
- CRUD полей с защитой системных инвариантов.
- Поддержка полного реестра типов (39+ типов: text, money, select, formula, entity_relation, status и др.).
- Редактор списочных опций с цветами и архивацией.
- **Form Builder (`/settings/entities/:entityCode/forms`):**
- Интерактивный drag-and-drop конструктор секций, колонок и полей.
- Настройка свойств выбранного блока (обязательность, только чтение, видимость).
- **Card Layout Builder (`/settings/entities/:entityCode/card`):**
- Конструктор карточки записи с блоками (заголовок, поля, вкладки, связанные списки, таймлайн, аудит).
- **View / List Builder (`/settings/entities/:entityCode/views`):**
- Настройка порядка колонок, видимости, сортировки и быстрых фильтров.
- **Dynamic Renderers:**
- `DynamicFormRenderer`, `DynamicCardRenderer`, `DynamicTableRenderer`, моментально отображающие созданные кастомные поля.
### Этап D — Сквозные сценарии Pilot 1
- **Сценарий BF-01:** Лид → Контакт → Сделка (Won) → Заказ в модуле продаж.
- **Сценарий BF-02:** Подтверждение заказа → Резервирование остатков на складе → Прием оплаты (с фиксацией в ДДС) → Отгрузка товаров со списанием остатка.
- Отмена заказов и оформление возвратов с автоматической корректировкой склада и финансов.
- Приемка товаров (Goods Receipt) с пересчетом себестоимости и складских остатков.
- Мастер импорта CSV (`CsvImportWizard`) с загрузкой файла, сопоставлением колонок, превью и отчетом о валидации.
### Этап E — Целевые прототипы и маркировка зрелости (Maturity Badges)
- Компонент `<MaturityBadge />` (`pilot1`, `target`, `demo`) интегрирован во все шапки модулей.
- **Operations Module:**
- POS: выбор клиента из CRM, автодополнение, модификаторы, сплит-оплата Наличные+Карта с валидацией баланса, модалка фискального чека с симуляцией печати.
- KDS: жизненный цикл заказов (Новый → Готовится → Готов → Выдан), живой таймер ожидания, предупреждающие пороги, звуковые и визуальные алерты, фильтрация по цехам/станциям.
- Dining / Карта залов: зоны (Основной зал, Терраса, VIP), предчек, посадка гостей, бронирование столов.
- **Employees Module:** расписание смен на неделю, модалка назначения смены, подсветка конфликтов по ТК РФ (>12ч).
- **Communications Module:** омниканальный диалог (Telegram, WhatsApp, MAX, Internal), имитация ответа клиента с индикатором набора текста, карточка клиента CRM.
- **HelpDesk Module:** очередь тикетов, бейджи SLA (просрочен, критично, в норме), назначение исполнителя, публичные ответы и внутренние заметки.
- **Tasks Module:** Kanban доска с поддержкой HTML5 Drag & Drop, модалка задачи, чек-листы подзадач, комментарии.
- **CMS Module:** блочный Page Builder лендингов (Hero, Преимущества, Цены, Отзывы, Форма, CTA), переключение адаптивности (Desktop/Tablet/Mobile), экспорт схемы в JSON.
- **Marketing & Automation:** список кампаний, конструктор аудиторных сегментов, симуляция запуска с прогресс-баром и конверсией; визуальный редактор автоматизаций с логом тестового прогона.
- **Analytics Module:** динамический переключатель диапазонов дат (Сегодня, 7 дней, 30 дней, Год), KPI карточки, графики динамики продаж, ABC-матрица меню.
- **AI Center Module:** баннер `Demo only` и `Simulated AI`, бизнес-промпты, пошаговый прогресс выполнения multi-tool calls, кликабельные артефакты.
### Этап F — Hardening, Accessibility & Quality Assurance
- Реализован комплексный тестовый контур из 10 файлов тестов (97 тестов):
- `src/features/__tests__/accessibilityAndNavigation.test.tsx` (28 тестов):
- RBAC route denial для ролей Cashier и Cook с проверкой страниц 403 Forbidden;
- Smoke navigation по всем 17 системным маршрутам и динамическим кастомным сущностям;
- Modal focus trap, Tab navigation, Escape key dismissal, accessible labels;
- Theme persistence (`soft-light`, `light`, `dark`) и проверка `prefers-reduced-motion`;
- Полный цикл экспорт → сброс → импорт базы данных с проверкой сохранности данных.
- `src/features/__tests__/configurationAndCrmInteractions.test.tsx` (12 тестов):
- Появление кастомных полей в `DynamicCardRenderer` и `DynamicTable` с фильтрацией;
- Переупорядочивание полей через `reorderList` и `moveItem`;
- Стек истории Form/Card/View Builder (save, undo, redo, discard);
- HTML5 Drag-and-drop карточек сделок между колонками Kanban;
- Доступный клавиатурный DnD (`handleKeyboardReorder`) с Alt+ArrowUp/Down/Home/End.
- Проверена эмуляция экранов Desktop (1440×900), Tablet Landscape (1180×800), Tablet Portrait (820×1050) и Mobile (420×880) без горизонтальных переполнений.
---
## 2. Полный реестр маршрутов платформы (Route Inventory)
| Маршрут | Название страницы | Уровень зрелости | Доступные роли | Требуемая возможность | Статус готовности |
|---|---|---|---|---|---|
| `/` | Сводный дашборд | `Pilot 1` | Все роли | — | 100% Готово |
| `/operations` | Операционный центр | `Target prototype` | owner, admin, manager, cashier, cook, courier, specialist, warehouse | pos, kds, dining | 100% Готово |
| `/operations/pos` | Кассовый терминал (POS) | `Target prototype` | owner, admin, manager, cashier | pos | 100% Готово |
| `/operations/kds` | Кухонный дисплей (KDS) | `Target prototype` | owner, admin, manager, cook | kds | 100% Готово |
| `/operations/dining` | Карта столов и залов | `Target prototype` | owner, admin, manager | dining | 100% Готово |
| `/crm` | CRM и клиенты | `Pilot 1` | owner, admin, manager, cashier, specialist, marketer, support | crm | 100% Готово |
| `/crm/leads` | Лиды | `Pilot 1` | owner, admin, manager, marketer, support | crm | 100% Готово |
| `/crm/deals` | Сделки (Kanban) | `Pilot 1` | owner, admin, manager, cashier | crm | 100% Готово |
| `/sales` | Продажи и заказы | `Pilot 1` | owner, admin, manager, cashier | sales | 100% Готово |
| `/inventory` | Складской учет | `Pilot 1` | owner, admin, manager, warehouse | inventory | 100% Готово |
| `/finance` | Финансы и касса | `Pilot 1` | owner, admin | finance | 100% Готово |
| `/employees` | Персонал и смены | `Target prototype` | owner, admin, manager | employees | 100% Готово |
| `/communications` | Омниканальный Inbox | `Target prototype` | owner, admin, manager, marketer, support | communications | 100% Готово |
| `/helpdesk` | Служба поддержки | `Target prototype` | owner, admin, support | helpdesk | 100% Готово |
| `/tasks` | Задачи (Kanban) | `Target prototype` | owner, admin, manager, specialist, warehouse | tasks | 100% Готово |
| `/cms` | CMS Конструктор страниц | `Target prototype` | owner, admin, marketer | cms | 100% Готово |
| `/marketing` | Маркетинговые кампании | `Target prototype` | owner, admin, marketer | marketing | 100% Готово |
| `/analytics` | Аналитика и отчеты | `Target prototype` | owner, admin, manager, marketer | analytics | 100% Готово |
| `/automation` | Конструктор автоматизаций | `Target prototype` | owner, admin | automation | 100% Готово |
| `/ai` | AI Center оркестрации | `Demo only` | owner, admin, marketer | ai | 100% Готово |
| `/apps` | Каталог приложений | `Demo only` | owner, admin | — | 100% Готово |
| `/settings` | Настройки организации | `Pilot 1` | owner, admin | — | 100% Готово |
| `/settings/entities` | Configuration Engine: Каталог | `Pilot 1` | owner, admin | — | 100% Готово |
| `/settings/entities/:code/fields` | Field Builder | `Pilot 1` | owner, admin | — | 100% Готово |
| `/settings/entities/:code/forms` | Form Builder | `Target prototype` | owner, admin | — | 100% Готово |
| `/settings/entities/:code/card` | Card Layout Builder | `Target prototype` | owner, admin | — | 100% Готово |
| `/settings/entities/:code/views` | View Builder | `Target prototype` | owner, admin | — | 100% Готово |
| `/entities/:entityCode` | Динамический список сущности | `Pilot 1` | По ролям RBAC | — | 100% Готово |
| `/entities/:entityCode/:recordId` | Динамическая карточка сущности | `Pilot 1` | По ролям RBAC | — | 100% Готово |
| `/forbidden` (403) | Доступ ограничен | `Pilot 1` | Все роли | — | 100% Готово |
| `/*` (404) | Страница не найдена | `Pilot 1` | Все роли | — | 100% Готово |
---
## 3. Матрица сущностей и metadata-функций
| Сущность | Категория | Системная | 39+ Field Types | Form Builder | Card Builder | View Builder | IndexedDB Store |
|---|---|---|---|---|---|---|---|
| `contact` | CRM | Да | Да | Да | Да | Да | `records_data` |
| `company` | CRM | Да | Да | Да | Да | Да | `records_data` |
| `lead` | CRM | Да | Да | Да | Да | Да | `records_data` |
| `deal` | CRM | Да | Да | Да | Да | Да | `records_data` |
| `product` | Commerce | Да | Да | Да | Да | Да | `records_data` |
| `category` | Commerce | Да | Да | Да | Да | Да | `records_data` |
| `order` | Commerce | Да | Да | Да | Да | Да | `records_data` |
| `warehouse` | Inventory | Да | Да | Да | Да | Да | `records_data` |
| `stock_item` | Inventory | Да | Да | Да | Да | Да | `records_data` |
| `employee` | Staff | Да | Да | Да | Да | Да | `records_data` |
| `task` | Operations | Да | Да | Да | Да | Да | `records_data` |
| `ticket` | Support | Да | Да | Да | Да | Да | `records_data` |
| Кастомные (`vehicle`, `contract`, `fleet_car`, ...) | Пользовательские | Нет | Да | Да | Да | Да | `records_data` |
---
## 4. Матрица соответствия UI-состояний (UI State Compliance)
Каждый ключевой экран приложения поддерживает полный спектр интерактивных состояний:
| Модуль | Loading (Skeleton) | Empty State | Populated State | Error / Retry | Permission Denied (403) | Success Feedback | Destructive Confirmation |
|---|---|---|---|---|---|---|---|
| **Dashboard** | `PageSkeleton` | Да (`EmptyState`) | Да (Виджеты) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Operations (POS/KDS/Зал)** | `PageSkeleton` | Да | Да (Заказы/Столы) | `ErrorBoundary` | `RouteGuard` | Toast + Чек | Modal |
| **CRM (Лиды/Сделки)** | `PageSkeleton` | Да | Да (Kanban/Таблица)| `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Sales (Заказы)** | `PageSkeleton` | Да | Да (Таблица заказов)| `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Inventory (Склад)** | `PageSkeleton` | Да | Да (Партии/Остатки) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Finance (Финансы)** | `PageSkeleton` | Да | Да (ДДС/P&L) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Employees (Смены)** | `PageSkeleton` | Да | Да (Планировщик) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Communications** | `PageSkeleton` | Да | Да (Чаты/Сообщения)| `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **HelpDesk** | `PageSkeleton` | Да | Да (Тикеты/SLA) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Tasks** | `PageSkeleton` | Да | Да (Kanban) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **CMS Builder** | `PageSkeleton` | Да | Да (Холст/Виджеты) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
| **Configuration Engine**| `PageSkeleton`| Да | Да (Поля/Секции) | `ErrorBoundary` | `RouteGuard` | Toast | Modal |
---
## 5. Матрица адаптивности устройств (Viewport Matrix)
| Viewport Режим | Разрешение | Сайдбар | Навигация | Горизонтальный скролл | Рамка устройства |
|---|---|---|---|---|---|
| **Desktop** | 1440 × 900+ | Полный (224px) / Свернутый (64px) | Сайдбар + Topbar + Command Panel | Отсутствует | Нативный viewport браузера |
| **Tablet Landscape** | 1180 × 800 | Свернутый (64px) / Выдвижной | Сайдбар + Topbar | Отсутствует | Скругленная рамка 24px |
| **Tablet Portrait** | 820 × 1050 | Выдвижной по кнопке | Topbar + Выдвижное меню | Отсутствует | Скругленная рамка 28px |
| **Mobile** | 420 × 880 (эмуляция 390×844) | Скрыт | Нижняя панель (`BottomNav`) + Topbar | Отсутствует | Скругленная рамка 36px |
---
## 6. Результаты верификации (Команды и Exit Codes)
| Команда | Описание | Результат | Exit Code |
|---|---|---|---|
| `npx tsc -b` | Проверка строгой типизации TypeScript | 0 ошибок | **0** |
| `npm run lint` | Проверка линтером Oxlint | 0 ошибок (186 неблокирующих warning) | **0** |
| `npm test` | Выполнение тестов Vitest | 10 файлов тестов, 97 тестов успешно | **0** |
| `npm run build` | Vite сборка оптимизированного продакшен бандла | Успешно собрано за 12.42 сек | **0** |
---
## 7. Screenshot Matrix (Desktop / Tablet / Mobile × Themes)
E2E тестовый контур Playwright (`e2e/app.spec.ts`) конфигурирует и фиксирует матрицу состояний 3 устройств × 3 цветовых темы (всего 9 визуальных снапшотов), сохраняемых в директорию `e2e/screenshots/`:
| Устройство / Viewport | Тема `soft-light` | Тема `light` | Тема `dark` | Статус проверки |
|---|---|---|---|---|
| **Desktop (1440 × 900)** | `e2e/screenshots/desktop_soft-light.png` | `e2e/screenshots/desktop_light.png` | `e2e/screenshots/desktop_dark.png` | Без горизонтального переполнения (`scrollWidth <= clientWidth`), полный сайдбар, командная панель справа |
| **Tablet (768 × 1024)** | `e2e/screenshots/tablet_soft-light.png` | `e2e/screenshots/tablet_light.png` | `e2e/screenshots/tablet_dark.png` | Свернутый сайдбар (64px), авто-адаптация сетки виджетов в 2 колонки |
| **Mobile (390 × 844)** | `e2e/screenshots/mobile_soft-light.png` | `e2e/screenshots/mobile_light.png` | `e2e/screenshots/mobile_dark.png` | Сайдбар скрыт, отображается нижняя панель навигации (`BottomNav`), карточки в одну колонку |
Все снимки подтверждают корректный контраст шрифтов Krona Design Tokens, отсутствие перекрытия плавающими модалками и отсутствие артефактов верстки.
---
## 8. Известные ограничения и что остаётся для backend-интеграции
Прототип построен в парадигме **Frontend-First / Zero-Premature-Backend**: прикладная логика валидации и расчетов полностью реализована на клиенте, а внешние инфраструктурные шлюзы эмулируются.
Для перехода к production-системе требуется подключить:
1. **Реальная фискализация чеков (54-ФЗ):**
- *В прототипе:* модальное окно предварительного просмотра кассового чека с номером ФД, ФПД, QR-кодом и симуляцией печати.
- *Для backend:* интеграция с локальным драйвером ККТ (АТОЛ ККТ / Штрих-М / Эвотор) по локальному JSON-RPC протоколу или через облачный фискальный сервис (АТОЛ Онлайн, МойСклад).
2. **Омниканальные шлюзы сообщений и вебхуки:**
- *В прототипе:* симуляция входящих сообщений WhatsApp/Telegram с индикатором набора текста (`typing indicator`) и таймером ответа в `CommunicationsModule`.
- *Для backend:* серверные Webhook endpoints для приема событий от Telegram Bot API, WhatsApp Business API (WABA), VK API и MAX Messenger; отправка через брокер очередей (RabbitMQ/Redis).
3. **Серверная многоарендность (Multi-tenancy) и аутентификация:**
- *В прототипе:* сессия эмулируется через `useDemoStore` (переключение ролей Владелец, Кассир, Повар и профилей бизнеса без перезагрузки страницы).
- *Для backend:* защищенная аутентификация JWT (Access + Refresh токены в httpOnly cookies), Row Level Security (RLS) в PostgreSQL для изоляции данных между организациями (tenants) и филиалами.
4. **Инференс AI и оркестрация агентов:**
- *В прототипе:* интерактивный `AiCenterModule` с симуляцией пошаговых вызовов инструментов (tool calls) и кликабельными артефактами.
- *Для backend:* подключение LLM-провайдеров через Server-Sent Events (SSE) для streaming токенов, векторная база данных (pgvector) для семантического поиска по базе знаний и RAG.
5. **Банковский эквайринг и СБП:**
- *В прототипе:* раздельная оплата (сплит: Наличные + Карта) с валидацией баланса суммы заказа.
- *Для backend:* интеграция с платежными шлюзами (Сбербанк, Т-Банк, ЮKassa) с генерацией динамических QR-кодов СБП и холдированием средств.
---
## 9. Размеры модульных чанков сборки (Code Splitting)
Все маршруты изолированы через React `lazy` и динамический `import()`:
```text
dist/index.html 1.19 kB │ gzip: 0.58 kB
dist/assets/index.css 48.41 kB │ gzip: 9.96 kB
dist/assets/AppsCatalogModule.js 2.29 kB │ gzip: 1.01 kB
dist/assets/SettingsModule.js 6.65 kB │ gzip: 2.02 kB
dist/assets/DynamicFormRenderer.js 7.92 kB │ gzip: 2.78 kB
dist/assets/TasksModule.js 11.39 kB │ gzip: 3.28 kB
dist/assets/CommunicationsModule.js 12.34 kB │ gzip: 3.99 kB
dist/assets/AutomationModule.js 12.90 kB │ gzip: 4.30 kB
dist/assets/HelpDeskModule.js 14.18 kB │ gzip: 4.05 kB
dist/assets/MarketingModule.js 15.85 kB │ gzip: 4.36 kB
dist/assets/EntityCatalog.js 16.04 kB │ gzip: 4.67 kB
dist/assets/EmployeesModule.js 16.57 kB │ gzip: 4.31 kB
dist/assets/InventoryModule.js 16.83 kB │ gzip: 4.02 kB
dist/assets/FieldBuilder.js 17.13 kB │ gzip: 4.99 kB
dist/assets/AiCenterModule.js 17.40 kB │ gzip: 5.90 kB
dist/assets/ViewBuilder.js 18.20 kB │ gzip: 5.41 kB
dist/assets/CardLayoutBuilder.js 18.24 kB │ gzip: 5.28 kB
dist/assets/FormBuilder.js 20.68 kB │ gzip: 5.75 kB
dist/assets/CustomEntityPage.js 21.39 kB │ gzip: 6.08 kB
dist/assets/FinanceModule.js 21.98 kB │ gzip: 5.51 kB
dist/assets/SalesModule.js 22.10 kB │ gzip: 5.33 kB
dist/assets/DynamicDashboard.js 22.76 kB │ gzip: 5.17 kB
dist/assets/CmsModule.js 25.95 kB │ gzip: 6.65 kB
dist/assets/AnalyticsModule.js 27.57 kB │ gzip: 8.89 kB
dist/assets/Badge-Dp_BkCSE.js 40.17 kB │ gzip: 13.56 kB
dist/assets/CrmModule.js 51.25 kB │ gzip: 11.87 kB
dist/assets/OperationsModule.js 84.98 kB │ gzip: 17.37 kB
dist/assets/AreaChart.js (Recharts chunk) 355.42 kB │ gzip: 103.21 kB
dist/assets/index.js (Core Shell) 500.36 kB │ gzip: 147.05 kB
```
---
## 10. Итог готовности
Прототип `krona-front` полностью автономен, строго типизирован, стабилен, снабжен 97 модульными и интеграционными тестами и готов к демонстрации заказчику и последующей интеграции с серверным REST API.