IPO Availability Timestamping
Separate Listing Events from Research Knowledge
Install and import
npm install fintech-algorithmsimport { calculate } from "fintech-algorithms/corporate-actions-and-security-master-data/point-in-time-universe/ipo-availability-timestamping";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
{
"query": {
"issuerId": "ISSUER-SYN-001",
"instrumentId": "INSTRUMENT-SYN-001",
"listingId": "LISTING-SYN-XNAS",
"effectiveAt": "2025-05-13T13:36:10Z",
"knownAt": "2025-05-13T13:35:30Z",
"policyId": "POLICY-SYN-IPO-RESEARCH"
},
"policies": [
{
"policyId": "POLICY-SYN-IPO-RESEARCH",
"revision": 1,
"state": "active",
"effectiveAt": "2025-05-01T00:00:00Z",
"availableAt": "2025-05-01T00:05:00Z",
"sourceId": "SYN-RESEARCH-GOVERNANCE",
"context": "traditional_ipo",
"marketPhase": "regular",
"requiredEventTypes": [
"registration_effective",
"listing_notice",
"first_eligible_session",
"first_observed_trade",
"vendor_release",
"local_ingestion"
]
},
{
"policyId": "POLICY-SYN-IPO-RESEARCH",
"revision": 2,
"state": "active",
"effectiveAt": "2025-05-01T00:00:00Z",
"availableAt": "2025-05-14T09:00:00Z",
"sourceId": "SYN-RESEARCH-GOVERNANCE",
"context": "traditional_ipo",
"marketPhase": "regular",
"requiredEventTypes": [
"registration_effective",
"listing_notice",
"first_eligible_session",
"first_observed_quote",
"first_observed_trade",
"vendor_release"
]
}
],
"records": [
{
"eventId": "EV-FILING",
"revision": 1,
"state": "active",
"eventType": "issuer_filing",
"issuerId": "ISSUER-SYN-001",
"instrumentId": "INSTRUMENT-SYN-001",
"listingId": "LISTING-SYN-XNAS",
"marketPhase": "all",
"effectiveAt": "2025-05-05T14:00:00Z",
"availableAt": "2025-05-05T14:03:00Z",
"clockOwner": "regulator",
"sourceId": "SYN-REGULATOR-FILING"
},
{
"eventId": "EV-EFFECT",
"revision": 1,
"state": "active",
"eventType": "registration_effective",
"issuerId": "ISSUER-SYN-001",
"instrumentId": "INSTRUMENT-SYN-001",
"listingId": "LISTING-SYN-XNAS",
"marketPhase": "all",
"effectiveAt": "2025-05-08T12:00:00Z",
"availableAt": "2025-05-08T12:02:00Z",
"clockOwner": "regulator",
"sourceId": "SYN-REGULATOR-EFFECT"
},
{
"eventId": "EV-LIST",
"revision": 1,
"state": "active",
"eventType": "listing_notice",
"issuerId": "ISSUER-SYN-001",
"instrumentId": "INSTRUMENT-SYN-001",
"listingId": "LISTING-SYN-XNAS",
"marketPhase": "all",
"effectiveAt": "2025-05-13T13:30:00Z",
"availableAt": "2025-05-08T15:10:00Z",
"clockOwner": "exchange",
"sourceId": "SYN-EXCHANGE-NOTICE"
}
]
}Call
calculate(data)Returns
object with 20 fields: effectiveAt, knownAt, identity, policyId, status, policySatisfied, policy, effectiveGateAt, …
{
"effectiveAt": "2025-05-13T13:36:10Z",
"knownAt": "2025-05-13T13:35:30Z",
"identity": {
"issuerId": "ISSUER-SYN-001",
"instrumentId": "INSTRUMENT-SYN-001",
"listingId": "LISTING-SYN-XNAS"
},
"policyId": "POLICY-SYN-IPO-RESEARCH",
"status": "incomplete",
"policySatisfied": false,
"policy": {
"policyId": "POLICY-SYN-IPO-RESEARCH",
"revision": 1,
"sourceId": "SYN-RESEARCH-GOVERNANCE",
"effectiveAt": "2025-05-01T00:00:00Z",
"availableAt": "2025-05-01T00:05:00Z",
"context": "traditional_ipo",
"marketPhase": "regular",
"requiredEventTypes": [
"registration_effective",
"listing_notice",
"first_eligible_session",
"first_observed_trade",
"vendor_release",
"local_ingestion"
]
},
"effectiveGateAt": null,
"knowledgeGateAt": null,
"missingPolicy": false,
"missingEventTypes": ["local_ingestion"],
"pendingEffectiveEventTypes": [],
"ambiguousEventTypes": [],
"supplementalAmbiguousEventTypes": []
}Showing 14 of 20 fields.
Diagrams
Calculation flow
Causal IPO evidence flow
flowchart TD
Q["Query: identity, effectiveAt, knownAt, policyId"] --> P["Keep policy revisions available by knownAt"]
P --> PA{"Applicable active policy?"}
PA -->|No| MI["Incomplete: missing policy"]
PA -->|Yes| E["Keep event revisions available by knownAt"]
E --> V["Validate known immutable revision chains"]
V --> I["Match issuer, instrument, listing, and market phase"]
I --> R{"Required clocks resolved and effective?"}
R -->|Missing or cancelled| INC["Incomplete"]
R -->|Conflicting timestamps| AMB["Ambiguous"]
R -->|Unsupported policy semantic| UNS["Unsupported"]
R -->|Yes| G["Resolved: effective gate plus knowledge gate"]
IPO evidence query state lifecycle
stateDiagram-v2
[*] --> SelectPolicy
SelectPolicy --> Incomplete: policy missing or cancelled
SelectPolicy --> SelectEvidence: policy active and applicable
SelectEvidence --> Incomplete: required evidence missing, cancelled, or future-effective
SelectEvidence --> Ambiguous: required timestamps or identity links conflict
SelectEvidence --> Unsupported: policy semantic does not fit listing context
SelectEvidence --> Resolved: every required clock effective and known
Resolved --> LaterKnownQuery: correction becomes available
LaterKnownQuery --> SelectPolicy
Incomplete --> [*]
Ambiguous --> [*]
Unsupported --> [*]
Resolved --> [*]
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.
References
- R1 - SEC: Determine the Status of My Filing
- R2 - SEC: Webmaster Frequently Asked Questions
- R3 - Airbnb 2020 Form 10-K
- R4 - Airbnb final prospectus filing index
- R5 - Airbnb pricing announcement hosted by Nasdaq
- R6 - Nasdaq Listing Rule IM-5315-1
- R7 - Nasdaq Daily List product description