@dotbase/hl7-v2-message
Version:
Parses HL7 v2.x messages into typed javascript objects and makes them easily accessable.
38 lines (37 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class FieldParser {
static initSegmentFields(segment, rawSegment) {
if (!FieldParser.validateFieldLength(segment.fields, rawSegment.fields)) {
throw Error(`Number of fields in raw segment ${rawSegment.type} does not match required number of fields`);
}
return FieldParser.setFieldValues(segment, rawSegment);
}
static setFieldValues(segment, rawSegment) {
rawSegment.fields.forEach((value, index) => FieldParser.setFieldValue(segment, value, index));
return segment;
}
static setFieldValue(segment, rawValue, index) {
for (const field of Object.values(segment.fields)) {
if (field.index === index)
field.value = rawValue;
}
return segment;
}
static validateFieldLength(segmentFields, rawSegmentFields) {
const maxFields = Object.entries(segmentFields).length;
const minFields = FieldParser.getMandatoryFields(segmentFields) + 1;
if (rawSegmentFields.length < minFields || rawSegmentFields.length > maxFields)
return false;
return true;
}
static getMandatoryFields(segmentFields) {
let minFieldIndex = 0;
for (const field of Object.values(segmentFields)) {
if (field.isOptional === false && field.index >= minFieldIndex)
minFieldIndex = field.index;
}
return minFieldIndex;
}
}
exports.default = FieldParser;