Саудовские корпоративные декларации — закят и налог на прибыль в ядре, всего десять отгруженных движков: отчётность, верификация, трансфертное ценообразование, налог у источника, НДС, RETT, акциз, UBO — вычисляются из главных книг в готовые к подаче документы, с приложенным доказательством. Модели используются интенсивно. Арифметика неприкосновенна. Эта граница — не политика; это сама архитектура.
Вычислительное ядро — чистая функция: ни сети, ни базы данных, ни пути импорта к клиенту модели — проверено по полному транзитивному графу импортов, а не обещано в README. Последнее влияние модели — предложение сопоставления, принятое человеком; параметр движка буквально называется approved_mappings.
Каждый вход замораживается в версионированный чекпоинт до запуска движка; повтор подтверждается бит-в-бит, а ожидаемые значения выводятся вручную из регламента до появления кода. Хранятся входные данные, а не выводы — исправленное правило должно изменить ответ; знать нужно, что оно его изменило.
Двадцать один контроль в плоской последовательности без коротких замыканий — двенадцать блокирующих. Одни выводят арифметику заново из сырых входных данных независимым путём и сравнивают; другие поднимают внутренние проверки тождеств движка до первоклассных, аудируемых результатов. У одних ворот есть зубы: декларация с проваленными блокерами не экспортируется. Вся математика — в десятичной арифметике фиксированной точности, конвертация на границе, чтобы ничто не унаследовало неточность float.
Приём файлов пробует самое дешёвое сначала: известные форматы вендоров, детерминированное сопоставление колонок, кешированный отпечаток макета — знакомый файл обрабатывается за ноль токенов модели, а выученные макеты делятся между арендаторами только структурой, никогда значениями: десятый пользователь формата ERP платит тем, чему научили первые девять. Всего одиннадцать точек вызова моделей, все за одной обёрткой с ретраями, предохранителем и жёстким лимитом бюджета.
«Контроль, который прав в большинстве случаев, — не контроль.»
Строгость схемы следует за последствиями: там, где вывод модели становится цифрой, которую человек утвердит в декларацию, он проходит через схему и отклоняется при несовпадении; там, где это предложение для чтения, достаточно более лёгкой проверки. Там, где правило существует, но не реализовано — прежние регуляторные режимы, сектора с нереализованными ставками — система отказывает на границе, до вызова движка: предварительный отказ — это тикет в поддержку, приблизительная декларация — доначисление. И баг, доказывающий тезис: извлечение однажды молча вернуло 52 строки из 54, и каждая проверка правдоподобия на пропорциях прошла — лечением стала разность множеств с источником, строка за строкой, по идентичности, а не лучший промпт. Каждая цифра с покрытием источника открывает в продукте ящик доказательств: строка → участвующие счета → лист и номер строки → подсвеченный фрагмент исходного файла. Известные пробелы, названные прямо: новые движки штампуют свою версию на сохранённую декларацию, ядро формы 10 — ещё нет, поэтому «пересчитать всё, чего коснулось это исправление» там ещё не первоклассный запрос; а чистота ядра проверена аудитом и держится конвенцией, но пока не закреплена тестом графа импортов. И то и другое — названные следующие куски работы.