add earnings-date guard — warn when a report falls in the target horizon
Finnhub's earnings calendar now supplies next_earnings_date through the fundamentals chain; persisted on fundamental_data (migration 006) and exposed in the fundamentals API. The recommendation panel warns when earnings fall within the ~30-day target horizon (a report can gap price through stop/target) and otherwise shows the next date. Informational only. Deploy: run alembic upgrade (new fundamental_data.next_earnings_date column). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -153,3 +153,29 @@ async def test_rate_limited_but_complete_does_not_raise():
|
||||
|
||||
result = await provider.fetch_fundamentals("AAPL")
|
||||
assert result.pe_ratio == 20.0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_chain_merges_next_earnings_date():
|
||||
"""Earnings date is taken from the first provider that supplies it."""
|
||||
from datetime import date as _date
|
||||
|
||||
primary = FundamentalData(
|
||||
ticker="AAPL", pe_ratio=None, revenue_growth=None, earnings_surprise=None,
|
||||
market_cap=100.0, fetched_at=datetime.now(timezone.utc),
|
||||
)
|
||||
|
||||
class _EarningsProvider:
|
||||
async def fetch_fundamentals(self, ticker: str) -> FundamentalData:
|
||||
return FundamentalData(
|
||||
ticker=ticker, pe_ratio=10.0, revenue_growth=5.0, earnings_surprise=1.0,
|
||||
market_cap=None, fetched_at=datetime.now(timezone.utc),
|
||||
next_earnings_date=_date(2026, 7, 1),
|
||||
)
|
||||
|
||||
provider = ChainedFundamentalProvider([
|
||||
("fmp", _DataProvider(primary)),
|
||||
("finnhub", _EarningsProvider()),
|
||||
])
|
||||
result = await provider.fetch_fundamentals("AAPL")
|
||||
assert result.next_earnings_date == _date(2026, 7, 1)
|
||||
|
||||
Reference in New Issue
Block a user