# 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:occ-information-memos
name: AlgoSeek OCC Information Memos
version: 0.1.0
status: draft
domain: market-data
tags:
- algoseek
- licensed-data
- options
- reference
- us
- event
description:
  purpose: 'Normalised feed extracted from OCC Information Memos: option symbol changes, strike adjustments,
    multiplier and deliverable changes from corporate events (special dividends, reverse splits, demergers,
    FLEX consolidations). One row per memo that contains such information.'
  usage: Contract identity, lifecycle, and adjusted-deliverable handling for US-listed options.
  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. Symbol-level,
    not contract-level: rows identify option roots (OldSymbol/NewSymbol, e.g. 1NN -> NN, SMU -> SMU2,
    CRDU -> CRDU1) and adjustments, with no strike, expiry or call/put per contract. Root symbols follow
    the OCC convention, including numeric-suffix roots for adjusted series. Effective dating: PublishDate
    (when announced), EffectiveDate (when the subject takes effect; blank for anticipated adjustments)
    and SymbolChangeDate (list, one date per symbol change) are separate. Memo text in the sample (58471)
    states changes take effect at the opening of business on the effective date. Strike adjustment semantics:
    StrikeAdjustment is a USD amount to subtract from the previous strike; StrikeDivisor is a factor used
    to rescale strikes (the name implies division; the guide only says ''rescale''). Neither alone gives
    the full adjustment; combine with Multiplier and Deliverables. Multiplier is shares per contract per
    the memo (100 typical); MultiplierDetail keeps the memo wording and can contain commas, so parse the
    CSV with a real CSV reader. SymbolChangeDetail likewise.'
  authoritativeDefinitions:
  - type: businessDefinition
    url: https://algoseek.com/dataset/occ-information-memos/
  - type: implementation
    url: https://algoseek.com/data-docs/options-reference/algoseek.OCC.Information.Memos.pdf
context:
  instructions: Effective-dated contract reference data. Adjusted (non-standard) contracts carry a modified
    deliverable; use the OCC settlement details rather than the standard 100-share multiplier for them.
  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_OCC_INFO_MEMOS}/
  format: csv
  encoding: UTF-8
  customProperties:
  - property: layout
    value: 'Two datasets. Main: plain-text CSV files aggregated by trading day (memo publish date), fixed
      header row. Lookup (MemoId, PublishDate, EffectiveDate, Subject): one compressed CSV with all history.
      Bucket/path naming not stated.'
  - 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: occ_information_memos
  physicalName: occ_info_memos
  physicalType: file
  logicalType: object
  businessName: OCC Information Memos
  description: 'Normalised feed extracted from OCC Information Memos: option symbol changes, strike adjustments,
    multiplier and deliverable changes from corporate events (special dividends, reverse splits, demergers,
    FLEX consolidations). One row per memo that contains such information.'
  dataGranularityDescription: one OCC information memo (MemoId) with symbol-change, strike-adjustment
    and deliverable details; multi-symbol memos are packed into one row with ';'-separated lists
  properties:
  - name: MemoId
    logicalType: string
    logicalTypeOptions:
      format: numeric id, e.g. 58470
    physicalType: string (csv text)
    description: Unique memo identifier assigned by OCC
    primaryKey: true
    primaryKeyPosition: 1
    required: true
    customProperties:
    - property: nullMeaning
      value: Never
    - property: evidence
      value: guide+sample
  - name: PublishDate
    logicalType: date
    logicalTypeOptions:
      format: yyyymmdd
    physicalType: string (yyyymmdd) (csv text)
    description: Date the memo was published; also the date the daily file is aggregated by
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: EffectiveDate
    logicalType: date
    logicalTypeOptions:
      format: yyyymmdd
    physicalType: string (yyyymmdd) (csv text)
    description: Date the memo's subject is expected to become effective; blank for anticipated adjustments
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: SymbolChangeDate
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated yyyymmdd list'
    physicalType: string (yyyymmdd;yyyymmdd;...) (csv text)
    description: Dates on which each listed symbol change takes effect
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: OldSymbol
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated list'
    physicalType: string (ticker1;ticker2;...) (csv text)
    description: Symbols before the event takes effect
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: NewSymbol
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated list'
    physicalType: string (ticker1;ticker2;...) (csv text)
    description: Symbols after the event takes effect; equals OldSymbol when the symbol is unchanged
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: SymbolAssetType
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated list'
    physicalType: string (type1;type2;...) (csv text)
    description: Asset type of each changing symbol
    enum:
    - value: O
      label: Equity options
    - value: F
      label: Futures
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: SymbolChangeDetail
    logicalType: string
    logicalTypeOptions:
      format: free text, may contain commas
    physicalType: string (csv text)
    description: Parsed description of affected symbols; 'Symbol XYZ remains unchanged' pattern when no
      change is described
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: StrikeDivisor
    logicalType: integer
    logicalTypeOptions:
      format: i64
    physicalType: integer (csv text)
    description: Factor used to rescale option strikes in corporate events such as splits
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: StrikeAdjustment
    logicalType: number
    physicalType: decimal (csv text)
    description: USD amount to subtract from the previous strike (e.g. special dividend)
    customProperties:
    - property: unit
      value: USD
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: MultiplierDetail
    logicalType: string
    logicalTypeOptions:
      format: free text, may contain commas
    physicalType: string (csv text)
    description: Shares per contract with extra wording parsed from the memo
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: Multiplier
    logicalType: integer
    logicalTypeOptions:
      format: i64
    physicalType: integer (csv text)
    description: Number of shares the contract represents per the memo (100 typical)
    customProperties:
    - property: unit
      value: shares
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: Deliverables
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated SYMBOL:amount pairs'
    physicalType: string (ABC:N;XYZ:M;...) (csv text)
    description: 'Assets delivered per contract: symbol or ISO currency with share count or cash amount'
    customProperties:
    - property: nullMeaning
      value: Blank
    - property: evidence
      value: guide+sample
  - name: UnderSymbolCUSIP
    logicalType: string
    logicalTypeOptions:
      format: ''';''-separated SYMBOL:CUSIP pairs'
    physicalType: string (ABC:CUSIP1;XYZ:CUSIP2;...) (csv text)
    description: Underlying symbols with CUSIPs for the new deliverables
    customProperties:
    - property: nullMeaning
      value: Blank
    - 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:
      - MemoId
    dimension: uniqueness
    severity: error
    description: The declared primary key is unique within each delivered partition (one file or table
      snapshot).
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: '2012-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-opt-ref
- property: vendorDatasetTextId
  value: occ_info_memos
- property: vendorSampleUrl
  value: https://as-metadata-services-assets.s3.us-east-1.amazonaws.com/sample_data/cloud_storage/occ_info_memos_daily.csv
- property: assetClass
  value: option
- property: coverage
  value: OCC Information Memos from 2012 onward; main dataset holds memos with contract changes (symbol
    changes, strike adjustments, deliveries). A separate lookup maps every MemoId to its subject.
- property: timezone
  value: America/New_York
- property: timestampFormat
  value: yyyymmdd dates
- 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: Guide types MemoId as string; sample values are numeric (58470..58490).'
  - 'Doc discrepancy: Guide Table 1 shows an anticipated adjustment (memo 58104) with blank EffectiveDate;
    all 21 sample rows have EffectiveDate populated.'
  - 'Doc discrepancy: Sample memo 58475 has blank MultiplierDetail, Multiplier, Deliverables and UnderSymbolCUSIP
    (symbols unchanged), consistent with Missing = Blank; 58490 has Deliverables ''TSEOF:100'' but blank
    UnderSymbolCUSIP.'
  - 'Doc discrepancy: Sample is one publish day (20260303) with 21 memos; guide Table 1 shows 20260102
    and FLEX memo 58542 examples not in the sample.'
  - 'Doc discrepancy: Page description mentions ''options and futures symbols''; SymbolAssetType examples
    are O and F, but sample contains only O.'
  - 'Doc discrepancy: Guide describes the lookup file schema (MemoId, PublishDate, EffectiveDate, Subject)
    but the published sample contains only the main dataset, so Subject is not a column of this file.'
  - 'Doc discrepancy: Guide columns match the 14-column sample header exactly, in the same order.'
contractCreatedTs: '2026-11-02T00:00:00Z'
