import json from pathlib import Path from data.diff_result import VerificationRun class ReportGenerator: def generate_json(self, run: VerificationRun, p: Path) -> Path: d = {"program": run.program, "status": run.status, "exit_code": run.exit_code, "timestamp": run.timestamp, "duration_s": run.duration_s, "fields_matched": run.fields_matched, "fields_mismatched": run.fields_mismatched, "runner": run.runner, "branch_rate": run.branch_rate, "llm_cost": run.llm_cost, "field_results": [{"field_name": fr.field_name, "status": fr.status, "cobol_value": fr.cobol_value, "java_value": fr.java_value, "suggestion": fr.suggestion} for fr in run.field_results]} p.write_text(json.dumps(d, indent=2)) return p def generate_html(self, run: VerificationRun, p: Path) -> Path: rows = "".join( f'{fr.field_name}' f'{fr.status}{fr.cobol_value}{fr.java_value}' f'{fr.suggestion}' for fr in run.field_results) html = f"{run.program}" \ f"

{run.program}

Status: {run.status} | " \
               f"Runner: {run.runner} | {run.fields_matched} fields | {run.duration_s}s
" \ f"" \ f"{rows}
FieldStatusCOBOLJavaSuggestion
" p.write_text(html) return p def generate_machine_json(self, run: VerificationRun, p: Path) -> Path: d = {"program": run.program, "status": run.status, "exit_code": run.exit_code, "timestamp": run.timestamp, "duration_s": run.duration_s, "runner": run.runner} p.write_text(json.dumps(d)) return p