1. Data sources
Every input comes from the U.S. Securities and Exchange Commission’s public EDGAR system. There are no paywalled or proprietary feeds, no Compustat / WRDS, and no third-party news.
- SEC ticker master —
data.sec.gov/files/company_tickers.json: the public list of registrant CIKs and tickers. - Submissions metadata —
data.sec.gov/submissions/CIK*.json: per-registrant SIC code, fiscal year end, and filing list. - Companyfacts (XBRL) —
data.sec.gov/api/xbrl/companyfacts/CIK*.json: per-registrant XBRL fact tables. - Chapter 11 / Item 1.03 distress anchor layer — 8-K filings whose structured
itemsfield contains1.03(Bankruptcy or Receivership), found via SEC EDGAR full-text search; 8-K body text fetched for scope classification.
Polite SEC pacing (default 0.18 s between requests, well under SEC’s 10/s cap), declared User-Agent, atomic per-file writes. Provenance is recorded in the project repository.
2. Universe construction
Non-financial operating-company filters
- Exclude banks (SIC 6000–6299).
- Exclude insurers (SIC 6300–6499).
- Exclude SPACs / funds (SIC 6770 / 6726).
- Exclude registrants with missing or non-numeric SIC.
XBRL coverage gates
- Companyfacts JSON ≥ 500 KB (drops shells and very-small filers).
- ≥ 3 distinct annual
Assetsrows from10-K/10-K/Afilings. - Per firm-year, at least 3 of 4 G primitives present (
g_coverage_gate ≥ 0.75).
Train / test split
- Train years: FY ≤ 2018.
- Test years: FY 2019 – FY 2025.
- The split rule has been preserved unchanged from Phase 15b through Phase 19 so the comparison chain is valid.
After all four gates, the locked Phase-18 panel admits 3,412 distinct CIKs; the post-coverage-gate panel is 36,041 firm-year rows.
3. G and A in corporate filings
The A/G framework separates two layers of a firm’s financial state:
G primitives — structural condition (“ground”)
- Current ratio (
g1_current_ratio) — current assets ÷ current liabilities. - Interest coverage (
g2_interest_coverage) — operating income ÷ interest expense. - Balance-sheet cushion (
g3_bs_cushion) — cash and equity buffer relative to liabilities. - Operating cash flow / assets (
g4_ocf_assets).
A primitives — operating / performed appearance
- Return on assets (
a1_roa). - Gross margin (
a2_gross_margin). - Year-over-year revenue growth (
a3_rev_growth).
G is the structural ground; A is the operating surface. The Phase-13 doctrine is that distress regimes can be separated by how G and A move together (joint collapse) or apart (divergence / masking).
Corporate uses state-vector geometry: the geometries below are operations on standardized G and A aggregates, not on a single composite scalar. This keeps the structural-vs-operating decomposition explicit and lets different distress regimes (joint collapse, divergence / masking) be separated rather than collapsed into one number.
Transforms (train-only fit)
- Winsorize each primitive at the 5th / 95th percentile, fit on train years only.
- Robust z-standardize:
(x − train median) / (1.4826 × train MAD). - Apply fitted transforms to test rows. A pre-execution assertion enforces zero index overlap between train and test.
4. Geometry definitions
Three risk-up geometries are computed at λ = 0 (the Phase-13 / Phase-15 corporate primary):
Structural distress
Plain language: “The firm’s structural balance-sheet ground is weak.” A higher score means weaker G.
Formula: structural_distress = −G_score
(the G aggregate, oriented so higher = more distress).
Joint-collapse severity
Plain language: “Both the structural ground and the operating surface are weak together.” A higher score means joint collapse and is informative for near-petition severity, not broad screening.
Formula: co_collapse = −(G_score + A_score).
Divergence / masking
Plain language: “The operating surface looks healthy while the structural ground is weak.” A higher score means more divergence between A and G. This is a diagnostic, not a Ch.11 screen.
Formula: neg_R = A_score − G_score (= the
canonical R viewed risk-up).
A diagnostic weakest_channel_fragility
(binding-constraint indicator) is also computed but is
retained as descriptive only — its persistence-smoothed
validation is deferred to a future phase.
5. Why corporate requires its own geometry
Corporate SEC/XBRL analysis has constraints that shape what this extension can and cannot claim. These constraints define the corporate claim boundary; they are not deficiencies relative to any other domain.
- SEC / XBRL data is heterogeneous. Tag variation across filers, restatements, late filings, and small-cap shells all add noise that the geometry has to absorb.
- Chapter 11 / Item 1.03 distress is a low-base-rate event, on the order of 0.5 – 1.0% per year for the eligible public-company universe. This caps achievable precision at any practical operating threshold.
- Sector heterogeneity is large. Manufacturing, Wholesale/Retail, and Services have different distress patterns and disclosure conventions, so pooled metrics hide cell-to-cell variation.
- Anchor coverage is imperfect. Corporate uses Item 1.03 8-Ks only — missing some Chapter-7 paths and bankruptcy events filed under Items 5.02 / 8.01 attachments.
- State-vector geometry is the right shape for these constraints. Keeping G and A separate lets the distinct regimes (joint collapse vs divergence / masking) be diagnosed rather than averaged out into a single risk score.
6. What was not done
- No live company ranking is published.
- No production scoring service is exposed.
- No investment / credit decision system is offered.
- No threshold tuning on the test fold (z = 0 is fixed).
- No new geometry beyond the Phase-13 spec.
The full reproducibility runbook lives inside the project repository (not duplicated here). Independent reproduction would require re-fetching from the public SEC EDGAR endpoints; raw JSONs are not distributed from this site.