Playbook › Playbook
Vendor forward P/E silently uses the wrong fiscal year, and it flips verdicts
Claim
Twice on the same day, on two different names, the reported forward P/E was built on the wrong fiscal year — and in both cases it was the number the verdict rested on.
| ticker | vendor fwd P/E | vendor implied EPS | true forward EPS | true fwd P/E | error |
|---|---|---|---|---|---|
| TSM | 19.31x | ~$21.60 | $15.91 (2026 consensus) | 26.2x | EPS 36% too high |
| QCOM | 14.8x | $10.30 | ~$8.60 (FQ4 guide annualised) | 18.9x | Used a year already 3/4 reported |
TSM is the cleaner illustration. The company's own prints settle it: Q1 2026 EPS was NT$22.08 (≈$3.49/ADR) and Q2 2026 was US$4.31/ADR — so H1 delivered ~$7.80. A full year near $16 is arithmetically consistent; a full year near $21.60 is not. Independent vendors agreed with the corrected figure (GuruFocus 25.3x, others 24.5x); Yahoo was the outlier, not the consensus.
What breaks
- The verdict moves a full step. The 2026-08-04 tech sweep called TSM "ACCUMULATE, cheapest quality in the list, FV $432–518" on 19.3x. At the correct 26.2x the fair value fell to $350–480 and the verdict became WATCH — the stock sat at fair value, not below it.
- The watchlist trim convention inherits it directly.
Trim NNx fwdcomputes its dollar level as NN × (price ÷ forward P/E), so a forward EPS that is 36% too high sets a trim 36% too high and instructs holding through the exit. Compounds with [[pitfall-multiple-trim-inverts-on-peak-cycle-cyclicals]]. - It always errs toward "cheap." A forward EPS drawn from a later year on a growing company is too high, so the multiple looks too low. The error manufactures false bargains, which is the direction that costs money.
- Screens are worst affected: a
--screen-style pass ranks on the vendor field with no chance to sanity-check it.
How to apply
- Reconstruct the year from reported quarters before quoting any forward multiple. Sum the reported quarters of the fiscal year, add the guide for the rest, compare to the vendor's implied EPS. Two minutes, and it is the check that would have caught both cases.
- Tripwire: an implied forward EPS more than ~25% above TTM EPS on a company not in a step-change. TSM's implied $21.60 against $11.64 TTM was an 86% jump — visible without any research.
- Cross-check one independent vendor. GuruFocus/stockanalysis/finbox disagreeing with Yahoo by more than ~15% means Yahoo is using a different year. When they disagree, the majority is usually right and Yahoo is usually the outlier.
- Never let a screen-level forward multiple carry a verdict. A screen produces nominations,
not findings — see the tool-hierarchy note in CLAUDE.md on
fin.py --screen. This pitfall is the concrete reason that rule exists. - Related: [[pitfall-adr-book-value-corrupts-price-to-book]] (same day, same ticker, different field) · [[principle-primary-source-beats-vendor]] · [[pitfall-gate-cleared-by-adjective-not-arithmetic]].
✅ Amendment 2026-08-12 — the medtech peer set refines the claim in two ways
Checked all six names in the BSX medtech peer set against company guidance. The original claim said the vendor year is "not a consistent one across tickers." That is too pessimistic — within a single sector-and-calendar peer set it was perfectly consistent, and that consistency is itself the finding.
(1) The offset-fiscal-year trap — a genuinely new mechanism. Yahoo's forward P/E points at the next fiscal year for every name. Three matched next-FY consensus to the penny (ABT $6.06, SYK $16.76, EW $3.38). But Medtronic's fiscal year ends in April, so its "next FY" ends Apr-2028 — roughly 20 months out and a full year beyond the Dec-2027 calendar-year peers.
| Yahoo implied EPS | What year that actually is | Current-FY guide | Vendor fwd P/E | True cur-FY P/E | |
|---|---|---|---|---|---|
| MDT | $6.41 | FY2028 (ends Apr-2028) | $5.90–6.00 (FY2027) | 14.15x | 15.25x |
| ABT | $6.06 | FY2027 | $5.45–5.60 | 18.30x | 20.07x |
| SYK | $16.76 | FY2027 | $14.95–15.10 | 20.72x | 23.11x |
| EW | $3.38 | FY2027 | $2.95–3.05 | 27.53x | 31.02x |
| ISRG | ~$11.70–12.07 | FY2027 | no company guide exists | 33–34x | ~37–38.5x |
Dropping a vendor forward P/E for an offset-fiscal-year company into a peer table compares a 20-months-out estimate against 12-months-out estimates, and it flatters the odd one out — MDT looked ~7% cheaper than it is. This is invisible unless you check fiscal year ends, and it is not the same as the original TSM/QCOM failure (a wrong year on one name); it is a wrong horizon on one row of an otherwise-correct table.
(2) A uniform error preserves the relative signal. Because the vendor was on next-FY for all six, the ranking survived even though every level was wrong — which is the opposite of [[pitfall-half-corrected-peer-table-invents-a-discount]], where correcting some rows manufactured a fake discount. The rule that reconciles them: correct every row or none, and check fiscal year ends before believing "every row is on the same basis."
(3) The circularity tripwire. During this run an analyst "confirmed" BSX's forward year by citing FY2027 consensus of $3.44 — which was simply $51.42 ÷ Yahoo's 14.95, i.e. the vendor's own implied EPS fed back as independent corroboration. A vendor's implied EPS can never verify that vendor's multiple. Verification requires a company guide or a genuinely independent aggregator.
How this run applied it: BSX's guided FY2026 adj. EPS is $3.28–3.32, so the correct current-year multiple is 15.6x, not the 14.95x Yahoo showed. Because BSX screens as the "cheap" name, this is the direction the original note warned about — the error again pointed toward a false bargain.
History
- 2026-08-04 — found twice in one day (TSM, QCOM) during the tech sweep.
-
2026-08-12 — extended during
/analyze BSX. Added the offset-fiscal-year mechanism (MDT's April year end putting its vendor forward a full year past its calendar-year peers), the finding that a uniform year error preserves relative ranking while a partial correction does not, and the circularity tripwire (vendor-implied EPS cannot verify the vendor's own multiple). Softened the original "not consistent across tickers" claim — within one sector/calendar cohort it was consistent. -
2026-08-19 — fired again on LEN during
/analyze; seeOutput/Stocks/Consumer/LEN/analyze-2026-08-19.md.
Amendment 2026-08-27 - two names in one session, and the vendor field is self-documenting
/analyze AMD, ANET fired this pitfall on both names, in the same direction, on the same day.
| ticker | vendor forwardPE |
implied EPS | true current-year | true fwd P/E | understated by |
|---|---|---|---|---|---|
| AMD | 30.85x | $15.45 (FY2027) | $7.57 (FY2026 non-GAAP) | 63.0x | ~2.0x |
| ANET | 38.97x | $5.16 (FY2027) | $4.11 (FY2026 non-GAAP) | 48.9x | ~1.25x |
The AMD tripwire was extreme and visible without any research: implied forward EPS $15.45 against TTM EPS of $3.94 - a +292% jump on a company not in a step-change.
The upgrade: Yahoo carries the correct number in a different field, and nobody reads it
This is the most useful thing in the amendment. get_stock_info returns both years
simultaneously, and the current-year pair is right there:
AMD epsCurrentYear : 7.56794 priceEpsCurrentYear : 62.99 <- FY2026, CORRECT
epsForward : 15.45073 forwardPE : 30.85 <- FY2027, what everyone quotes
ANET epsCurrentYear : 4.11295 priceEpsCurrentYear : 48.89 <- FY2026, CORRECT
epsForward : 5.15956 forwardPE : 38.97 <- FY2027, what everyone quotes
The fix is therefore cheaper than the original note implies. The prescribed remedy was to reconstruct the year from reported quarters - sound, and still the authoritative check. But the first move should now be:
Read
epsCurrentYear/priceEpsCurrentYearalongsideforwardPEon every name. If they disagree by more than a rounding difference,forwardPEis the next fiscal year andpriceEpsCurrentYearis the number you want. Then confirm with the quarter-sum.
Yahoo's nextFiscalYearEnd does not resolve it - ANET's reads 2026-12-31, i.e. "forward"
should mean FY2026, and it does not.
.mcp/fin.py prints only PE(fwd) in its snapshot block, so the compact bundle inherits the
defect silently. Worth adding priceEpsCurrentYear to that block.
New failure mode: one vendor, two different forward P/Es, same page-set, same day
The original guard says "cross-check one independent vendor." Insufficient. On 2026-08-27 stockanalysis.com published, for AMD, at the same price:
| page | figure | basis |
|---|---|---|
| Forecast | 62.99x | FY2026 |
| Statistics | 43.30x | NTM blended |
46% apart, both correct, neither labelled. A cross-check that lands on the wrong page of the right vendor confirms the wrong number.
Revised guard: check which year or window each number is on - including within a single vendor - before comparing anything. Three distinct bases now circulate routinely: current fiscal year, NTM blended, and next fiscal year.
A second independence trap found the same day
For ANET, Yahoo and stockanalysis.com agreed to five decimal places ($4.11295) - because they share the LSEG feed. Agreement between them is not corroboration; they are one source. The only genuine confirmation was a bottom-up reconstruction from the company's own guidance. Before counting a cross-check, establish that the second vendor has a different feed.
The verdict impact, restated
Both names' watchlist lines carried the vendor figure and both understated the multiple. AMD's
"32.2x fwd" was the number the file had used for months to describe a stock at 63x, and it fed
directly into a Trim $360+ level that sat 25% below the fair value a corrected analysis
produces - see [[pitfall-stale-entry-zone-suppresses-a-name]] and
[[pitfall-multiple-trim-inherits-the-broken-vendor-field]]. The error again manufactured a false
bargain, which remains the direction that costs money.
Amendment 2026-08-27 (2) — DPZ, and the priceEpsCurrentYear shortcut confirmed again
/analyze-from-before DPZ hit the same trap the same day as the AMD/ANET amendment above,
independently. Yahoo's forwardPE 15.91x prices forwardEps $20.87 — FY2027, not FY2026.
priceEpsCurrentYear 17.46x on epsCurrentYear $19.02 is the correct current-year read, exactly
as the AMD/ANET fix prescribes. The baseline report (written 2026-04-29, before this note
existed) had independently quoted "15.6x fwd" on the same defect. Three names in one calendar
month (WDAY 8/27, AMD/ANET 8/27, DPZ 8/27) is no longer an occasional trap — check
priceEpsCurrentYear against forwardPE on every name, every time, before quoting any forward
multiple, and set watchlist trims on ttm rather than fwd whenever they disagree (see
[[pitfall-multiple-trim-inherits-the-broken-vendor-field]]).
Amendment 2026-08-27 (3) — EMR, and a mislabel that was latent at the moment of writing
/analyze-from-before EMR found the baseline (analyze-2026-03-21.md) had written "Forward EPS
(FY2026) ~$7.15 (consensus), forward P/E 17.9x" — labelling the number as the current-under-way
fiscal year. It was not. EMR's FY2026 ends Sep 30, 2026; in March 2026 that was already the
"current" fiscal year by Yahoo's own convention (last completed FY was FY2025, ended Sep 2025), so
whatever Yahoo returned in forwardEps in March was already FY2027 — one year past the year
the baseline named it. The true FY2026 figure was always the company's own guide ($6.40–6.55,
later confirmed $6.55), never the ~$7.15 the baseline quoted.
This is a new variant worth naming: the mislabel does not require a fiscal-year rollover to
happen between the write and the read. Every prior case in this note (TSM, QCOM, AMD, ANET, DPZ)
was caught reading a stale or wrong-year figure at the moment of analysis. Here the figure was
wrong on the day it was written — the baseline never reconstructed the year from quarters, so
the error sat latent in the file for five months until this pass's epsCurrentYear /
priceEpsCurrentYear cross-check (per the AMD/ANET amendment's revised guard) caught it by
matching Yahoo's own current-year field ($6.5554) against the company's guide almost to the cent.
No verdict damage this time — the baseline's fair-value work ran on FCF/DDM/DYT, not on the
mislabeled multiple, so the error was cosmetic in March. It would not have stayed cosmetic: had a
Trim NNx fwd been set against the $7.15 figure, it would have inherited a number one fiscal year
too far out, the same failure the TEAM case describes in
[[pitfall-stale-entry-zone-suppresses-a-name]]. Caught and corrected before that could happen.
Four names fired this pitfall in the same calendar month (WDAY, AMD, ANET, DPZ) plus EMR now a
fifth, on a five-month-old file — this is not a screening-day-only risk, it is a standing check
every /analyze and /analyze-from-before needs regardless of when the number was first written.
Amendment 2026-08-27 (4) — the batch result: it is not "occasional," it is the default
A single 2026-08-27 batch ran /analyze-from-before on 19 watchlist names (the Tier-1/2/3
staleness queue). The vendor forward field mapped to the wrong fiscal year on essentially every
one that had a positive, guidable EPS — AVGO, ADP, V, VEEV, SHOP, DOCU, ETN, ACN, MSFT, MANH,
META, TGT, SAP, GPN, plus the WDAY/DPZ/EMR already recorded above. LEU is the informative
exception: its earnings are too lumpy/negative for the vendor P/E to mean anything at all, so the
field was discarded, not corrected. The hit rate is not a coincidence to note case-by-case; it
is the field's normal behaviour. Stop treating each instance as a fresh discovery.
Two standing consequences:
1. Never quote a vendor forwardPE/forwardEps without first cross-checking
priceEpsCurrentYear/epsCurrentYear. If they disagree, the current-year field is the true
forward and the forwardPE is one fiscal year too far out — which always reads cheaper than
reality, the direction that costs money.
2. Tooling fix worth doing: promote the epsCurrentYear / priceEpsCurrentYear current-year
multiple into fin.py's snapshot output directly, beside the raw forwardPE, so the correct
number is on the page and the manual cross-check is no longer the only thing standing between
the analyst and the trap. Fifteen-plus manual catches in one month is the signal that the guard
belongs in the tool, not the checklist.
Amendment 2026-08-27 (5) — when the name just reported, BOTH forward fields can be stale
The /analyze batch on the 8/26 reporters (CRM, CRWD, OKTA) surfaced a sharper failure: when a
company reported within the last one or two trading days, the epsCurrentYear/priceEpsCurrentYear
fix from the AMD/ANET amendment is not enough — both the forwardPE/forwardEps pair AND the
epsCurrentYear pair can lag the just-issued guidance at once, because the vendor has not re-based
either to the new fiscal-year guide yet. On CRM the two fields even disagreed with each other while
both trailed the raised FY27 guide. OKTA showed the trailing-side version: the morning after an
after-close print, trailingEps/trailingPE/totalRevenue still carried the pre-print window,
missing the just-reported quarter entirely.
Rule addition: if the name reported within ~2 trading days, do not trust ANY vendor EPS field — forward or trailing. Read the company's own issued guidance and compute the multiple from it. The vendor cross-check resolves the wrong-fiscal-year case; it does not resolve the just-reported case.
Source: Output/Stocks/Infrastructure/EMR/analyze-from-before-2026-08-27.md.
Amendment 2026-09-22 — three hits in a single session, on a six-name batch
A portfolio-specific passage was removed from the public build.
| Ticker | Vendor forward P/E | True forward P/E | Vendor's basis | Effect |
|---|---|---|---|---|
| KLAC | 27.6x | 34.1x | FY2028 EPS ($6.71) | A full rating step — 27.6x reads cheap for the best business in WFE; 34.1x reads full |
| META | 21.5x | — | FY2027 EPS ($34.84) | The 23x fwd trim renders ~$801 while the fair value was built on ~$27 of current-year EPS → the site showed a stock 14% ABOVE fair value as comfortably below trim |
| INTU | 12.56x | — | implies EPS $27.64, matching no guided year (FY27 non-GAAP $22.88-23.12, GAAP $20.12-20.36) | A 20x fwd trim would render $553, ~20% too high — which is why that file deliberately uses 28x ttm |
The META case is the new one, and it is a rendering bug, not just a reading error
The other instances are analysts quoting a wrong multiple. META's is worse: the fair value and the trim were computed on EPS from two different fiscal years and then printed side by side. Nothing in either number is individually wrong. The comparison is meaningless, and the site renders it as an actionable pair.
Rule addition: a fair value and a trim must be stated on the SAME EPS basis, and the basis must be written down. When a trim is expressed as a multiple, record which fiscal year's EPS it multiplies. A multiple without a stated basis is not a level.
Why 28x ttm keeps winning
Three files have now independently chosen a trailing multiple for the trim specifically to escape this field (INTU, DT, and VICI's dollar-form AFFO trim). That is not a workaround any more — prefer ttm, or an explicitly-labelled forward year, whenever the vendor forward cannot be reconstructed from issued guidance.