AIRUS Billing Trust · Quote-to-Cash Evidence Graph

QuoteToCashOps и PricingOps умеют формировать счёт. Billing Trust отвечает за скучный и самый взрослый участок: чтобы каждый рубль в счёте был подкреплён доказательством, чтобы платёж не зачислился не туда, чтобы документы прошли бухгалтерию, а партнёр получил деньги только после того, как деньги собраны. Сначала — безошибочно получать и закрывать деньги, и только потом праздновать рост.

Цепочка доверия к деньгам

usage → rated → approved → invoiced (gate) → УПД validated → delivered
→ payment matched → allocated → reconciled → CLEANLY_CLOSED
partner payout — только из collected cash

Каждый переход — запись в append-only lifecycle-журнале (evidence, не второй money-ledger). invoice ≠ cash: сумма счёта — это документ, а не деньги на счёте.

Граница денег (жёстко)

Единственный владелец денег — LedgerService
Баланс живёт только в append-only ledger (row-lock + событие + проекция в одной транзакции, prepaid, без отрицательного баланса, идемпотентные списания). Billing Trust считает решения и статусы и баланс не двигает.
Решения авторизуют, движения исполняет ledger
Зачисление сматченного платежа, credit/refund, авто-пополнение, выплата партнёру — только через типизированные идемпотентные события LedgerService. Коррекции — новыми adjustment/refund событиями, finalize не реверсится.
Read-side заземлён на реальные деньги
Кредитная экспозиция, выплаты партнёру и trust-receipt читают реальные LedgerEvent / Account / UsageEvent (read-only), а не только собственные таблицы. Флаги receipt деривируются из фактического состояния, не из тела запроса.
Внешний контур честно помечен roadmap
Реальный УПД XML + подпись + отправка ЭДО, 1С Billing Connector, предиктивный forecast экспозиции и wiring решений в LedgerService — внешний контур/roadmap, не имитируется. Ставки и формат УПД illustrative, требуют утверждения бухгалтерией AIRUS.

Движки

Quote-to-Invoice Gate
Строка счёта эмитится только при полном evidence: contract + price version + usage record + complexity decision + approval (если нужно) + tax + period + описание услуги. Нет доказательства — нет строки.
Payment Matching
Сумма + ИНН плательщика + назначение платежа → matched / review / split_required / unmatched. Неопознанный платёж НЕ зачисляется наугад (fail-closed). Излишек при нескольких счетах → распределение, не автозачисление.
Credit Exposure Guard
Экспозиция = просрочка + невыставленный текущий долг + незасчитанный usage + прогноз. Тенант с большим незасчитанным потреблением больше не проходит как «здоровый».
Partner Payout Gate
Выплата = (собранные − возвраты − споры − налоги − исключения) × %. Ноль собранных денег — ноль выплаты. Комиссия по self-reported обороту показывается отдельно как advisory, не как основание к выплате.
УПД 5.03 Validation
Реквизиты, контрольная сумма ИНН, сверка НДС со ставкой — до отправки. Не проходит валидацию — не уходит контрагенту.
EDO Readiness
Оператор, роуминг, формат, подписант (сертификат), МЧД — проверка готовности канала ЭДО до первой поставки.
Billing Trust Receipt
Verdict CLEANLY_CLOSED: quote↔invoice сходятся, usage принят, счёт выставлен, платёж сматчен, УПД доставлен, сверено, споров ноль, собрано ≥ выставлено. sha256, самопроверяемый.
Aging · Dunning · Suspension
Бакеты current/1-7/8-30/31-60/61+/disputed/promised, стадия dunning, лестница деградации доступа. Оплаченный evidence не отключается ни на одной ступени.

Проверить решением, а не на словах

Каждый движок доступен как публичный what-if. Например — Partner Payout Gate: ноль собранных денег даёт ноль выплаты, несмотря на любой advisory-оборот.

curl -sX POST https://airus.world/v1/airus/billing-trust/partner-payout \
  -H 'content-type: application/json' \
  -d '{"collected_rub":0,"commission_percent":20,"advisory_commission_due_rub":100000}'
# → {"status":"BLOCKED_NO_COLLECTION","payable_rub":0, ...}

Полный каталог — в документации, финансовые смежники — QuoteToCashOps и Verifiable Billing.