Playbook › Playbook
fin.py mixes annual-statement and most-recent-quarter as-of dates
Claim
fin.py labels its balance-sheet columns with the fiscal period end, so the staleness is
technically disclosed — but the snapshot block directly above it carries no date at all, and
its ratios are computed from most-recent-quarter data. The reader gets one table dated
2025-12-31 and one undated table built from June-2026 figures, presented as a single
coherent bundle. Nothing in the output flags the mismatch.
The BSX case, 2026-08-12
fin.py BSX reported the Dec-2025 balance sheet. The company had filed a 10-Q for the
June-2026 quarter nine days earlier:
| Item | fin.py (Dec-2025 annual) | Actual (10-Q, Jun-2026) | Error |
|---|---|---|---|
| Cash | $1,965M | $539M | −$1,426M |
| Total debt | $11,436M | $12,624M | +$1,188M |
| Net debt | $9,471M | $12,085M | understated $2.6B (−22%) |
| Net debt / EBITDA | 1.90× | 2.17× | |
| Current ratio | 1.62 | 1.24 | |
| Tangible book value | −$1,070M | −$628M |
Meanwhile the same output's snapshot showed BVPS 17.23 and P/B 2.98 — both June-2026
figures. Two different quarters in one bundle.
What the stale column concealed
This is the part that matters more than the leverage error. Between the two dates BSX:
- repurchased $2.0B of stock (39.9M shares at ~$50.10), the first material buyback in its
modern history — while
fin.py's cash-flow block showedBuybacks | -for every year - paid $1.73B for a 34% equity-method stake in MiRus LLC, booked to investments, not acquisitions, so it never touches the FCF line
- funded both by drawing $1,675M of commercial paper and draining the cash balance
An analyst working from the annual column alone would have written "BSX does not buy back stock" — the exact error that appeared in this run's Phase 1 brief, and one that inverts the shares-outstanding read from dilution to net retirement.
The second layer — Yahoo lags the filing
Escalating to get_financial_statement quarterly_balance_sheet does not fix it. On
2026-08-12 Yahoo's most recent quarterly column was 2026-03-31; the June quarter was
absent despite the 10-Q having been filed 2026-08-03. So the vendor chain is stale at both
tiers, and the gap is widest exactly in the weeks after a filing — when the information is
newest and most decision-relevant.
Guard
fin.pyis a screening tool, not a balance-sheet source. Use it for the statement trend and the snapshot ratios; never quote its cash, debt or net-debt level as current.- When leverage, liquidity or capital allocation carries the verdict, read the latest
10-Q. SEC XBRL
companyconceptor the filing itself. This is [[principle-primary-source-beats-vendor]] applied to a specific, repeatable failure. - Check the gap between the fiscal year end and today. A December filer analysed in August is two quarters stale; the same tool on a name that just reported is fine. The error scales with the gap, not with the company.
- Treat a
-in the Buybacks row as "not reported," never as "zero." Confirm against the cash-flow statement in the 10-Q before making any claim about share-count policy. - Watch for capital deployed through investments rather than acquisitions — an equity-method stake is real cash out the door that no FCF screen will show.
What would falsify this
fin.py printing an as-of date on the snapshot block, or sourcing the balance sheet from
the most recent quarterly rather than annual statement. Either change would close the gap.
Until then this is structural, not a one-off ingest failure — hence static.
Related
- [[principle-primary-source-beats-vendor]] — the general form of this lesson.
- [[pitfall-spinoff-carveout-balance-sheet-persists-in-vendor-feeds]] — same family: a vendor balance sheet that describes a company that no longer exists in that shape.
- [[pitfall-vendor-forward-eps-is-stale-on-the-day-of-a-guidance-cut]] — the income-statement twin. Both fire hardest immediately after a corporate event.
History
- 2026-08-12 — found during
/analyze BSX. Caught only because the Fundamentals analyst cross-read the 10-Q and found a $2.0B buyback that the tool's cash-flow block showed as absent. The leverage error alone would likely have passed unnoticed.