Reconciliation Guide
Formulas, daily and monthly workflows, and data-quality checks for closing the books against FlexFactor data.
How to reconcile FlexFactor report data against your own order, ledger, and bank systems. This page consolidates the calculation formulas and gives the daily, monthly, and exception-handling workflows plus the data-quality checks that catch discrepancies early. Field-level detail for each report is in the Field Schema Reference; to pick the right report for a task, use the Report Catalog.
Report delivery and timing
- Delivery. Reports are delivered by scheduled SFTP drop and scheduled email, and can be downloaded from the FlexFactor dashboard. Daily reports are produced automatically; reports for an ad-hoc date range can be generated on demand.
- Reports are immutable snapshots. Once generated, a report never changes. Late-arriving events (disputes, corrections) appear in the reports of the period in which they occur — prior-period reports are never restated. Re-pulling the same period always returns the same numbers.
- Settlement schedule. The lag between a transaction (
EventTimestamp) and its payout (SettlementDate) is set by your merchant agreement. Build your expected-deposit calendar from your contracted schedule. - Refunds and chargebacks post on their own event date. An exception lands in the settlement batch whose window contains the refund or chargeback event — which can be a later period than the original sale. Expect cross-period exceptions at close.
- All period windows are UTC. Daily reports cover a UTC calendar day and monthly reports a UTC calendar month. If your ledger runs on a local timezone, account for the boundary offset.
Sign conventions
Three conventions apply, by report family. Confirm which one a column follows before summing it:
| Report family | Convention | How to aggregate |
|---|---|---|
| Flat-report aggregate columns (activity-summary, settlement-summary, monthly reports, fees) | Positive magnitudes — ReturnsAmount = 500.00 means 500.00 of returns | Subtract reduction columns per the formulas below |
Transaction detail rows (activity-detail Amount; settlement-detail ConsumerAmount, DepositAmount) | Signed per row — return rows carry negative amounts | Sum the column; sales net against refunds automatically |
| disbursement-fee RS section | Signed — Refunds, Disputes, and Net Fees are negative | Sum straight through: NetDisbursedAmount = Sales + Refunds + Disputes + Other + NetFees |
Reconciliation formulas
Each derived amount below is what the corresponding report expects to balance to. Amounts are two-place decimals; negative values are reductions.
Activity Summary
NetAmount = TotalProcessedAmount - ProcessingFees
Expected Revenue = NetAmount - ReturnsAmount - ChargebacksAmount
Settlement Summary
SettlementAmount = TotalProcessedAmount
- ProcessingFees
- ReturnsAmount
- ChargebacksAmount
- ReserveAmount
+ ReserveReleaseAmount
- ReserveUtilizationAmount
+ Adjustments
Settlement Detail
DepositAmount = ConsumerAmount - ConsumerFee - FlexFactorFee
For returns, ConsumerAmount is negative, so DepositAmount is negative.
Monthly Settlement Summary
NetSettlement = TotalSettledAmount - TotalFees
Disbursement Fee (RS section)
NetDisbursedAmount = Sales + Refunds + Disputes + Other + NetFees
Refunds, Disputes, and NetFees are negative values.
How the reports fit together
The three levels of report reconcile against each other, so a discrepancy at one level can be traced up or down:
- Transaction level — activity-detail and settlement-detail hold one row per transaction. Sum of settlement-detail
DepositAmountwithin a batch equals the batchSettlementAmountbefore batch-level reserve movements andAdjustments(those apply at the batch level and have no per-transaction rows — see the worked example below). - Batch level — settlement-summary holds one row per settlement batch. Each row matches one bank deposit.
- Period level — activity-summary and monthly-settlement-summary aggregate a period. The sum of a month's daily settlement-summary
SettlementAmountequals the monthlyNetSettlement.
Reserve movements (ReserveAmount, ReserveReleaseAmount, ReserveUtilizationAmount) sit only at the settlement level and explain most gaps between gross processed volume and the actual bank deposit.
Daily reconciliation
- Download the activity-detail and settlement-detail reports.
- Match transactions by
ExternalIdto your order system. - Verify settlement amounts match bank deposits (settlement-summary
SettlementAmountto deposit). - Track exceptions (refunds, chargebacks) separately via activity-exceptions.
- Maintain a running reserve balance from the settlement reserve fields.
Monthly reconciliation
- Run monthly-settlement-summary for the period totals.
- Verify against the sum of daily settlements.
- Verify total fees deducted from settlements against the fees report summed by
FeeType. Fees are net-settled — deducted from payouts, never invoiced separately — so the fees report is the fee statement of record. - Review activity-summary for performance metrics.
- Close any outstanding exceptions.
- Update reserve accounting from the month's reserve movements.
Exception handling
- Monitor the activity-exceptions and settlement-exceptions reports.
- Investigate failed settlements immediately (settlement-exceptions
ExceptionReason,PayoutStatus). - Match disputes to original orders via the dispute-detail
Record ID(transaction) /Order ID. - Classify disputes by the dispute-detail
Kindfield (dispute stage — e.g.RDR,CHARGEBACK,PRE-DISPUTE,REVERSED), and monitorReply Before Datefor time-sensitive responses. The report does not carry win/loss status — theOutcome,Status, andAmount Woncolumns are always empty — so track resolution in your own dispute system. - Pre-disputes debit immediately. A
PRE-DISPUTEis not only a warning — the disputed amount and the dispute fee are debited when the pre-dispute is received. In the disbursement-fee report it appears as aDispute/Chargebackrow plus aFees/Dispute Feerow on that date. Book the dispute liability at the pre-dispute stage rather than waiting for a chargeback. - Won disputes: when a chargeback is reversed in your favor, the returned funds post as a credit in the settlement batch covering the reversal date, and a
REVERSEDrow appears in dispute-detail. Book the recovery in the period of the reversal, not the original chargeback. - RDR events appear in two reports: an RDR auto-refund produces a refund row in activity-exceptions (
ExceptionType = refunded) and aFlexReturnFeerow in the fees report, in addition to itsRDRrow in dispute-detail. Count the financial impact once — from the activity/fees side — and use dispute-detail for classification only. - Adjust revenue recognition for chargebacks; reserve liability for open disputes and record the loss on those you do not win.
Reserve accounting
The reports carry reserve movements, not a balance — maintain a running reserve balance in your ledger from the three settlement fields:
ReserveAmount— held from this batch (increases the balance).ReserveReleaseAmount— released back to you this batch (decreases the balance, increases the payout).ReserveUtilizationAmount— applied to cover losses other than this batch's own chargebacks (those are already deducted inChargebacksAmount). Both fields appearing in the same batch is normal, not double-counting.
To verify your running balance, request a reserve statement from FlexFactor support. Your reserve terms — percentage held, rolling period, release schedule — are shown in the merchant portal.
In the disbursement-fee report, the RD Adjustments subtypes (Reserve Hold, Reserve Release, Reserve Cancellation, Reserve Utilization, Reserve Deduction) are finer-grained labels of the same movements aggregated in the three settlement-summary fields.
Worked example
One settlement batch for a UTC day (2026-07-21), settling on 2026-07-22 per this merchant's schedule. Three events: two sales and one refund of an earlier order.
settlement-detail (per transaction, signed rows):
| ExternalId | TransactionType | ConsumerAmount | FlexFactorFee | DepositAmount |
|---|---|---|---|---|
| ORD-1001 | Order | 100.00 | 2.50 | 97.50 |
| ORD-1002 | Order | 200.00 | 5.00 | 195.00 |
| ORD-0994 | Return | -25.00 | 1.00 | -26.00 |
Sum of DepositAmount = 266.50.
fees report (positive magnitudes): FlexFee 2.50 + FlexFee 5.00 + FlexReturnFee 1.00 = 8.50 — ties to the batch ProcessingFees.
settlement-summary (one row for the batch, positive-magnitude columns):
TotalProcessedAmount 300.00 (completed sales only; the refund is not netted here)
ProcessingFees 8.50
ReturnsAmount 25.00
ChargebacksAmount 0.00
ReserveAmount 30.00 (10% reserve hold per this merchant's terms)
ReserveReleaseAmount 0.00
ReserveUtilizationAmount 0.00
Adjustments 0.00
SettlementAmount = 300.00 - 8.50 - 25.00 - 0.00 - 30.00 + 0.00 - 0.00 + 0.00
= 236.50
The bank deposit is 236.50. The tie-out between levels: sum of detail DepositAmount (266.50) minus the batch-level ReserveAmount (30.00) equals SettlementAmount (236.50) — reserve movements and Adjustments apply at the batch level and never appear in per-transaction rows.
Data-quality checks
Run these before trusting a reconciliation result:
- Verify all
OrderIdvalues are unique within a report. - Check for null or empty required fields.
- Validate that date ranges match the request parameters.
- Confirm currency consistency within a report.
- Validate decimal precision (two places in settlement and disbursement reports; activity-detail may omit trailing zeros — normalize when loading).
- Cross-check totals between the summary and detail reports.
Common discrepancies
| Symptom | Likely cause | Where to look |
|---|---|---|
| Deposit is smaller than processed volume | Reserve held this batch | settlement-summary ReserveAmount |
| Expected deposit never arrived | Settlement batch failed | settlement-exceptions ExceptionReason, PayoutStatus |
| Net revenue lower than sales | Fees plus returns and chargebacks | fees report by FeeType; activity-exceptions |
| Monthly total does not match sum of daily | Month-to-date run, or a failed batch excluded | monthly-settlement-detail vs. daily settlement-summary |
| Transaction in orders but not in reports | Declined attempt (never reported) or voided | activity-detail carries processed transactions only — declines never appear; voids show OrderState = voided |
Updated 6 days ago
