Merger Predecessor/Successor Mapping
Preserve Identity and Entitlements Without Inventing Continuity
Install and import
npm install fintech-algorithmsimport { resolveMerger } from "fintech-algorithms/corporate-actions-and-security-master-data/identity-continuity/merger-predecessor-successor-mapping";Signature
resolveMerger(payload)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
{
"asOf": "2026-07-02T12:00:00Z",
"position": {
"predecessorQuantity": "101",
"electedOptionId": "stock-election",
"appraisalQuantity": "0"
},
"eventVersions": [
{
"eventId": "SYNTH-MERGER-001",
"revision": 1,
"status": "confirmed",
"availableAt": "2026-05-01T12:00:00Z",
"announcedAt": "2026-04-15T12:00:00Z",
"closingAt": "2026-06-30T20:00:00Z",
"effectiveAt": "2026-06-30T20:00:00Z",
"delistingAt": "2026-07-01T13:30:00Z",
"sourceIds": ["SYNTH-DEFINITIVE-AGREEMENT-R1", "SYNTH-CLOSING-NOTICE"],
"predecessor": {
"issuerId": "ISSUER-TARGET",
"instrumentId": "INSTR-TARGET-COMMON",
"shareClassId": "CLASS-TARGET-A",
"listingId": "LIST-TARGET-XNAS",
"identifiers": [
{
"scheme": "PACKAGE_SECURITY_KEY",
"value": "SYNTH-TARGET-A",
"sourceId": "SYNTH-SECURITY-MASTER"
}
]
},
"options": [
{
"optionId": "stock-election",
"stockLegs": [
{
"legId": "STOCK-LEG-1",
"ratioPerAllocatedPredecessorShare": "0.6",
"sourceId": "SYNTH-DEFINITIVE-AGREEMENT-R1",
"successor": {
"issuerId": "ISSUER-SUCCESSOR",
"instrumentId": "INSTR-SUCCESSOR-COMMON",
"shareClassId": "CLASS-SUCCESSOR-A",
"listingId": "LIST-SUCCESSOR-XNYS",
"identifiers": [
{
"scheme": "PACKAGE_SECURITY_KEY",
"value": "SYNTH-SUCCESSOR-A",
"sourceId": "SYNTH-SECURITY-MASTER"
}
]
},
"fractionalPolicy": {
"mode": "cash_in_lieu",
"lotSize": "1",
"pricePerShare": "40",
"currency": "USD",
"observedAt": "2026-06-30T20:00:00Z",
"availableAt": "2026-06-30T20:01:00Z",
"sourceId": "SYNTH-CIL-PRICE"
}
}
],
"cashLegs": [
{
"legId": "CASH-1",
"kind": "consideration",
"amountPerAllocatedPredecessorShare": "5",
"currency": "USD",
"sourceId": "SYNTH-DEFINITIVE-AGREEMENT-R1"
},
{
"legId": "TAX-1",
"kind": "withholding",
"amountPerAllocatedPredecessorShare": "0.2",
"currency": "USD",
"sourceId": "SYNTH-TAX-INSTRUCTION"
},
{
"legId": "FEE-1",
"kind": "fee",
"amountPerAllocatedPredecessorShare": "0.05",
"currency": "USD",
"sourceId": "SYNTH-AGENT-INSTRUCTION"
}
]
},
{
"optionId": "cash-election",
"stockLegs": [],
"cashLegs": [
{
"legId": "CASH-2",
"kind": "consideration",
"amountPerAllocatedPredecessorShare": "35",
"currency": "USD",
"sourceId": "SYNTH-DEFINITIVE-AGREEMENT-R1"
},
{
"legId": "FEE-2",
"kind": "fee",
"amountPerAllocatedPredecessorShare": "0.05",
"currency": "USD",
"sourceId": "SYNTH-AGENT-INSTRUCTION"
}
]
}
],
"electionRules": {
"fallbackOptionId": "cash-election",
"fulfilledFractions": {
"stock-election": "0.75",
"cash-election": "1"
}
},
"termsSupported": true
}
]
}Call
resolveMerger(payload)Returns
object with 13 fields: state, eventId, selectedRevision, effectiveAt, predecessor, allocations, successorPositions, cashByCurrency, …
{
"state": "mapped",
"eventId": "SYNTH-MERGER-001",
"selectedRevision": 1,
"effectiveAt": "2026-06-30T20:00:00Z",
"predecessor": {
"issuerId": "ISSUER-TARGET",
"instrumentId": "INSTR-TARGET-COMMON",
"shareClassId": "CLASS-TARGET-A",
"listingId": "LIST-TARGET-XNAS",
"identifiers": [
{
"scheme": "PACKAGE_SECURITY_KEY",
"value": "SYNTH-TARGET-A",
"sourceId": "SYNTH-SECURITY-MASTER"
}
]
},
"allocations": [
{
"optionId": "stock-election",
"role": "elected",
"fulfilledFraction": "0.750000",
"allocatedPredecessorQuantity": "75.750000"
},
{
"optionId": "cash-election",
"role": "fallback",
"fulfilledFraction": "0.250000",
"allocatedPredecessorQuantity": "25.250000"
}
],
"successorPositions": [
{
"issuerId": "ISSUER-SUCCESSOR",
"instrumentId": "INSTR-SUCCESSOR-COMMON",
"shareClassId": "CLASS-SUCCESSOR-A",
"listingId": "LIST-SUCCESSOR-XNYS",
"quantity": "45.000000"
}
],
"cashByCurrency": [
{
"currency": "USD",
"consideration": "1262.500000",
"appraisal": "0.000000",
"withholding": "15.150000",
"fees": "5.050000",
"cashInLieu": "18.000000",
"net": "1260.300000"
}
],
"fractionalSettlements": [
{
"stockLegId": "STOCK-LEG-1",
"grossQuantity": "45.450000",
"deliverableQuantity": "45.000000",
"fractionalQuantity": "0.450000",
"cashInLieu": "18.000000",
"currency": "USD",
"sourceId": "SYNTH-CIL-PRICE"
}
],
"identityEdges": [
{
"relation": "predecessor_instrument_to_successor_instrument",
"fromInstrumentId": "INSTR-TARGET-COMMON",
"toInstrumentId": "INSTR-SUCCESSOR-COMMON",
"effectiveAt": "2026-06-30T20:00:00Z",
"sourceId": "SYNTH-DEFINITIVE-AGREEMENT-R1"
}
],
"listingState": {
"predecessor": "inactive",
"successors": "not_established"
},
"priceAdjustment": {
"state": "not_computed",
"reason": "Identity and entitlement mapping does not create a historical price-adjustment series."
},
"diagnostics": {
"asOf": "2026-07-02T12:00:00Z",
"selectedVersionAvailableAt": "2026-05-01T12:00:00Z",
"sourceIds": [
"SYNTH-AGENT-INSTRUCTION",
"SYNTH-CIL-PRICE",
"SYNTH-CLOSING-NOTICE",
"SYNTH-DEFINITIVE-AGREEMENT-R1",
"SYNTH-SECURITY-MASTER",
"SYNTH-TAX-INSTRUCTION"
]
}
}Diagrams
Calculation flow
Point-in-time merger resolution
flowchart TD
A["Validate one event ID and immutable predecessor"] --> B["Keep versions available by asOf"]
B --> C{"Unique highest revision?"}
C -->|No version| P["Pending"]
C -->|Conflict| M["Malformed input"]
C -->|Yes| D{"Latest status"}
D -->|Cancelled| X["Cancelled"]
D -->|Pending or pre-effective| P
D -->|Unsupported terms| U["Unsupported"]
D -->|Confirmed and effective| E{"Election and proration known?"}
E -->|No| A1["Ambiguous"]
E -->|Yes| F["Allocate stock and cash legs"]
F --> G{"Fractional policy evidenced?"}
G -->|Waiting for CIL price| P
G -->|Reject conflicts with fraction| U
G -->|Yes| H["Mapped positions, cash, and identity edges"]
H --> I["Successor listing not established"]
H --> J["Historical price adjustment not computed"]
Merger mapping lifecycle
stateDiagram-v2
[*] --> Pending
Pending --> Pending: version known but not effective
Pending --> Cancelled: latest available revision cancels
Pending --> Ambiguous: effective but election unresolved
Pending --> Unsupported: terms or fractional policy out of scope
Pending --> Mapped: effective and fully evidenced
Ambiguous --> Mapped: sourced election or fallback arrives
Unsupported --> Mapped: supported revised terms arrive
Mapped --> Cancelled: later cancellation known before effective use
Cancelled --> [*]
Mapped --> [*]
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
- Disney closing Form 8-K for the 21CF acquisition
- Disney and 21CF filed issuer release announcing per-share value
- Disney and 21CF definitive joint proxy statement/prospectus
- S&P DJI Equity Indices Policies & Practices
- ISO 6166:2021, International Securities Identification Number
- NYSE Group Security Master Client Specification
- SEC rule release on removal from listing and successor securities
- Evidence boundary