@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
JavaScript
;
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;