@dotbase/hl7-v2-message
Version:
Parses HL7 v2.x messages into typed javascript objects and makes them easily accessable.
40 lines (39 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Hl7Parser = void 0;
const tslib_1 = require("tslib");
const messageParser_1 = tslib_1.__importDefault(require("./messageParser"));
const fieldParser_1 = tslib_1.__importDefault(require("./fieldParser"));
const __1 = tslib_1.__importDefault(require(".."));
class Hl7Parser {
static parse(rawMessage) {
const rawSegments = Hl7Parser.splitSegments(rawMessage);
const mshSegment = Hl7Parser.getMessageHeader(rawSegments);
const messageType = mshSegment.fields.MSH_9.value;
return messageParser_1.default.initMessageSegments(messageType, mshSegment, rawSegments);
}
static splitSegments(rawMessage) {
return rawMessage.split(/(\n|<cr>)/).map((segment) => this.splitSegment(segment));
}
static splitSegment(rawSegment) {
const type = rawSegment.substring(0, rawSegment.indexOf("|"));
let splitValue = rawSegment.substring(rawSegment.indexOf("|") + 1);
if (type === "MSH")
splitValue = `|${splitValue}`;
return {
type: type,
fields: Hl7Parser.splitFields(splitValue),
};
}
static splitFields(rawFields) {
return rawFields.split("|");
}
static getMessageHeader(rawSegments) {
const rawMSH = rawSegments.find((segment) => segment.type === "MSH");
if (!rawMSH)
throw Error("Missing mandatory segment of type MSH");
return fieldParser_1.default.initSegmentFields(new __1.default.segments.MSH_Segment(), rawMSH);
}
}
exports.Hl7Parser = Hl7Parser;
exports.default = Hl7Parser.parse;