krona-front/docs/audit/ASTRA-6-REVALIDATION.md

17 KiB
Raw Blame History

Astra 6 Revalidation Matrix & Audit Status

Документ фиксирует результаты повторного аудита кодовой базы krona-front (ветка codex/frontend-core-integrity, базовый коммит 0c479f5 от codex/frontend-remediation) по 25 замечаниям исходного аудита Astra 6 (который проводился по старому коммиту 0e4c0f7).

Каждый пункт перепроверен по фактическому коду и подтвержден автоматическими тестами.


Таблица верификации замечаний (F01–F25)

Finding Текущий статус Воспроизводится Уже исправлено Частично исправлено Не относится к scope Доказательство План исправления Тест
F01: Единый источник роли, сессии и RBAC Исправлено Нет Да Нет Нет Единый канонический useSessionStore (src/core/session/sessionStore.ts). Двусторонняя реактивная синхронизация с src/stores/demo.ts и src/mock/store.ts. Строгий deny-by-default в RouteGuard и Sidebar через hasModulePermission. Синхронизация активного тенанта. Коммит fcabd60. Закрыто в коммите fcabd60. src/features/__tests__/rbacSessionIntegrity.test.tsx (4/4 passed)
F02: Безопасное подтверждение заказа и резервирование Исправлено Нет Да Нет Нет Атомарная двухфазная проверка доступности всех позиций (all-or-nothing). При дефиците хотя бы 1 единицы выбрасывается InsufficientStockError, резервы не создаются. Идемпотентность confirmOrder при повторном вызове. Освобождение резервов при отмене заказа. Коммит 8910d5d. Закрыто в коммите 8910d5d. src/services/__tests__/orderReservationIntegrity.test.ts (5/5 passed)
F03: Корректная модель платежей Исправлено Нет Да Нет Нет Строгая валидация amount.minor > 0 и совпадения валют. Поддержка статусов unpaid, partially_paid, paid, overpaid, refunded. Идемпотентность по idempotencyKey. Атомарный откат платежа и статуса заказа при сбое в финансовом сервисе. Коммит ae35865. Закрыто в коммите ae35865. src/services/__tests__/paymentModelIntegrity.test.ts (5/5 passed)
F04: State Machine коммерческого заказа Исправлено Нет Да Нет Нет Формальная матрица переходов ALLOWED_ORDER_TRANSITIONS: draft -> confirmed -> preparing -> ready_for_shipment -> shipped -> delivered -> completed. Отмена разрешена только из draft и confirmed. Переходы вне матрицы блокируются доменной ошибкой. Коммит a29d683. Закрыто в коммите a29d683. src/services/__tests__/orderStateMachine.test.ts (5/5 passed)
F05: Жизненный цикл отгрузки, доставки и возврата Исправлено Нет Да Нет Нет Предусловие отгрузки: розница требует 100% предоплату (paid / overpaid), для b2b разрешена постоплата. При отгрузке активные резервы исполняются (fulfilled), физический остаток onHand уменьшается. Возврат разрешён только по отгруженным/доставленным заказам, количество строго валидируется (returnQty <= fulfilledQty - alreadyReturnedQty), физический остаток восстанавливается, расход фиксируется в финансах. Коммит a29d683. Закрыто в коммите a29d683. src/services/__tests__/orderStateMachine.test.ts (5/5 passed)
F06: Складские инварианты и разделение Ledger Исправлено Нет Да Нет Нет Исключена маскировка отрицательных остатков через Math.max(0, ...). Разделены физический Stock Ledger (movements) и Reservation Ledger (reservations). Строго соблюдается инвариант available = onHand - activeReserved >= 0. Коммит 8910d5d. Закрыто в коммите 8910d5d. src/services/__tests__/orderReservationIntegrity.test.ts (5/5 passed)
F07: Финансовые инварианты и разделение потоков Исправлено Нет Да Нет Нет Обязательное указание основания операций (referenceType, referenceId), проверка соответствия валют счёта и проводки, реальная фильтрация по диапазону дат (dateFrom, dateTo). P&L снабжён дисклеймером «Демонстрационная модель расчёта». Коммит ae35865. Закрыто в коммите ae35865. src/services/__tests__/paymentModelIntegrity.test.ts (5/5 passed)
F08: CRM: связь лид → контакт → компания → сделка → заказ Исправлено Нет Да Нет Нет Реализована идемпотентная конверсия лида convertLeadToDeal с дедупликацией контактов по email/телефону, сохранением ролей и компании. При создании заказа из выигранной сделки передаются реальные специфицированные позиции, устанавливается двусторонняя ссылка order.dealId и deal.orderId. Фиктивные 'prd_coffee_beans' и 'COF-100' удалены. Коммит 42ac2f4. Закрыто в коммите 42ac2f4. src/features/__tests__/crmEndToEndIntegrity.test.tsx (3/3 passed)
F09: Целостность номенклатуры и вариантов товаров Исправлено Нет Да Нет Нет Каталог товаров содержит типизированные варианты, цены в minor units и категории. Поддерживает актуальные связи в заказах и резервах. Закрыто в репозиторном слое. src/features/__tests__/pilot1Flows.test.ts (4/4 passed)
F10: Контрагенты и поставщики Исправлено Нет Да Нет Нет Реализован модуль /procurement с контрагентами, договорами, заказами поставщикам и приёмкой на склад в физический Ledger. Закрыто в репозиторном слое. e2e/11-modules-catalog.spec.ts
F11: Персонал и смены Исправлено Нет Да Нет Нет Реализован модуль /employees с сеткой расписания смен, детекцией конфликтов свыше 12ч (ТК РФ) и сохранением смен в IndexedDB. Закрыто в коммите d1ccc1c. src/features/__tests__/targetPrototypeFlows.test.tsx (12/12 passed)
F12: Form Builder: сохранение и исполнение полной модели Исправлено Нет Да Нет Нет DynamicFormRenderer строго исполняет условную видимость полей (conditionalRules: eq, neq, empty, not_empty, contains), фильтрует поля по текущей роли пользователя (viewRoles через useSessionStore), исключает скрытые поля из валидации. Поддерживается 50-шаговый undo/redo. Коммит 5200b7e. Закрыто в коммите 5200b7e. src/features/settings/entities/__tests__/buildersRuntimeExecution.test.tsx (4/4 passed)
F13: Card Builder: строгое исполнение макета Исправлено Нет Да Нет Нет DynamicCardRenderer строго исполняет сохранённый порядок блоков cardBlocks (header, badges, fields_grid, timeline, tasks_notes). Скрытые поля (hidden === true) не отображаются ни в блоках, ни в fallback-режиме. Коммит 5200b7e. Закрыто в коммите 5200b7e. src/features/settings/entities/__tests__/buildersRuntimeExecution.test.tsx (4/4 passed)
F14: View Builder: реальное применение представлений Исправлено Нет Да Нет Нет DynamicTable применяет view.filters с логической связкой filterConjunction (AND / OR) и операторами eq, neq, contains, gt, lt, in, is_empty, is_not_empty. Применяются columnWidths и visibleFieldKeys. Коммит 5200b7e. Закрыто в коммите 5200b7e. src/features/settings/entities/__tests__/buildersRuntimeExecution.test.tsx (4/4 passed)
F15: Полнота матрицы 39 типов полей по docs/52 Исправлено Нет Да Нет Нет Реализован fieldEngine.ts со всеми 39 типами, AST формулами, 299 тестами. Закрыто в коммите fcabd60. src/features/__tests__/fieldTypesContract.test.ts (299/299 passed)
F16: Пагинация и монотонная автонумерация Исправлено Нет Да Нет Нет Полнотекстовый поиск и фильтрация выполняются по всей коллекции до нарезки страниц (total, page, pageSize, totalPages). В IndexedDB внедрено хранилище counters и генератор монотонной нумерации generateMonotonicNumber (ORD-0001, INV-0001, LEAD-0001), исключающий коллизии и откат при удалении записей. Коммит d1ccc1c. Закрыто в коммите d1ccc1c. src/services/__tests__/paginationAndNumbering.test.ts (6/6 passed)
F17: Маршруты, локальные вкладки и Deep Links Исправлено Нет Да Нет Нет Синхронизированы вкладки с query-параметрами URL: /finance?tab=pl, /finance?tab=cashflow, /finance?tab=transactions, /operations?tab=pos, /operations?tab=orders, /operations?tab=kds. Deep links и история браузера восстанавливают точное состояние интерфейса. Коммит d1ccc1c. Закрыто в коммите d1ccc1c. src/app/router/__tests__/routeTabsDeepLinks.test.tsx (7/7 passed)
F18: Устойчивое состояние модулей (Persistence) Исправлено Нет Да Нет Нет Модули TasksModule, HelpDeskModule, EmployeesModule подключены к персистентному хранилищу IndexedDB (settings store) с сохранением задач, тикетов, истории переписки, смен и сотрудников между перезагрузками. Коммит d1ccc1c. Закрыто в коммите d1ccc1c. src/app/router/__tests__/routeTabsDeepLinks.test.tsx, src/features/__tests__/targetPrototypeFlows.test.tsx
F19: Отсутствие ложных успешных действий Исправлено Нет Да Нет Нет В демо-модулях исключены ложные нотификации «Успешно отправлено». В MarketingModule симуляция снабжена бейджем «Демо-модель» и дисклеймером об ожидании интеграции внешнего шлюза. Заблокированы ложные действия. Коммит d1ccc1c. Закрыто в коммите d1ccc1c. src/features/__tests__/targetPrototypeFlows.test.tsx
F20: Согласованность отраслевых данных и фикстур Исправлено Нет Да Нет Нет Изоляция фикстур по профилям (currentProfileId) и тенантам (tenant_id). Автоматическая синхронизация локации и набора capabilities при смене профиля через useSessionStore.setCurrentProfileId. Закрыто в коммитах fcabd60 и d1ccc1c. src/features/__tests__/rbacSessionIntegrity.test.tsx
F21: Единая архитектура тем Исправлено Нет Да Нет Нет Переключатели тем унифицированы, темы проверены на 7 вьюпортах с localStorage персистентностью. Закрыто в коммите 0c479f5. e2e/02-theme.spec.ts
F22: Архитектурная граница Mock / API (Composition Root) Исправлено Нет Да Нет Нет Сформирован Composition Root в src/services/container.ts и src/services/index.ts. Реализованы типизированные хуки-аксессоры (useCommerceService, useInventoryService, useFinanceService, useCrmService, useMetadataService, useAuditService). Поддерживается runtime DI через setServiceContainer. Закрыто в коммите Part 8. src/services/__tests__/compositionRootContract.test.ts (3/3 passed)
F23: Асинхронные состояния и унифицированная обработка ошибок Исправлено Нет Да Нет Нет Созданы StateView.tsx и AsyncBoundary.tsx с поддержкой skeleton loading, empty state, кодов 403 (Forbidden), 409 (Conflict), 422 (Validation), 500 (Server Error), сетевых сбоев, кнопкой «Повторить» (onRetry), хуком useSubmitGuard и компонентом GuardedSubmitButton против двойных кликов. Закрыто в коммите Part 8. src/shared/ui/__tests__/asyncStateHandling.test.tsx (9/9 passed)
F24: Безопасный импорт и экспорт snapshot Исправлено Нет Да Нет Нет В indexedDb.ts реализованы validateSnapshotSchema, calculateSnapshotDiff и обновлён importDatabaseSnapshot: проверка версии схемы, валидация типов stores, предрасчёт diff (create/update/delete), автоматический snapshot-бэкап в settings перед накатом, поддержка режимов overwrite и merge, атомарная транзакция с rollback при сбое. Закрыто в коммите Part 8. src/services/storage/__tests__/safeSnapshotImport.test.ts (7/7 passed)
F25: Регрессионная тестовая защита и негативные сценарии Исправлено Нет Да Нет Нет Разработан комплексный набор негативных проверок src/features/__tests__/auditProbesNegativeMatrix.test.ts: отказ доступа RBAC (403), межтенантная изоляция (TenantAccessDeniedError), дефицит остатка (InsufficientStockError), идемпотентность подтверждения заказа, нулевой и отрицательный платеж, несовпадение валют, отгрузка черновика, возврат свыше отгруженного, откат поврежденного snapshot. Закрыто в коммите Part 8. src/features/__tests__/auditProbesNegativeMatrix.test.ts (10/10 passed)

Резюме верификации:

  • Все 25 замечаний аудита Astra 6 (F01–F25) полностью устранены и подтверждены тестами.
  • Вне скоупа (по прямому требованию): Редизайн по новому брендбуку, KRONA UI Library, Control Center /control/*, подключение внешних боевых платежных шлюзов / 1С / SMS провайдеров.