import json from pathlib import Path from data.diff_result import VerificationRun class ReportGenerator: def generate_json(self, run: VerificationRun, output_path: Path) -> Path: data = { "program": run.program, "timestamp": run.timestamp, "status": run.status, "exit_code": run.exit_code, "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, "tolerance_applied": fr.tolerance_applied, "rounding_detected": fr.rounding_detected, "suggestion": fr.suggestion} for fr in run.field_results ], } output_path.write_text(json.dumps(data, indent=2)) return output_path def generate_html(self, run: VerificationRun, output_path: Path) -> Path: rows = "" for fr in run.field_results: cls = "pass" if fr.status == "PASS" else ("tolerated" if fr.status == "TOLERATED" else "fail") rows += f'{fr.field_name}{fr.status}{fr.cobol_value}{fr.java_value}{fr.suggestion}' html = f"""Verify: {run.program}

{run.program}

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