tinylink/core/pipeline/normalizer.js
mahdahar 10f8dbbb83 refactor: consolidate core runtime and docs
Move middleware sources into core/, refresh config paths, and update design/user docs to reflect the raw payload pipeline.
2026-04-07 11:30:11 +07:00

38 lines
940 B
JavaScript

const { z } = require('zod');
const resultSchema = z.object({
test_code: z.string().min(1),
value: z.union([z.string(), z.number()]),
unit: z.string().optional(),
flag: z.string().optional(),
meta: z.record(z.string(), z.any()).optional()
});
const canonicalSchema = z.object({
instrument_id: z.string().min(1),
sample_id: z.string().min(1),
result_time: z
.string()
.refine((value) => !Number.isNaN(Date.parse(value)), 'invalid ISO timestamp'),
results: z.array(resultSchema).min(1),
unit: z.string().optional(),
flag: z.string().optional(),
patient_id: z.string().optional(),
operator_id: z.string().optional(),
meta: z.record(z.string(), z.any()).optional()
});
function normalize(payload) {
try {
return canonicalSchema.parse(payload);
} catch (error) {
console.error('normalization failed', error);
throw error;
}
}
module.exports = {
normalize,
schema: canonicalSchema
};