# Generated by tools/build_contracts.py from tools/algoseek_catalog.py -- do not edit by hand.
# Open Data Contract Standard v3.2.0 (https://bitol-io.github.io/open-data-contract-standard/).
apiVersion: v3.2.0
kind: DataContract
id: urn:alphaswarm:datacontract:algoseek:us-equities-daily-cumulative-adjustment-factors
name: AlgoSeek US Equities Daily Cumulative Adjustment Factors
version: 0.1.0
status: draft
domain: market-data
tags:
- algoseek
- licensed-data
- equity
- reference
- us
description:
  purpose: 'Continuous daily series of backward cumulative price and volume adjustment factors per SecId:
    one row for every trading day, carrying the latest cumulative factor forward on days without corporate
    events and flagging event days with the factor, reason and type. Lets users adjust raw prices and
    volumes with a simple date join.'
  usage: Point-in-time security identity, corporate-action adjustment, and universe construction for US
    equities.
  limitations: 'Vendor-curated reference data: rows can be restated when AlgoSeek learns of a late or
    corrected event, so land each delivery as a snapshot rather than overwriting history. Apply (guide):
    price on date D x CumulativeFactorPrice(D); volume on date D / CumulativeFactorVolume(D). Join on
    SecId + TradeDate; no gap handling needed because every trading day has a row. Derived and verified
    on guide Table 5 and the sample: CumulativeFactor(D) = product of the AdjustmentFactors of all events
    with EffectiveDate later than D (strictly). On an event date the factor already excludes that event
    (AAPL 20140609: price 0.032233144343822 -> 0.225632010406754, ratio 0.142857; sample 20220805: 0.992723673605374
    -> 0.994102623025167, ratio 0.99861287 = that day''s AdjustmentFactor). Volume factor is a divisor
    and changes only on volume-affecting events (BonusSame, CapReduct, Cons, ScriptDiv, SecSwap, Reclass,
    Subdiv); sample value 1 throughout for AAPL in 2022. AdjustmentFactor, AdjustmentReason and EventType
    are populated only on event dates (blank elsewhere); with several events on one date AdjustmentFactor
    is the cumulative product for that date and reason/type strings are joined with ''and''. This gives
    one row per SecId+TradeDate.'
  authoritativeDefinitions:
  - type: businessDefinition
    url: https://algoseek.com/dataset/us-equities-daily-cumulative-adjustment-factors/
  - type: implementation
    url: https://algoseek.com/data-docs/equity-reference/algoseek.US.Equity.Adjustment.Factors.Daily.Cumulative.pdf
context:
  instructions: Rows are effective-dated. Answer point-in-time questions with the row in force on the
    as-of date, never the latest row. SecId and ASID are both durable AlgoSeek security keys but different
    values (the ASID lookup links them); tickers are reused across companies, so resolve a ticker to a
    key with a trade date.
  constraints:
  - id: c1
    constraint: 'Licensed vendor data: never export raw rows to a tenant-local destination or include
      them verbatim in a public artifact; serve only through entitlement-checked platform reads.'
  - id: c3
    constraint: Do not treat the vendor's `Ticker` as a stable identity across time; join on an AlgoSeek
      security key (SecId or ASID, which are distinct) or the platform symbol mapping.
servers:
- server: algoseek-s3
  type: s3
  environment: vendor
  description: AlgoSeek flat-file delivery (the layout the schema below describes).
  location: s3://${ALGOSEEK_S3_BUCKET_EQ_ADJ_FACTORS_CUMUL_DAILY}/
  format: csv
  encoding: UTF-8
  customProperties:
  - property: layout
    value: 'Plain-text CSV with fixed header; SecId-aggregated: all rows for one SecId (e.g. 33449/AAPL)
      in one file, optionally split by year. S3 buckets: us-equity-cumulative-backward-adjustment-secid-all
      and us-equity-cumulative-backward-adjustment-secid-yyyy (guide also writes ''secid-year''); SecId
      files at NN/NNNNN.csv (NN = first two digits of SecId); daily-changes/yyyymmdd-corp-changes.csv
      lists SecIds with a Change value (updated, added or deleted).'
  - property: compression
    value: gzip
  - property: header
    value: true
  - property: entitlement
    value: Bucket access is granted per subscription; bucket names arrive with license provisioning.
schema:
- name: us_equities_daily_cumulative_adjustment_factors
  physicalName: eq_adj_factors_cumul_daily
  physicalType: file
  logicalType: object
  businessName: US Equities Daily Cumulative Adjustment Factors
  description: 'Continuous daily series of backward cumulative price and volume adjustment factors per
    SecId: one row for every trading day, carrying the latest cumulative factor forward on days without
    corporate events and flagging event days with the factor, reason and type. Lets users adjust raw prices
    and volumes with a simple date join.'
  dataGranularityDescription: one SecId x trading day (every trade date from the SecId's START date on)
  properties:
  - name: TradeDate
    logicalType: date
    logicalTypeOptions:
      format: yyyymmdd
    physicalType: string (yyyymmdd) (csv text)
    description: Trade date (or the date an event becomes effective); one row per trading day per SecId.
      First column in the sample.
    primaryKey: true
    primaryKeyPosition: 2
    required: true
    customProperties:
    - property: evidence
      value: guide+sample
  - name: SecId
    logicalType: integer
    logicalTypeOptions:
      format: i64
    physicalType: integer (csv text)
    description: algoseek unique security identifier.
    primaryKey: true
    primaryKeyPosition: 1
    required: true
    customProperties:
    - property: evidence
      value: guide+sample
  - name: Ticker
    logicalType: string
    physicalType: string (csv text)
    description: Symbol name on that trade date.
    customProperties:
    - property: evidence
      value: guide+sample
  - name: AdjustmentFactor
    logicalType: number
    physicalType: decimal (csv text)
    description: The event's adjustment factor, present only on dates when an event happened; if several
      events share a date, the product of them. START row has 1.
    customProperties:
    - property: nullMeaning
      value: Blank except on event dates
    - property: evidence
      value: guide+sample
  - name: CumulativeFactorPrice
    logicalType: number
    physicalType: decimal (csv text)
    description: Backward cumulative price factor for this date; multiply that day's prices by it. Already
      reflects an event effective that day.
    customProperties:
    - property: evidence
      value: guide+sample
  - name: CumulativeFactorVolume
    logicalType: number
    physicalType: decimal (csv text)
    description: Backward cumulative volume factor for this date (volume-affecting events only); divide
      that day's volume by it.
    customProperties:
    - property: evidence
      value: guide+sample
  - name: AdjustmentReason
    logicalType: string
    physicalType: string (csv text)
    description: Reason of the event on this date (18 codes or START); several reasons joined by 'and'
      when multiple events share the date; blank otherwise.
    enum:
    - value: BonusSame
      label: 'Bonus issue in the same class [event type BON; affects price: Yes; affects volume: Yes]'
    - value: BonusDiff
      label: 'Bonus issue in a different class [event type BON; affects price: Yes; affects volume: No]'
    - value: CapReduct
      label: 'Capital reduction [event type CAPRD; affects price: Yes; affects volume: Yes]'
    - value: Cons
      label: 'Consolidation [event type CONSD; affects price: Yes; affects volume: Yes]'
    - value: Distrib
      label: 'Distribution [event type DIST; affects price: Yes; affects volume: No]'
    - value: CashDiv
      label: 'Cash dividend [event type DIV; affects price: Yes; affects volume: No]'
    - value: ScriptDiv
      label: 'Script dividend in the same class [event type DIV; affects price: Yes; affects volume: Yes]'
    - value: ScriptDivDiff
      label: 'Script dividend in a different class [event type DIV; affects price: Yes; affects volume:
        No]'
    - value: ParLiq
      label: 'Partial liquidation [event type LIQ; affects price: Yes; affects volume: No]'
    - value: DeMerg
      label: 'De-merger [event type DMRGR; affects price: Yes; affects volume: No]'
    - value: EntSame
      label: 'Entitlement in the same class [event type ENT; affects price: Yes; affects volume: No]'
    - value: EntDiff
      label: 'Entitlement in a different class [event type ENT; affects price: Yes; affects volume: No]'
    - value: CapRet
      label: 'Capital return [event type RCAP; affects price: Yes; affects volume: No]'
    - value: RightsSame
      label: 'Rights in the same class [event type RTS; affects price: Yes; affects volume: No]'
    - value: RightsDiff
      label: 'Rights in a different class [event type RTS; affects price: Yes; affects volume: No]'
    - value: SecSwap
      label: 'Security swap [event type SCSWP; affects price: Yes; affects volume: Yes]'
    - value: Reclass
      label: 'Reclassification [event type SECRC; affects price: Yes; affects volume: Yes]'
    - value: Subdiv
      label: 'Subdivision (stock split) or combination (reverse split), incl. via stock dividend, reclassification
        or recapitalization [event type SD; affects price: Yes; affects volume: Yes]'
    - value: START
      label: Initial row for a SecId (EventType also START); all factors equal 1; EffectiveDate/TradeDate
        is the SecId's first date in algoseek records
    customProperties:
    - property: nullMeaning
      value: Blank except on event dates
    - property: evidence
      value: guide+sample
  - name: EventType
    logicalType: string
    physicalType: string (csv text)
    description: Event type of the event on this date (or START); several types joined by 'and' when multiple
      events share the date; blank otherwise.
    enum:
    - value: BON
      label: Bonus issue (reasons BonusSame, BonusDiff)
    - value: CAPRD
      label: Capital reduction (CapReduct)
    - value: CONSD
      label: Consolidation (Cons)
    - value: DIST
      label: Distribution (Distrib)
    - value: DIV
      label: Dividend (CashDiv, ScriptDiv, ScriptDivDiff); the guide glosses DIV=Dividend
    - value: LIQ
      label: Liquidation, partial (ParLiq)
    - value: DMRGR
      label: De-merger (DeMerg)
    - value: ENT
      label: Entitlement (EntSame, EntDiff)
    - value: RCAP
      label: Capital return (CapRet)
    - value: RTS
      label: Rights (RightsSame, RightsDiff)
    - value: SCSWP
      label: Security swap (SecSwap)
    - value: SECRC
      label: Reclassification (Reclass)
    - value: SD
      label: Subdivision / combination (Subdiv)
    - value: START
      label: Initial row for a SecId (AdjustmentReason also START)
    customProperties:
    - property: nullMeaning
      value: Blank except on event dates
    - property: evidence
      value: guide+sample
  quality:
  - id: row_count_positive
    metric: rowCount
    mustBeGreaterThan: 0
    dimension: completeness
    severity: error
    description: Every delivered partition (trade date, or snapshot) carries at least one row.
  - id: primary_key_unique
    metric: duplicateValues
    mustBe: 0
    arguments:
      properties:
      - SecId
      - TradeDate
    dimension: uniqueness
    severity: error
    description: The declared primary key is unique within each delivered partition (one file or table
      snapshot).
  - id: CumulativeFactorVolume_non_negative
    type: sql
    description: CumulativeFactorVolume is never negative.
    query: SELECT COUNT(*) FROM {object} WHERE CumulativeFactorVolume < 0
    mustBe: 0
    dimension: accuracy
    severity: error
support:
- channel: algoseek-support
  tool: email
  url: mailto:support@algoseek.com
  scope: issues
  description: Vendor support for data defects, missing days, and entitlement problems.
team:
  name: AlphaSwarm data engineering
slaProperties:
- id: history_start
  property: generalAvailability
  value: '2007-01-01'
  description: First trade date of the vendor history.
- id: update_frequency
  property: frequency
  value: 1
  unit: d
  driver: analytics
- id: retention
  property: retention
  value: license-term
  description: Retention of landed copies is bounded by the AlgoSeek license; purge on termination.
  driver: regulatory
customProperties:
- property: vendor
  value: AlgoSeek
- property: vendorDataGroup
  value: us-equity-ref
- property: vendorDatasetTextId
  value: eq_adj_factors_cumul_daily
- property: vendorSampleUrl
  value: https://as-metadata-services-assets.s3.amazonaws.com/sample_data/cloud_storage/eq_adj_factors_cumul_daily.csv
- property: assetClass
  value: equity
- property: coverage
  value: All US exchange-listed equities, backward-adjustment factors for any date from 2007 to present.
    Sample is AAPL only (100 consecutive trading days 20220802-20221221).
- property: timezone
  value: America/New_York
- property: timestampFormat
  value: yyyymmdd date strings
- property: priceAdjustment
  value: n/a
- property: licensedData
  value: true
- property: evidenceGrade
  value: vendor-doc
- property: knownIssues
  value:
  - Primary key is inferred; AlgoSeek's guide does not name one.
  - 'Doc discrepancy: Column order: guide Tables 1 and 2 list SecId, Ticker, TradeDate, AdjustmentFactor,
    ...; the sample header (and JSON preview) put TradeDate first: TradeDate, SecId, Ticker, ...'
  - 'Doc discrepancy: Guide Table 5 (AAPL, text extraction) shows a row dated ''20140206'' between 20140605
    and 20140606 and a ''0610'' fragment for the 20140610 row - apparent typos in the guide table (probably
    20140604 and 20140610); the factor values in those rows are consistent with their neighbours.'
  - 'Doc discrepancy: Guide text names the data ''Equity Cumulative Backward Adjustment Factors CSV file''
    and calls the buckets us-equity-cumulative-backward-adjustment-secid-year in one place and -secid-yyyy
    in another.'
  - 'Doc discrepancy: Guide Table 5 values (CumulativeFactorVolume 0.0357142857142858 before 20140609,
    0.25 after) include the later 20200831 4-for-1 split, i.e. a more recent snapshot than the 2014 date
    range suggests; confirms the series is restated retroactively.'
  - 'Doc discrepancy: Guide''s Table 3 reasons list is garbled in plain text extraction; table-aware extraction
    gives the same 18 reasons and Yes/No price/volume flags as the other adjustment guides.'
contractCreatedTs: '2026-11-02T00:00:00Z'
