Skip to content
Ledger engine|9 accounts, always balanced

Every dirham,accounted for.

A double-entry ledger, three-way reconciliation, and finalizable settlement statements — so you always know exactly what you're owed, and every dirham is traceable.

The ledger

Nine accounts. One invariant.

Every movement is a balanced double-entry posting — Σ debits = Σ credits after every write. Balances are derived, never stored.

CASHasset

Money in your own PSP account, mirrored in the ledger.

PENDINGasset

Captured, awaiting provider settlement (reserved).

COLLECTEDliability

Gross customer funds, as reported by your PSP.

AVAILABLEliability

Collected funds cleared and ready for your PSP to settle.

RESERVEliability

Amount your PSP holds back against reversals and chargebacks.

FEESincome

Your PSP fees, mirrored in the ledger.

PAID_OUTcontra-liability

Cumulative amount already settled to the tenant.

WALLETliability

Closed-loop customer balance (OtoParking model) — held by the merchant, tracked by CorpoPay.

TAX_PAYABLEliability

Tax collected on fees, owed to the tax authority.

Settlement

Gross in. Net out.

Your PSP applies its own fee and reserve, then settles the net to your bank. CorpoPay mirrors the PSP report in a balanced ledger — gross in, net out.

Gross

G

Fee

− fee

Reserve

− reserve

Available

net

The fee and reserve are set by your PSP, never by CorpoPay — you always see exactly what the provider reports.

The postings

DebitCreditAmountCategory
CASHCOLLECTEDgrossCAPTURE
COLLECTEDFEESfee (your PSP)FEE
COLLECTEDRESERVEreserve (your PSP)CAPTURE
COLLECTEDAVAILABLEnetCAPTURE

Reconciliation

Three sources. One truth.

Provider report, ledger, and payouts are matched. A difference is surfaced as a flag — never silently passed through.

Provider report

The PSP's version of what settled.

Ledger

CorpoPay's double-entry record.

Payouts

What actually left the platform.

EXACT

All three agree

AMOUNT_DIFF

A figure differs

UNMATCHED

No matching entry

Settlement statement

Opening → closing, itemized by category.

{
  openingBalance: MAD 0.00,
  closingBalance: MAD 84,117.09,
  netAmount:      MAD 84,117.09,   // closing − opening
  items: [
    { category: "CAPTURE", volume: 412, count: 18 },
    { category: "FEE",     volume: 2,438, count: 18 },
  ],
  status: "FINALIZED"   // ready to invoice the tenant
}

Finalize a statement to lock the period and hand it to a tenant as an invoice — every number is backed by a ledger entry.

Settlement status

Your PSP settles; CorpoPay mirrors the status.

DRAFT
SCHEDULED
PENDING
PROCESSING
PAID
Who settlesyour PSP
Your PSPyour PSP settles the net
FailureMirrored from your PSP

Fee engine — Phase 3

Per-transaction fees and rolling reserves — unlocked with Stripe Connect.

FLAT

Fixed amount per capture

PERCENTAGE

Basis points — default 2.9% (290 bps)

PER_METHOD

Different fee per payment method

TIERED

Volume-based bands

Disputes & chargebacks

Handled by your PSP — CorpoPay mirrors every one.

Your PSP recovers a lost dispute from your balance, and CorpoPay mirrors the chargeback in your ledger.

Immutable audit trail

Every write — capture, settle, payout, reversal, refund — is audit-logged. Combined with a derived ledger and three-way reconciliation, the whole money path is provably consistent.

See how payments flow