CFA: финализация операции
Receipt проверяется до изменения учетных остатков.
Feature: Повтор подтвержденной транзакции
Scenario: Повтор подтвержденной транзакции
Given операция уже FINALIZED
When повторно поступает тот же txHash
Then остатки и outbox повторно не изменяются
And повтор не создает новую операциюПорядок
FinalizeOperationUseCase обрабатывает только CONFIRMED с txHash и известной операцией. Разрешимая привязка к контракту обязательна. ChainReceiptVerifier сверяет сеть, контракт, ожидаемую величину Transfer, канонический блок и политику финальности до изменения остатков. В транзакции повторно проверяется canFinalize. Для заявки проверяются PAID, инвестор, инструмент, txHash и выделенное количество; получатель оплаты и сумма должны совпасть с зафиксированными условиями. Для инвестиционного погашения требуется burn и зарезервированная выплата. Финализация, изменения остатков и событие фиксируются через UnitOfWork.
Отказы
Неизвестная операция, неподтвержденный receipt или отсутствующая привязка не приводят к начислению. Несогласованная оплаченная заявка вызывает ошибку. Такая защита не доказывает работающий банк или полноту всего жизненного цикла. Источник: apps/services/cfa-core/src/domains/cfa/application/use-cases/finalize-operation.use-case.ts. Целостность.