Corporate BES (Bireysel Emeklilik Sistemi) plans with employer matching are one of those products that look simple in the brochure and become a forensic accounting exercise the moment somebody leaves the company. The participant contribution stream is clean: money in, allocated to funds, valued daily, taxed on exit under a known schedule. The employer matching stream looks like the same thing running in parallel. It is not.
Employer matching is a conditional liability. The money is contributed, invested, and shown on participant statements — but the participant does not own it until vesting conditions defined in the employment contract are satisfied. In Turkish corporate BES arrangements those conditions typically reference length of service, reason for termination, and sometimes performance criteria that were never encoded anywhere near the pension platform.
Two systems, one number, no agreement
The vesting state of an employer matching balance is a function of employment history. The balance itself lives in the pension provider's system. These two systems were designed independently, by different vendors, on different release cycles, for different regulators.
What this means concretely:
- The pension platform knows the contribution date, the fund allocation, the daily NAV, and the current market value.
- The HR system knows the hire date, the contract type, leave periods that may or may not count toward service, internal transfers between legal entities in the same group, and the termination reason code.
- Neither system knows what the other considers authoritative when they disagree.
Most data pipelines resolve this by storing a vested boolean or a vesting_percentage on the pension side, refreshed on some cadence — monthly if you are lucky, annually if you are honest. That flag is a snapshot of a derivation, not a source of truth. The moment employment history changes retroactively — a corrected hire date, a reclassified leave, a merger that redefined continuous service — the flag is wrong and nobody knows.
The reconciliation debt
Every month that matching contributions are made without a definitive vesting calculation, you accumulate what I call reconciliation debt. Each contribution has an implicit assumption about the service clock: that it started on date X, that it has not been interrupted, that the participant is in employment category Y. Those assumptions are never written down as of the contribution date. They are recomputed on demand from whatever the HR system currently says.
So when the participant's balance is 340,000 TRY of participant money and 180,000 TRY of employer matching, and they resign after 4 years and 10 months, the question "how much matching vests?" is answered by:
- Reading the current HR record
- Applying the current vesting schedule interpretation
- Ignoring the fact that six of those matching contributions were made under a previous contract addendum with a different service definition
The answer the system produces is defensible only until somebody's lawyer asks for the derivation.
Concrete failure modes
A few patterns I have seen repeatedly in insurance and pension data:
- Silent service resets. An employee moves from Entity A to Entity B within the same holding. HR resets the service clock because that is what the payroll system does for severance calculation. The pension platform keeps the original participant record because the master contract covers the group. Vesting flag says vested; HR calculation on termination says not vested. Legal opinion required.
- Retroactive leave reclassification. Unpaid leave that was originally coded as counting toward service gets reclassified two years later after an audit. Every matching contribution during that period was made on an assumption that is now false. The pension platform has no event to react to.
- Termination reason coding drift. The vesting schedule accelerates on "involuntary termination without cause" but the HR system has fourteen termination codes and the mapping to that legal category was documented once, in 2019, in a slide deck.
- Fund performance masks the problem. If the matching pot has doubled in value, the dispute is about a much larger number than the original contribution. The reconciliation debt compounds not just with new contributions but with market returns on the disputed portion.
What the pipeline should actually do
The fix is not a better vesting flag. The fix is to stop treating vesting as a state and start treating it as a derivation with versioned inputs.
- Store the inputs, not the conclusion. At the moment of each employer matching contribution, snapshot the HR facts that would be used to determine vesting: service start date as understood on that day, contract category, applicable vesting schedule version. Store them immutably alongside the contribution.
- Make vesting a function, not a column. Any consumer that needs vesting state calls a function that takes contribution ID and evaluation date, and returns the vested portion along with the exact inputs used. No cached boolean.
- Reconcile continuously, not at termination. Run the vesting derivation on every contribution every month against current HR state. When the answer changes for a historical contribution, that is an event. Log it, route it, make somebody in HR or legal look at it before it becomes a termination-day surprise.
- Treat HR corrections as first-class events. A retroactive change to hire date or leave classification should trigger a recomputation of every affected matching contribution's vesting state, with a diff against the previous state. This is the same pattern as a trade correction in a settlement system. It should not be novel.
Why this rarely gets built
Because it is expensive, invisible until it fails, and lives across two organizational boundaries. The pension operations team does not own HR data. The HR team does not understand pension accounting. The compliance function reads the vesting schedule as a policy document, not as a computable specification. Meanwhile the plan works fine for 95% of terminations where nobody looks closely.
The 5% where somebody does look closely are the ones that end up in front of a labor court, and the answer the court gives is legally binding regardless of what your vested_flag column says. That is when the reconciliation debt gets paid, with interest, and usually by the employer.
The engineering discipline here is the same as any other financial system carrying deferred liabilities: the state you show on the screen is a derivation, the inputs to that derivation must be preserved as of the moment they mattered, and any change to those inputs is an event that must propagate. Corporate BES matching has been running for long enough in Turkey that the first wave of long-tenure terminations is arriving now. The pipelines built in 2013 were not designed for it.