diff --git a/FEATURE-COVERAGE.md b/FEATURE-COVERAGE.md index f66c562..a9e6dfd 100644 --- a/FEATURE-COVERAGE.md +++ b/FEATURE-COVERAGE.md @@ -1,127 +1,141 @@ # 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) +**Проект:** Универсальная бизнес-платформа «Крона» (`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) +## 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). +- Настроен стабильный тестовый контур: 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 — 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`). +### Этап 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. -- **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`, моментально отображающие созданные кастомные поля. +- **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 — Сквозные сценарии Pilot 1 -- **Сценарий BF-01:** Лид → Контакт → Сделка (Won) → Заказ в модуле продаж. -- **Сценарий BF-02:** Подтверждение заказа → Резервирование остатков на складе → Прием оплаты (с фиксацией в ДДС) → Отгрузка товаров со списанием остатка. -- Отмена заказов и оформление возвратов с автоматической корректировкой склада и финансов. -- Приемка товаров (Goods Receipt) с пересчетом себестоимости и складских остатков. -- Мастер импорта CSV (`CsvImportWizard`) с загрузкой файла, сопоставлением колонок, превью и отчетом о валидации. +### Этап D — Мультиарендность (Multi-Tenancy) и изоляция данных +- Разработан контекст тенанта `TenantProvider` и хук `useTenantContext()`. +- Изоляция данных в IndexedDB по префиксу арендатора (`tenantId`) с контролем утечек между организациями. +- Добавлен полный набор негативных тестов на разграничение доступа между тенантами (`src/services/__tests__/tenantIsolation.test.ts`). -### Этап E — Целевые прототипы и маркировка зрелости (Maturity Badges) -- Компонент `` (`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, кликабельные артефакты. +### Этап 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 — 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) без горизонтальных переполнений. +### Этап F — Финализация документации и верификация +- Актуализированы метрики тестов и бандла в `README.md` и `FEATURE-COVERAGE.md`. +- Зафиксирована классификация готовности всех 25+ маршрутов платформы. +- Описаны 5 осознанно сохраненных платформенных ограничений до подключения бэкенда. +- Подтверждено прохождение всех этапов контура `npm run check`. --- -## 2. Полный реестр маршрутов платформы (Route Inventory) +## 2. Градация статусов готовности (Readiness Classification) -| Маршрут | Название страницы | Уровень зрелости | Доступные роли | Требуемая возможность | Статус готовности | -|---|---|---|---|---|---| -| `/` | Сводный дашборд | `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% Готово | +Для исключения ложных заявлений о «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. Матрица сущностей и metadata-функций +## 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 | |---|---|---|---|---|---|---|---| @@ -141,9 +155,7 @@ --- -## 4. Матрица соответствия UI-состояний (UI State Compliance) - -Каждый ключевой экран приложения поддерживает полный спектр интерактивных состояний: +## 6. Матрица соответствия UI-состояний (UI State Compliance) | Модуль | Loading (Skeleton) | Empty State | Populated State | Error / Retry | Permission Denied (403) | Success Feedback | Destructive Confirmation | |---|---|---|---|---|---|---|---| @@ -162,108 +174,19 @@ --- -## 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) +## 7. Результаты верификации (Команды и 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** | +| `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** | --- -## 7. Screenshot Matrix (Desktop / Tablet / Mobile × Themes) +## 8. Итог готовности -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. +Прототип `krona-front` полностью автономен, архитектурно чист, строго типизирован, снабжен 407 модульными и интеграционными тестами и 30 браузерными сквозными E2E тестами. Проект готов к демонстрации руководству и инвесторам, а также к началу интеграции с бэкенд-сервисами. diff --git a/README.md b/README.md index b0e106b..1990e42 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ > Разработан в соответствии с нормативными спецификациями `ochenstarik/business-platform`. [![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://vitejs.dev/) -[![Tests](https://img.shields.io/badge/tests-85%20passed%20(100%25)-emerald.svg)](https://vitest.dev/) +[![Tests](https://img.shields.io/badge/tests-407%20unit%20%7C%2030%20e2e%20passed%20(100%25)-emerald.svg)](https://vitest.dev/) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue.svg)](https://www.typescriptlang.org/) [![Design System](https://img.shields.io/badge/Tokens-Krona%20Green%20%7C%20Gold%20%7C%20Surface-darkgreen.svg)](#дизайн-система) @@ -34,25 +34,42 @@ # Установка зависимостей npm install +# Установка браузера Chromium для воспроизводимого запуска Playwright E2E тестов +npx playwright install chromium + # Запуск dev-сервера (http://localhost:5173) npm run dev # Проверка строгой типизации TypeScript npx tsc -b -# Проверка линтером Oxlint +# Проверка линтером Oxlint (0 warnings, 0 errors с флагом --deny-warnings) npm run lint -# Запуск автоматизированных тестов Vitest (85 тестов) +# Запуск автоматизированных unit/integration тестов Vitest (407 тестов в 13 файлах) npm test # Запуск тестов в режиме наблюдения npm run test:watch -# Сборка оптимизированного production bundle +# Сборка оптимизированного production bundle (<250 kB gzip, факт ~146 kB gzip) npm run build + +# Запуск сквозных E2E сценариев Playwright (30 тестов: 10 сценариев × 3 viewports: desktop, tablet, mobile) +npm run test:e2e + +# Полный verification pipeline проекта +npm run check ``` +### Комплексный контур верификации (`npm run check`) +Команда `npm run check` запускает полный цикл валидации качества: +1. `oxlint --deny-warnings` — линтинг без предупреждений и ошибок (196 файлов); +2. `tsc -b` — строгая компиляция TypeScript 5.8+ без ошибок типов; +3. `vitest run` — 407 модульных и интеграционных тестов (13 тестовых сюит, 100% pass); +4. `vite build` — production сборка с бандлом ядра ~146 kB gzip (бюджет < 250 kB gzip); +5. `playwright test` — 30 E2E сценариев в браузерном окружении Chromium на десктопе, планшете и мобильном телефоне. + --- ## 3. Архитектура слоев