from __future__ import annotations from dataclasses import dataclass, field from typing import Any from review_agent.models import ApplicationFormFillBatch, ExportedSummaryFile, FileSummaryBatch, RegulatoryReviewBatch @dataclass(frozen=True) class TemplateSpec: code: str name: str source_file: str output_label: str applies_when: dict[str, Any] file_format: str fields: list[dict[str, Any]] checklist_items: list[dict[str, Any]] = field(default_factory=list) @dataclass(frozen=True) class ExtractedField: key: str label: str value: str source_file: str source_role: str evidence: str extractor: str confidence: float @dataclass(frozen=True) class MergedField: key: str label: str value: str source_file: str evidence: str confidence: float has_conflict: bool = False conflict_values: list[dict[str, Any]] = field(default_factory=list) @dataclass class FormFillContext: batch: ApplicationFormFillBatch source_summary_batch: FileSummaryBatch source_regulatory_batch: RegulatoryReviewBatch | None template_config: dict[str, Any] = field(default_factory=dict) selected_templates: list[TemplateSpec] = field(default_factory=list) document_texts: dict[str, str] = field(default_factory=dict) regex_results: dict[str, Any] = field(default_factory=dict) llm_results: dict[str, Any] = field(default_factory=dict) merged_fields: dict[str, MergedField] = field(default_factory=dict) checklist_items: dict[str, Any] = field(default_factory=dict) conflicts: list[dict[str, Any]] = field(default_factory=list) exports: list[ExportedSummaryFile] = field(default_factory=list)