Skip to content

Commit

Permalink
vitals generator fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
au2 committed Sep 11, 2014
1 parent 565c5eb commit ccd815c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 89 deletions.
23 changes: 0 additions & 23 deletions lib/generator/ccda/lib/templating_functions.js
Expand Up @@ -636,28 +636,6 @@ var immunization_medication_information = function (xmlDoc, product) {
.parent()
}

/*
TODO: look at refactoring this
Returns the number of entries in a data set for a specific section, in order to know how many times to
loop over the data.
@returns -
entries[0] -- array of unique entries
entries[1] -- object which maps entries to number of entries
*/
var getNumEntries = function (data) {
var entriesArr = [];
var entries = {};
for (var i = 0; i < data.length; i++) {
entriesArr[i] = data[i]["date_time"]["point"]["date"] ? (new XDate(data[i]["date_time"]["point"]["date"])).toString("u").slice(0, 4) : "UNK";
entries[entriesArr[i]] = entries[entriesArr[i]] ? entries[entriesArr[i]] + 1 : 1;
}
var uniqueEntries = entriesArr.filter(function (v, i) {
return i == entriesArr.lastIndexOf(v);
});
return [uniqueEntries, entries];
}

var maritalStatusCode = function (xmlDoc, marriage_status) {
if (marriage_status == undefined) {
return xmlDoc.node('maritalStatusCode')
Expand Down Expand Up @@ -858,7 +836,6 @@ module.exports.getTimes = getTimes;
module.exports.substanceAdministration = substanceAdministration;
module.exports.consumable = consumable;
module.exports.entryRelationship = entryRelationship;
module.exports.getNumEntries = getNumEntries;
module.exports.tel = tel;
module.exports.id = id;
module.exports.code = code;
Expand Down
117 changes: 56 additions & 61 deletions lib/generator/ccda/templates/vitals.js
Expand Up @@ -31,19 +31,17 @@ var updateInterpretationCodes = (function() { // merge with templating_functio

module.exports = function (data, codeSystems, isCCD, CCDxml) {
// determining the number of entries
var entries = libCCDAGen.getNumEntries(data);
//var entries = libCCDAGen.getNumEntries(data);

var doc = new libxmljs.Document();
var xmlDoc = libCCDAGen.header(!isCCD ? doc : CCDxml, "2.16.840.1.113883.10.20.22.2.4", "2.16.840.1.113883.10.20.22.2.4.1", "8716-3",
"2.16.840.1.113883.6.1", "LOINC", "VITAL SIGNS", "VITAL SIGNS", isCCD);

// entries loop
var curr_sum = 0;
for (var i = 0; i < entries[0].length; i++) {
var time = libCCDAGen.getTimes(data[curr_sum]["date_time"]);
curr_sum += entries[1][entries[0][i]];
for (var i = 0; i < data.length; i++) {
var time = libCCDAGen.getTimes(data[i]["date_time"]);

var xmlDoc = xmlDoc.node('entry').attr({
xmlDoc = xmlDoc.node('entry').attr({
typeCode: "DRIV"
})
.node('organizer').attr({
Expand All @@ -55,75 +53,72 @@ module.exports = function (data, codeSystems, isCCD, CCDxml) {
root: "2.16.840.1.113883.10.20.22.4.26"
}).parent();

xmlDoc = libCCDAGen.id(xmlDoc, data[0]["identifiers"]);
xmlDoc = libCCDAGen.id(xmlDoc, data[i]["identifiers"]);

xmlDoc = libCCDAGen.code(xmlDoc, undefined, sec_entries_codes["VitalSignsOrganizer"]).parent();

if (data[0].status) {
if (data[i].status) {
xmlDoc = xmlDoc.node('statusCode')
.attr({
code: data[0]['status']
code: data[i]['status']
}).parent();
}

xmlDoc = libCCDAGen.effectiveTime(xmlDoc, time);

// components loop
for (var j = 0; j < entries[1][entries[0][i]]; j++) {
var idx = j + (i == 0 ? 0 : entries[1][entries[0][i - 1]]);
xmlDoc = xmlDoc.node('component')
.node('observation').attr({
classCode: "OBS"
}).attr({
moodCode: "EVN"
})
.node('templateId').attr({
root: "2.16.840.1.113883.10.20.22.4.27"
xmlDoc = xmlDoc.node('component')
.node('observation').attr({
classCode: "OBS"
}).attr({
moodCode: "EVN"
})
.node('templateId').attr({
root: "2.16.840.1.113883.10.20.22.4.27"
}).parent();

xmlDoc = libCCDAGen.id(xmlDoc, data[i]["identifiers"]);

xmlDoc = libCCDAGen.code(xmlDoc, data[i]["vital"]).parent();

if (data[i].status) {
xmlDoc = xmlDoc.node('text')
.node('reference').attr({
value: "#vit" + i
}).parent()
.parent()
.node('statusCode').attr({
code: data[i]['status']
}).parent();
}

xmlDoc = libCCDAGen.effectiveTime(xmlDoc, libCCDAGen.getTimes(data[i].date_time));

xmlDoc = libCCDAGen.id(xmlDoc, data[j]["identifiers"]);

xmlDoc = libCCDAGen.code(xmlDoc, data[j]["vital"]).parent();

if (data[j].status) {
xmlDoc = xmlDoc.node('text')
.node('reference').attr({
value: "#vit" + idx
}).parent()
.parent()
.node('statusCode').attr({
code: data[j]['status']
}).parent();
}

xmlDoc = libCCDAGen.effectiveTime(xmlDoc, libCCDAGen.getTimes(data[idx].date_time));

if (data[j]["unit"]) {
xmlDoc = xmlDoc.node('value')
.attr({
"xsi:type": "PQ"
})
.attr({
value: data[idx]["value"]
})
.attr({
unit: data[idx]["unit"]
}).parent()

} else {
xmlDoc = xmlDoc.node('value')
.attr({
"xsi:type": "PQ"
})
.attr({
value: data[idx]["value"]
})
}

updateInterpretationCodes(xmlDoc, data[idx].interpretations);
if (data[i]["unit"]) {
xmlDoc = xmlDoc.node('value')
.attr({
"xsi:type": "PQ"
})
.attr({
value: data[i]["value"]
})
.attr({
unit: data[i]["unit"]
}).parent()

} else {
xmlDoc = xmlDoc.node('value')
.attr({
"xsi:type": "PQ"
})
.attr({
value: data[i]["value"]
})
}

updateInterpretationCodes(xmlDoc, data[i].interpretations);

xmlDoc = xmlDoc.parent().parent();
}
xmlDoc = xmlDoc.parent().parent();
xmlDoc = xmlDoc.parent()
.parent()
}
Expand Down
6 changes: 1 addition & 5 deletions lib/parser/ccda/shared.js
Expand Up @@ -30,11 +30,7 @@ NegationIndicator.fields([
if (this.js.negation_indicator === 'true') {
this.js.negation_indicator = true;
}
} //else {
// this.js = {
// negation_indicator: false
// };
//}
}
})
.cleanupStep(Cleanup.replaceWithField('negation_indicator'));

Expand Down

0 comments on commit ccd815c

Please sign in to comment.