Ledger: модель учета
Счет, субсчет, проводка и удержание не взаимозаменяемы.
Feature: Не смешивать учет и деньги банка
Scenario: Не смешивать учет и деньги банка
Given операция записана в ledger
When участник читает историю
Then видны ее тип и состояние
And запись не объявляется подтвержденным банковским расчетомДанные
ledger_accounts связывает счет с userId и типом; уникальность userId/type предотвращает вторую запись того же типа. ledger_subaccounts связывает счет с инструментом и кодом актива; баланс хранится numeric(36,18), не floating point. Операции, проводки и удержания представлены отдельными таблицами ledger_operations, ledger_postings и ledger_holds. Outbox использует общий механизм nestjs-common.
Граница точности
Формат хранения не задает число знаков каждого актива. Пересчет в минимальные единицы должен учитывать принятую точность инструмента. Состояние удержания нельзя показывать как свободный остаток. Сверка с CFA-проекцией и цепочкой требует отдельного результата. Источник: apps/services/ledger/src/infrastructure/db/schema.ts; packages/contracts/proto/maniton/ledger/v1/ledger.proto. Целостность.