import { ValidationResult, ValidationWarning, ValidationSummary } from "./types"; import { ExtractedPatientData } from "../interfaces/extracted-patient.interface"; import { ALL_RULES, validateConfidence } from "./rules"; const countFields = (data: ExtractedPatientData): number => { let count = 0; Object.keys(data).forEach((key) => { const field = data[key as keyof ExtractedPatientData]; if ( typeof field === "object" && field !== null && "value" in field && "confidence" in field ) { count++; } }); return count; }; export function validatePatient(data: ExtractedPatientData): ValidationResult { const warnings: ValidationWarning[] = []; for (const rule of ALL_RULES) { const result = rule(data); if (Array.isArray(result)) { warnings.push(...result); } else if (result) { warnings.push(result); } } warnings.push(...validateConfidence(data)); const totalFields = countFields(data); const errors = warnings.filter((w) => w.severity === "error").length; const reviewRequired = warnings.filter((w) => w.severity === "warning").length; const verifiedFields = totalFields - reviewRequired - errors; const summary: ValidationSummary = { totalFields, verifiedFields, reviewRequired, errors, }; return { data, warnings, summary, }; }