34 lines
1.4 KiB
Python
34 lines
1.4 KiB
Python
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class FinancialMetric(BaseModel):
|
|
source_file: str = Field(
|
|
description="Workspace-relative source path under data/, such as data/10-k-mdna-overview.txt."
|
|
)
|
|
filing_section: Literal[
|
|
"Part II, Item 7. Management's Discussion and Analysis of Financial Condition and Results of Operations",
|
|
"Part II, Item 8. Financial Statements and Supplementary Data",
|
|
] = Field(description="Normalized 10-K filing section for the source document.")
|
|
metric_name: str = Field(
|
|
description="Metric label exactly as written in the source document or table."
|
|
)
|
|
fiscal_period: Literal["FY2025", "FY2024", "2025-12-31", "2024-12-31"] = Field(
|
|
description="Annual period label for statement rows, or balance-sheet date for point-in-time rows."
|
|
)
|
|
value: float = Field(description="Numeric value from the source row.")
|
|
unit: Literal["USD millions", "percent"] = Field(
|
|
description="Unit for `value`; use USD millions for dollar amounts and percent for margins."
|
|
)
|
|
segment: str | None = Field(
|
|
default=None,
|
|
description="Reportable segment or geography when the row is segment-specific, otherwise null.",
|
|
)
|
|
|
|
|
|
class FinancialMetricBatch(BaseModel):
|
|
metrics: list[FinancialMetric] = Field(
|
|
description="One row per metric-period pair extracted from each source document."
|
|
)
|