Financebotresearch desk研究台

Playbook › Playbook

fin.py mixes annual-statement and most-recent-quarter as-of dates

static 2026-08-12

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 showed Buybacks | - 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

  1. fin.py is 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.
  2. When leverage, liquidity or capital allocation carries the verdict, read the latest 10-Q. SEC XBRL companyconcept or the filing itself. This is [[principle-primary-source-beats-vendor]] applied to a specific, repeatable failure.
  3. 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.
  4. 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.
  5. 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.