Describe the bug
get_standardized_financials (openbb-sec) returns None for basic_eps, diluted_eps, weighted_ave_basic_shares_os and weighted_ave_diluted_shares_os for issuers that tag these concepts only with us-gaap:StatementClassOfStockAxis. The SEC companyfacts API the fetcher reads carries only undimensioned facts, so for these issuers the fields are empty even though every filing carries the values.
Affected issuers (verified)
- Coca-Cola Consolidated (COKE, CIK 317540) — nothing since FY2019 (two classes since then). Latest 10-Q files EPS 2.39 for both classes; weighted basic shares 56,517,000 (common) + 10,047,000 (Class B).
- Berkshire Hathaway (BRK-A/B, CIK 1067983) — no per-share facts at all; files only
EarningsPerShareBasic per brka:EquivalentClassAMember (17,868/quarter) and EquivalentClassBMember (11.91/quarter). No diluted concepts exist.
- U-Haul (UHAL, CIK 4457) — two-class method (ASC 260): per-class EPS filed as
EarningsPerShareBasicUndistributed + EarningsPerShareBasicDistributed; flat view carries none of it.
To Reproduce
import asyncio
from openbb_sec.utils.company_facts import get_standardized_financials
r = asyncio.run(get_standardized_financials(symbol="COKE", period="annual", fiscal_years=[2025]))
[f for f in r.income_statement if f.tag in ("basic_eps", "diluted_eps")] # values None / rows absent
Note
The package already contains everything needed: XBRLParser.parse_instance (xbrl_taxonomy_helper) parses the filing's extracted instance with full dimension support. A possible fix is a fallback in the standardizer: when a per-share field is empty in companyfacts, read the latest instances and aggregate the class members (basic counts sum across classes; a senior class's diluted count already includes converted juniors and must not be summed). We currently do this downstream with parse_instance + declarative per-issuer rules and would be glad to retire that shim.
Related: #7634 (missing debt tag names in the balance-sheet schema).
Describe the bug
get_standardized_financials(openbb-sec) returnsNoneforbasic_eps,diluted_eps,weighted_ave_basic_shares_osandweighted_ave_diluted_shares_osfor issuers that tag these concepts only withus-gaap:StatementClassOfStockAxis. The SECcompanyfactsAPI the fetcher reads carries only undimensioned facts, so for these issuers the fields are empty even though every filing carries the values.Affected issuers (verified)
EarningsPerShareBasicperbrka:EquivalentClassAMember(17,868/quarter) andEquivalentClassBMember(11.91/quarter). No diluted concepts exist.EarningsPerShareBasicUndistributed+EarningsPerShareBasicDistributed; flat view carries none of it.To Reproduce
Note
The package already contains everything needed:
XBRLParser.parse_instance(xbrl_taxonomy_helper) parses the filing's extracted instance with full dimension support. A possible fix is a fallback in the standardizer: when a per-share field is empty incompanyfacts, read the latest instances and aggregate the class members (basic counts sum across classes; a senior class's diluted count already includes converted juniors and must not be summed). We currently do this downstream withparse_instance+ declarative per-issuer rules and would be glad to retire that shim.Related: #7634 (missing debt tag names in the balance-sheet schema).