Federal Signal [FSS]
Screen: reports/scan_universe/FSS_analysis.json, as-of 2026-07-30, Quality PASS, Valuation PASS at
+6.8pp.
| screen field | screen value | verified value | source | result |
|---|---|---|---|---|
shares |
61,002,256 | 61,002,256 | 10-Q cover page 2026-03-31 | exact |
revenue_ttm |
2,342,300,000 | 2,342,300,000 | four filed quarters | exact |
cash |
$71.4m | $71.4m | 10-Q 2026-03-31 | exact |
net_cash |
−140,200,000 | −481,600,000 | cash $71.4m − total debt $553.0m | WRONG by $341.4m |
ev |
7,570,274,781 | 7,911,674,781 | understated $341.4m, −4.5% | |
ev_sales |
3.232 | 3.378 | 4.3% understated | |
ev_ebit |
20.7 | 21.13 | ||
op_margin_pct |
15.6 (FY2025) | 15.63 (FY2025 filed) | 10-K | correct — screen used the filed figure |
gross_margin_pct |
28.9 | 28.95 (FY2025 filed) | 10-K | correct |
revenue_cagr_demonstrated |
15.0 | ~10.0 organic (est., 9.5–11.3) | derived; not disclosed | contaminated by acquisition |
revenue_growth_latest_q_yoy |
34.9 | 34.9 | correct, but mostly acquired | |
exit_multiple |
22.5, GROWTH_MATCHED, peer_n: 318 |
10.53x | ROIC identity | invalid — 318-name "peer" set |
required_cagr_pct |
8.2 | 19.0 | reverse_dcf | wrong by 10.8pp |
valuation_margin_pp |
+6.8 | −9.0 | sign flip, 15.8pp swing |
The screen's own net_cash_components field records exactly what it did:
"assets": ["CashAndCashEquivalentsAtCarryingValue@2026-03-31"],
"debt": ["LongTermDebt@2025-09-30"],
"net_cash_complete": true
It paired a 2026-03-31 cash figure with a 2025-09-30 debt figure — two quarters stale — and set
net_cash_complete: true.
The cause is tag choice. Federal Signal stopped populating us-gaap:LongTermDebt after 2025-09-30
and reports instead through
us-gaap:LongTermDebtAndCapitalLeaseObligationsIncludingCurrentMaturities, which is populated at
2026-03-31 at $553.0m.
| tag | last value | date |
|---|---|---|
LongTermDebt |
$211.6m | 2025-09-30 ← what the screen used |
LongTermDebtCurrent |
$2.5m | 2026-03-31 |
LongTermDebtAndCapitalLeaseObligations |
$548.6m | 2026-03-31 |
LongTermDebtAndCapitalLeaseObligationsIncludingCurrentMaturities |
$553.0m | 2026-03-31 ← correct |
The staleness is not incidental. Between 2025-09-30 and 2026-03-31 Federal Signal closed New Way
($424.2m, 2025-11-25), Kinloch ($14.9m, 2025-12-04) and Mega ($45.0m, 2026-01-16), and issued
$400.0m of long-term debt (FY2025 cash-flow statement, ProceedsFromIssuanceOfLongTermDebt).
The excluded debt is precisely the debt raised to buy the revenue the screen was scoring.
Classification. DATA_DEFECTS.md records net_cash wrong on ~20 of 22 hand-verified names, and
records the "longTermDebt = 0 in the newest quarter only" pattern where 0 was correct for WDC. This
is a third variant and it is more dangerous than either: the tag is neither zero nor absent — it is
simply not updated, so every existence check passes. The scanner asserted recency on the cash leg
(2026-03-31) and not on the debt leg. Completeness was checked; currency was not. A
net_cash_complete: true flag on a two-quarter-stale debt figure is the "existence is not validity"
failure class (calibration item D1) applied to a date rather than a value.
Recommended check for the scanner: assert that the debt leg's end date is within one quarter of
the asset leg's, and fail the record loudly if not.
operatingIncome — same family as the KGS defect, much smaller magnitude| period | AV operatingIncome |
filed | error |
|---|---|---|---|
| FY2025 | $355.8m (sum of quarterlies) | $340.9m | +4.4% (+$14.9m), 0.68pp of margin |
| Q1 2026 | $100.9m | $99.5m (625.6 × 15.9%) | +1.4% |
The excluded line is Acquisition and integration-related expenses, net ($16.0m in FY2025). This
is the same shape as the KGS finding in this cluster — AV drops certain operating charges — and the
magnitude scales with those charges (KGS: +21.9% with $67.9m of loss-on-sale and impairment; FSS:
+4.4% with $16.0m of acquisition expense). Two names, same field, same direction, magnitude
proportional to the excluded line. On XYL in the same cluster the field is byte-clean. So the
defect is real, filer-specific, and predictable from the presence of below-SG&A operating charges.
gross_profit also differs: AV FY2025 28.1% vs a filed 28.95% (0.85pp). All opex lines in this
memo were taken from the 10-K, so neither figure entered the model.
| field | result |
|---|---|
totalRevenue, all quarters |
byte-identical to EDGAR — 625.6 / 597.1 / 555.0 / 564.6 / 463.8 all tie |
SPLITS |
queried explicitly, {"symbol":"FSS","data":[]} — no split, no reverse split |
cashAndShortTermInvestments |
not applicable — shortTermInvestments and longTermInvestments both absent from the balance sheet. Cash $71.4m ties to the 10-Q. The INSM defect does not fire |
EARNINGS_ESTIMATES |
40 records with full 7/30/60/90-day revision history — not the empty-array failure |
EARNINGS_CALL_TRANSCRIPT |
9 of 12 quarters, speaker/title/sentiment populated |
av_vs_edgar.py |
VERIFIED, 4 periods compared, 0 disagreements (revenue only — see the KGS finding on this tool's scope) |
ebit, ebitda, sellingGeneralAndAdministrative, OVERVIEW.* |
not used |
normalized_fcf.py overstates Federal Signal's maintenance capex by 3.1x| tool | actual | |
|---|---|---|
| maintenance capex proxy | 3.7% of revenue (D&A ÷ revenue) | 1.2% (actual capex $28.7m TTM) |
| operating cash margin | 8.4% (20-year median) | 13.6% (TTM) |
| steady-state FCF margin | 4.7% | trailing 12.4% |
The D&A proxy fails here because $18.4m of FY2025 D&A is Amortization expense on purchased
customer relationships and trade names — a non-cash purchase-accounting charge, not a sustaining
capital cost. The 20-year operating-cash-margin median fails because Federal Signal in 2006–2015 was
a materially smaller and lower-margin company (operating margin 6.4% in 2012 against 16.0% today).
This is the same tool defect found on KGS in this cluster, from the opposite direction. On KGS the
D&A proxy overstated maintenance capex 2.0x because of an acquisition asset step-up; on FSS it
overstates 3.1x because of acquisition intangible amortisation. Both are acquisition artefacts,
and normalized_fcf.py has no adjustment for either. Recommended fix: use disclosed capex where
available and subtract acquisition intangible amortisation from the D&A proxy where it is not.
Used instead: 10.5% — trailing 12.4% haircut deliberately, because Federal Signal's growth requires cash acquisitions ($501.0m in FY2025 against $255m of operating cash flow) that never appear in capex.
steady_state_check.py — used as intended and it changed an inputAt a first-tested terminal margin of 16.5% the tool returned
TERMINAL_ABOVE_EVERY_OBSERVED_YEAR. The margin was moved to 16.0% — the TTM filed actual —
and the flag cleared to NO_SCALING_CONTAMINATION_DETECTED. The independent reason for the move
is that Q1 2026 gross margin was down 0.2pp year over year on acquired mix, so the gross-margin
uptrend that would fund a higher terminal margin has stopped. Recorded because a flag that changes
an input is the tool working, and because the change is documented with a reason that is checkable
against the filing rather than asserted.
LongTermDebtAndCapitalLeaseObligationsIncludingCurrentMaturities, not
LongTermDebt. See the screen defect above.