{"schema":1,"baseline_id":"commercial-v1-38","updated_on":"2026-10-09","metric":"verified_criteria_equal_weight","scope":"Первая коммерческая версия для стоматологического кабинета и небольшой/средней клиники Республики Беларусь","architecture":"server/ Django + PostgreSQL; client/ Next.js. src/ HTML v4 и platform/odoo — отдельные исторические контуры.","groups":[{"id":"A","title":"Программа и комплект поставки"},{"id":"B","title":"Размещение и эксплуатация"},{"id":"C","title":"Подключение конкретной клиники"}],"previous":{"baseline":"product-deliverables-v11","percent":80.7,"note":"Историческая шкала из 24 блоков. Её 100% разработки не покрывают новые выявленные обязательные сценарии коммерческого поручения."},"initial_snapshot":{"done":19,"total":38,"percent":50},"policy":"Каждый из 38 критериев весит одинаково. Только выполненный и проверенный критерий получает 1/38. Дополнительные тесты и упаковки сами процент не увеличивают. Внешние действия остаются в знаменателе. Для новой области потребуется отдельная согласованная версия матрицы.","items":[{"id":"C01","group":"A","title":"Основа и границы продукта","actual":"Django/PostgreSQL + Next; HTML v4 и Odoo — отдельные поколения","gap":"Границы новой коммерческой версии закреплены в этой матрице","acceptance":"Единый конечный состав для кабинета и небольшой/средней клиники РБ","check":"Сверка исходников и документации","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["docs/COMMERCIAL_RELEASE.md"],"verification":"current-scope-audit"},{"id":"C02","group":"A","title":"Вход, сессии и изоляция клиник","actual":"Сессии, CSRF, отзыв доступа и изоляция; успешные входы не расходуют лимит ошибок общего BFF; лимит неверных MFA-кодов сохраняется при новом запросе кода","gap":"Новых пробелов в проверенном серверном контуре не выявлено","acceptance":"Чужая клиника, отозванный доступ и чужие файлы недоступны","check":"Серверные проверки доступа и двух tenant","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step19-access-2026-09-29.md","server/tests/test_login_throttle.py","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"historical"},{"id":"C03","group":"A","title":"Создание пустой клиники","actual":"provision_clinic и одноразовая активация управляющего","gap":"Связанный рабочий цикл проверяется отдельно в C25","acceptance":"Отдельный tenant без пациентов и с выключенным официальным модулем","check":"Тест команды, активации и изоляции","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step36-clinic-form-activation-2026-09-30.md"],"verification":"historical"},{"id":"C04","group":"A","title":"Отделения и кабинеты","actual":"Управляющий создаёт, изменяет и отключает отделения и кабинеты в /settings; права, версии, история расписания и будущие записи защищены","gap":"Закрыто в текущем этапе","acceptance":"Управляющий настраивает структуру; будущие записи не теряют кабинет","check":"API, права, версии, повтор команды, браузер","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step41-clinic-configuration-2026-10-02.md","client/tests/clinic-settings-browser.cjs"],"verification":"current-stage"},{"id":"C05","group":"A","title":"Сотрудники, роли и доступ","actual":"Приглашения, членство, отзыв, восстановление, MFA","gap":"Ролевой ежедневный UX проверяется в C26","acceptance":"Приглашение и отзыв работают, права применяются на сервере","check":"Сервер и интерфейс доступа","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step19-access-2026-09-29.md"],"verification":"historical"},{"id":"C06","group":"A","title":"Услуги и исторические цены","actual":"Управляющий ведёт каталог и неизменяемые версии цен в /settings; цены закрытых приёмов сохраняются","gap":"Закрыто в текущем этапе","acceptance":"Прайс настраивается в UI; новые цены не переписывают старый приём","check":"API, даты, закрытые периоды, браузер","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step41-clinic-configuration-2026-10-02.md","client/tests/clinic-settings-browser.cjs"],"verification":"current-stage"},{"id":"C07","group":"A","title":"Схемы начислений сотрудникам","actual":"Версии процентных схем, расчёт и заморозка периода","gap":"Новых пробелов в проверенных схемах не выявлено","acceptance":"Новые ставки не изменяют закрытые начисления","check":"Расчёт заранее заданных сумм и истории","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step16-finance-2026-09-27.md"],"verification":"historical"},{"id":"C08","group":"A","title":"Картотека и возможные дубли","actual":"Поиск, создание, подтверждение дубля, архив","gap":"Общий UX ошибок проверяется в C26","acceptance":"Дубли показаны до создания, карточка другой клиники недоступна","check":"API и браузер картотеки","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step20-schedule-registry-2026-09-29.md"],"verification":"historical"},{"id":"C09","group":"A","title":"Запись и статусы посещения","actual":"Создание, перенос, отмена, приход, неявка","gap":"Общий UX проверяется в C26","acceptance":"Статусы и версии согласованы с сервером","check":"Сервер расписания и браузер","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step20-schedule-registry-2026-09-29.md"],"verification":"historical"},{"id":"C10","group":"A","title":"Смены и защита от пересечений","actual":"Интервалы, перерывы, проверка врача и кабинета","gap":"Новых пробелов в проверенном контуре не выявлено","acceptance":"Пересечения и запись вне смены отклоняются","check":"Конкурентные серверные запросы и браузер","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step20-schedule-registry-2026-09-29.md"],"verification":"historical"},{"id":"C11","group":"A","title":"Повторная запись и задачи связи","actual":"Tenant-очередь связи с пациентом: ответственный, срок, телефон, результат, будущая повторная запись и неизменяемая история","gap":"Автоматические рассылки и интеграция телефонии не входят в первую версию","acceptance":"Задача с пациентом, ответственным, сроком, результатом и повторной записью","check":"API прав и версий; браузер администратора","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step43-patient-followups-2026-10-02.md","client/tests/followups-browser.cjs"],"verification":"current-stage"},{"id":"C12","group":"A","title":"Разрешённые приёмы врача","actual":"Свои приёмы и разрешённый медицинский доступ","gap":"Ежедневный UX проверяется в C26","acceptance":"Врач не читает и не меняет запрещённые приёмы","check":"Проверки прав и двух клиник","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step15-1-visits-2026-09-24.md"],"verification":"historical"},{"id":"C13","group":"A","title":"Медицинская запись, диагнозы и план","actual":"Черновик, зубная карта, диагнозы, услуги, планы и версии","gap":"Официальность справочника отдельно в C34","acceptance":"Записи и планы сохраняются с tenant-связями и историей","check":"API и браузер врача","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step15-workspace-2026-09-24.md"],"verification":"historical"},{"id":"C14","group":"A","title":"Завершение приёма","actual":"Атомарное закрытие, снимок, начисление и расход","gap":"Полный пустой tenant проверяется в C25","acceptance":"Повтор закрытия не удваивает начисление и расход","check":"Сервер атомарности и ожидаемые суммы","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step15-completion-2026-09-24.md"],"verification":"historical"},{"id":"C15","group":"A","title":"Исправление завершённой медицинской записи","actual":"Неизменяемые медицинские дополнения с причиной, автором, цепочкой версий, текущей проекцией и печатью выбранной версии","gap":"Подписанный официальный выпуск оформляется отдельным модулем при подключении","acceptance":"Новая версия с причиной и автором; старый снимок и расчёты сохранены","check":"API, история, документы и браузер врача","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step44-medical-amendments-2026-10-02.md","client/tests/medical-amendments-browser.cjs"],"verification":"current-stage"},{"id":"C16","group":"A","title":"Документы, файлы и печать","actual":"Снимки, PDF, приватная выдача и профиль принтера","gap":"Физическая печать конкретной клиники в C35","acceptance":"Выгружается точный снимок; чужие файлы закрыты","check":"Сервер, PDF и браузерная печать","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step17-documents-2026-09-27.md","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"historical"},{"id":"C17","group":"A","title":"Материалы, нормы и остатки","actual":"Нормы, приход, инвентаризация, расход и корректировки","gap":"Полный рабочий цикл в C25","acceptance":"Нехватка блокирует списание; повтор не меняет остаток дважды","check":"Заданные суммы, API и браузер склада","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step16-stock-2026-09-24.md"],"verification":"historical"},{"id":"C18","group":"A","title":"Учёт стерилизации","actual":"Внутренний журнал фактических циклов, показателей и контроля оператора: успех/сбой/отмена, права и неизменяемая история","gap":"Автоматическая валидация стерильности, нормативные пороги, управление оборудованием и официальная форма не входят в модуль","acceptance":"Сотрудник ведёт цикл и результат; история изменений сохранена","check":"Сервер прав и версий; браузер ассистента","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step46-sterilization-journal-2026-10-02.md","client/tests/sterilization-browser.cjs"],"verification":"current-stage"},{"id":"C19","group":"A","title":"Оплаты, задолженность и возвраты","actual":"Частичные оплаты, распределение, возвраты, корректировки","gap":"Полный цикл и UX проверяются в C25/C26","acceptance":"Долг и распределение сверяются, повтор не создаёт новый платёж","check":"Заранее заданные суммы и серверная атомарность","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step16-finance-2026-09-27.md"],"verification":"historical"},{"id":"C20","group":"A","title":"Исторические начисления и периоды","actual":"Снимки тарифов, ставки, заморозка и поправки","gap":"Новых пробелов в проверенных расчётах не выявлено","acceptance":"Закрытые суммы сохраняются после смены цен и ставок","check":"Серверная история расчётов","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/tests/test_finance.py"],"verification":"historical"},{"id":"C21","group":"A","title":"Отчёты с исходными операциями","actual":"Финансовый отчёт показывает исходные операции и сохранённые ставки, переход к сверке приёма; суммы проверены","gap":"Закрыто в текущем этапе","acceptance":"Суммы отчёта сверяются с услугами, оплатами, расходом и начислением","check":"Контрольный цикл и браузер сверки","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/tests/test_finance_trace.py","client/tests/finance-trace-browser.cjs","server/verification/step44-finance-trace-2026-10-02.md"],"verification":"current-stage"},{"id":"C22","group":"A","title":"Поддерживаемый импорт и экспорт","actual":"Каноническая выгрузка, проверка и атомарный импорт","gap":"Произвольные форматы иных поставщиков не обещаются","acceptance":"Tenant-архив полон в заявленном формате, ошибочный импорт не частичен","check":"Серверная сверка архива и повтор batch","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step18-atomic-import-2026-09-29.md","server/verification/step48-clinical-lifecycle-legacy-import-2026-10-02.md"],"verification":"current-stage"},{"id":"C23","group":"A","title":"Локальное резервирование и восстановление","actual":"На отдельных копиях проверены миграции 0038 → 0042, новый согласованный backup и повторное восстановление с полным инвентарём, файлами, health и ACL; рабочие источники неизменны","gap":"Внешнее размещение и удалённая копия проверяются отдельно в C33","acceptance":"Инвентарь и файлы совпадают, восстановленное ядро работает, источник не изменён","check":"core_ops backup/verify/check-source","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step50-local-upgrade-and-restore-2026-10-02.md","server/verification/full-recheck-v1.72-2026-10-02.md","server/verification/isolated-upgrade-through0042-2026-10-03.md"],"verification":"current-stage"},{"id":"C24","group":"A","title":"Установка обновления и откат","actual":"Менеджер проверяет все файлы, сериализует переключение current, фиксирует квитанции и возвращает совместимую версию","gap":"Выпуск 1.73 закрепляет схему 0042; автоматический возврат к 1.72 с другой вершиной запрещён, нужен проверенный план восстановления","acceptance":"Проверенные файлы, атомарный current, откат к совместимой схеме без потери БД","check":"Изменённый архив, symlink, гонка и сбои записи","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step40-release-manager-2026-10-02.md","server/verification/step52-release-format-compatibility-2026-10-02.md","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"current-stage"},{"id":"C25","group":"A","title":"Связанный цикл пустой клиники","actual":"Новый пустой tenant проходит активацию пяти ролей, настройку, запись, начатый и закрытый приём, склад, две оплаты и финансовую сверку через API и браузер","gap":"Закрыто на вымышленных данных; реальный пилот покупателя остаётся C36","acceptance":"Заданные ожидаемые итоги и отсутствие изменений чужой клиники","check":"Интеграционный API и браузер под нужными ролями","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step47-commercial-cycle-2026-10-02.md","client/tests/commercial-cycle-browser.cjs","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"current-stage"},{"id":"C26","group":"A","title":"Ежедневный интерфейс по ролям","actual":"Пять ролей проходят рабочий цикл; исправлены защита черновиков пациента/записи/смены при переходах и смене клиники и время документов по Минску; ошибки связи/версии сохраняют ввод, повтор не дублирует оплату/приход; 320/390/1280 проверены","gap":"Физические устройства и пилот покупателя остаются C35/C36","acceptance":"Обязательные рабочие экраны понятны, без потери ввода и дублей","check":"Chrome 320/390/1280, ролевые и ошибочные сценарии","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step49-commercial-ui-2026-10-02.md","client/tests/daily-roles-browser.cjs","client/tests/stock-access-documents-retention-browser.cjs","client/tests/commercial-cycle-browser.cjs","server/verification/full-recheck-v1.72-2026-10-02.md","server/verification/recheck-client-ui-2026-10-02.md","client/tests/homepage-drafts-browser.cjs"],"verification":"current-stage"},{"id":"C27","group":"A","title":"Измеримая производительность","actual":"Изолированный профиль 10000 пациентов/25000 закрытий/20 параллельных чтений: 1230 запросов; заданные SLO простых запросов, годовых сводок и 100 исходных операций подтверждены; повторные замеры и фактические задержки сохранены в отчётах","gap":"Замер macOS/loopback/чтение; арендованный сервер/HTTPS, запись, длительная нагрузка и больший масштаб требуют повторного измерения","acceptance":"Указаны объём, параллельность, задержки, ошибки и фактический предел","check":"Воспроизводимая соразмерная нагрузочная проверка","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step45-load-probe-2026-10-02.md","server/verification/load-probe-2026-10-02.json","server/verification/load-probe-optimized-2026-10-02.json","server/LOAD_PROBE.md","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"current-stage"},{"id":"C28","group":"A","title":"Воспроизводимая сборка и поставка","actual":"Полные проверки сервера, клиента, нормативного контура и отдельного HTML, TypeScript и сборка 69 маршрута; строгий OpenAPI и защита неизменяемой воспроизводимой поставки","gap":"Выпуск 1.73; прежние архивы сохранены неизменяемыми. Итоговые проверки фиксируются отдельной квитанцией.","acceptance":"Повторная сборка и архив совпадают; секреты и реальные данные исключены","check":"Полный выпускной набор, SHA-256 и упаковщик","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/commercial-release-final-2026-10-02.md","docs/handoff/tools/package_handoff.py","docs/handoff/tools/test_package_handoff.py","server/verification/step52-release-format-compatibility-2026-10-02.md","server/verification/full-recheck-v1.72-2026-10-02.md"],"verification":"current-stage"},{"id":"C29","group":"B","title":"Конфигурация production","actual":"HTTPS-proxy, loopback, раздельные роли и секреты, валидатор","gap":"Выбранного сервера и домена пока нет","acceptance":"Небезопасная конфигурация отклоняется, секреты не публикуются","check":"Статический валидатор и серверные проверки","external":"none","impact":"launch","priority":"P1","status":"done","evidence":["server/verification/step39-production-configuration-2026-09-30.md"],"verification":"historical"},{"id":"C30","group":"B","title":"Плановое резервирование, мониторинг и диагностика","actual":"Подготовлены executable snapshot-backup, health/миграции/возраст и хеш копии/restore/диск, закрытые сигналы сбоя и восстановления","gap":"Запуск служб на арендованном сервере, backup-роль, внешнее хранилище и фактический канал подтверждаются при размещении","acceptance":"Сбой обнаруживается; оператор получает проверяемый сигнал; копии защищены","check":"Изолированная имитация отказа и инструкция","external":"none","impact":"launch","priority":"P1","status":"done","evidence":["server/verification/step42-operations-monitor-2026-10-02.md","deploy/OPERATIONS_MONITORING.md"],"verification":"current-stage"},{"id":"C31","group":"B","title":"Первый запуск на арендованном сервере","actual":"Выпуск 1.76 установлен на FreakHosting VPS; schema0042, runtime-права, реальный API и браузерный цикл пяти ролей проверены на отдельной вымышленной клинике","gap":"Технический первый запуск проверен; реальный пилот покупателя остаётся C36","acceptance":"На арендованном сервере собирается и запускается комплект, проходят миграции, проверки доступа и рабочего цикла","check":"Новая установка на арендованном сервере во время размещения, без данных реальных пациентов","external":"none","impact":"launch","priority":"P1","status":"done","evidence":["server/verification/vps-launch-2026-10-09.json","server/verification/vps-launch-ui-v1.76-2026-10-09.json","docs/VPS_ACCESS_2026-10-09.md"],"verification":"current-stage"},{"id":"C32","group":"B","title":"Реальный хостинг, домен и HTTPS","actual":"FreakHosting VPS 31.59.58.252, публичный HTTPS 31.59.58.252.sslip.io и HTTP→HTTPS; PostgreSQL/core/web только loopback, TLS БД verify-full","gap":"Публичное размещение подтверждено; собственный брендовый домен можно подключить отдельно","acceptance":"Публичный HTTPS и закрытая БД на согласованном размещении","check":"Проверка реального домена и настроек","external":"none","impact":"launch","priority":"P1","status":"done","evidence":["server/verification/vps-launch-2026-10-09.json","docs/VPS_ACCESS_2026-10-09.md"],"verification":"current-stage"},{"id":"C33","group":"B","title":"Две сети и восстановление инфраструктуры","actual":"Ежедневная копия на VPS, мониторинг, изолированное восстановление и восстановление ручной Mac-копии подтверждены; рабочая БД не изменена","gap":"Нужны две независимо проверенные пользовательские сети, автоматическое внешнее хранилище и выбранный канал уведомлений; цели восстановления для рабочего объёма согласуются отдельно","acceptance":"Доступ и совместная работа из двух сетей; внешняя копия восстановлена","check":"Две фактические сети и учение с измерением RPO/RTO","external":"hosting-and-networks","impact":"launch","priority":"P1","status":"external","evidence":["server/verification/vps-launch-2026-10-09.json","docs/VPS_OPERATIONS_2026-10-09.md","deploy/production_smoke.py"],"verification":"not-verified"},{"id":"C34","group":"C","title":"Политики клиники и официальный модуль","actual":"Персональная активация; формы по умолчанию выключены","gap":"Реальные решения, документы, подписи и область МКБ-10С","acceptance":"Согласованные правила обработки; официальный модуль активируется только по фактам","check":"Ответственные клиники, профильный специалист, валидаторы","external":"clinic-documents","impact":"module","priority":"P1","status":"external","evidence":["server/CLINIC_ONBOARDING_GUIDE.md"],"verification":"not-verified"},{"id":"C35","group":"C","title":"Телефоны и принтер покупателя","actual":"Эмуляция экранов и калибровочный файл есть","gap":"Физические устройства конкретной клиники","acceptance":"Нужные модели устройств и фактическая печать проверены","check":"Устройства покупателя и протокол","external":"clinic-devices","impact":"onboarding","priority":"P1","status":"external","evidence":["platform/docs/DEVICE_ACCEPTANCE_PACKET.md"],"verification":"not-verified"},{"id":"C36","group":"C","title":"Реальный пилот клиники","actual":"Синтетические проверки и шаблоны есть","gap":"Нет реального пилота и ответственных подписей","acceptance":"Рабочий цикл принят пользователями на согласованной области","check":"Клиника выполняет пилот и фиксирует результат","external":"clinic-pilot","impact":"onboarding","priority":"P1","status":"external","evidence":["platform/docs/PILOT_ACCEPTANCE_PACKET.md"],"verification":"not-verified"},{"id":"C37","group":"C","title":"Подключение, обучение и завершение обслуживания","actual":"Команды и технические инструкции есть","gap":"Реальный клиент, обучение и договорные условия","acceptance":"Клиент подключён, права назначены, выгрузка и прекращение доступа согласованы","check":"Действия владельца продукта и покупателя","external":"clinic-onboarding","impact":"onboarding","priority":"P1","status":"external","evidence":["server/CLINIC_ONBOARDING_GUIDE.md"],"verification":"not-verified"},{"id":"C38","group":"A","title":"Комплект продажи, демонстрации и поддержки","actual":"Подготовлены состав продукта,13-минутное demo, инструкции пяти ролей, тарифные предложения/затраты, КП/договорные проекты/поддержка/прекращение; свежие синтетические seed-команды и повтор на отдельном PostgreSQL проверены","gap":"Цена и обязательства утверждаются владельцем и согласуются с покупателем; реальное подключение остаётся C37","acceptance":"Комплект соответствует функциям; цена и сроки не утверждены автоматически","check":"Сверка с матрицей, демонстрация 10–15 минут","external":"none","impact":"sale","priority":"P0","status":"done","evidence":["server/verification/step46-commercial-kit-2026-10-02.md","server/verification/step51-fresh-demo-2026-10-02.md","server/verification/fresh-demo-commercial-2026-10-02.json","docs/commercial/README.md","docs/commercial/LAUNCH_REMAINING.md"],"verification":"current-stage"}],"summary":{"overall":{"done":33,"total":38,"pending":0,"external":5,"percent":86.8},"groups":{"A":{"done":29,"total":29,"pending":0,"external":0,"percent":100},"B":{"done":4,"total":5,"pending":0,"external":1,"percent":80},"C":{"done":0,"total":4,"pending":0,"external":4,"percent":0}}}}