Бизнес-правила¶
Expecto валидирует данные на двух уровнях, и их полезно различать.
Правила валидации Entity¶
Entity несёт правила валидации построчного уровня.
Каждое правило — выражение, которому должна удовлетворять каждая строка; строки,
которые не прошли, сообщаются как нарушения (violations). Правила компилируются в
DuckDB-запрос поиска нарушений вида SELECT ... WHERE NOT (expression).
Правила поддерживают:
- Операторы:
==,!=,>,<,and,or,not. - Ссылки на поля:
d.field_nameдля проверяемой строки,c.context_fieldдля контекста сессии. - Lookup по каталогам: Каталоги сессии доступны как таблицы
cat_<name>(cat_<name>__org,cat_<name>__project,cat_<name>__providerпо скоупу) — те же имена, что в трансформерах и бизнес-правилах; например, отметить налоговый код, которого нет вcat_steuerkennzeichen__providerпоставщика. - Lookup по таблицам контекста: таблицы из контекста сессии (
_tables, например подтянутые context source) доступны какctx_<name>— те же имена, что в трансформерах и бизнес-правилах. - Функции:
len(),matches(),in(),is_empty(),abs(),nz(),round()и другие. - Severity:
ERROR,WARNINGилиINFO. - Preconditions и локализованные сообщения (текст по локалям).
Редактирование в интерфейсе. Редактор правил Entity использует ту же
SQL-среду, что и бизнес-правила проекта: слева обозреватель схемы показывает
data с колонками Entity, а также каталоги и таблицы контекста, которые видят
проекты этой Entity (cat_*, ctx, ctx_<name>); редактор дополняет их
имена. Клик по таблице или колонке вставляет её в позицию курсора.
Бизнес-правила проекта¶
Project несёт сквозные бизнес-правила в отдельной таблице (не JSONB). Каждое — либо выражение, либо SQL-правило, упорядочено и может включаться/выключаться. Они покрывают проверки уровня поставки, а не отдельной строки — включая межсущностную reconciliation:
- Keyed reconciliation —
FULL OUTER JOINпо ключу группировки (например, файл проводок должен сходиться с файлом итогов по каждому счёту). - Global reconciliation —
CROSS JOINскалярных агрегатов.
Исход not_applicable¶
Правило может разрешиться в not applicable вместо pass/fail, когда его preconditions не выполняются для данной поставки — например правило про VAT-source, когда эта опциональная source не была прислана. Предпочитайте этот семантический исход технической ошибке (вроде «unknown table»): он говорит проверяющему, что правило просто не применилось, а не выглядит как провал.
Severity и блокировка¶
Блокирующий severity проекта определяет, какие нарушения мешают одобрить сессию.
Нарушения WARNING и INFO показываются для ознакомления, не обязательно
блокируя; нарушения ERROR обычно блокируют до устранения.