One borrower appears as CRM C10291, servicing 884021, collections COL-7712, card processor P-99281 and accounting BP-04021. The institution has five records; the economic reality is one party.
A model keyed only to servicing sees the term loan but misses the card and collections history. A faulty merge can do the opposite and combine unrelated borrowers.
Preserve source evidence; map it to a stable canonical party
type SourcePartyRecord = {
sourceSystem: string;
sourceId: string;
legalIdentifier?: string;
name?: string;
dateOfBirth?: string;
email?: string;
phone?: string;
createdAt: Date;
};
type CanonicalParty = {
partyId: string;
partyType: "INDIVIDUAL" | "ORGANISATION";
};The canonical party is a stable internal representation independent of any one source ID. It is not a legal identifier and should not be presented as external truth.
type MatchConfidence =
| "CONFIRMED"
| "PROBABLE"
| "UNRESOLVED";
type PartySourceLink = {
partyId: string;
sourceSystem: string;
sourceId: string;
confidence: MatchConfidence;
validFrom: Date;
validTo?: Date;
resolutionVersion: string;
};This source-link is the lineage object. Preserve every historical source identity rather than only the current “best” ID.
False splits and false merges are symmetric technical errors with asymmetric costs
Exposure understated
Exposure overstated
| Error | Definition | Consequences |
|---|---|---|
| False split | One party → multiple canonical parties | Fragmented behaviour, understated debt, overstated affordability, duplicate collections |
| False merge | Multiple parties → one canonical party | Transferred delinquency, overstated exposure, unfair rejection or treatment |
Match precision measures how many linked pairs truly match; recall measures how many true links were found. The business loss is not necessarily symmetric: false split can hide debt while false merge can deny credit to the wrong person. Material ambiguity needs governed review.
Normalisation improves comparison without destroying raw evidence
type NormalisedField = {
raw: string;
normalised: string;
};Trim whitespace, normalise case and punctuation, and canonicalise benign formats such as phone or registration-number presentation—but retain raw values. Names remain noisy through ordering, transliteration, titles, diacritics and spelling; contact data may be shared or recycled. Neither is strong proof alone.
Comparing every record pair is O(n²). Candidate generation or blocking narrows the search using coarse governed attributes. Aggressive blocking is cheaper but creates false splits; loose blocking improves recall but increases compute and review volume.
| Evidence | Useful signal | Safety caveat |
|---|---|---|
| Verified identifier | Strong deterministic candidate | Migration, corruption, reuse or formatting can still fail |
| Name tokens | Candidate generation / weak similarity | Not sufficient identity proof |
| Phone / email | Supporting contact evidence | Shared family contact, generic email or recycled number |
| Date consistency | Supporting contradiction or agreement | Missing and source quality matter |
| Confirmed migration map | Strong source continuity | Preserve mapping lineage and version |
Strong evidence links; weak evidence scores; contradictions can veto
Same verified identifier or existing confirmed source mapping creates a high-confidence candidate.
Multiple governed weak signals estimate whether records represent the same entity.
Conflicting strong identifiers prevent automatic merge even when names look similar.
A similarity score is not automatically P(SameEntity). If interpreted probabilistically, it must be calibrated and validated. Source authority also matters: verified identity data and a marketing CRM should not carry equal evidential weight by default.
type SourceAuthority = {
sourceSystem: string;
domain: "IDENTITY" | "CONTACT" | "RELATIONSHIP";
trustLevel: string;
};Use minimum necessary data. A strong deterministic identifier does not justify accumulating every address and behavioural attribute. Controlled access, encryption and audit are part of the architecture.
Resolution has three zones, not a Boolean match flag
Very high confidenceREVIEW
Ambiguous / materialNO-LINK
Insufficient or contradictory
No universal numerical thresholds apply. If a record cannot confidently match an existing party, create a new canonical party or keep it unresolved rather than forcing a weak merge.
type IdentityResolutionDecision = {
resolutionId: string;
sourceRecordA: string;
sourceRecordB: string;
outcome: "MATCH" | "NO_MATCH" | "UNRESOLVED";
decisionTime: Date;
resolutionVersion: string;
reasonCodes: string[];
};A reviewer's output becomes structured evidence, not an untraceable override. Every auto-link should answer why: same verified identifier, confirmed migration mapping or governed manual resolution. Negative evidence may outweigh several weak similarities.
Merges and splits are financially material correction events
Later evidence can show Party A and Party B are one entity. Do not delete either ID; emit a versioned PARTY_MERGED event with sources, target, effective time, known time and reason.
Several canonical parties become one current economic identity while all source and prior party lineage remains.
A false merge is corrected into separate parties; current exposure and affected histories are rebuilt.
Split is harder: exposure, affordability, delinquency, features and decisions may all change. Treat it through the same correction/restatement architecture as late financial data rather than silent master-data cleanup.
Do not blindly merge an entire connected component. A ≈ B and B ≈ C does not necessarily make A ≈ C sufficiently certain. Validate strong-identifier consistency, contradictions and cluster lineage.
Identity has valid time and system time
P-A + P-B unresolvedlater merge evidenceRESTATED AT T
Canonical P-0042
Valid time expresses when the relationship was economically true; system time expresses when the platform resolved it. A decision before merge must replay using the mapping known then. Corrected exposure may be larger because previously fragmented facilities consolidate—an infrastructure correction, not borrower behaviour.
Improved resolution can shift total exposure, max DPD and facility count while the credit model is unchanged. Decision monitoring should classify this as infrastructure/configuration change rather than unexplained model drift.
Entity resolution is not KYC, fraud or household linking
| Domain | Purpose | Boundary |
|---|---|---|
| KYC / verification | Establish or verify identity through formal controls | Entity linkage does not replace verification |
| Entity resolution | Link records likely representing one party | Preserve uncertainty and evidence |
| Fraud detection | Assess suspicious identity behaviour | Data coherence is not fraud adjudication |
| Household / business relationship | Connect distinct parties | Shared address, phone or surname must not merge identities |
| Facility resolution | Deduplicate economic contracts | Party resolution does not deduplicate facilities |
Organisation resolution must preserve legal entities, trading names, branches and name changes without assuming they are interchangeable. Role resolution is separate again: one party can be borrower, guarantor and payer while remaining one identity.
Downstream decisions consume confidence and version, not only party ID
interface IdentityResolutionService {
resolveSourceParty(
sourceSystem: string,
sourceId: string,
asOf?: Date
): Promise<ResolutionResult>;
getCanonicalParty(partyId: string): Promise<CanonicalParty>;
}
type ResolutionResult = {
partyId?: string;
confidence: MatchConfidence;
resolutionVersion: string;
reasonCodes: string[];
};{
"decisionId": "dec_501",
"partyId": "P-0042",
"resolutionVersion": "identity-v7",
"resolutionConfidence": "CONFIRMED"
}The decision manifest makes exposure and behaviour reproducible. Once source records resolve to a party, exposure aggregation still follows role and facility deduplication rules from the credit data model.
Resolution logic is production decision infrastructure
Every change to normalisation, blocking, match rules, source weighting or calibration receives a new resolutionVersion. Historical decisions retain the version they used.
- Compare old/new party assignments
- Count merges and splits
- Classify unresolved changes
- Quantify exposure delta
- Inspect feature changes
- Replay material decisions
- Approve and monitor deployment
Batch re-resolution is a controlled migration, not a silent table refresh. Counterfactual decisions quantify impact while actual historical decisions remain immutable.
A golden identity dataset tests both similarity and contradiction
| Case | Evidence | Expected result |
|---|---|---|
| A | Same strong verified identifier | MATCH / confirmed candidate |
| B | Same name; conflicting strong identifiers | NO AUTO-MATCH |
| C | Old/new core IDs with confirmed migration mapping | MATCH / same canonical party |
| D | Shared phone; different verified identifiers | SEPARATE PARTIES |
| E | Missing identifier and insufficient weak evidence | UNRESOLVED |
| F | Transliteration variation plus consistent governed evidence | Review or match according to validated policy |
Include exact duplicates, name variation, shared contact, migration IDs and deliberate contradictions. Expected canonical links and confidence zones are fixed test evidence—not thresholds inferred from the test run.
Pairwise accuracy is necessary; cluster integrity catches systemic corruption
| Test | Proof |
|---|---|
| Pairwise precision / recall | Labelled pairs quantify false merge and split trade-off |
| Cluster contradictions | No auto-cluster contains conflicting strong identifiers |
| Cluster size | Implausible sudden growth is detected |
| Referential integrity | One active source-party link per relevant valid-time interval |
| Overlapping links | P1/P2 overlap requires explicit supersession |
| Temporal merge | Known state stays split before knowledge time; current/restated can merge |
| Split correction | Lineage survives; exposure and impacted decisions are traceable |
| Decision replay | Pre-correction decision uses old resolution version |
Monitor resolution behaviour like model and infrastructure change
No universal threshold applies. A merge spike after deployment can indicate regression. Monitor cluster-size distributions, unexpected large clusters, unresolved concentration by source/migration cohort/completeness, and time from record creation to canonical resolution.
Delayed identity resolution delays complete exposure. Repeated unresolved concentration identifies source-quality debt; resolution metrics should link to decision and exposure materiality rather than only record counts.
The Entimema resolution architecture makes each link explainable
- Preserve source record
- Normalise
- Generate candidates
- Apply strong evidence
- Apply weak evidence carefully
- Detect contradictions
- Assign confidence
- Create or link canonical party
- Preserve lineage
- Monitor decision impact
An Entity Resolution Integrity Agent can surface evidence and impact
A future controlled agent can monitor unresolved identities, likely duplicates, suspicious clusters and conflicting strong identifiers; compare resolution versions; quantify exposure changes; reconstruct known/restated party state; and identify decisions affected by merge or split corrections.
Credit Risk
Complete exposure, behavioural history and point-in-time validation.
Financial Data
Canonical identity, source lineage, mapping quality and reconciliation.
Decision Automation
Confidence-aware affordability, limit and collections decisions.
Continue with Customer, Facility, Account and Exposure, Event Time vs Processing Time vs Posting Time, Reconstructing Account State, Building a Reliable DPD Engine, The Single Customer View Is Usually a Fiction, The Hidden Infrastructure Debt of Modern Lending, Affordability Decisioning, Credit Limit Assignment, Behavioural Credit Scoring and Collections Prioritisation. Golden records, connected exposures and cross-platform resolution are future research directions, not fabricated routes.