summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/app/schemas.py21
-rw-r--r--backend/tests/test_api.py19
2 files changed, 40 insertions, 0 deletions
diff --git a/backend/app/schemas.py b/backend/app/schemas.py
index 2ee6dac..86f586c 100644
--- a/backend/app/schemas.py
+++ b/backend/app/schemas.py
@@ -107,6 +107,27 @@ class HistoryPoint(BaseModel):
volume: float | None = None
+class FinancialRow(BaseModel):
+ label: str
+ indent: int = 0
+ is_total: bool = False
+ is_section: bool = False
+ is_margin: bool = False
+ values: list[float | None] = Field(default_factory=list)
+
+
+class FinancialStatement(BaseModel):
+ columns: list[str] = Field(default_factory=list)
+ rows: list[FinancialRow] = Field(default_factory=list)
+
+
+class FinancialsResponse(BaseModel):
+ period: Literal["annual", "quarterly"]
+ income: FinancialStatement
+ balance: FinancialStatement
+ cash_flow: FinancialStatement
+
+
class WatchlistItem(BaseModel):
symbol: str
created_at: str
diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py
index 1c99cf9..5d76dfd 100644
--- a/backend/tests/test_api.py
+++ b/backend/tests/test_api.py
@@ -334,6 +334,25 @@ def test_compute_ttm_ratios_guardrails_suppress_outliers(monkeypatch) -> None:
assert "ev_to_ebitda" not in ratios
+def test_financials_schema_structure() -> None:
+ from app.schemas import FinancialRow, FinancialStatement, FinancialsResponse
+ row = FinancialRow(label="Revenue", indent=0, is_total=True, values=[1.0, 2.0, None])
+ assert row.label == "Revenue"
+ assert row.is_total is True
+ assert row.values[2] is None
+
+ stmt = FinancialStatement(columns=["FY 2024", "TTM"], rows=[row])
+ assert len(stmt.columns) == 2
+
+ resp = FinancialsResponse(
+ period="annual",
+ income=stmt,
+ balance=FinancialStatement(columns=[], rows=[]),
+ cash_flow=FinancialStatement(columns=[], rows=[]),
+ )
+ assert resp.period == "annual"
+
+
def test_overview_uses_computed_sources_and_ratios(monkeypatch) -> None:
clear_service_caches()
monkeypatch.setattr(