IOSOR Learn

Wallet month-end export at 02:00 for finance and product

Ship one prepaid wallet export at 02:00 that finance and product both trust: holds, debits, refunds, and channel mix without inventing a second ledger story overnight.

Month-end at 02:00 fails when finance opens three files and product opens a fourth. Prepaid needs one shared export: every hold, debit, release, and refund on the wallet, plus channel mix that explains burn without a parallel truth. If the cutoff file cannot answer “what moved and why,” morning becomes a ticket storm.

IOSOR is white-label prepaid. One account carries messaging, verification, email, voice, and JIT number intents. USD 20 proves the export on pilot traffic; soft review near USD 1,000/month raises the cost of a messy close. Channel siblings: Verify session correlation for finance export and Voice billing rounding and connect fee export. This page is the wallet-wide month-end file.

Why 02:00 needs one shared story

One timezone, one cutoff. Finance and product read the same snapshot — not “ops will reconcile later.” Rows after 02:00 belong to the next period. Partial windows without a freeze produce double-counting and ghost refunds. Name the job owner, file location, and the rule that late outcomes update status without rewriting settled money.

Pair the close with daily honesty from Debit rows vs delivery status ledger: month-end is the roll-up, not the first meeting of money and outcome.

Columns finance and product both trust

Minimum columns for a defensible 02:00 file:

Column Finance Product
Intent / correlation ID Join refunds to originals Trace UI status
Movement type Hold / debit / release / refund Queue health
Amount + currency Period totals Cap and stop checks
Channel + unit Mix and burn Owner and SLA
Status at cutoff Accrual vs open Pending vs terminal
Idempotency key No double count Retry safety

Missing any forces invented joins. Prefer one CSV over chat dumps.

Holds, debits, refunds in one file

Open holds at cutoff stay reserved, not free available. Settled debits show amount and channel. Releases and refunds link to the original intent. Fail paths that auto-return funds — Hold fail auto-refund and status truth — appear as explicit rows, not silent balance edits. Happy path: Prepaid hold before first debit.

Never collapse refund into “negative send.” Movement type stays explicit so audit can replay the month.

Channel mix without brand leaks

Export labels clients already see: SMS, voice, email, verify, numbers — never upstream brands or cost floors. Mix answers which queue burned the wallet, not which fulfillment path ran. Caps posture sits beside the file via Multi-channel wallet caps at volume; the export needs honest channel tags and amounts.

Ops checklist before the cutoff

  1. Are timezone and 02:00 cutoff written and owned?
  2. Do open holds, settled debits, releases, and refunds all appear?

Start with IOSOR

Schedule the 02:00 UTC automated snapshot in the IOSOR console, mapping the exact export destination for finance and product teams. Ensure intent IDs and movement types like holds, debits, releases, and refunds are explicitly mapped before the scheduled export window runs. Set up webhook alerts to notify engineering if any unallocated ledger movements attempt to write across the cutoff boundary.

IOSOR takeaway

Aligning finance and product around a single 02:00 month-end export eliminates split-second accounting discrepancies and ghost refunds. Normalizing holds, debits, and releases under unified correlation IDs gives both departments a defensible ledger without exposing sensitive internal routing data.

Was this guide helpful?

Related guides