Corporate-Action Status and Effective-Date Reconciliation
Install and import
npm install fintech-algorithmsimport { reconcileCorporateAction } from "fintech-algorithms/corporate-actions-and-security-master-data/point-in-time-universe/corporate-action-status-and-effective-date-reconciliation";Signature
reconcileCorporateAction(input)Reconstructs the highest-authority corporate-action state knowable at an as-of time while preserving conflicts and terminal messages.
Parameters
| Name | Type | Notes |
|---|---|---|
input | object | Topic-specific point-in-time audit contract. |
Returns
object
Structured state, audit rows, diagnostics, and provenance.
Complexity: time O(n log n),
space O(n).
Worked example
executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.
Input
{
"event_reference": "CA-77",
"security_id": "SYNTH-XYZ",
"event_type": "stock-split",
"as_of": "2026-07-05T12:00:00Z",
"records": [
{
"message_id": "P-1",
"event_reference": "CA-77",
"security_id": "SYNTH-XYZ",
"event_type": "stock-split",
"source": "provider-feed",
"source_rank": 1,
"version": 1,
"available_at": "2026-07-01T09:00:00Z",
"announcement_date": "2026-07-01",
"effective_date": "2026-07-15",
"status": "preliminary",
"function": "new",
"supersedes": null
},
{
"message_id": "E-1",
"event_reference": "CA-77",
"security_id": "SYNTH-XYZ",
"event_type": "stock-split",
"source": "exchange-notice",
"source_rank": 2,
"version": 1,
"available_at": "2026-07-03T11:00:00Z",
"announcement_date": "2026-07-01",
"effective_date": "2026-07-16",
"status": "confirmed",
"function": "new",
"supersedes": null
},
{
"message_id": "I-2",
"event_reference": "CA-77",
"security_id": "SYNTH-XYZ",
"event_type": "stock-split",
"source": "issuer-notice",
"source_rank": 3,
"version": 2,
"available_at": "2026-07-04T09:00:00Z",
"announcement_date": "2026-07-01",
"effective_date": "2026-07-16",
"status": "confirmed",
"function": "replacement",
"supersedes": "I-1"
}
]
}Call
reconcileCorporateAction(input)Returns
object with 10 fields: event_reference, security_id, event_type, as_of, state, selected, applicable, conflicts, …
{
"event_reference": "CA-77",
"security_id": "SYNTH-XYZ",
"event_type": "stock-split",
"as_of": "2026-07-05T12:00:00Z",
"state": "reconciled-with-conflicts",
"selected": {
"message_id": "I-2",
"source": "issuer-notice",
"source_rank": 3,
"version": 2,
"available_at": "2026-07-04T09:00:00Z",
"announcement_date": "2026-07-01",
"effective_date": "2026-07-16",
"status": "confirmed",
"function": "replacement",
"supersedes": "I-1"
},
"applicable": false,
"conflicts": [
{
"type": "status-conflict",
"selected": "confirmed",
"other": "preliminary",
"other_source": "provider-feed"
},
{
"type": "effective-date-conflict",
"selected": "2026-07-16",
"other": "2026-07-15",
"other_source": "provider-feed"
}
],
"eligible_message_ids": ["E-1", "I-2", "P-1"],
"future_message_ids": []
}Diagrams
Calculation flow
Corporate-action reconciliation flow
flowchart LR
A["Versioned source messages"] --> B["Filter available_at ≤ as_of"]
B --> C["Select latest message per source"]
C --> D["Rank governed source heads"]
D --> E{"Equal-rank disagreement?"}
E -->|Yes| F["Unresolved authority tie"]
E -->|No| G["Select highest authority"]
G --> H["Retain status and effective-date conflicts"]
H --> I{"Terminal, incomplete, or future?"}
I -->|Yes| J["Block application"]
I -->|No| K["Applicable event state"]
K --> L["Audit invariant: no future message enters the selected state"]
How it works
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References
- ISO 15022 MT 564 scope
- ISO 15022 MT 564 field 23G
- ISO 15022 MT 564 field 20C
- ISO 15022 MT 564 field 98a
- FINRA Rule 11140
- Publication decision