MaternAlert / src /ocr /validators /patient.validator.ts
Auspicious14's picture
feat(ocr, risk): add patient OCR and risk assessment
27e706d
Raw
History Blame Contribute Delete
1.4 kB
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,
};
}