Последний шаг — связать бизнес-карту с объектами, событиями, расчетами и границами систем. Именно этот слой позволяет осознанно читать и проверять MR.
Канонические объекты
В коде обычно встречаются разные представления одних и тех же доменных понятий:
- trade и product definition;
- leg и cash flow;
- lifecycle event;
- fixing и market observation;
- payment и settlement instruction;
- valuation result и sensitivity;
- exposure, netting set и collateral;
- risk metric, limit и utilization.
Важно понимать не только поля объекта, но и его место в общей причинной цепочке.
Lifecycle как state machine
Обработчик события должен явно отвечать на вопросы:
- из какого состояния разрешен переход;
- какие данные являются входом;
- какие cash flows меняются;
- какие производные результаты нужно пересчитать;
- является ли обработка идемпотентной;
- что делать с correction, cancellation и событиями не по порядку.
Data lineage
Полезно уметь пройти путь результата назад: от risk report и limit utilization к metric, от metric к exposure и valuation, от valuation к cash flows, а от них — к контракту, lifecycle events и market data.
Чек-лист для MR
- Какой бизнес-инвариант защищает изменение?
- Pre-trade это логика или post-trade?
- Какой effective date используется?
- Какие downstream consumers затронуты?
- Не смешаны ли contract state и calculation result?
- Как проверяются повторная доставка и порядок событий?
- Как изменение проявится в P&L, exposure или limit utilization?
Главный вывод
Строка кода становится понятной, когда видно, какой переход в состоянии банковской сделки она реализует и какое решение банка зависит от результата.
Вопросы
- Где должна храниться истина о состоянии сделки?
- Какие результаты можно пересчитать, а какие события нужно хранить неизменяемо?
- Как отличить ошибку market data от ошибки lifecycle processing?