Entimema

Point-in-Time Customer State Reconstruction

Entimema
Contents

At 2026-08-18 14:37:22, a decision engine approved a limit increase. Today, exposure is higher, another facility exists, DPD was corrected, identity resolution changed and behavioural PD runs on version 5. None of that proves what the engine knew at 14:37:22.

THEN · 14:37:22identity v7 · two facilities
DPD known then · PD v4
TODAYmerged identity · three facilities
restated DPD · PD v5
Reconstruct CustomerStateknown(Td)
Decision-time objective

Decision time is the anchor for every layer

Define Td as the exact decision timestamp. Current state is not historical state even when the borrower did nothing: mappings, correction knowledge, reducers and feature logic can all change.

CustomerStatetoday ≠ CustomerState(Td)
Historical boundary
IDENTITY STATE @ TRELATIONSHIP STATE @ TFACILITY / ACCOUNT STATE @ TPAYMENT / DPD STATE @ TEXPOSURE STATE @ TPOINT-IN-TIME FEATURESMODEL / POLICY / CONFIGURATIONDECISION MANIFESTREPLAY
Every layer is selected by decision-time availability and the exact version consumed—not by the latest row in today’s system.

Identity uses the resolution information known by Td. Relationships include only co-borrower, guarantor and facility links valid and known then. Facility state contains drawn, limit, undrawn, arrears, DPD and status under the historical reducer version. Exposure composes only those known facilities and edges.

Known state replays the decision; restated state explains corrected history

KNOWN CUSTOMER STATE @ TACTUAL DECISION
RESTATED CUSTOMER STATE @ TCOUNTERFACTUAL DECISION
The corrected branch supports incident and counterfactual analysis. It never replaces the production record.
Sknown(Td) ≠ Srestated(Td)
Two valid historical states

A late payment, identity merge or co-borrower correction can change what is now believed economically true. Historical replay must still use the values, relationships and versions that were available to production. Corrected state belongs in a separately labelled comparison.

A feature must have been available—not merely effective

A feature can summarise data through 13:00 but become available only at 14:00. A 13:30 decision cannot consume it. Effective time describes the world; availability time describes the institution’s knowledge.

AvailableAsOf(X) ≤ Td
Point-in-time eligibility
type PointInTimeFeature<T> = {
  value: T;
  effectiveAsOf: Date;
  availableAsOf: Date;
  calculatedAt: Date;
  featureVersion: string;
};

A latest-value-only feature store cannot reproduce decisions. Historical online and offline retrieval must agree for the same available event set and feature definition:

Featureonline(T) = Featureoffline-known(T)
Training-serving integrity

The decision manifest binds state, versions and outcome

type DecisionManifest = {
  decisionId: string;
  decisionTime: Date;
  partyId: string;
  identityResolutionVersion: string;
  relationshipStateVersion: string;
  facilityStateRefs: string[];
  featureSnapshotId: string;
  modelVersion: string;
  policyVersion: string;
  configurationVersion: string;
  decisionEngineBuild: string;
  outcome: string;
};
IDENTITY VERSIONSTATE REFERENCESFEATURE SNAPSHOTMODEL VERSIONPOLICY + BUILD
STORED DECISION
Versions are material only when they can change output; meaningless version proliferation creates noise, not reproducibility.
{
  "decisionEngineBuild": "2026.08.18.3",
  "identityVersion": "identity-v7",
  "customerProjectionVersion": "customer-state-v4",
  "featureSetVersion": "behavioural-features-v11",
  "modelVersion": "pd-v5.2",
  "policyVersion": "limit-strategy-v9"
}

Choose immutable payloads, versioned references or a deliberate hybrid

Decision-input preservation patterns
PatternStrengthCost / condition
Full input snapshotStraightforward replay and strong audit evidenceStorage, sensitive-data duplication and schema evolution
Reference manifestLower duplication and centralised stateEvery referenced historical version must remain immutable and queryable
HybridCritical scalars plus references to larger stateRequires a clear boundary and referential integrity

Store Hash(InputPayload) to verify equality, never as a replacement for preserved inputs. Minimise PII through canonical references and controlled encrypted snapshots. Retention follows audit, validation and product obligations; do not delete lineage while decisions can still be challenged.

Historical joins use both valid time and system time

SELECT ...
FROM decisions d
JOIN party_relationship_history r
  ON r.party_id = d.party_id
 AND r.valid_from <= d.decision_time
 AND (r.valid_to IS NULL OR r.valid_to > d.decision_time)
 AND r.system_from <= d.decision_time
 AND (r.system_to IS NULL OR r.system_to > d.decision_time);

Valid time selects the relationship economically applicable at Td; system time prevents later corrections from leaking backward. Dialects differ, but a join to the current customer master is never an equivalent substitute.

State(Td) = Snapshotk + Eventsk+1:Td
Snapshot and tail replay

For performance, reconstruct from a temporal snapshot plus later available events. The snapshot must declare effective horizon, knowledge horizon and reducer version. A snapshot labelled only “as of date” is ambiguous.

Replay executes the original decision function with the original context

D = F(CustomerState, Features, Model, Policy, Configuration)
Deterministic decision
async function replayDecision(
  manifest: DecisionManifest
): Promise<DecisionResult> {
  const state = await reconstructCustomerKnownState(manifest);
  const features = await featureStore.loadSnapshot(
    manifest.featureSnapshotId
  );
  const model = await modelRegistry.load(manifest.modelVersion);
  const policy = await policyRegistry.load(manifest.policyVersion);

  return runDecision({ state, features, model, policy });
}

The sketch omits configuration and runtime wiring for readability. Production replay must preserve deterministic rule order and the strategy graph—not just which rules fired. External bureau or SaaS responses require an immutable response ID, received time and schema version; today’s endpoint cannot recreate yesterday’s response.

Historical replay and counterfactual replay answer different questions

HISTORICAL REPLAY

Original known state + features + model + policy. Goal: reproduce the actual outcome.

COUNTERFACTUAL REPLAY

Change corrected state, model, policy or freshness. Goal: ask what would have happened.

Change one component at a time where possible. Hold state, features and policy constant to isolate a model change; hold model and policy constant to quantify a late-data incident.

ΔD = Dcounterfactual − Dactual
Decision transition

State, feature, model and policy effects can interact; do not pretend their attribution is always additively separable. Preserve the actual decision as immutable evidence.

Corrected historical data can create hindsight leakage

Subtle point-in-time leakage paths
LeakageMechanismControl
Payment correctionWarehouse backdates a later-known payment to economic dateFilter by availability time
Identity leakageLater merge consolidates old exposureUse identity mapping known at scoring
Relationship leakageLater co-borrower edge changes historical obligationsUse bitemporal relationship state
Policy leakageToday’s strategy reclassifies old decisionsRetain original policy and label counterfactuals
Training-serving skewCode, freshness, nulls or mappings differ online/offlineCompare identical state and feature versions

Engineering explainability traces the input state, not only the model score

DECISIONMODEL + POLICYFEATURE SNAPSHOTCUSTOMER STATEFACILITY STATEEVENTS / SOURCES
type DecisionTrace = {
  decisionId: string;
  inputManifest: DecisionManifest;
  modelScore?: number;
  ruleHits: string[];
  finalOutcome: string;
};

A feature-importance explanation is incomplete if the value itself cannot be traced to its source, time and definition. Record rule hits without exposing sensitive rule text, plus the deterministic strategy version and evaluation sequence.

Freshness and fallback are part of the historical policy path

{
  "exposureEffectiveAsOf": "2026-08-18T14:35:00Z",
  "dpdEffectiveAsOf": "2026-08-18T14:30:00Z",
  "behaviouralPdCalculatedAt": "2026-08-18T06:00:00Z"
}
Age(Inputk) ≤ AllowedAgeD,k
Freshness budget

If an input is stale, retain the stale condition, the fallback or review branch used and that fallback’s configuration version. Hiding staleness makes a decision look reproducible while omitting why the engine followed a different path.

Preserve only runtime details that can change output

Exact replay may require the engine build, model artefact, policy graph, feature-definition code, schemas and material dependency versions. For a non-deterministic component, preserve the seed, model snapshot and input/output record; deterministic core credit logic remains preferable where appropriate.

Current-state caches can serve live traffic, but an expired cache cannot be the historical system. Use durable temporal stores, indexed snapshots and tail replay. Optimised replay and full event reconstruction must agree.

Replaysnapshot+tail(T) = Replayfull events(T)
Replay implementation invariant

A golden decision fixture makes reproducibility executable

Entimema golden decision replay fixture
LayerFixture state
PartyP1 under identity resolution v7
FacilitiesF1 term loan; F2 revolving line
EventsKnown payments and limit changes through T
RelationshipsP1 primary borrower under relationship v4
FeaturesImmutable behavioural feature snapshot v11
ExecutionPD model v5.2; limit policy v9; engine build 2026.08.18.3
ExpectedExact customer inputs, score, rule path and approved limit outcome

The fixture is broader than a single event stream: it fixes identity, relationships, state, features and execution versions together. A controlled golden portfolio should also cover a joint borrower, late payment, identity correction, stale feature and fallback path.

Test inputs and outcome—matching decisions can hide compensating bugs

Point-in-time replay test suite
TestExpected proof
Replay equalityReplayed deterministic outcome equals stored outcome
State equalityEvery critical reconstructed input equals the stored snapshot or hash
Identity versionUsing current mapping creates a visible mismatch
Late paymentKnown replay stays fixed; restated counterfactual may change
Relationship correctionLater co-borrower never enters original replay
Feature availabilityCorrected offline feature is rejected when unavailable at T
Policy versionOriginal policy reproduces; new policy is labelled counterfactual
Build versionEngine-code changes remain distinguishable from model changes
Missing inputNo silent substitution with today’s value
Replay implementationSnapshot+tail equals full event reconstruction

Classify legacy evidence as exact, reconstructed with assumptions or unreproducible. Never fake precision when lineage is incomplete. Run fixed replay cases in CI after feature, state-engine, identity and policy-engine changes; only reviewed differences pass.

Reproducibility is a production control, not a one-off audit

ReplaySuccessRateInputManifestCompletenessHistoricalStateReconstructionFailureRateStaleInputDecisionRateKnownVsRestatedDecisionDifferenceRateReplayRegressionRate

No universal thresholds apply. A replay diff should show decision ID, stored and replayed outcomes, changed inputs, changed versions and reason. If a previously reproducible sample fails after an infrastructure release, investigate before trusting new historical analysis.

The Entimema architecture turns historical decisions into reproducible evidence

DECISION TIMEIDENTITY RESOLUTION @ TRELATIONSHIPS @ TFACILITY / ACCOUNT STATE @ TDPD / EXPOSURE @ TPOINT-IN-TIME FEATURESMODEL + POLICY + CONFIGURATIONDECISION MANIFESTSTORED DECISIONREPLAY / COUNTERFACTUAL ANALYSIS
The exact decision timestamp selects known identity, relationships, financial state and features before immutable execution versions produce the manifest and replay evidence.
ENTIMEMA FRAMEWORKReconstruct → Reproduce → Compare → Validate → Monitor
  1. Anchor decision time
  2. Resolve identity at T
  3. Resolve relationships at T
  4. Reconstruct facility state
  5. Derive exposure and DPD
  6. Load available features
  7. Load execution versions
  8. Execute
  9. Compare stored decision
  10. Explain differences

A Decision Replay & Lineage Agent can assemble evidence without rewriting history

A controlled agent can reconstruct historical customer state, resolve identity and relationship versions, retrieve known financial state and exact feature snapshots, identify model/policy/configuration versions, replay decisions, compare known and restated outcomes, detect hindsight leakage and surface missing lineage.

Continue with Handling Joint Borrowers and Connected Exposures, Building a Golden Customer Record, Why Customer ID Is Not Enough, Customer, Facility, Account and Exposure, Event Time vs Processing Time vs Posting Time, Building a Reliable DPD Engine, The Single Customer View Is Usually a Fiction and Credit Decision Engine Architecture. A time-respecting feature store, event-driven risk architecture and model/policy replay remain future research directions—not fabricated routes.