fix(sec): derive fiscal year end from the issuer's own 10-K #3

Merged
dennisthiessen merged 1 commits from fix/sec-fundamentals-parity-gaps into main 2026-07-24 12:01:20 +02:00
Owner

Regression found by the post-reparse collision check. _period_identity trusted
submissions.fiscalYearEnd, which is not reliable: Franklin Resources (BEN)
declares 1231 while every one of its 10-Ks ends 09-30.

The effect was data loss, not just a bad label. BEN's real fiscal Q1 (Dec 31)
sat 0 days from the claimed year end, matching no quarter band, so it fell back
to SEC's fy/fp; its fiscal Q2 (Mar 31) computed 275 days out and was labelled
Q1. Both landed on the same key, the collision discarded one, and BEN lost TTM
EPS and revenue growth entirely — values it had before this branch.

A 10-K's reportDate IS the fiscal year end by definition, so resolve_fiscal_
year_end() now prefers the issuer's most recent annual filing and treats the
declared value as a fallback for issuers with no 10-K in the set.

Scanned the full tracked universe: 2 of 506 issuers declare a year end more
than 21 days from their own 10-K — BEN (91d, broken) and DELL (29d, mislabelled
but functionally correct). Both now derive correctly and match the legacy
provider: BEN revenue growth 3.8243 vs 3.82, DELL 38.5735 vs 38.57. Controls
(AAPL, COST, PEP, DPZ, IRM, JPM, CRM, STX, AVY) byte-identical.

826 unit tests pass.

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Regression found by the post-reparse collision check. _period_identity trusted submissions.fiscalYearEnd, which is not reliable: Franklin Resources (BEN) declares 1231 while every one of its 10-Ks ends 09-30. The effect was data loss, not just a bad label. BEN's real fiscal Q1 (Dec 31) sat 0 days from the claimed year end, matching no quarter band, so it fell back to SEC's fy/fp; its fiscal Q2 (Mar 31) computed 275 days out and was labelled Q1. Both landed on the same key, the collision discarded one, and BEN lost TTM EPS and revenue growth entirely — values it had before this branch. A 10-K's reportDate IS the fiscal year end by definition, so resolve_fiscal_ year_end() now prefers the issuer's most recent annual filing and treats the declared value as a fallback for issuers with no 10-K in the set. Scanned the full tracked universe: 2 of 506 issuers declare a year end more than 21 days from their own 10-K — BEN (91d, broken) and DELL (29d, mislabelled but functionally correct). Both now derive correctly and match the legacy provider: BEN revenue growth 3.8243 vs 3.82, DELL 38.5735 vs 38.57. Controls (AAPL, COST, PEP, DPZ, IRM, JPM, CRM, STX, AVY) byte-identical. 826 unit tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dennisthiessen added 1 commit 2026-07-24 12:01:09 +02:00
Regression found by the post-reparse collision check. _period_identity trusted
submissions.fiscalYearEnd, which is not reliable: Franklin Resources (BEN)
declares 1231 while every one of its 10-Ks ends 09-30.

The effect was data loss, not just a bad label. BEN's real fiscal Q1 (Dec 31)
sat 0 days from the claimed year end, matching no quarter band, so it fell back
to SEC's fy/fp; its fiscal Q2 (Mar 31) computed 275 days out and was labelled
Q1. Both landed on the same key, the collision discarded one, and BEN lost TTM
EPS and revenue growth entirely — values it had before this branch.

A 10-K's reportDate IS the fiscal year end by definition, so resolve_fiscal_
year_end() now prefers the issuer's most recent annual filing and treats the
declared value as a fallback for issuers with no 10-K in the set.

Scanned the full tracked universe: 2 of 506 issuers declare a year end more
than 21 days from their own 10-K — BEN (91d, broken) and DELL (29d, mislabelled
but functionally correct). Both now derive correctly and match the legacy
provider: BEN revenue growth 3.8243 vs 3.82, DELL 38.5735 vs 38.57. Controls
(AAPL, COST, PEP, DPZ, IRM, JPM, CRM, STX, AVY) byte-identical.

826 unit tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dennisthiessen merged commit 4135946cb3 into main 2026-07-24 12:01:20 +02:00
dennisthiessen deleted branch fix/sec-fundamentals-parity-gaps 2026-07-24 12:01:25 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dennisthiessen/signal-platform#3