v5.18.0
[5.18.0] - 2026-02-26
Added
-
FortyF Data Object (40-F Canadian MJDS) — New data object for Form 40-F annual reports filed by ~200 Canadian cross-listed companies (Shopify, Royal Bank, Barrick Gold, etc.). Unlike 10-K filings, the 40-F wrapper is an iXBRL shell — the actual business content lives in the Annual Information Form (AIF) exhibit. FortyF identifies the AIF via a 5-tier priority chain and extracts NI 51-102 sections with regex-based detection and three-layer disambiguation (TOC entries, cross-references, page footers). Validated across 24 Canadian filers with 92% business extraction and 100% items detection.
- Named section properties:
.business,.risk_factors,.corporate_structure,.dividends,.capital_structure,.directors_and_officers,.legal_proceedings - Fuzzy section lookup:
forty_f["business"]matches "Description Of The Business" - Raw document access:
.aif_html,.aif_textfor downstream rendering and LLM input - MD&A exhibit discovery:
.mda_attachment,.mda_html,.mda_textfor filers that include a separate MD&A (e.g. Manulife) - Rich display with NI 51-102 section tree and
to_context()for LLM agents - Files:
edgar/company_reports/forty_f.py
- Named section properties:
-
EntityFacts Discovery Methods — New
search_concepts()andavailable_periods()methods on EntityFacts let users explore what concepts and periods a company actually has before querying, instead of guessing names and getting silent None returns (20ba29d) -
Helpful Warnings on Silent None Returns —
get_fact(),get_annual_fact(), andget_concept()now emitUserWarningwith fuzzy "did you mean?" suggestions viadiffliband tips pointing tosearch_concepts()/available_periods()when they return None (2837d4e) -
XBRL Notes/Disclosures Access — Five new convenience methods on the XBRL object (
.notes,.disclosures,.list_tables(),.get_table(),.get_disclosure()) so users can discover and access all XBRL tables directly without navigating through Statements first (7006bc9) -
Filing.obj_typeProperty — Preview what.obj()will return (e.g.'TenK','Form4') without parsing the filing. Returns None for unsupported form types (618519b) -
get_operating_income()on Financials — XBRL concept-first lookup with label fallback, matching theget_revenue()pattern (#663) -
cash_flow_statement()Alias — Addedcash_flow_statement()as an alias forcashflow_statement()on all surfaces (Company, Financials, XBRL) for discoverability (b8558eb) -
Period Format Normalization — Either
"2023-FY"or"FY 2023"now works everywhere. EntityFacts and MultiPeriodStatement used different formats, causing silent failures when passing periods between APIs. Both formats are now accepted transparently at API boundaries (f33d02a)
Fixed
- 8-K Parenthesized Negative Values — Fixed negative sign loss when 8-K earnings tables render values like
$(0.09)as separate<td>cells for$,(,0.09,). The parentheses are now reassembled correctly (26902468)