fintech-algorithms

CRSP Cumulative Share/Volume Adjustment

Install and import

bash
npm install fintech-algorithms
ts
import { calculate } from "fintech-algorithms/corporate-actions-and-security-master-data/adjustment-factors/crsp-cumulative-share-volume-adjustment";

Signature

calculate(data)

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

data
{
  "schemaVersion": "CRSP_US_STOCK_CIZ_2_0",
  "sourceRelease": "synthetic-ciz-2.0-fixture-v1",
  "crspBasisDate": "2024-09-05",
  "extractCoverage": "full_history",
  "records": [
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-28",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 4,
      "crspFactorStatus": "observed",
      "rawSharesOutstandingThousands": 250,
      "rawVolumeShares": 100
    },
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-29",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 4,
      "crspFactorStatus": "observed",
      "rawSharesOutstandingThousands": 250,
      "rawVolumeShares": 125
    },
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-30",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 1,
      "crspFactorStatus": "observed",
      "rawSharesOutstandingThousands": 1000,
      "rawVolumeShares": 460
    }
  ]
}

Call

calculate(data)

Returns

object with 7 fields: schemaVersion, sourceRelease, packageSecurityKey, crspBasisDate, extractCoverage, roundingDigits, rows

{
  "schemaVersion": "CRSP_US_STOCK_CIZ_2_0",
  "sourceRelease": "synthetic-ciz-2.0-fixture-v1",
  "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
  "crspBasisDate": "2024-09-05",
  "extractCoverage": "full_history",
  "roundingDigits": 12,
  "rows": [
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-28",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 4,
      "crspFactorStatus": "observed",
      "crspMthFacShrFlg": null,
      "crspMonthlyShareFactorState": null,
      "crspSharesStatus": "computed_crsp",
      "crspAdjustedSharesOutstandingThousands": 1000,
      "crspSharesRoundTripResidual": 0,
      "crspVolumeStatus": "computed_crsp",
      "crspAdjustedVolumeShares": 400,
      "crspVolumeRoundTripResidual": 0
    },
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-29",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 4,
      "crspFactorStatus": "observed",
      "crspMthFacShrFlg": null,
      "crspMonthlyShareFactorState": null,
      "crspSharesStatus": "computed_crsp",
      "crspAdjustedSharesOutstandingThousands": 1000,
      "crspSharesRoundTripResidual": 0,
      "crspVolumeStatus": "computed_crsp",
      "crspAdjustedVolumeShares": 500,
      "crspVolumeRoundTripResidual": 0
    },
    {
      "packageSecurityKey": "SYNTHETIC-CRSP-CIZ-001",
      "date": "2024-08-30",
      "frequency": "daily",
      "crspFactorField": "DlyCumFacShr",
      "crspCumulativeShareFactor": 1,
      "crspFactorStatus": "observed",
      "crspMthFacShrFlg": null,
      "crspMonthlyShareFactorState": null,
      "crspSharesStatus": "computed_crsp",
      "crspAdjustedSharesOutstandingThousands": 1000,
      "crspSharesRoundTripResidual": 0,
      "crspVolumeStatus": "computed_crsp",
      "crspAdjustedVolumeShares": 460,
      "crspVolumeRoundTripResidual": 0
    }
  ]
}

Diagrams

CRSP Cumulative Share/Volume Adjustment — article hero
CRSP Cumulative Share/Volume Adjustment — failure guard
CRSP Cumulative Share/Volume Adjustment — worked example

Calculation flow

CRSP CIZ 2.0 calculation flow
flowchart LR
    A["CRSP CIZ 2.0 row and release"] --> B{"DlyCumFacShr or MthCumFacShr?"}
    B -->|No| X["Reject field substitution"]
    B -->|Yes| C{"CRSP factor and raw quantity present?"}
    C -->|No| M["Return explicit missing status"]
    C -->|Yes| D{"Monthly volume with mixed basis?"}
    D -->|Yes| R["Require licensed daily reconstruction"]
    D -->|No| E["Multiply by CRSP share factor"]
    E --> F["Round once at 12 decimals"]
    F --> G["Retain CRSP release, basis, and status"]
CRSP evidence-state lifecycle
stateDiagram-v2
    [*] --> ValidateCRSPField
    ValidateCRSPField --> Rejected: price factor or wrong frequency
    ValidateCRSPField --> Missing: raw value or CRSP factor absent
    ValidateCRSPField --> CheckFrequency: valid share factor
    CheckFrequency --> DailyComputed: daily quantity
    CheckFrequency --> MonthlyComputed: clean monthly evidence
    CheckFrequency --> DailyReconstructionRequired: mixed or unknown month
    CheckFrequency --> GapQualified: CRSP factor continued across gap
    DailyComputed --> Audited
    MonthlyComputed --> Audited
    GapQualified --> Audited
    Missing --> Audited
    Rejected --> Audited
    DailyReconstructionRequired --> Audited

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

  • R1 - CRSP US Stock & Indexes Database Guide, Flat File Format 2.0 (CIZ)
  • R2 - Important Notice: CRSP US Stock & Indexes Flat File Format 2.0 (CIZ)
  • R3 - June 2025 Monthly Update: CRSP US Stock & Index Release Notes
  • R4 - May 2026 Monthly Update: CRSP US Stock & Index Databases Release Notes
  • R5 - CRSP US Stock & Indexes Database Data Descriptions Guide