from __future__ import annotations from dataclasses import dataclass, field from datetime import datetime from typing import Optional @dataclass class FieldResult: field_name: str = "" status: str = "PASS" cobol_value: str = "" java_value: str = "" tolerance_applied: float = 0.0 rounding_detected: str = "" suggestion: str = "" @dataclass class VerificationRun: program: str = "" timestamp: str = "" status: str = "PASS" exit_code: int = 0 duration_s: float = 0.0 fields_matched: int = 0 fields_mismatched: int = 0 coverage_target: str = "boundary" field_results: list[FieldResult] = field(default_factory=list) runner: str = "native" branch_rate: float = 0.0 llm_cost: float = 0.0 report_path: str = "" debug: dict = field(default_factory=dict) def __post_init__(self): if not self.timestamp: self.timestamp = datetime.now().strftime("%Y%m%d-%H%M%S") @property def total_fields(self) -> int: return self.fields_matched + self.fields_mismatched def verdict(self) -> str: return self.status _fr = FieldResult(field_name="BR-AMT", status="MISMATCH") assert _fr.status == "MISMATCH" _vr = VerificationRun(program="BILL-CALC", runner="spark") assert _vr.program == "BILL-CALC" assert _vr.timestamp != ""