5.2 KiB
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 в
role7 строк, вpermission17, вrole_permission— число строк равно сумме прав по матрице §10, вelimination_rule8 строк сstatement_type = balance,version_no = 1, вrequired_document_ruleдляBASIC10 строк (BALANCE, INCOME, OSV × 01, 58, 60, 62, 66, 67, 76, 90) и дляEXTENDED27 строк
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 добавлены пары права со всеми ролями; ранее снятые администратором связи не возвращены