The Midaz posting path
Lender is the source of truth for the credit journey; Midaz is the source of truth for balances. Every financial event a loan produces is booked to the as a balanced transaction — and the path is built to never lose a booking and never book to the wrong place.
A domain event produces a posting intent
When a loan is disbursed, a repayment is recorded, interest accrues, or a transaction is reversed, Lender persists a durable posting intent in the same database transaction that changes domain state. The intent is written to a transactional outbox, so it survives a crash between “state changed” and “ledger booked.”
The relay posts a balanced transaction to Midaz
An outbox dispatcher drives the ledger relay, which posts the balanced double-entry transaction to Midaz through the official SDK. The legs come from the product’s accounting profile.
Idempotency is durable
Each posting carries a deterministic idempotency key computed by Lender. A retried post collapses to the same Midaz transaction; Midaz’s own idempotency window is a backstop, not the primary guard.
Lifecycle events
Lender publishes a catalog of 14 business events over the platform streaming backbone (RedPanda, through Lerian’s streaming library). Every event is outbox-backed, tenant-scoped, and carries a CloudEvents
source set by your deployment, which also namespaces the streaming topic names, so downstream products and your own services can react to the credit journey as it unfolds. Subscribe on the source your deployment configures rather than a fixed literal.
| Domain | Events |
|---|---|
| Products | loan_product.created, loan_product_version.created, loan_product.activated, accounting_profile.configured, loan_charge.applied |
| Origination | loan_application.submitted, loan_application.approved, loan_application.rejected, loan_application.withdrawn, loan_application.disbursed |
| Servicing | repayment.recorded, repayment_reversal.recorded, loan_schedule.prepayment_applied, loan_schedule.rescheduled |
The Brazilian consignado privado journey contributes its own events on top of this catalog — margin, averbação, and reconciliation signals. See Consignado privado.
Multi-tenancy
Like every Lerian product, Lender is built for full tenant isolation from the ground up.
- Schema-per-tenant persistence when multi-tenancy is enabled, so tenant data never shares a table.
- Tenant-scoped events and ledger postings — every emitted event and every Midaz transaction carries the tenant it belongs to.
- Under multi-tenant mode, the ledger relay resolves a per-tenant Midaz client, and the accounting profile supplies the per-tenant ledger target (which is why routing fails closed when a target is missing).
Observability
Lender emits structured logs, OpenTelemetry traces, and metrics on the same observability stack as the rest of the platform, including database, assertion, and panic-recovery metrics. See Observability.
Next steps
Accounting and accrual runs
Go deeper on posting rules, accrual runs, and journal references.
Configuration and deploy
See the dependencies and configuration the posting path and event stream require.

