Spaces:
Running
Running
| 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<ExtractedPatientData> { | |
| 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, | |
| }; | |
| } | |