fix(sec): defer expected Company Facts lag without alerting

This commit is contained in:
2026-07-31 12:40:29 +02:00
parent 862d1d536b
commit f58f8b0818
7 changed files with 88 additions and 10 deletions
+11 -5
View File
@@ -17,7 +17,12 @@ import app.models # noqa: F401
from app.models.fundamental_snapshot import FundamentalSnapshot
from app.models.system_event import SystemEvent
from app.models.ticker import Ticker
from app.services.data_import import STATUS_FAILED, STATUS_PROMOTED, run_import
from app.services.data_import import (
STATUS_DEFERRED,
STATUS_FAILED,
STATUS_PROMOTED,
run_import,
)
from app.services.sec_fundamentals_importer import SecFundamentalsImporter
@@ -191,7 +196,7 @@ async def test_incremental_adds_only_new_filing(engine):
assert q2.fiscal_period == "Q2" and q2.revenue == 254940
async def test_consistency_gate_fails_when_facts_lag_index(engine):
async def test_consistency_gate_defers_without_alert_when_facts_lag_index(engine):
factory = _factory(engine)
await _seed(factory, ["AAPL"])
backfill = FakeSecClient(
@@ -213,9 +218,9 @@ async def test_consistency_gate_fails_when_facts_lag_index(engine):
)
run = await run_import(_importer(incr, today=date(2026, 5, 3)), engine=engine)
assert run.status == STATUS_FAILED
# The gate blocks every later run until it clears, so the alert itself has to
# name the filing and say why it could not be resolved.
assert run.status == STATUS_DEFERRED
# The gate blocks every later run until it clears, so run history still has
# to name the filing and say why it could not be resolved.
details = run.error_details or ""
assert "GHOST" in details and "not_in_companyfacts" in details
assert "2026-05-01" in details # index date the filing was seen on
@@ -224,6 +229,7 @@ async def test_consistency_gate_fails_when_facts_lag_index(engine):
assert summary["missing_xbrl"][0]["accession"] == "GHOST"
assert summary["missing_xbrl"][0]["form"] == "10-Q"
assert await _count(factory, FundamentalSnapshot) == 2 # nothing new written
assert await _count(factory, SystemEvent) == 0 # expected SEC lag does not alert
async def test_gate_separates_missing_submissions_from_missing_facts(engine):