fintech-algorithms

Merger Predecessor/Successor Mapping

Preserve Identity and Entitlements Without Inventing Continuity

Install and import

bash
npm install fintech-algorithms
ts
import { 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

payload
{
  "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

Merger Predecessor/Successor Mapping — article hero
Merger Predecessor/Successor Mapping — failure guard
Merger Predecessor/Successor Mapping — worked example

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.

Read the article →

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