IOSOR База знаний

Порядок событий vs posting в ledger

Out-of-order DLR и MO не должны ломать правила prepaid debit — порядок прибытия HTTP не закон денег.

Сеть доставляет callbacks out of order. Поздний DLR, ранний MO или status flip до settle не должны изобретать второй debit или переписывать settled-строку. Эта страница — контракт порядка posting: правила ledger переживают перестановку событий. Это не primer про correlation ID и не эссе MO-vs-MT billing.

Связанные: Дубликат webhook не должен писать второй debit, Ops webhook-consumer на volume, Гейт подписи и окна replay, Контракт webhook до первой отправки, debit и delivery status в одном ledger.

IOSOR — white-label prepaid. USD 20 оплачивает smoke out-of-order на одном коридоре; soft review около USD 1 000/мес делает «последнее событие побеждает money» долгом recon. Клиент видит только white-label слова статусов.

Порядок прибытия — не закон ledger

HTTP arrival — транспортная случайность. Money постится по hold → settle → outcome-update из контракта, а не по «какой callback пришёл последним». Soft USD 1 000/мес считает перестановку инцидентом finance, когда product показывает success, а ledger двигается дважды. USD 20 доказывает: forced late DLR не открывает parallel debit. Same-ID replay: Дубликат webhook не должен писать второй debit. Здесь — разные события, неверный порядок.

Как выглядит out-of-order

Паттерн прибытия Безопасный posting Опасная реакция
DLR до settle ack Pending; settle один раз под hold Debit из одного DLR
Failed → delivered (один ключ) Outcome in place Второй charge за flip
MO до correlate MT Inbox; join когда MT settles Charge MO как outbound
Status после refund/release Без новых money Resettle released intent
Два terminal, один intent Одна money-строка Две.

Правила posting, которые переживают перестановку

Hold и idempotency keys до side effects (Контракт webhook до первой отправки). Settle money один раз на billable intent; поздние события обновляют только outcome. Не открывать parallel debit из-за раннего или позднего DLR/MO. Reject/park вне signed window — без invented success. Export join по intent — не по arrival timestamp. Money↔outcome: debit и delivery status в одном ledger. Soft volume language blocked, пока smoke показывает две money-строки на один intent.

Lag нормален; double money — нет

Pending после settle обычен. Второй charge за тот же ключ из-за позднего callback — баг. Product и finance делят terminal words без hero upstream codes: Общий язык статусов для product и finance. USD 20 доказывает коридор, где DLR-before-settle и settle-before-DLR оставляют одну prepaid-строку.

Чеклист покупателя: порядок событий vs posting

  1. Hold/settle независимы от HTTP arrival?
  2. Late DLR обновляет outcome — не второй debit?
  3. Early MO не списывается как outbound?
  4. Refund/release блокирует resettle money?
  5. Workers на volume применяют ту же таблицу?
  6. Soft USD 1 000/мес blocked, пока smoke красный?

Любое «нет» держит ordered ledger posting в draft.

Начните с IOSOR

В консоли: Event order vs ledger posting must reconcile by shared id.. Укажите владельца и гейты до расширения.

Связанное: duplicate webhook no second debit webhook consumer ops at volume.

Вывод IOSOR

Это ops-дисциплина для смены — не брошюра.

Делайте: name owner + gate. Не делайте: skip the gate.

Был ли материал полезен?

Связанные гайды