UNPKG

@amida-tech/hl7-parser

Version:

Typescript library to parse hl7 message into a typescript/javascript object and back

85 lines (84 loc) 3.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Hl7Parser = void 0; var field_model_1 = require("./models/field.model"); var hl7message_model_1 = require("./models/hl7message.model"); var repeating_field_model_1 = require("./models/repeating-field.model"); var segment_model_1 = require("./models/segment.model"); var sub_field_model_1 = require("./models/sub-field.model"); var definitionBuilder_1 = require("./definitionBuilder"); var Hl7Parser = /** @class */ (function () { function Hl7Parser() { } /** Builds an Hl7Message model from Raw hl7 string. * "withDefinitions" flag indicates whether to build pure model or with definitions on every hl7 field */ Hl7Parser.prototype.getHl7Model = function (rawHl7Message, withDefinitions) { if (withDefinitions === void 0) { withDefinitions = false; } if (!rawHl7Message) throw new Error("Hl7 message was not provided"); var definitionbuilder = new definitionBuilder_1.DefinitionBuilder(); if (withDefinitions) { var hl7Message = this.buildHl7Message(rawHl7Message); definitionbuilder.addDefinitionToHl7Message(hl7Message); return hl7Message; } return this.buildHl7Message(rawHl7Message); }; Hl7Parser.prototype.getRawHl7Message = function (hl7Message) { //TODO }; Hl7Parser.prototype.buildHl7Message = function (rawHl7Message) { var _this = this; var hl7Message = new hl7message_model_1.Hl7Message(); hl7Message.children = rawHl7Message.split('\n').map(function (rawSegment) { if (rawSegment.length > 3 && rawSegment.indexOf('|') > 2) { return _this.buildSegment(rawSegment); } }); return hl7Message; }; Hl7Parser.prototype.buildSegment = function (rawSegment) { var _this = this; var rawSegmentArr = rawSegment.split('|'); var segment = new segment_model_1.Segment(rawSegmentArr[0], rawSegment); var i = 0; segment.children = rawSegmentArr.map(function (rawElement) { //If element is special then skip one number if (rawElement == "^~\\&" || rawElement == "^~&" || rawElement == "^~\\@" || rawElement == "^~@") { i++; } return _this.buildElement(rawElement, segment.name + "-" + i++); }); return segment; }; Hl7Parser.prototype.buildElement = function (rawElement, elementName) { var _this = this; if (rawElement == "^~\\&" || rawElement == "^~&" || rawElement == "^~\\@" || rawElement == "^~@") { return new field_model_1.Field(elementName, rawElement); } else if (rawElement.indexOf("~") !== -1 && rawElement != "^~\\&" && rawElement != "^~\\" && rawElement != "\r" && rawElement != "\n") { var repeatingField = new repeating_field_model_1.RepeatingField(elementName, rawElement); var i_1 = 1; repeatingField.children = rawElement.split('~').map(function (rawRepeatingFieldElement) { return _this.buildElement(rawRepeatingFieldElement, elementName + "/" + i_1++); }); return repeatingField; } else if (rawElement.indexOf("^") !== -1) { var subField = new sub_field_model_1.SubField(elementName, rawElement); var i_2 = 0; if (elementName.indexOf("/") !== -1) { elementName = elementName.slice(0, elementName.indexOf("/")); } subField.children = rawElement.split('^').map(function (rawSubField) { return _this.buildElement(rawSubField, elementName + "." + i_2++); }); return subField; } return new field_model_1.Field(elementName, rawElement); }; return Hl7Parser; }()); exports.Hl7Parser = Hl7Parser;