2026-11-07 04:01:45 +04:00

5.2 KiB
Raw Blame History

Spec Delta

Purpose

Дельта change quality-metrics (метрики качества первички).

MODIFIED Requirements

Requirement: Идемпотентный seed справочников продукта

Команда python -m scripts.seed (из api/) SHALL загрузить из api/seed/core/: regional_office (Головной офис, is_head_office = true), role — 7 системных ролей ТЗ 8.1 (KA_RF, KA_GO, RKA, CLIENT_MANAGER, CURATOR_GO, EXPERT, ADMIN, is_system = true), permission — 17 сочетаний объект × действие из §10 правил с кодами <OBJECT>_<ACTION> (EXPORT при совпадении), role_permission по матрице §10 (ASSUMPTION(OQ-16)), chart_of_account, elimination_rule + elimination_rule_account версии 1 для ББ (§4), required_document_rule для BASIC и EXTENDED. Записи SHALL вставляться или обновляться по натуральному ключу; удаление MUST NOT выполняться.

Исключение — матрица role_permission (ей после первичной загрузки владеет администратор, issue #9): в ПУСТУЮ таблицу матрица файла SHALL загружаться целиком; в заполненную SHALL вставляться только пары, у которых роль или право вставлены этим же запуском seed (их администратор снять не мог), а остальные пары файла MUST NOT добавляться — право, снятое администратором, не возвращается, добавленное сверх файла не отзывается. Отчёт команды SHALL сообщать, что матрица пропущена (или сколько добавлено пар новых ролей и прав). Право QUALITY_METRICS_VIEW (объект QUALITY_METRICS, действие VIEW) SHALL выдаваться всем ролям; на стенде, где матрица уже заполнена, пара добавляется только как пара впервые созданного права — для появления пункта меню нужен повторный make seed.

Scenario: Первый запуск на пустой схеме

  • WHEN после alembic upgrade head выполняется python -m scripts.seed
  • THEN в role 7 строк, в permission 17, в role_permission — число строк равно сумме прав по матрице §10, в elimination_rule 8 строк с statement_type = balance, version_no = 1, в required_document_rule для BASIC 10 строк (BALANCE, INCOME, OSV × 01, 58, 60, 62, 66, 67, 76, 90) и для EXTENDED 27 строк

Scenario: Повторный запуск

  • WHEN python -m scripts.seed выполняется второй раз без изменения файлов
  • THEN число строк во всех затронутых таблицах не меняется, команда завершается с кодом 0, в отчёте role_permission помечена как пропущенная

Scenario: Право, снятое администратором

  • WHEN администратор снял с роли EXPERT право EX_VIEW, после чего seed запущен снова
  • THEN связь EXPERT × EX_VIEW не восстановлена, остальная матрица не изменилась

Scenario: Новые роль и право в файлах seed

  • WHEN матрица заполнена, а в permissions.yaml добавлено новое право, в roles.yaml — новая роль, и в role_permissions.yaml — их пары (новое право существующей роли, существующее право новой роли)
  • THEN seed вставляет ровно эти пары; снятые ранее администратором связи существующих ролей и прав не возвращаются

Scenario: Администратор снял все связи

  • WHEN таблица role_permission пуста и seed запущен снова
  • THEN матрица файла загружается целиком, как при первом запуске

Scenario: Изменение названия роли в файле

  • WHEN в roles.yaml изменено name роли EXPERT и seed запущен снова
  • THEN строка role с code = EXPERT обновлена, новая не создана

Scenario: Право метрик на заполненной матрице

  • WHEN матрица заполнена, право QUALITY_METRICS_VIEW создаётся впервые и seed запущен
  • THEN добавлены пары права со всеми ролями; ранее снятые администратором связи не возвращены