fintech-algorithms

Spin-Off Price Adjustment

Separate Parent Price from Distributed Value

Install and import

bash
npm install fintech-algorithms
ts
import { calculate } from "fintech-algorithms/corporate-actions-and-security-master-data/complex-distributions/spin-off-price-adjustment";

Signature

calculate(input)

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

input
{
  "asOf": "2026-06-02T20:00:00Z",
  "revisions": [
    {
      "eventId": "SYNTH-SPIN-2026",
      "revisionId": "SYNTH-SPIN-2026-R1",
      "revisionSequence": 1,
      "availableAt": "2026-05-21T12:00:00Z",
      "status": "confirmed",
      "quoteCurrency": "USD",
      "recordAt": "2026-05-20T20:00:00Z",
      "whenIssuedStartAt": "2026-05-27T13:30:00Z",
      "distributionAt": "2026-06-01T12:00:00Z",
      "parentExAt": "2026-06-01T13:30:00Z",
      "childRegularWayAt": "2026-06-01T13:30:00Z",
      "unavailableChildPricePolicy": "pending",
      "parentCumObservation": {
        "price": 120,
        "currency": "USD",
        "priceType": "regular_way_cum_distribution",
        "observedAt": "2026-05-29T20:00:00Z",
        "availableAt": "2026-05-29T20:00:05Z",
        "sourceId": "SYNTH-PARENT-CLOSE"
      },
      "parentExObservation": {
        "price": 108,
        "currency": "USD",
        "priceType": "regular_way_ex_distribution",
        "observedAt": "2026-06-01T20:00:00Z",
        "availableAt": "2026-06-01T20:00:05Z",
        "sourceId": "SYNTH-PARENT-EX-CLOSE"
      }
    }
  ]
}

Call

calculate(input)

Returns

object with 16 fields: eventId, revisionId, availableAt, status, quoteCurrency, parentCumPrice, distributedValuePerParent, theoreticalParentExReference, …

{
  "eventId": "SYNTH-SPIN-2026",
  "revisionId": "SYNTH-SPIN-2026-R1",
  "availableAt": "2026-05-21T12:00:00Z",
  "status": "ready",
  "quoteCurrency": "USD",
  "parentCumPrice": 120,
  "distributedValuePerParent": 13.5,
  "theoreticalParentExReference": 106.5,
  "backwardAdjustmentFactor": 0.8875,
  "factorDirection": "multiply_pre_event_parent_prices",
  "factorAnchor": "post_event_parent_only_basis",
  "rounding": "shortest_decimal_half_up_6_on_output_only",
  "components": [
    {
      "securityId": "SYNTH-CHILD-A",
      "entitlementRatio": 0.25,
      "priceType": "when_issued",
      "priceQuote": 44,
      "valuePerParent": 11,
      "holderEntitlement": {
        "exactChildShares": 5.75,
        "wholeChildShares": 5,
        "fractionalChildShare": 0.75,
        "fractionalReferenceValue": 33,
        "actualCashInLieuKnown": false
      }
    },
    {
      "securityId": "SYNTH-CHILD-B",
      "entitlementRatio": 0.1,
      "priceType": "regular_way",
      "priceQuote": 25,
      "valuePerParent": 2.5,
      "holderEntitlement": {
        "exactChildShares": 2.3,
        "wholeChildShares": 2,
        "fractionalChildShare": 0.3,
        "fractionalReferenceValue": 7.5,
        "actualCashInLieuKnown": false
      }
    }
  ],
  "economicValueAllocation": {
    "parentWeight": 0.8875,
    "children": [
      {
        "securityId": "SYNTH-CHILD-A",
        "weight": 0.091667
      },
      {
        "securityId": "SYNTH-CHILD-B",
        "weight": 0.020833
      }
    ]
  }
}

Showing 14 of 16 fields.

Other exports

This module also exports roundHalfUp6. Every module additionally exports run as an alias of its primary function, and a meta object carrying its catalog id, domain, family, shape and article URL.

Diagrams

Spin-Off Price Adjustment — article hero
Spin-Off Price Adjustment — failure guard
Spin-Off Price Adjustment — worked example

Calculation flow

Evidence-to-output calculation flow
flowchart LR
    A["Select revision at asOf"] --> B["Validate parent cum observation"]
    B --> C["Value each child and FX"]
    C --> D{"All references available?"}
    D -->|No| E["Pending or reject"]
    D -->|Yes| F["Sum distributed value"]
    F --> G["Parent-only factor"]
    F --> H{"Parent ex observation?"}
    H -->|Yes| I["Gross and net combined return"]
    H -->|No| J["Return bridge unavailable"]
Spin-off event and market-line lifecycle
stateDiagram-v2
    [*] --> Announced
    Announced --> RecordSet: record boundary
    RecordSet --> WhenIssued: conditional child trading
    WhenIssued --> Distributed: legal distribution
    Distributed --> ParentEx: parent without entitlement
    ParentEx --> ChildRegularWay: issued child trades normally
    WhenIssued --> PendingValue: price unavailable
    PendingValue --> ChildRegularWay: causal observation arrives
    Announced --> Cancelled: confirmed cancellation

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

  • S&P DJI Equity Indices Policies & Practices
  • FTSE Russell Corporate Actions and Events Guide
  • GE Board approves GE Vernova spin-off
  • GE Vernova Information Statement, SEC exhibit 99.1
  • GE Form 8-K reporting completion
  • Evidence decision