Spaces:
Running
Running
File size: 1,395 Bytes
27e706d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
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,
};
}
|