A three-way match between the policy record, the premium payment event and the statement commission line: different keys, match classes and negative lines.
Key takeaways
- The three sources are identified by different keys: the policy by policy number, the payment by a collection reference, the commission by a line in a periodic statement. Matching fails on the key before it fails on the amount.
- Expected commission is not data that arrives from outside. It is a value your own system computed from parameters you entered, and it should be stored as a versioned record.
- A negative statement line reverses an earlier one, so it must point back at the original record. A floating negative line is an unexplained debt.
- Period is a dimension, not an attribute. One policy generates lines in several statements, and summing without a period cut double-counts.
- The deliverable is a variance list with owners and an age in days, not a green tick.
Commission reconciliation is a three-way match: the agency's policy record, the premium payment event, and the commission line received from the carrier. The three sources arrive under different keys, at different cadences, and cut into different periods. The mechanism joins them and produces a variance queue rather than a single final number.
This is a technical description of data and workflow, not financial advice and not a statement about entitlement, commission rates or regulatory duties.
Three record sets, three keys
Each source has its own shape, and they cannot be treated as one table:
- The policy record. Created at the agency: policy number, client id, carrier, line of business, start date, status, and the calculation parameters that were agreed. This is the only record the agency fully controls.
- The premium payment event. Arrives from the carrier or a collection report: date, amount, payment method, and the coverage period it relates to. It is identified by a collection reference, which is not always the policy number.
- The statement commission line. Arrives in a periodic file: line id, line type, amount, and sometimes a policy reference formatted differently from the one you hold.
Everything rests on one identifier mapping table: the policy number as you hold it against the string as each carrier sends it. Without that table, one carrier changing its format takes down the whole run.
What expected commission is, as a data object
Expected commission is a record your system created, not an external fact. It should carry at least these fields: the policy it relates to, the payment event that triggered it, the period, the computed amount, the identity of the parameters used in the calculation, and a creation timestamp.
Versioning is the critical part. Calculation parameters change over time, and if they are stored only as a current field on the policy, every historical figure shifts retroactively the moment somebody edits them. Keeping a reference to the parameter version inside the expected-commission record is the difference between a report you can explain a year later and one that changes on every reload. The same failure is familiar from reconciling bank and card transactions, where a price or fee overwritten on the master record rewrites an entire history.
Why does a commission statement never close line for line?
Because the three sources do not speak in the same unit. These are the common sources of a gap:
| Cause of the gap | How it appears in the statement | What to check first |
|---|---|---|
| Different policy-number format | A line that finds no policy | The identifier mapping for that carrier |
| Partial payment | An amount below expectation with no explanation | The payment events for that period |
| Several payments merged into one line | One line against several payments | The sum of payment events cut by period |
| A mid-term change to the policy | An amount falling between two expectations | The change date against the period cut |
| A negative line | A negative amount with no reference | The original record it reverses |
| A timing difference between periods | A line missing this month and present next month | The previous and following statements |
| Rounding | Recurring sub-unit differences | Your own rounding rule |
The last row is not trivial at scale. Rounding differences repeat across thousands of lines and add up to a figure that looks like a real error, which is why you want a defined variance threshold below which a line closes automatically with a marker.
Which match class does a line fall into, and what does it trigger?
- Full match. Policy, payment event and commission line all found, amount within threshold. The line closes and locks.
- Amount-only match. The amount is right but the policy id was not found. This line joins the mapping queue, not the amounts queue.
- Partial match. Policy and payment found, and the amount differs from expectation beyond the threshold. This is the line that needs a real enquiry.
- Line with no expectation. A commission arrived on a policy that has no expected-commission record. Do not delete it and do not assume it is a gift.
- Expectation with no line. An expected commission was created and never appeared in any statement. After a defined number of periods it moves to enquiry.
- Orphaned negative line. A reversal with no identifiable original. This is the most dangerous class, because it reduces a figure with no explanation.
Negative events: cancellation, refund and reversal
A negative statement line is an event, not a correction. It carries three details that must be preserved: what it reverses, which period it relates to, and the reason as it appeared in the statement. All three are needed to answer, later, why the monthly figure dropped.
- A backward link. Every negative line points at an existing commission record. Without the link you cannot tell whether a given reversal has already been counted.
- A period window. A reversal can relate to a period you already closed. Closing a period on your side must allow a late event to be recorded, rather than an edit to the closure.
- The effect on balances. If the amount has already been drawn, the negative event creates a receivable, which puts it in the same family of processes as managing open debts and collection.
The rule is short: a negative event never deletes the positive one. Both records live side by side, and the balance is their sum.
What makes a variance queue you can actually work
- An owner on every line, because a variance with no name never closes.
- An age in days, so you can see what has been sitting for a fortnight.
- Absolute amount for sorting, because the five largest lines usually explain most of the gap.
- The match class, so mapping problems are handled as one group instead of one at a time.
- A reference to the source statement and line, including the filename and the load date.
- A defined variance threshold, below which closure is automatic and flagged rather than manual.
- A lock on a closed period, so that a correction is a new record rather than an edit.
That queue is also the operational layer described in automation for insurance agencies: the system surfaces what does not reconcile, and a person decides.
Sources
Frequently asked questions
What do you check first when a commission statement does not close?
The keys, not the amounts. Most gaps start with a line that found no policy because the identifier format differs, so sorting variances by match class saves hours: all mapping lines are handled together, and only then do you look at genuine amount differences.
Why store expected commission as a record instead of computing it each time?
Because a live calculation changes when a parameter changes, and the whole history moves with it. A stored record referencing the parameter version lets you explain a year later why the expectation was what it was, which is exactly what an enquiry with a carrier requires.
What do you do with a negative line that has no original record?
Leave it visible in a dedicated queue with an owner, and never close it against the most similar-looking policy. A guessed link reduces a figure on the wrong record and creates two variances instead of one. If it stays unidentified, query it with the carrier by the statement line id.
Is matching on amount alone good enough?
No. Two policies with the same amount in the same period will attach to each other's lines, and the report will still look balanced. Amount matching is a separate class intended to surface mapping problems, not a substitute for matching on the policy identifier.
Keep reading
Related service
Business Automation
I build custom automations that remove repetitive work end to end.
About the author
Yehonatan Saadia
Freelance automation, web & MVP developer
I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.
Work with meHave a project like this?
Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.
