krona-front/FEATURE-COVERAGE.md

192 lines
28 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`)
**Ветка:** `codex/frontend-remediation`
**Дата верификации:** 11 сентября 2026 г.
**Статус готовности:** Этапы A, B, C, D, E, F завершены и верифицированы на 100%
**Качество кода:**
- **Oxlint:** 0 warnings, 0 errors (`oxlint --deny-warnings`)
- **TypeScript:** 0 ошибок компиляции (`tsc -b`)
- **Unit/Integration Tests (Vitest):** 407 тестов успешно (13 тестовых файлов, 100% pass)
- **E2E Scenarios (Playwright):** 30 тестов успешно (10 сценариев × 3 viewports: desktop, tablet, mobile)
- **Production Bundle:** Базовый JS-бандл ядра: **145.95 kB gzip** (бюджет < 250 kB gzip)
- **Verification Pipeline:** `npm run check` завершается с Exit Code **0**
---
## 1. Отчет по этапам архитектурной реализации (A – F)
### Этап A — Стабилизация и базовая архитектура
- Настроен стабильный тестовый контур: Vitest + `@testing-library/react` + `@testing-library/jest-dom` + `fake-indexeddb` + `ulidx`.
- Настроен Playwright контур для сквозных сценариев (`playwright.config.ts`, 10 сценариев на 3 видовых экранах).
- Реализована строгая модульная архитектура: `app/`, `core/`, `entities/`, `features/`, `services/`, `shared/ui/`, `stores/`.
- Внедрен `RouteGuard` с ролевой моделью RBAC (10 ролей), матрицей доступных возможностей (`capabilities`) и возвратом `403 Forbidden`.
- Реализован `ErrorBoundary` на уровне приложения и отдельных маршрутов с возможностью ручного повтора (`Retry`).
- Унифицированы дизайн-токены Krona: `krona-green` (#2F684C), `krona-gold` (#B78335), `krona-workspace`, `krona-surface`, `krona-border`.
### Этап B — Хранилище данных и сервисные контракты
- Разработано локальное постоянное хранилище на базе версионированной **IndexedDB** (`krona_business_os_db`, v2):
- 7 изолированных хранилищ: `entities_meta`, `fields_meta`, `layouts_meta`, `views_meta`, `records_data`, `audit_log`, `settings`.
- Типизированные сервисные интерфейсы: `ICrmService`, `ICommerceService`, `IInventoryService`, `IFinanceService`, `IMetadataService`.
- Внедрен ULID-генератор идентификаторов (`ulidx`).
- Реализованы сценарии полного экспорта, импорта и сброса снимков базы (`exportDatabaseSnapshot`, `importDatabaseSnapshot`, `resetDatabase`).
- Демо-часы (`DemoClock`) и журнал аудита (`audit_log`).
### Этап C — Configuration Engine (Конструктор платформы)
- **Entity Catalog (`/settings/entities`):** Реестр системных и пользовательских сущностей; создание кастомных сущностей с автоматической регистрацией в боковом меню и Command Palette (Ctrl+K).
- **Field Builder (`/settings/entities/:code/fields`):** CRUD полей с валидацией инвариантов и поддержкой всех 39+ типов данных (text, money, select, formula, entity_relation, status, rating, json и др.).
- **Form Builder (`/settings/entities/:code/forms`):** Визуальный редактор секций и колонок формы с историей изменений (Undo/Redo на 50 шагов через `useFormBuilderHistory`).
- **Card Layout Builder (`/settings/entities/:code/card`):** Конструктор карточки записи с блоками (заголовок, поля, вкладки, связанные списки, таймлайн).
- **View / List Builder (`/settings/entities/:code/views`):** Управление колонками через `useViewBuilderColumns`, настройка видимости, порядка, сортировки и быстрых фильтров.
- **Dynamic Renderers:** `DynamicFormRenderer`, `DynamicCardRenderer`, моментально отображающие новые поля в карточках и формах ввода.
### Этап D — Мультиарендность (Multi-Tenancy) и изоляция данных
- Разработан контекст тенанта `TenantProvider` и хук `useTenantContext()`.
- Изоляция данных в IndexedDB по префиксу арендатора (`tenantId`) с контролем утечек между организациями.
- Добавлен полный набор негативных тестов на разграничение доступа между тенантами (`src/services/__tests__/tenantIsolation.test.ts`).
### Этап E — Консолидация UI-Kit и декомпозиция крупных модулей
- Каталог `src/shared/components/` полностью ликвидирован; все компоненты объединены в единую библиотеку `src/shared/ui/index.ts`.
- `CrmModule.tsx` декомпозирован с **1,228 строк** до лаконичного координатора объемом **298 строк** (< 300 строк).
- Выделены независимые компоненты: `CrmKanbanView`, `CrmTableView`, `Customer360Drawer`, `LeadConversionModal`, `DealWonOrderModal`, `CrmEntityModals`, `constants.ts`.
- Выделены кастомные хуки `useFormBuilderHistory.ts` и `useViewBuilderColumns.ts`.
### Этап F — Финализация документации и верификация
- Актуализированы метрики тестов и бандла в `README.md` и `FEATURE-COVERAGE.md`.
- Зафиксирована классификация готовности всех 25+ маршрутов платформы.
- Описаны 5 осознанно сохраненных платформенных ограничений до подключения бэкенда.
- Подтверждено прохождение всех этапов контура `npm run check`.
---
## 2. Градация статусов готовности (Readiness Classification)
Для исключения ложных заявлений о «100% готовности» функциональность платформы строго разделена на 4 категории:
1. **`Ready / Interactive Scenario`** — законченный прикладной бизнес-сценарий с сохранением состояния в IndexedDB, сквозным CRUD, валидацией данных и автоматизированным E2E тестом.
2. **`Target Prototype`** — высокоточный интерактивный прототип с полноценной клиентской логикой, реактивным интерфейсом и симуляцией бизнес-процесса, готовый для демонстрации и юзабилити-тестирования.
3. **`Demo Only`** — визуальная интерактивная симуляция со сценариями по умолчанию и явной маркировкой для пользователя (AI Center, каталог расширений).
4. **`Awaiting Backend`** — специализированные аппаратные и серверные функции, требующие физических драйверов или внешних API-шлюзов (онлайн-касса 54-ФЗ, вебхуки мессенджеров, серверный RLS, внешний LLM-инференс).
---
## 3. Детальный реестр маршрутов платформы (25+ Routes Inventory)
| Маршрут | Название страницы | Уровень зрелости | Роли RBAC | Возможность | CRUD-операции | Интерактивные действия | Уровень постоянства | Статус готовности |
|---|---|---|---|---|---|---|---|---|
| `/` | Сводный дашборд | `Pilot 1` | Все роли | — | Read | Переключение профилей, фильтрация виджетов, переход к модулям | IndexedDB + DemoStore | **Ready / Interactive Scenario** |
| `/crm` | CRM: Контакты & Компании | `Pilot 1` | owner, admin, manager, cashier, specialist, marketer, support | crm | Create, Read, Update, Delete | Поиск, пагинация, создание контакта/компании, Customer 360 | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/crm/leads` | CRM: Лиды | `Pilot 1` | owner, admin, manager, marketer, support | crm | Create, Read, Update, Delete | Создание лида, смена статуса, модалка конвертации лида в сделку и контакт | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/crm/deals` | CRM: Воронка сделок (Kanban) | `Pilot 1` | owner, admin, manager, cashier | crm | Create, Read, Update, Delete | Drag-and-drop карточек между 7 этапами, кнопки перехода, Deal Won Flow | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/crm/import` | Мастер импорта CSV | `Pilot 1` | owner, admin, manager | crm | Create (Batch) | Загрузка файла, маппинг колонок, предпросмотр, пакетный импорт в базу | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/sales` | Продажи и заказы | `Pilot 1` | owner, admin, manager, cashier | sales | Create, Read, Update | Смена статусов (Подтвержден → Оплачен → Отгружен), отмена, возврат | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/inventory` | Складской учет | `Pilot 1` | owner, admin, manager, warehouse | inventory | Create, Read, Update | Оприходование, списание, резервирование остатков, контроль партий | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/finance` | Финансы и касса | `Pilot 1` | owner, admin | finance | Create, Read | Фиксация платежей по заказам, ДДС, расчет P&L, статьи расходов | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/operations` | Операционный хаб | `Target prototype` | owner, admin, manager, cashier, cook, courier, specialist, warehouse | pos, kds, dining | Read | Быстрый переход к кассе, кухне и карте залов | In-Memory / Session | **Target Prototype** |
| `/operations/pos` | Кассовый терминал (POS) | `Target prototype` | owner, admin, manager, cashier | pos | Create, Read | Корзина заказа, модификаторы блюд, сплит-оплата (Нал/Безнал), печать чека | IndexedDB + Session | **Target Prototype** (Чек 54-ФЗ: *Awaiting Backend*) |
| `/operations/kds` | Кухонный дисплей (KDS) | `Target prototype` | owner, admin, manager, cook | kds | Read, Update | Таймер приготовления, смена статуса блюд (Готовится → Готово → Выдано), звуковой алерт | Реактивный Store | **Target Prototype** |
| `/operations/dining` | Карта столов и залов | `Target prototype` | owner, admin, manager | dining | Read, Update | Переключение залов (Основной, Терраса, VIP), посадка гостей, предчек, бронь | Реактивный Store | **Target Prototype** |
| `/employees` | Персонал и планировщик | `Target prototype` | owner, admin, manager | employees | Create, Read, Update | Назначение смен, валидация конфликтов (>12 ч по ТК РФ), табель | IndexedDB (`records_data`) | **Target Prototype** |
| `/communications` | Омниканальный Inbox | `Target prototype` | owner, admin, manager, marketer, support | communications | Create, Read | Выбор каналов (TG, WA, MAX), набор текста, симуляция входящего ответа | In-Memory / Local | **Target Prototype** (Вебхуки: *Awaiting Backend*) |
| `/helpdesk` | Служба поддержки | `Target prototype` | owner, admin, support | helpdesk | Create, Read, Update | Очередь тикетов, контроль SLA-таймеров, назначение исполнителя, публичные и внутренние заметки | IndexedDB (`records_data`) | **Target Prototype** |
| `/tasks` | Задачи (Kanban) | `Target prototype` | owner, admin, manager, specialist, warehouse | tasks | Create, Read, Update, Delete | Drag-and-drop карточек, чек-листы подзадач, смена дедлайнов, комментарии | IndexedDB (`records_data`) | **Target Prototype** |
| `/cms` | CMS Page Builder | `Target prototype` | owner, admin, marketer | cms | Create, Read, Update | Добавление блоков (Hero, Features, Pricing, Reviews, FAQ), адаптивный предпросмотр, экспорт JSON | IndexedDB + Local | **Target Prototype** |
| `/marketing` | Маркетинговые кампании | `Target prototype` | owner, admin, marketer | marketing | Create, Read, Update | Конструктор сегментов аудитории, симуляция рассылки с прогресс-баром и конверсией | In-Memory / Store | **Target Prototype** |
| `/analytics` | Аналитика и отчеты | `Target prototype` | owner, admin, manager, marketer | analytics | Read | Переключение периодов (День/Неделя/Месяц/Год), KPI графики Recharts, ABC-анализ | Динамический расчет | **Target Prototype** |
| `/automation` | Конструктор автоматизаций | `Target prototype` | owner, admin | automation | Create, Read, Update | Визуальная цепочка триггеров и действий, тестовый прогон с выводом лога | In-Memory / Store | **Target Prototype** |
| `/ai` | AI Center оркестрации | `Demo only` | owner, admin, marketer | ai | Read | Выбор промптов, симуляция multi-tool execution, отображение артефактов | Demo Simulation | **Demo Only** (Инференс: *Awaiting Backend*) |
| `/apps` | Каталог приложений | `Demo only` | owner, admin | — | Read | Карточки внешних интеграций (1С, Telegram, МойСклад), тумблеры подключения | Demo State | **Demo Only** |
| `/settings` | Настройки организации | `Pilot 1` | owner, admin | — | Read, Update | Смена названия, реквизитов, экспорт JSON-снапшота, импорт и сброс базы | IndexedDB (`settings`) | **Ready / Interactive Scenario** |
| `/settings/entities` | Configuration Engine: Каталог | `Pilot 1` | owner, admin | — | Create, Read, Update, Delete | Реестр сущностей, создание кастомной сущности с регистрацией в меню | IndexedDB (`entities_meta`) | **Ready / Interactive Scenario** |
| `/settings/entities/:code/fields` | Field Builder | `Pilot 1` | owner, admin | — | Create, Read, Update, Delete | Добавление типизированных полей (39+ типов), настройка формул и списков | IndexedDB (`fields_meta`) | **Ready / Interactive Scenario** |
| `/settings/entities/:code/forms` | Form Builder | `Target prototype` | owner, admin | — | Read, Update | Конструктор секций и полей, Undo/Redo история (50 шагов), адаптивный предпросмотр | IndexedDB (`layouts_meta`) | **Target Prototype** |
| `/settings/entities/:code/card` | Card Layout Builder | `Target prototype` | owner, admin | — | Read, Update | Конструктор блоков карточки записи (Заголовок, Табы, Таймлайн, Связи) | IndexedDB (`layouts_meta`) | **Target Prototype** |
| `/settings/entities/:code/views` | View Builder | `Target prototype` | owner, admin | — | Read, Update | Порядок колонок, видимость, сортировка, фильтры через `useViewBuilderColumns` | IndexedDB (`views_meta`) | **Target Prototype** |
| `/entities/:entityCode` | Динамический реестр сущности | `Pilot 1` | По ролям RBAC | — | Create, Read, Delete | Отображение кастомных записей в таблице с учетом настроек View Builder | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/entities/:entityCode/:recordId`| Динамическая карточка записи | `Pilot 1` | По ролям RBAC | — | Read, Update, Delete | Просмотр и редактирование записи через `DynamicCardRenderer` и `DynamicFormRenderer` | IndexedDB (`records_data`) | **Ready / Interactive Scenario** |
| `/forbidden` (403) | Доступ ограничен | `Pilot 1` | Все роли | — | Read | Информационный экран с возвратом в разрешенный раздел при попытке запрещенного перехода | Stateless Guard | **Ready / Interactive Scenario** |
| `/*` (404) | Страница не найдена | `Pilot 1` | Все роли | — | Read | Экран обработки неизвестных маршрутов с кнопкой перехода на главную | Stateless Route | **Ready / Interactive Scenario** |
---
## 4. Осознанно сохраненные платформенные ограничения (Consciously Retained Limitations)
В соответствии с парадигмой **Frontend-First / Zero-Premature-Backend**, прототип содержит 5 инфраструктурных ограничений, которые осознанно делегированы серверному слою и аппаратному обеспечению:
### 1. Транспортный адаптер REST API (`REST Transport Adapter`)
- **В прототипе:** Вся прикладная бизнес-логика взаимодействует со слоем типизированных сервисов (`ICrmService`, `ICommerceService`, `IInventoryService`, `IFinanceService`, `IMetadataService`), хранящих данные в версионированной IndexedDB с симуляцией задержек сети (latency) и генерацией ULID.
- **Для бэкенда:** Сервисные контракты и хуки (`useCrm`, `useOrders`, `useMetadata`) спроектированы под бесшовную замену мок-репозиториев на HTTP/REST клиент (Axios/Fetch) без изменений в интерфейсных компонентах и бизнес-логике страниц.
### 2. Фискализация чеков по 54-ФЗ (`54-FZ Fiscal Printer`)
- **В прототипе:** Кассовый модуль POS формирует предварительный просмотр кассового чека с расчетом налогов (НДС 20%), обязательными фискальными реквизитами (ФД, ФПД, смена, кассир), QR-кодом и симуляцией отправки на печать.
- **Для бэкенда:** Требуется подключение физического фискального регистратора через локальный протокол JSON-RPC (АТОЛ ККТ / Штрих-М / Эвотор) или интеграция с облачной кассой (АТОЛ Онлайн, OrangeData).
### 3. Вебхуки и внешние шлюзы сообщений (`Messaging Webhooks`)
- **В прототипе:** Модуль омниканальных коммуникаций (`CommunicationsModule`) эмулирует получение входящих сообщений (Telegram, WhatsApp, MAX) с таймерами ответа и индикатором набора текста (`typing indicator`).
- **Для бэкенда:** Требуются серверные обработчики входящих Webhook-событий от мессенджеров, брокер очередей сообщений (RabbitMQ / Redis) и двусторонний транспорт WebSocket/SSE для доставки сообщений оператору в реальном времени.
### 4. Серверная изоляция данных и RLS (`Server-Side Multi-Tenancy & RLS`)
- **В прототипе:** Разграничение прав доступа обеспечивается на клиенте через `TenantProvider`, контекст тенанта и клиентский `RouteGuard` по ролевой матрице RBAC (10 ролей).
- **Для бэкенда:** Необходима аутентификация по защищенным JWT (Access/Refresh токены в защищенных cookies `httpOnly`), а также применение политик Row Level Security (RLS) в PostgreSQL для физической изоляции записей между арендаторами на уровне СУБД.
### 5. Полноценный инференс нейросетей (`Real AI LLM Inference & Vector Search`)
- **В прототипе:** Модуль `AiCenterModule` демонстрирует работу AI-оркестратора: симулирует пошаговые вызовы системных инструментов (multi-tool execution), рассуждения агента и генерирует кликабельные интерактивные артефакты (отчеты, графики, черновики заказов).
- **Для бэкенда:** Требуется подключение внешних LLM API (OpenAI, Anthropic или self-hosted vLLM) с передачей токенов через Server-Sent Events (SSE) и векторная база данных (pgvector) для семантического поиска по базе знаний (RAG).
---
## 5. Матрица сущностей и 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` |
---
## 6. Матрица соответствия 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 |
---
## 7. Результаты верификации (Команды и Exit Codes)
| Команда | Описание | Результат | Exit Code |
|---|---|---|---|
| `npx oxlint --deny-warnings` | Строгая статическая проверка линтером Oxlint | 0 warnings, 0 errors на 196 файлах проекта | **0** |
| `npx tsc -b` | Проверка строгой типизации TypeScript | 0 ошибок компиляции | **0** |
| `npm test` | Выполнение тестов Vitest (`vitest run`) | 13 файлов тестов, **407 тестов успешно** (100% pass) | **0** |
| `npm run build` | Vite сборка оптимизированного production bundle | Собрано за ~2.9 сек; core bundle: **145.95 kB gzip** (< 250 kB gzip) | **0** |
| `npm run test:e2e` | Playwright E2E сценарии в Chromium | **30 тестов успешно** (10 сценариев × 3 viewports: desktop, tablet, mobile) | **0** |
| `npm run check` | Комплексный verification pipeline | Полный прогон всех 5 этапов без единой ошибки | **0** |
---
## 8. Итог готовности
Прототип `krona-front` полностью автономен, архитектурно чист, строго типизирован, снабжен 407 модульными и интеграционными тестами и 30 браузерными сквозными E2E тестами. Проект готов к демонстрации руководству и инвесторам, а также к началу интеграции с бэкенд-сервисами.