§01Зачем иммутабельность
На стройке деньги распределены между большим числом людей, и интерес у всех разный. Сметчик хочет, чтобы цифры сходились. Менеджер — чтобы документ согласовали быстрее. Клиент — чтобы заплатить меньше. Подрядчик — чтобы предъявить больше.
В этой среде «возможность отредактировать подписанный документ» становится не удобной функцией, а пороховой бочкой. Через полгода никто не сможет восстановить, какая редакция документа была настоящей в момент подписания.
Если подписанный КС-2 можно отредактировать в один клик — это значит, что спустя 6 месяцев нельзя ответить на вопрос аудитора «а что было подписано».
§02Как это реализовано
В actrix иммутабельность утверждённых документов — это инвариант на трёх уровнях.
1. Status machine. Документ имеет состояния: DRAFT → ON_REVIEW → APPROVED → COMPLETED. Из состояния APPROVED невозможно вернуться в DRAFT. Поля документа можно менять только в DRAFT.
2. Database constraints. На уровне Postgres настроены триггеры, которые запрещают UPDATE по полям документа, если его статус APPROVED или COMPLETED. Даже если кто-то напишет SQL-команду напрямую, она провалится.
3. Append-only audit log. Любое изменение — даже создание корректировки — пишется отдельной записью в журнал. Журнал не поддерживает UPDATE и DELETE, только INSERT.
§03Аудит и ответственность
Когда любое изменение фиксируется, ответственность становится конкретной. На вопрос «кто это поменял» в actrix есть ответ с точностью до ФИО, времени и поля документа.
Это меняет культуру обращения с документами. Если правка важна — оформите корректировку, в ней укажите причину, проведите по маршруту согласования. Это занимает 5 минут больше, чем «быстро поправить», но через год нет вопросов «а что там было исходно».
Иммутабельность защищает компанию не от злоумышленников снаружи, а от собственных людей внутри. Не потому, что они плохие — потому, что у них есть разные интересы и ограниченное время. — Из руководства по архитектуре actrix
§04Что чувствует пользователь
На первый взгляд иммутабельность — это «неудобно». На второй — это «спокойно». Когда вы знаете, что подписанный документ нельзя поправить «по-тихому», вы перестаёте бояться его подписывать. Когда вы знаете, что любая правка оформлена корректировкой, вы перестаёте искать «какая версия была настоящей».
Через 2–3 месяца использования системы пользователи перестают замечать ограничение и начинают замечать пользу: понятная история, чёткая ответственность, отсутствие непонятно откуда взявшихся изменений.