@kno2/bluebutton 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://bluebutton/webpack/universalModuleDefinition","webpack://bluebutton/./lib/bluebutton.js","webpack://bluebutton/./lib/core.js","webpack://bluebutton/./lib/core/codes.js","webpack://bluebutton/./lib/core/common.js","webpack://bluebutton/./lib/core/xml.js","webpack://bluebutton/./lib/documents.js","webpack://bluebutton/./lib/documents/c32.js","webpack://bluebutton/./lib/documents/ccd.js","webpack://bluebutton/./lib/documents/ccda.js","webpack://bluebutton/./lib/documents/ccdar2.js","webpack://bluebutton/./lib/generators.js","webpack://bluebutton/./lib/generators/c32.js","webpack://bluebutton/./lib/generators/ccda.js","webpack://bluebutton/./lib/parsers.js","webpack://bluebutton/./lib/parsers/c32.js","webpack://bluebutton/./lib/parsers/c32/allergies.js","webpack://bluebutton/./lib/parsers/c32/demographics.js","webpack://bluebutton/./lib/parsers/c32/document.js","webpack://bluebutton/./lib/parsers/c32/encounters.js","webpack://bluebutton/./lib/parsers/c32/immunizations.js","webpack://bluebutton/./lib/parsers/c32/medications.js","webpack://bluebutton/./lib/parsers/c32/problems.js","webpack://bluebutton/./lib/parsers/c32/procedures.js","webpack://bluebutton/./lib/parsers/c32/results.js","webpack://bluebutton/./lib/parsers/c32/vitals.js","webpack://bluebutton/./lib/parsers/ccd.js","webpack://bluebutton/./lib/parsers/ccd/document.js","webpack://bluebutton/./lib/parsers/ccda.js","webpack://bluebutton/./lib/parsers/ccda/allergies.js","webpack://bluebutton/./lib/parsers/ccda/care_plan.js","webpack://bluebutton/./lib/parsers/ccda/demographics.js","webpack://bluebutton/./lib/parsers/ccda/document.js","webpack://bluebutton/./lib/parsers/ccda/encounters.js","webpack://bluebutton/./lib/parsers/ccda/free_text.js","webpack://bluebutton/./lib/parsers/ccda/functional_statuses.js","webpack://bluebutton/./lib/parsers/ccda/immunizations.js","webpack://bluebutton/./lib/parsers/ccda/instructions.js","webpack://bluebutton/./lib/parsers/ccda/medications.js","webpack://bluebutton/./lib/parsers/ccda/problems.js","webpack://bluebutton/./lib/parsers/ccda/procedures.js","webpack://bluebutton/./lib/parsers/ccda/results.js","webpack://bluebutton/./lib/parsers/ccda/smoking_status.js","webpack://bluebutton/./lib/parsers/ccda/vitals.js","webpack://bluebutton/./lib/parsers/ccdar2.js","webpack://bluebutton/./lib/parsers/ccdar2/document.js","webpack://bluebutton/./lib/parsers/ccdar2/health_concerns.js","webpack://bluebutton/./lib/parsers/generic.js","webpack://bluebutton/external \"lodash\"","webpack://bluebutton/external \"xmldom\"","webpack://bluebutton/webpack/bootstrap","webpack://bluebutton/webpack/runtime/global","webpack://bluebutton/webpack/startup"],"names":["Core","require","Documents","Generators","Parsers","module","exports","source","opts","type","parsedData","parsedDocument","parseData","parser","documents","detect","parsers","C32","process","run","CCDA","CCDAR2","CCD","generatorType","template","testingMode","data","Codes","XML","stripWhitespace","json","trim","charAt","parse","e","console","log","JSON","error","datePad","number","replacerFn","key","value","originalValue","Date","isNaN","getTime","_parsedWithTimeData","getHours","getMinutes","getSeconds","getMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getMonth","getDate","getFullYear","stringify","o","y","x","hasOwnProperty","Object","GENDER_MAP","MARITAL_STATUS_MAP","RELIGION_MAP","RACE_ETHNICITY_MAP","ROLE_MAP","PROBLEM_STATUS_MAP","invertKeys","obj","result","keys","i","length","lookupFnGenerator","map","reverseLookupFnGenerator","invertedMap","toLowerCase","gender","reverseGender","maritalStatus","reverseMaritalStatus","religion","reverseReligion","raceEthnicity","reverseRaceEthnicity","role","reverseRole","problemStatus","reverseProblemStatus","str","replace","wrapElement","el","wrapElementHelper","currentEl","content","tag","immediateChildTag","elsByTag","attr","boolAttr","val","isEmpty","els","push","tagAttrVal","getElementsByTagName","getAttribute","templateId","emptyEl","parentNode","contentId","unescapeSpecialChars","s","attrName","attrVal","rawAttr","html","childNodes","textContent","innerHTML","root","XMLSerializer","serializeToString","tagName","slice","docRoot","ownerDocument","contentTag","doc","createElement","xml","isNode","xmldom","DOMParser","parseFromString","window","ActiveXObject","async","loadXML","documentElement","global","document","prototype","toString","call","DOMImplementation","createDocument","self","entries","parseDate","parseName","parseAddress","getEntries","each","callback","year","substr","month","parseInt","day","hour","min","secs","utcOffset","_utcOffsetFromString","_toInt","date","UTC","parseTimezoneChunker","parseTokenTimezone","string","possibleTzMatches","match","tzChunk","parts","minutes","argumentForCoercion","coercedNumber","isFinite","Math","floor","ceil","nameEl","prefix","given","family","addrEl","street","city","state","zip","country","section","c32","name","ccda","method","_","now","filename","bb","tagHelpers","ejs","helpers","codes","AllergiesParser","DemographicsParser","DocumentParser","EncountersParser","ImmunizationsParser","MedicationsParser","ProblemsParser","ProceduresParser","ResultsParser","VitalsParser","ParseGenericInfo","allergiesParser","demographicsParser","encountersParser","immunizationsParser","medicationsParser","problemsParser","proceduresParser","resultsParser","vitalsParser","allergies","demographics","encounters","parsedImmunizations","immunizations","administered","immunization_declines","declined","results","medications","problems","procedures","vitals","smoking_status","code","code_system","code_system_name","chief_complaint","text","care_plan","instructions","functional_statuses","displayName","entry","start_date","end_date","reaction_type_name","reaction_type_code","reaction_type_code_system","reaction_type_code_system_name","reaction_name","reaction_code","reaction_code_system","severity","allergen_name","allergen_code","allergen_code_system","allergen_code_system_name","status","date_range","start","end","reaction","reaction_type","allergen","patient","patient_name_dict","dob","marital_status","patient_address_dict","home","work","mobile","email","language","race","ethnicity","birthplace_dict","guardian_relationship","guardian_relationship_code","guardian_home","guardian_name_dict","guardian_address_dict","provider_organization","provider_phone","provider_address_dict","address","phone","birthplace","guardian","relationship","relationship_code","provider","organization","templates","rootTemplate","secondTemplate","loinc","nonXml","nonXmlNodes","bodyType","nonXmlBody","mediaType","representation","rawText","reference","docType","rootTemplateId","title","author","name_dict","address_dict","work_phone","documentation_of_list","performers","performer_name_dict","performer_phone","performer_addr","location_name","location_addr_dict","encounter_date","documentation_of","location","code_system_version","translation_name","translation_code","translation_code_system","translation_code_system_name","performer_name","performer_code","performer_code_system","performer_code_system_name","location_dict","findings","findingEls","translation","performer","administeredData","declinedData","product","product_name","product_code","product_code_system","product_code_system_name","lot_number","manufacturer_name","route_name","route_code","route_code_system","route_code_system_name","instructions_text","education_name","education_code","education_code_system","dose_value","dose_unit","dose_quantity","unit","route","education_type","effectiveTimes","schedule_type","schedule_period_value","schedule_period_unit","institutionSpecified","product_original_text","rate_quantity_value","rate_quantity_unit","precondition_name","precondition_code","precondition_code_system","reason_name","reason_code","reason_code_system","vehicle_name","vehicle_code","vehicle_code_system","vehicle_code_system_name","administration_name","administration_code","administration_code_system","administration_code_system_name","prescriber_organization","prescriber_person","rate_quantity","precondition","reason","schedule","period_value","period_unit","vehicle","administration","prescriber","person","age","parseFloat","comment","specimen_name","specimen_code","specimen_code_system","performer_dict","device_name","device_code","device_code_system","specimen","device","panel_date","panel_name","panel_code","panel_code_system","panel_code_system_name","observation","tests","tests_data","reference_range_text","reference_range_low_unit","reference_range_low_value","reference_range_high_unit","reference_range_high_value","reference_range","low_unit","low_value","high_unit","high_value","entry_date","results_data","j","HealthConcernsParser","documentParser","healthConcernsParser","health_concerns_document","CarePlanParser","FreeTextParser","FunctionalStatusesParser","InstructionsParser","SmokingStatusParser","carePlanParser","freeTextParser","functionalStatusesParser","instructionsParser","smokingStatusParser","free_text","time","effective_time","m","d","D","sectionName","statuses","sig","social_history","model","health_concerns","entryModel","act","er","id","statusCode","effectiveTime","actModel","entry_relationship","ers","erModel","type_code","observations","obs","ob","class_code","mood_code","display_name","containsTemplateId","property","p","allSections","existingTemplateId","nodeName","split","join"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;;AClJA;AACA;AACA;AAEAf,MAAM,CAACC,OAAP,GAAiB;AACfa,KAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC;AAA2B;AAC3BU,SAAO,CAACC,GAAR,CAAY,uCAAZ;AACA,SAAO,IAAP;AACD;;AAAA,C;;;;;;;ACfD;AACA;AACA;AACA,IAAI0K,CAAC,GAAG7M,mBAAO,CAAC,GAAD,CAAf;;AAEAI,MAAM,CAACC,OAAP,GAAiB;AACfa,KAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC,MAAI,CAACD,QAAL,EAAe;AACbW,WAAO,CAACC,GAAR,CAAY,kEACA,4DADZ;AAEA,WAAO,IAAP;AACD,GALuC,CAOxC;AACA;;;AACA,MAAI2K,GAAG,GAAItL,WAA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","file":"bluebutton.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bluebutton\"] = factory();\n\telse\n\t\troot[\"bluebutton\"] = factory();\n})(self, function() {\nreturn ","'use strict';\r\n/*\r\n * ...\r\n */\r\n\r\nvar Core = require('./core');\r\n\r\nvar Documents = require('./documents');\r\n\r\nvar Generators = require('./generators');\r\n\r\nvar Parsers = require('./parsers');\r\n\r\n\r\n/* exported BlueButton */\r\nmodule.exports = function (source, opts) {\r\n var type, parsedData, parsedDocument;\r\n \r\n // Look for options\r\n if (!opts) opts = {};\r\n \r\n // Detect and parse the source data\r\n parsedData = Core.parseData(source);\r\n \r\n // Detect and parse the document\r\n if (opts.parser) {\r\n \r\n // TODO: parse the document with provided custom parser\r\n parsedDocument = opts.parser();\r\n \r\n } else {\r\n var documents = new Documents();\r\n type = documents.detect(parsedData);\r\n var parsers = new Parsers(documents);\r\n switch (type) {\r\n case 'c32':\r\n parsedData = documents.C32.process(parsedData);\r\n parsedDocument = parsers.C32.run(parsedData);\r\n break;\r\n case 'ccda':\r\n parsedData = documents.CCDA.process(parsedData);\r\n parsedDocument = parsers.CCDA.run(parsedData);\r\n break;\r\n case 'ccdar2':\r\n parsedData = documents.CCDAR2.process(parsedData);\r\n parsedDocument = parsers.CCDAR2.run(parsedData);\r\n break;\r\n case 'ccd':\r\n parsedData = documents.CCD.process(parsedData);\r\n parsedDocument = parsers.CCD.run(parsedData);\r\n break;\r\n case 'json':\r\n /* Expects a call like:\r\n * BlueButton(json string, {\r\n * generatorType: 'ccda',\r\n * template: < EJS file contents >\r\n * })\r\n * The returned \"type\" will be the requested type (not \"json\")\r\n * and the XML will be turned as a string in the 'data' key\r\n */\r\n switch (opts.generatorType) {\r\n // only the unit tests ever need to worry about this testingMode argument\r\n case 'c32':\r\n type = 'c32';\r\n parsedDocument = Generators.C32.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n case 'ccda':\r\n type = 'ccda';\r\n parsedDocument = Generators.CCDA.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n return {\r\n type: type,\r\n data: parsedDocument,\r\n source: parsedData\r\n };\r\n\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nvar Codes = require('./core/codes');\r\nvar XML = require('./core/xml');\r\nvar { stripWhitespace } = require('./core/common');\r\n\r\n/* exported Core */\r\nmodule.exports = {\r\n parseData: parseData,\r\n stripWhitespace: stripWhitespace,\r\n json: json,\r\n trim: trim,\r\n Codes: Codes,\r\n XML: XML\r\n};\r\n/*\r\n * ...\r\n */\r\nfunction parseData(source) {\r\n source = stripWhitespace(source);\r\n \r\n if (source.charAt(0) === '<') {\r\n try {\r\n return XML.parse(source);\r\n } catch (e) {\r\n if (console.log) {\r\n console.log(\"File looked like it might be XML but couldn't be parsed.\");\r\n }\r\n }\r\n }\r\n\r\n try {\r\n return JSON.parse(source);\r\n } catch (e) {\r\n if (console.error) {\r\n console.error(\"Error: Cannot parse this file. BB.js only accepts valid XML \" +\r\n \"(for parsing) or JSON (for generation). If you are attempting to provide \" +\r\n \"XML or JSON, please run your data through a validator to see if it is malformed.\\n\");\r\n }\r\n throw e;\r\n }\r\n};\r\n\r\n/*\r\n * A wrapper around JSON.stringify which allows us to produce customized JSON.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/\r\n * JavaScript/Guide/Using_native_JSON#The_replacer_parameter\r\n * for documentation on the replacerFn.\r\n */\r\nfunction json() {\r\n\r\n var datePad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return number;\r\n };\r\n \r\n var replacerFn = function(key, value) {\r\n /* By default, Dates are output as ISO Strings like \"2014-01-03T08:00:00.000Z.\" This is\r\n * tricky when all we have is a date (not a datetime); JS sadly ignores that distinction.\r\n *\r\n * To paper over this JS wart, we use two different JSON formats for dates and datetimes.\r\n * This is a little ugly but makes sure that the dates/datetimes mostly just parse\r\n * correclty for clients:\r\n *\r\n * 1. Datetimes are rendered as standard ISO strings, without the misleading millisecond\r\n * precision (misleading because we don't have it): YYYY-MM-DDTHH:mm:ssZ\r\n * 2. Dates are rendered as MM/DD/YYYY. This ensures they are parsed as midnight local-time,\r\n * no matter what local time is, and therefore ensures the date is always correct.\r\n * Outputting \"YYYY-MM-DD\" would lead most browsers/node to assume midnight UTC, which\r\n * means \"2014-04-27\" suddenly turns into \"04/26/2014 at 5PM\" or just \"04/26/2014\"\r\n * if you format it as a date...\r\n *\r\n * See http://stackoverflow.com/questions/2587345/javascript-date-parse and\r\n * http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html\r\n * for more on this issue.\r\n */\r\n var originalValue = this[key]; // a Date\r\n\r\n if ( value && (originalValue instanceof Date) && !isNaN(originalValue.getTime()) ) {\r\n\r\n // If while parsing we indicated that there was time-data specified, or if we see\r\n // non-zero values in the hour/minutes/seconds/millis fields, output a datetime.\r\n if (originalValue._parsedWithTimeData ||\r\n originalValue.getHours() || originalValue.getMinutes() ||\r\n originalValue.getSeconds() || originalValue.getMilliseconds()) {\r\n\r\n // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/\r\n // Reference/Global_Objects/Date/toISOString\r\n return originalValue.getUTCFullYear() +\r\n '-' + datePad( originalValue.getUTCMonth() + 1 ) +\r\n '-' + datePad( originalValue.getUTCDate() ) +\r\n 'T' + datePad( originalValue.getUTCHours() ) +\r\n ':' + datePad( originalValue.getUTCMinutes() ) +\r\n ':' + datePad( originalValue.getUTCSeconds() ) +\r\n 'Z';\r\n }\r\n \r\n // We just have a pure date\r\n return datePad( originalValue.getMonth() + 1 ) +\r\n '/' + datePad( originalValue.getDate() ) +\r\n '/' + originalValue.getFullYear();\r\n\r\n }\r\n\r\n return value;\r\n };\r\n \r\n return JSON.stringify(this, replacerFn, 2);\r\n};\r\n\r\n\r\n/*\r\n * Removes all `null` properties from an object.\r\n */\r\nfunction trim(o) {\r\n var y;\r\n for (var x in o) {\r\n if (o.hasOwnProperty(x)) {\r\n y = o[x];\r\n // if (y === null || (y instanceof Object && Object.keys(y).length == 0)) {\r\n if (y === null) {\r\n delete o[x];\r\n }\r\n if (y instanceof Object) y = trim(y);\r\n }\r\n }\r\n return o;\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\n\r\n \r\n/*\r\n * Administrative Gender (HL7 V3)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=8DE75E17-176B-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.1.11.1\r\n */\r\nvar GENDER_MAP = {\r\n 'F': 'female',\r\n 'M': 'male',\r\n 'UN': 'undifferentiated'\r\n};\r\n\r\n/*\r\n * Marital Status (HL7)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=46D34BBC-617F-DD11-B38D-00188B398520\r\n * OID: 2.16.840.1.114222.4.11.809\r\n */\r\nvar MARITAL_STATUS_MAP = {\r\n 'N': 'annulled',\r\n 'C': 'common law',\r\n 'D': 'divorced',\r\n 'P': 'domestic partner',\r\n 'I': 'interlocutory',\r\n 'E': 'legally separated',\r\n 'G': 'living together',\r\n 'M': 'married',\r\n 'O': 'other',\r\n 'R': 'registered domestic partner',\r\n 'A': 'separated',\r\n 'S': 'single',\r\n 'U': 'unknown',\r\n 'B': 'unmarried',\r\n 'T': 'unreported',\r\n 'W': 'widowed'\r\n};\r\n\r\n/*\r\n * Religious Affiliation (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=6BFDBFB5-A277-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.5.1076\r\n */\r\nvar RELIGION_MAP = {\r\n \"1001\": \"adventist\",\r\n \"1002\": \"african religions\",\r\n \"1003\": \"afro-caribbean religions\",\r\n \"1004\": \"agnosticism\",\r\n \"1005\": \"anglican\",\r\n \"1006\": \"animism\",\r\n \"1061\": \"assembly of god\",\r\n \"1007\": \"atheism\",\r\n \"1008\": \"babi & baha'i faiths\",\r\n \"1009\": \"baptist\",\r\n \"1010\": \"bon\",\r\n \"1062\": \"brethren\",\r\n \"1011\": \"cao dai\",\r\n \"1012\": \"celticism\",\r\n \"1013\": \"christian (non-catholic, non-specific)\",\r\n \"1063\": \"christian scientist\",\r\n \"1064\": \"church of christ\",\r\n \"1065\": \"church of god\",\r\n \"1014\": \"confucianism\",\r\n \"1066\": \"congregational\",\r\n \"1015\": \"cyberculture religions\",\r\n \"1067\": \"disciples of christ\",\r\n \"1016\": \"divination\",\r\n \"1068\": \"eastern orthodox\",\r\n \"1069\": \"episcopalian\",\r\n \"1070\": \"evangelical covenant\",\r\n \"1017\": \"fourth way\",\r\n \"1018\": \"free daism\",\r\n \"1071\": \"friends\",\r\n \"1072\": \"full gospel\",\r\n \"1019\": \"gnosis\",\r\n \"1020\": \"hinduism\",\r\n \"1021\": \"humanism\",\r\n \"1022\": \"independent\",\r\n \"1023\": \"islam\",\r\n \"1024\": \"jainism\",\r\n \"1025\": \"jehovah's witnesses\",\r\n \"1026\": \"judaism\",\r\n \"1027\": \"latter day saints\",\r\n \"1028\": \"lutheran\",\r\n \"1029\": \"mahayana\",\r\n \"1030\": \"meditation\",\r\n \"1031\": \"messianic judaism\",\r\n \"1073\": \"methodist\",\r\n \"1032\": \"mitraism\",\r\n \"1074\": \"native american\",\r\n \"1075\": \"nazarene\",\r\n \"1033\": \"new age\",\r\n \"1034\": \"non-roman catholic\",\r\n \"1035\": \"occult\",\r\n \"1036\": \"orthodox\",\r\n \"1037\": \"paganism\",\r\n \"1038\": \"pentecostal\",\r\n \"1076\": \"presbyterian\",\r\n \"1039\": \"process, the\",\r\n \"1077\": \"protestant\",\r\n \"1078\": \"protestant, no denomination\",\r\n \"1079\": \"reformed\",\r\n \"1040\": \"reformed/presbyterian\",\r\n \"1041\": \"roman catholic church\",\r\n \"1080\": \"salvation army\",\r\n \"1042\": \"satanism\",\r\n \"1043\": \"scientology\",\r\n \"1044\": \"shamanism\",\r\n \"1045\": \"shiite (islam)\",\r\n \"1046\": \"shinto\",\r\n \"1047\": \"sikism\",\r\n \"1048\": \"spiritualism\",\r\n \"1049\": \"sunni (islam)\",\r\n \"1050\": \"taoism\",\r\n \"1051\": \"theravada\",\r\n \"1081\": \"unitarian universalist\",\r\n \"1052\": \"unitarian-universalism\",\r\n \"1082\": \"united church of christ\",\r\n \"1053\": \"universal life church\",\r\n \"1054\": \"vajrayana (tibetan)\",\r\n \"1055\": \"veda\",\r\n \"1056\": \"voodoo\",\r\n \"1057\": \"wicca\",\r\n \"1058\": \"yaohushua\",\r\n \"1059\": \"zen buddhism\",\r\n \"1060\": \"zoroastrianism\"\r\n};\r\n\r\n/*\r\n * Race & Ethnicity (HL7 V3)\r\n * Full list at http://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.6.238\r\n * OID: 2.16.840.1.113883.6.238\r\n *\r\n * Abbreviated list closer to real usage at: (Race / Ethnicity)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=67D34BBC-617F-DD11-B38D-00188B398520\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=35D34BBC-617F-DD11-B38D-00188B398520\r\n */\r\nvar RACE_ETHNICITY_MAP = {\r\n '2028-9': 'asian',\r\n '2054-5': 'black or african american',\r\n '2135-2': 'hispanic or latino',\r\n '2076-8': 'native',\r\n '2186-5': 'not hispanic or latino',\r\n '2131-1': 'other',\r\n '2106-3': 'white'\r\n};\r\n\r\n/*\r\n * Role (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.5.111\r\n * OID: 2.16.840.1.113883.5.111\r\n */\r\nvar ROLE_MAP = {\r\n \"ACC\": \"accident site\",\r\n \"ACHFID\": \"accreditation location identifier\",\r\n \"ACTMIL\": \"active duty military\",\r\n \"ALL\": \"allergy clinic\",\r\n \"AMB\": \"ambulance\",\r\n \"AMPUT\": \"amputee clinic\",\r\n \"ANTIBIOT\": \"antibiotic\",\r\n \"ASSIST\": \"assistive non-person living subject\",\r\n \"AUNT\": \"aunt\",\r\n \"B\": \"blind\",\r\n \"BF\": \"beef\",\r\n \"BILL\": \"billing contact\",\r\n \"BIOTH\": \"biotherapeutic non-person living subject\",\r\n \"BL\": \"broiler\",\r\n \"BMTC\": \"bone marrow transplant clinic\",\r\n \"BMTU\": \"bone marrow transplant unit\",\r\n \"BR\": \"breeder\",\r\n \"BREAST\": \"breast clinic\",\r\n \"BRO\": \"brother\",\r\n \"BROINLAW\": \"brother-in-law\",\r\n \"C\": \"calibrator\",\r\n \"CANC\": \"child and adolescent neurology clinic\",\r\n \"CAPC\": \"child and adolescent psychiatry clinic\",\r\n \"CARD\": \"ambulatory health care facilities; clinic/center; rehabilitation: cardiac facilities\",\r\n \"CAS\": \"asylum seeker\",\r\n \"CASM\": \"single minor asylum seeker\",\r\n \"CATH\": \"cardiac catheterization lab\",\r\n \"CCO\": \"clinical companion\",\r\n \"CCU\": \"coronary care unit\",\r\n \"CHEST\": \"chest unit\",\r\n \"CHILD\": \"child\",\r\n \"CHLDADOPT\": \"adopted child\",\r\n \"CHLDFOST\": \"foster child\",\r\n \"CHLDINLAW\": \"child in-law\",\r\n \"CHR\": \"chronic care facility\",\r\n \"CLAIM\": \"claimant\",\r\n \"CN\": \"national\",\r\n \"CNRP\": \"non-country member without residence permit\",\r\n \"CNRPM\": \"non-country member minor without residence permit\",\r\n \"CO\": \"companion\",\r\n \"COAG\": \"coagulation clinic\",\r\n \"COCBEN\": \"continuity of coverage beneficiary\",\r\n \"COMM\": \"community location\",\r\n \"COMMUNITYLABORATORY\": \"community laboratory\",\r\n \"COUSN\": \"cousin\",\r\n \"CPCA\": \"permit card applicant\",\r\n \"CRIMEVIC\": \"crime victim\",\r\n \"CRP\": \"non-country member with residence permit\",\r\n \"CRPM\": \"non-country member minor with residence permit\",\r\n \"CRS\": \"colon and rectal surgery clinic\",\r\n \"CSC\": \"community service center\",\r\n \"CVDX\": \"cardiovascular diagnostics or therapeutics unit\",\r\n \"DA\": \"dairy\",\r\n \"DADDR\": \"delivery address\",\r\n \"DAU\": \"natural daughter\",\r\n \"DAUADOPT\": \"adopted daughter\",\r\n \"DAUC\": \"daughter\",\r\n \"DAUFOST\": \"foster daughter\",\r\n \"DAUINLAW\": \"daughter in-law\",\r\n \"DC\": \"therapeutic class\",\r\n \"DEBR\": \"debridement\",\r\n \"DERM\": \"dermatology clinic\",\r\n \"DIFFABL\": \"differently abled\",\r\n \"DOMPART\": \"domestic partner\",\r\n \"DPOWATT\": \"durable power of attorney\",\r\n \"DR\": \"draft\",\r\n \"DU\": \"dual\",\r\n \"DX\": \"diagnostics or therapeutics unit\",\r\n \"E\": \"electronic qc\",\r\n \"ECHO\": \"echocardiography lab\",\r\n \"ECON\": \"emergency contact\",\r\n \"ENDO\": \"endocrinology clinic\",\r\n \"ENDOS\": \"endoscopy lab\",\r\n \"ENROLBKR\": \"enrollment broker\",\r\n \"ENT\": \"otorhinolaryngology clinic\",\r\n \"EPIL\": \"epilepsy unit\",\r\n \"ER\": \"emergency room\",\r\n \"ERL\": \"enrollment\",\r\n \"ETU\": \"emergency trauma unit\",\r\n \"EXCEST\": \"executor of estate\",\r\n \"EXT\": \"extended family member\",\r\n \"F\": \"filler proficiency\",\r\n \"FAMDEP\": \"family dependent\",\r\n \"FAMMEMB\": \"family member\",\r\n \"FI\": \"fiber\",\r\n \"FMC\": \"family medicine clinic\",\r\n \"FRND\": \"unrelated friend\",\r\n \"FSTUD\": \"full-time student\",\r\n \"FTH\": \"father\",\r\n \"FTHINLAW\": \"father-in-law\",\r\n \"FULLINS\": \"fully insured coverage sponsor\",\r\n \"G\": \"group\",\r\n \"GACH\": \"hospitals; general acute care hospital\",\r\n \"GD\": \"generic drug\",\r\n \"GDF\": \"generic drug form\",\r\n \"GDS\": \"generic drug strength\",\r\n \"GDSF\": \"generic drug strength form\",\r\n \"GGRFTH\": \"great grandfather\",\r\n \"GGRMTH\": \"great grandmother\",\r\n \"GGRPRN\": \"great grandparent\",\r\n \"GI\": \"gastroenterology clinic\",\r\n \"GIDX\": \"gastroenterology diagnostics or therapeutics lab\",\r\n \"GIM\": \"general internal medicine clinic\",\r\n \"GRFTH\": \"grandfather\",\r\n \"GRMTH\": \"grandmother\",\r\n \"GRNDCHILD\": \"grandchild\",\r\n \"GRNDDAU\": \"granddaughter\",\r\n \"GRNDSON\": \"grandson\",\r\n \"GRPRN\": \"grandparent\",\r\n \"GT\": \"guarantor\",\r\n \"GUADLTM\": \"guardian ad lidem\",\r\n \"GUARD\": \"guardian\",\r\n \"GYN\": \"gynecology clinic\",\r\n \"HAND\": \"hand clinic\",\r\n \"HANDIC\": \"handicapped dependent\",\r\n \"HBRO\": \"half-brother\",\r\n \"HD\": \"hemodialysis unit\",\r\n \"HEM\": \"hematology clinic\",\r\n \"HLAB\": \"hospital laboratory\",\r\n \"HOMEHEALTH\": \"home health\",\r\n \"HOSP\": \"hospital\",\r\n \"HPOWATT\": \"healthcare power of attorney\",\r\n \"HRAD\": \"radiology unit\",\r\n \"HSIB\": \"half-sibling\",\r\n \"HSIS\": \"half-sister\",\r\n \"HTN\": \"hypertension clinic\",\r\n \"HU\": \"hospital unit\",\r\n \"HUSB\": \"husband\",\r\n \"HUSCS\": \"specimen collection site\",\r\n \"ICU\": \"intensive care unit\",\r\n \"IEC\": \"impairment evaluation center\",\r\n \"INDIG\": \"member of an indigenous people\",\r\n \"INFD\": \"infectious disease clinic\",\r\n \"INJ\": \"injured plaintiff\",\r\n \"INJWKR\": \"injured worker\",\r\n \"INLAB\": \"inpatient laboratory\",\r\n \"INPHARM\": \"inpatient pharmacy\",\r\n \"INV\": \"infertility clinic\",\r\n \"JURID\": \"jurisdiction location identifier\",\r\n \"L\": \"pool\",\r\n \"LABORATORY\": \"laboratory\",\r\n \"LOCHFID\": \"local location identifier\",\r\n \"LY\": \"layer\",\r\n \"LYMPH\": \"lympedema clinic\",\r\n \"MAUNT\": \"maternalaunt\",\r\n \"MBL\": \"medical laboratory\",\r\n \"MCOUSN\": \"maternalcousin\",\r\n \"MGDSF\": \"manufactured drug strength form\",\r\n \"MGEN\": \"medical genetics clinic\",\r\n \"MGGRFTH\": \"maternalgreatgrandfather\",\r\n \"MGGRMTH\": \"maternalgreatgrandmother\",\r\n \"MGGRPRN\": \"maternalgreatgrandparent\",\r\n \"MGRFTH\": \"maternalgrandfather\",\r\n \"MGRMTH\": \"maternalgrandmother\",\r\n \"MGRPRN\": \"maternalgrandparent\",\r\n \"MHSP\": \"military hospital\",\r\n \"MIL\": \"military\",\r\n \"MOBL\": \"mobile unit\",\r\n \"MT\": \"meat\",\r\n \"MTH\": \"mother\",\r\n \"MTHINLAW\": \"mother-in-law\",\r\n \"MU\": \"multiplier\",\r\n \"MUNCLE\": \"maternaluncle\",\r\n \"NBOR\": \"neighbor\",\r\n \"NBRO\": \"natural brother\",\r\n \"NCCF\": \"nursing or custodial care facility\",\r\n \"NCCS\": \"neurology critical care and stroke unit\",\r\n \"NCHILD\": \"natural child\",\r\n \"NEPH\": \"nephrology clinic\",\r\n \"NEPHEW\": \"nephew\",\r\n \"NEUR\": \"neurology clinic\",\r\n \"NFTH\": \"natural father\",\r\n \"NFTHF\": \"natural father of fetus\",\r\n \"NIECE\": \"niece\",\r\n \"NIENEPH\": \"niece/nephew\",\r\n \"NMTH\": \"natural mother\",\r\n \"NOK\": \"next of kin\",\r\n \"NPRN\": \"natural parent\",\r\n \"NS\": \"neurosurgery unit\",\r\n \"NSIB\": \"natural sibling\",\r\n \"NSIS\": \"natural sister\",\r\n \"O\": \"operator proficiency\",\r\n \"OB\": \"obstetrics clinic\",\r\n \"OF\": \"outpatient facility\",\r\n \"OMS\": \"oral and maxillofacial surgery clinic\",\r\n \"ONCL\": \"medical oncology clinic\",\r\n \"OPH\": \"opthalmology clinic\",\r\n \"OPTC\": \"optometry clinic\",\r\n \"ORG\": \"organizational contact\",\r\n \"ORTHO\": \"orthopedics clinic\",\r\n \"OUTLAB\": \"outpatient laboratory\",\r\n \"OUTPHARM\": \"outpatient pharmacy\",\r\n \"P\": \"patient\",\r\n \"PAINCL\": \"pain clinic\",\r\n \"PATHOLOGIST\": \"pathologist\",\r\n \"PAUNT\": \"paternalaunt\",\r\n \"PAYOR\": \"payor contact\",\r\n \"PC\": \"primary care clinic\",\r\n \"PCOUSN\": \"paternalcousin\",\r\n \"PEDC\": \"pediatrics clinic\",\r\n \"PEDCARD\": \"pediatric cardiology clinic\",\r\n \"PEDE\": \"pediatric endocrinology clinic\",\r\n \"PEDGI\": \"pediatric gastroenterology clinic\",\r\n \"PEDHEM\": \"pediatric hematology clinic\",\r\n \"PEDHO\": \"pediatric oncology clinic\",\r\n \"PEDICU\": \"pediatric intensive care unit\",\r\n \"PEDID\": \"pediatric infectious disease clinic\",\r\n \"PEDNEPH\": \"pediatric nephrology clinic\",\r\n \"PEDNICU\": \"pediatric neonatal intensive care unit\",\r\n \"PEDRHEUM\": \"pediatric rheumatology clinic\",\r\n \"PEDU\": \"pediatric unit\",\r\n \"PGGRFTH\": \"paternalgreatgrandfather\",\r\n \"PGGRMTH\": \"paternalgreatgrandmother\",\r\n \"PGGRPRN\": \"paternalgreatgrandparent\",\r\n \"PGRFTH\": \"paternalgrandfather\",\r\n \"PGRMTH\": \"paternalgrandmother\",\r\n \"PGRPRN\": \"paternalgrandparent\",\r\n \"PH\": \"policy holder\",\r\n \"PHARM\": \"pharmacy\",\r\n \"PHLEBOTOMIST\": \"phlebotomist\",\r\n \"PHU\": \"psychiatric hospital unit\",\r\n \"PL\": \"pleasure\",\r\n \"PLS\": \"plastic surgery clinic\",\r\n \"POD\": \"podiatry clinic\",\r\n \"POWATT\": \"power of attorney\",\r\n \"PRC\": \"pain rehabilitation center\",\r\n \"PREV\": \"preventive medicine clinic\",\r\n \"PRN\": \"parent\",\r\n \"PRNINLAW\": \"parent in-law\",\r\n \"PROCTO\": \"proctology clinic\",\r\n \"PROFF\": \"provider's office\",\r\n \"PROG\": \"program eligible\",\r\n \"PROS\": \"prosthodontics clinic\",\r\n \"PSI\": \"psychology clinic\",\r\n \"PSTUD\": \"part-time student\",\r\n \"PSY\": \"psychiatry clinic\",\r\n \"PSYCHF\": \"psychiatric care facility\",\r\n \"PT\": \"patient\",\r\n \"PTRES\": \"patient's residence\",\r\n \"PUNCLE\": \"paternaluncle\",\r\n \"Q\": \"quality control\",\r\n \"R\": \"replicate\",\r\n \"RADDX\": \"radiology diagnostics or therapeutics unit\",\r\n \"RADO\": \"radiation oncology unit\",\r\n \"RC\": \"racing\",\r\n \"RESPRSN\": \"responsible party\",\r\n \"RETIREE\": \"retiree\",\r\n \"RETMIL\": \"retired military\",\r\n \"RH\": \"rehabilitation hospital\",\r\n \"RHAT\": \"addiction treatment center\",\r\n \"RHEUM\": \"rheumatology clinic\",\r\n \"RHII\": \"intellectual impairment center\",\r\n \"RHMAD\": \"parents with adjustment difficulties center\",\r\n \"RHPI\": \"physical impairment center\",\r\n \"RHPIH\": \"physical impairment - hearing center\",\r\n \"RHPIMS\": \"physical impairment - motor skills center\",\r\n \"RHPIVS\": \"physical impairment - visual skills center\",\r\n \"RHU\": \"rehabilitation hospital unit\",\r\n \"RHYAD\": \"youths with adjustment difficulties center\",\r\n \"RNEU\": \"neuroradiology unit\",\r\n \"ROOM\": \"roommate\",\r\n \"RTF\": \"residential treatment facility\",\r\n \"SCHOOL\": \"school\",\r\n \"SCN\": \"screening\",\r\n \"SEE\": \"seeing\",\r\n \"SELF\": \"self\",\r\n \"SELFINS\": \"self insured coverage sponsor\",\r\n \"SH\": \"show\",\r\n \"SIB\": \"sibling\",\r\n \"SIBINLAW\": \"sibling in-law\",\r\n \"SIGOTHR\": \"significant other\",\r\n \"SIS\": \"sister\",\r\n \"SISINLAW\": \"sister-in-law\",\r\n \"SLEEP\": \"sleep disorders unit\",\r\n \"SNF\": \"skilled nursing facility\",\r\n \"SNIFF\": \"sniffing\",\r\n \"SON\": \"natural son\",\r\n \"SONADOPT\": \"adopted son\",\r\n \"SONC\": \"son\",\r\n \"SONFOST\": \"foster son\",\r\n \"SONINLAW\": \"son in-law\",\r\n \"SPMED\": \"sports medicine clinic\",\r\n \"SPON\": \"sponsored dependent\",\r\n \"SPOWATT\": \"special power of attorney\",\r\n \"SPS\": \"spouse\",\r\n \"STPBRO\": \"stepbrother\",\r\n \"STPCHLD\": \"step child\",\r\n \"STPDAU\": \"stepdaughter\",\r\n \"STPFTH\": \"stepfather\",\r\n \"STPMTH\": \"stepmother\",\r\n \"STPPRN\": \"step parent\",\r\n \"STPSIB\": \"step sibling\",\r\n \"STPSIS\": \"stepsister\",\r\n \"STPSON\": \"stepson\",\r\n \"STUD\": \"student\",\r\n \"SU\": \"surgery clinic\",\r\n \"SUBJECT\": \"self\",\r\n \"SURF\": \"substance use rehabilitation facility\",\r\n \"THIRDPARTY\": \"third party\",\r\n \"TPA\": \"third party administrator\",\r\n \"TR\": \"transplant clinic\",\r\n \"TRAVEL\": \"travel and geographic medicine clinic\",\r\n \"TRB\": \"tribal member\",\r\n \"UMO\": \"utilization management organization\",\r\n \"UNCLE\": \"uncle\",\r\n \"UPC\": \"underage protection center\",\r\n \"URO\": \"urology clinic\",\r\n \"V\": \"verifying\",\r\n \"VET\": \"veteran\",\r\n \"VL\": \"veal\",\r\n \"WARD\": \"ward\",\r\n \"WIFE\": \"wife\",\r\n \"WL\": \"wool\",\r\n \"WND\": \"wound clinic\",\r\n \"WO\": \"working\",\r\n \"WORK\": \"work site\",\r\n};\r\n\r\nvar PROBLEM_STATUS_MAP = {\r\n \"55561003\": \"active\",\r\n \"73425007\": \"inactive\",\r\n \"413322009\": \"resolved\"\r\n};\r\n\r\n\r\n// copied from _.invert to avoid making browser users include all of underscore\r\nvar invertKeys = function(obj) {\r\n var result = {};\r\n var keys = Object.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n result[obj[keys[i]]] = keys[i];\r\n }\r\n return result;\r\n};\r\n\r\nvar lookupFnGenerator = function(map) {\r\n return function(key) {\r\n return map[key] || null;\r\n };\r\n};\r\nvar reverseLookupFnGenerator = function(map) {\r\n return function(key) {\r\n if (!key) { return null; }\r\n var invertedMap = invertKeys(map);\r\n key = key.toLowerCase();\r\n return invertedMap[key] || null;\r\n };\r\n};\r\n\r\n\r\nmodule.exports = {\r\n gender: lookupFnGenerator(GENDER_MAP),\r\n reverseGender: reverseLookupFnGenerator(GENDER_MAP),\r\n maritalStatus: lookupFnGenerator(MARITAL_STATUS_MAP),\r\n reverseMaritalStatus: reverseLookupFnGenerator(MARITAL_STATUS_MAP),\r\n religion: lookupFnGenerator(RELIGION_MAP),\r\n reverseReligion: reverseLookupFnGenerator(RELIGION_MAP),\r\n raceEthnicity: lookupFnGenerator(RACE_ETHNICITY_MAP),\r\n reverseRaceEthnicity: reverseLookupFnGenerator(RACE_ETHNICITY_MAP),\r\n role: lookupFnGenerator(ROLE_MAP),\r\n reverseRole: reverseLookupFnGenerator(ROLE_MAP),\r\n problemStatus: lookupFnGenerator(PROBLEM_STATUS_MAP),\r\n reverseProblemStatus: reverseLookupFnGenerator(PROBLEM_STATUS_MAP)\r\n};\r\n","module.exports = {\r\n stripWhitespace: stripWhitespace\r\n}\r\n\r\nfunction stripWhitespace (str) {\r\n if (!str) { return str; }\r\n return str.replace(/^\\s+|\\s+$/g,'');\r\n};","/*\r\n * ...\r\n */\r\nvar { stripWhitespace } = require('./common');\r\n/*\r\n * A function used to wrap DOM elements in an object so methods can be added\r\n * to the element object. IE8 does not allow methods to be added directly to\r\n * DOM objects.\r\n */\r\nvar wrapElement = function (el) {\r\n function wrapElementHelper(currentEl) {\r\n return {\r\n el: currentEl,\r\n template: template,\r\n content: content,\r\n tag: tag,\r\n immediateChildTag: immediateChildTag,\r\n elsByTag: elsByTag,\r\n attr: attr,\r\n boolAttr: boolAttr,\r\n val: val,\r\n isEmpty: isEmpty\r\n };\r\n }\r\n \r\n // el is an array of elements\r\n if (el.length) {\r\n var els = [];\r\n for (var i = 0; i < el.length; i++) {\r\n els.push(wrapElementHelper(el[i]));\r\n }\r\n return els;\r\n \r\n // el is a single element\r\n } else {\r\n return wrapElementHelper(el);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Find element by tag name, then attribute value.\r\n */\r\nvar tagAttrVal = function (el, tag, attr, value) {\r\n el = el.getElementsByTagName(tag);\r\n for (var i = 0; i < el.length; i++) {\r\n if (el[i].getAttribute(attr) === value) {\r\n return el[i];\r\n }\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Search for a template ID, and return its parent element.\r\n * Example:\r\n * <templateId root=\"2.16.840.1.113883.10.20.22.2.17\"/>\r\n * Can be found using:\r\n * el = dom.template('2.16.840.1.113883.10.20.22.2.17');\r\n */\r\nvar template = function (templateId) {\r\n var el = tagAttrVal(this.el, 'templateId', 'root', templateId);\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el.parentNode);\r\n }\r\n};\r\n\r\n/*\r\n * Search for a content tag by \"ID\", and return it as an element.\r\n * These are used in the unstructured versions of each section but\r\n * referenced from the structured version sometimes.\r\n * Example:\r\n * <content ID=\"UniqueNameReferencedElsewhere\"/>\r\n * Can be found using:\r\n * el = dom.content('UniqueNameReferencedElsewhere');\r\n *\r\n * We can't use `getElementById` because `ID` (the standard attribute name\r\n * in this context) is not the same attribute as `id` in XML, so there are no matches\r\n */\r\nvar content = function (contentId) {\r\n var el = tagAttrVal(this.el, 'content', 'ID', contentId);\r\n if (!el) {\r\n // check the <td> tag too, which isn't really correct but\r\n // will inevitably be used sometimes because it looks like very\r\n // normal HTML to put the data directly in a <td>\r\n el = tagAttrVal(this.el, 'td', 'ID', contentId);\r\n }\r\n if (!el) {\r\n // Ugh, Epic uses really non-standard locations.\r\n el = tagAttrVal(this.el, 'caption', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'paragraph', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'tr', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'item', 'ID', contentId);\r\n }\r\n\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n };\r\n\r\n\r\n/*\r\n * Search for the first occurrence of an element by tag name.\r\n */\r\nvar tag = function (tag) {\r\n var el = this.el.getElementsByTagName(tag)[0];\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n};\r\n\r\n/*\r\n * Like `tag`, except it will only count a tag that is an immediate child of `this`.\r\n * This is useful for tags like \"text\" which A. may not be present for a given location\r\n * in every document and B. have a very different meaning depending on their positioning\r\n *\r\n * <parent>\r\n * <target></target>\r\n * </parent>\r\n * vs.\r\n * <parent>\r\n * <intermediate>\r\n * <target></target>\r\n * </intermediate>\r\n * </parent>\r\n * parent.immediateChildTag('target') will have a result in the first case but not in the second.\r\n */\r\nvar immediateChildTag = function (tag) {\r\n var els = this.el.getElementsByTagName(tag);\r\n if (!els) { return null; }\r\n for (var i = 0; i < els.length; i++) {\r\n if (els[i].parentNode === this.el) {\r\n return wrapElement(els[i]);\r\n }\r\n }\r\n return emptyEl();\r\n};\r\n\r\n\r\n/*\r\n * Search for all elements by tag name.\r\n */\r\nvar elsByTag = function (tag) {\r\n return wrapElement(this.el.getElementsByTagName(tag));\r\n};\r\n\r\n\r\nvar unescapeSpecialChars = function(s) {\r\n if (!s) { return s; }\r\n return s.replace(/&lt;/g, '<')\r\n .replace(/&gt;/g, '>')\r\n .replace(/&amp;/g, '&')\r\n .replace(/&quot;/g, '\"')\r\n .replace(/&apos;/g, \"'\");\r\n};\r\n\r\n\r\n/*\r\n * Retrieve the element's attribute value. Example:\r\n * value = el.attr('displayName');\r\n *\r\n * The browser and jsdom return \"null\" for empty attributes;\r\n * xmldom (which we now use because it's faster / can be explicitly\r\n * told to parse malformed XML as XML anyways), return the empty\r\n * string instead, so we fix that here.\r\n */\r\nvar attr = function (attrName) {\r\n if (!this.el) { return null; }\r\n var attrVal = this.el.getAttribute(attrName);\r\n if (attrVal) {\r\n return unescapeSpecialChars(attrVal);\r\n }\r\n return null;\r\n};\r\n\r\n/*\r\n * Wrapper for attr() for retrieving boolean attributes;\r\n * a raw call attr() will return Strings, which can be unexpected,\r\n * since the string 'false' will by truthy\r\n */\r\nvar boolAttr = function (attrName) {\r\n var rawAttr = this.attr(attrName);\r\n if (rawAttr === 'true' || rawAttr === '1') {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n/*\r\n * Retrieve the element's value. For example, if the element is:\r\n * <city>Madison</city>\r\n * Use:\r\n * value = el.tag('city').val();\r\n *\r\n * This function also knows how to retrieve the value of <reference> tags,\r\n * which can store their content in a <content> tag in a totally different\r\n * part of the document.\r\n */\r\nvar val = function (html) {\r\n if (!this.el) { return null; }\r\n if (!this.el.childNodes || !this.el.childNodes.length) { return null; }\r\n \r\n var textContent;\r\n if (html) {\r\n textContent = this.el.innerHTML;\r\n if (!textContent && root.XMLSerializer)\r\n textContent = new XMLSerializer().serializeToString(this.el);\r\n } else {\r\n textContent = this.el.textContent;\r\n }\r\n\r\n // if there's no text value here and the only thing inside is a\r\n // <reference> tag, see if there's a linked <content> tag we can\r\n // get something out of\r\n if (!stripWhitespace(textContent)) {\r\n\r\n var contentId;\r\n // \"no text value\" might mean there's just a reference tag\r\n if (this.el.childNodes.length === 1 &&\r\n this.el.childNodes[0].tagName === 'reference') {\r\n contentId = this.el.childNodes[0].getAttribute('value');\r\n\r\n // or maybe a newlines on top/above the reference tag\r\n } else if (this.el.childNodes.length === 3 &&\r\n this.el.childNodes[1].tagName === 'reference') {\r\n contentId = this.el.childNodes[1].getAttribute('value');\r\n\r\n } else {\r\n return unescapeSpecialChars(textContent);\r\n }\r\n\r\n if (contentId && contentId[0] === '#') {\r\n contentId = contentId.slice(1); // get rid of the '#'\r\n var docRoot = wrapElement(this.el.ownerDocument);\r\n var contentTag = docRoot.content(contentId);\r\n return contentTag.val();\r\n }\r\n }\r\n\r\n return unescapeSpecialChars(textContent);\r\n};\r\n\r\n\r\n/*\r\n * Creates and returns an empty DOM element with tag name \"empty\":\r\n * <empty></empty>\r\n */\r\nvar emptyEl = function () {\r\n var el = doc.createElement('empty');\r\n return wrapElement(el);\r\n};\r\n\r\n\r\n/*\r\n * Determines if the element is empty, i.e.:\r\n * <empty></empty>\r\n * This element is created by function `emptyEL`.\r\n */\r\nvar isEmpty = function () {\r\n if (this.el.tagName.toLowerCase() === 'empty') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Cross-browser XML parsing supporting IE8+ and Node.js.\r\n */\r\nfunction parse(data) {\r\n // XML data must be a string\r\n if (!data || typeof data !== \"string\") {\r\n console.log(\"BB Error: XML data is not a string\");\r\n return null;\r\n }\r\n \r\n var xml, parser;\r\n \r\n // Node\r\n if (isNode) {\r\n parser = new (xmldom.DOMParser)();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // Browser\r\n } else {\r\n \r\n // Standard parser\r\n if (window.DOMParser) {\r\n parser = new DOMParser();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // IE\r\n } else {\r\n try {\r\n xml = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xml.async = \"false\";\r\n xml.loadXML(data);\r\n } catch (e) {\r\n console.log(\"BB ActiveX Exception: Could not parse XML\");\r\n }\r\n }\r\n }\r\n \r\n if (!xml || !xml.documentElement || xml.getElementsByTagName(\"parsererror\").length) {\r\n console.log(\"BB Error: Could not parse XML\");\r\n return null;\r\n }\r\n \r\n return wrapElement(xml);\r\n};\r\n\r\n\r\n// Establish the root object, `window` in the browser, or `global` in Node.\r\nvar root = window || global,\r\n xmldom,\r\n isNode = false,\r\n doc = root.document; // Will be `undefined` if we're in Node\r\n\r\n// Check if we're in Node. If so, pull in `xmldom` so we can simulate the DOM.\r\nif (typeof process === 'object' && Object.prototype.toString.call(process) === '[object process]') {\r\n isNode = true;\r\n xmldom = require(\"xmldom\");\r\n doc = new xmldom.DOMImplementation().createDocument();\r\n}\r\n\r\nmodule.exports = {\r\n parse: parse\r\n};","/*\r\n * ...\r\n */\r\nvar C32 = require('./documents/c32');\r\nvar CCD = require('./documents/ccd');\r\nvar CCDA = require('./documents/ccda');\r\nvar CCDAR2 = require('./documents/ccdar2');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.detect = detect;\r\n self.entries = entries;\r\n self.parseDate = parseDate;\r\n self.parseName = parseName;\r\n self.parseAddress = parseAddress;\r\n self.C32 = new C32(getEntries);\r\n self.CCD = new CCD(getEntries);\r\n self.CCDA = new CCDA(getEntries);\r\n self.CCDAR2 = new CCDAR2(getEntries);\r\n};\r\n\r\nfunction getEntries() {\r\n return entries;\r\n};\r\n\r\nfunction detect(data) {\r\n if (!data.template) {\r\n return 'json';\r\n }\r\n \r\n if (!data.template('2.16.840.1.113883.3.88.11.32.1').isEmpty()) {\r\n return 'c32';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.1').isEmpty()) {\r\n return 'ccda';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.15').isEmpty()) {\r\n return 'ccdar2';\r\n }else if(!data.template('2.16.840.1.113883.10.20.22.1.2').isEmpty()) {\r\n return 'ccd';\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Get entries within an element (with tag name 'entry'), adds an `each` function\r\n */\r\nfunction entries() {\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var els = this.elsByTag('entry');\r\n els.each = each;\r\n return els;\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 date in String form and creates a new Date object.\r\n * \r\n * TODO: CCDA dates can be in form:\r\n * <effectiveTime value=\"20130703094812\"/>\r\n * ...or:\r\n * <effectiveTime>\r\n * <low value=\"19630617120000\"/>\r\n * <high value=\"20110207100000\"/>\r\n * </effectiveTime>\r\n * For the latter, parseDate will not be given type `String`\r\n * and will return `null`.\r\n */\r\nfunction parseDate(str) {\r\n if (!str || typeof str !== 'string') {\r\n return null;\r\n }\r\n\r\n // Note: months start at 0 (so January is month 0)\r\n\r\n // e.g., value=\"1999\" translates to Jan 1, 1999\r\n if (str.length === 4) {\r\n return new Date(str, 0, 1);\r\n }\r\n\r\n var year = str.substr(0, 4);\r\n // subtract 1 from the month since they're zero-indexed\r\n var month = parseInt(str.substr(4, 2), 10) - 1;\r\n // days are not zero-indexed. If we end up with the day 0 or '',\r\n // that will be equivalent to the last day of the previous month\r\n var day = str.substr(6, 2) || 1;\r\n\r\n // check for time info (the presence of at least hours and mins after the date)\r\n if (str.length >= 12) {\r\n var hour = str.substr(8, 2);\r\n var min = str.substr(10, 2);\r\n var secs = str.substr(12, 2);\r\n\r\n // check for timezone info (the presence of chars after the seconds place)\r\n if (str.length > 14) {\r\n // _utcOffsetFromString will return 0 if there's no utc offset found.\r\n var utcOffset = _utcOffsetFromString(str.substr(14));\r\n // We subtract that offset from the local time to get back to UTC\r\n // (e.g., if we're -480 mins behind UTC, we add 480 mins to get back to UTC)\r\n min = _toInt(min) - utcOffset;\r\n }\r\n\r\n var date = new Date(Date.UTC(year, month, day, hour, min, secs));\r\n // This flag lets us output datetime-precision in our JSON even if the time happens\r\n // to translate to midnight local time. If we clone the date object, it is not\r\n // guaranteed to survive.\r\n date._parsedWithTimeData = true;\r\n return date;\r\n }\r\n\r\n return new Date(year, month, day);\r\n};\r\n\r\n// These regexes and the two functions below are copied from moment.js\r\n// http://momentjs.com/\r\n// https://github.com/moment/moment/blob/develop/LICENSE\r\nvar parseTimezoneChunker = /([\\+\\-]|\\d\\d)/gi;\r\nvar parseTokenTimezone = /Z|[\\+\\-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\r\nfunction _utcOffsetFromString(string) {\r\n string = string || '';\r\n var possibleTzMatches = (string.match(parseTokenTimezone) || []),\r\n tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],\r\n parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],\r\n minutes = +(parts[1] * 60) + _toInt(parts[2]);\r\n\r\n return parts[0] === '+' ? minutes : -minutes;\r\n}\r\nfunction _toInt(argumentForCoercion) {\r\n var coercedNumber = +argumentForCoercion,\r\n value = 0;\r\n\r\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\r\n if (coercedNumber >= 0) {\r\n value = Math.floor(coercedNumber);\r\n } else {\r\n value = Math.ceil(coercedNumber);\r\n }\r\n }\r\n\r\n return value;\r\n}\r\n\r\n\r\n/*\r\n * Parses an HL7 name (prefix / given [] / family)\r\n */\r\nfunction parseName(nameEl) {\r\n var prefix = nameEl.tag('prefix').val();\r\n \r\n var els = nameEl.elsByTag('given');\r\n var given = [];\r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { given.push(val); }\r\n }\r\n \r\n var family = nameEl.tag('family').val();\r\n \r\n return {\r\n prefix: prefix,\r\n given: given,\r\n family: family\r\n };\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 address (streetAddressLine [], city, state, postalCode, country)\r\n */\r\nfunction parseAddress(addrEl) {\r\n var els = addrEl.elsByTag('streetAddressLine');\r\n var street = [];\r\n \r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { street.push(val); }\r\n }\r\n \r\n var city = addrEl.tag('city').val(),\r\n state = addrEl.tag('state').val(),\r\n zip = addrEl.tag('postalCode').val(),\r\n country = addrEl.tag('country').val();\r\n \r\n return {\r\n street: street,\r\n city: city,\r\n state: state,\r\n zip: zip,\r\n country: country\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n \r\nmodule.exports = function(getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the C32 document\r\n */\r\n function process(c32) {\r\n c32.section = section;\r\n return c32;\r\n };\r\n\r\n /*\r\n * Finds the section of a C32 document\r\n *\r\n * Usually we check first for the HITSP section ID and then for the HL7-CCD ID.\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.102');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.127');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.117');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.6');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.122');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.14');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.112');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.8');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.103');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.11');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.108');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.12');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.119');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.16');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n \r\n /*\r\n * Preprocesses the CCDA document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n }; \r\n \r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.6.1');\r\n el.entries = entries;\r\n return el;\r\n case 'care_plan':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.10');\r\n el.entries = entries;\r\n return el;\r\n case 'chief_complaint':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.13');\r\n if (el.isEmpty()) {\r\n el = this.template('1.3.6.1.4.1.19376.1.5.3.1.1.13.2.1');\r\n }\r\n // no entries in Chief Complaint\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'functional_statuses':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.14');\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'instructions':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.45');\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'social_history':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.17');\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n }; \r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n \r\n self.process = process;\r\n self.section = section; \r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nvar C32 = require('./generators/c32');\r\nvar CCDA = require('./generators/ccda');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Generators */\r\nmodule.exports = {\r\n method: method,\r\n C32: C32,\r\n CCDA: CCDA\r\n};\r\n \r\n\r\n\r\n /* Import ejs if we're in Node. Then setup custom formatting filters\r\n */\r\n /*if (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n ejs = require(\"ejs\");\r\n }\r\n }\r\n\r\n if (typeof ejs !== 'undefined') {\r\n /* Filters are automatically available to ejs to be used like \"... | hl7Date\"\r\n * Helpers are functions that we'll manually pass in to ejs.\r\n * The intended distinction is that a helper gets called with regular function-call syntax\r\n */ /*\r\n var pad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return String(number);\r\n };\r\n\r\n ejs.filters.hl7Date = function(obj) {\r\n try {\r\n if (obj === null || obj === undefined) { return 'nullFlavor=\"UNK\"'; }\r\n var date = new Date(obj);\r\n if (isNaN(date.getTime())) { return obj; }\r\n\r\n var dateStr = null;\r\n if (date.getHours() || date.getMinutes() || date.getSeconds()) {\r\n // If there's a meaningful time, output a UTC datetime\r\n dateStr = date.getUTCFullYear() +\r\n pad( date.getUTCMonth() + 1 ) +\r\n pad( date.getUTCDate() );\r\n var timeStr = pad( date.getUTCHours() ) +\r\n pad( date.getUTCMinutes() ) +\r\n pad ( date.getUTCSeconds() ) +\r\n \"+0000\";\r\n return 'value=\"' + dateStr + timeStr + '\"';\r\n \r\n } else {\r\n // If there's no time, don't apply timezone tranformations: just output a date\r\n dateStr = String(date.getFullYear()) +\r\n pad( date.getMonth() + 1 ) +\r\n pad( date.getDate() );\r\n return 'value=\"' + dateStr + '\"';\r\n }\r\n\r\n } catch (e) {\r\n return obj;\r\n }\r\n };\r\n\r\n var escapeSpecialChars = function(s) {\r\n return s.replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/&/g, '&amp;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&apos;');\r\n };\r\n\r\n ejs.filters.hl7Code = function(obj) {\r\n if (!obj) { return ''; }\r\n\r\n var tag = '';\r\n var name = obj.name || '';\r\n if (obj.name) { tag += 'displayName=\"'+escapeSpecialChars(name)+'\"'; }\r\n\r\n if (obj.code) {\r\n tag += ' code=\"'+obj.code+'\"';\r\n if (obj.code_system) { tag += ' codeSystem=\"'+escapeSpecialChars(obj.code_system)+'\"'; }\r\n if (obj.code_system_name) { tag += ' codeSystemName=\"' +\r\n escapeSpecialChars(obj.code_system_name)+'\"'; }\r\n } else {\r\n tag += ' nullFlavor=\"UNK\"';\r\n }\r\n\r\n if (!obj.name && ! obj.code) {\r\n return 'nullFlavor=\"UNK\"';\r\n }\r\n \r\n return tag;\r\n };\r\n\r\n ejs.filters.emptyStringIfFalsy = function(obj) {\r\n if (!obj) { return ''; }\r\n return obj;\r\n };\r\n\r\n if (!ejs.helpers) ejs.helpers = {};\r\n ejs.helpers.simpleTag = function(tagName, value) {\r\n if (value) {\r\n return \"<\"+tagName+\">\"+value+\"</\"+tagName+\">\";\r\n } else {\r\n return \"<\"+tagName+\" nullFlavor=\\\"UNK\\\" />\";\r\n }\r\n };\r\n\r\n ejs.helpers.addressTags = function(addressDict) {\r\n if (!addressDict) {\r\n return '<streetAddressLine nullFlavor=\"NI\" />\\n' +\r\n '<city nullFlavor=\"NI\" />\\n' +\r\n '<state nullFlavor=\"NI\" />\\n' +\r\n '<postalCode nullFlavor=\"NI\" />\\n' +\r\n '<country nullFlavor=\"NI\" />\\n';\r\n }\r\n \r\n var tags = '';\r\n if (!addressDict.street.length) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', null) + '\\n';\r\n } else {\r\n for (var i=0; i<addressDict.street.length; i++) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', addressDict.street[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('city', addressDict.city) + '\\n';\r\n tags += ejs.helpers.simpleTag('state', addressDict.state) + '\\n';\r\n tags += ejs.helpers.simpleTag('postalCode', addressDict.zip) + '\\n';\r\n tags += ejs.helpers.simpleTag('country', addressDict.country) + '\\n';\r\n return tags;\r\n };\r\n\r\n ejs.helpers.nameTags = function(nameDict) {\r\n if (!nameDict) {\r\n return '<given nullFlavor=\"NI\" />\\n' +\r\n '<family nullFlavor=\"NI\" />\\n';\r\n }\r\n\r\n var tags = '';\r\n if (nameDict.prefix) {\r\n tags += ejs.helpers.simpleTag('prefix', nameDict.prefix) + '\\n';\r\n }\r\n if (!nameDict.given.length) {\r\n tags += ejs.helpers.simpleTag('given', null) + '\\n';\r\n } else {\r\n for (var i=0; i<nameDict.given.length; i++) {\r\n tags += ejs.helpers.simpleTag('given', nameDict.given[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('family', nameDict.family) + '\\n';\r\n if (nameDict.suffix) {\r\n tags += ejs.helpers.simpleTag('suffix', nameDict.suffix) + '\\n';\r\n }\r\n return tags;\r\n };\r\n\r\n }*/\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a C32 document\r\n */\r\nfunction run(json, template, testingMode) {\r\n /* jshint unused: false */ // only until this stub is actually implemented\r\n console.log(\"C32 generation is not implemented yet\");\r\n return null;\r\n};","/*\r\n * ...\r\n */\r\nvar _ = require('lodash');\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a CCDA document\r\n * A lot of the EJS setup happens in generators.js\r\n *\r\n * If `testingMode` is true, we'll set the \"now\" variable to a specific,\r\n * fixed time, so that the expected XML doesn't change across runs\r\n */\r\nfunction run(json, template, testingMode) {\r\n if (!template) {\r\n console.log(\"Please provide a template EJS file for the Generator to use. \" +\r\n \"Load it via fs.readFileSync in Node or XHR in the browser.\");\r\n return null;\r\n }\r\n\r\n // `now` is actually now, unless we're running this for a test,\r\n // in which case it's always Jan 1, 2000 at 12PM UTC\r\n var now = (testingMode) ?\r\n new Date('2000-01-01T12:00:00Z') : new Date();\r\n\r\n var ccda = _.template(template, {\r\n filename: 'ccda.xml',\r\n bb: json,\r\n now: now,\r\n tagHelpers: ejs.helpers,\r\n codes: Core.Codes\r\n });\r\n return ccda;\r\n};","/*\r\n * ...\r\n */\r\nvar C32 = require('./parsers/c32');\r\nvar CCD = require('./parsers/ccd');\r\nvar CCDA = require('./parsers/ccda');\r\nvar CCDAR2 = require('./parsers/ccdar2');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Parsers */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.method = method;\r\n self.C32 = new C32(self.doc);\r\n self.CCD = new CCD(self.doc);\r\n self.CCDA = new CCDA(self.doc);\r\n self.CCDAR2 = new CCDAR2(self.doc);\r\n}; ","/*\r\n * Parser for the C32 document\r\n */\r\n\r\nvar Core = require('../core');\r\nvar AllergiesParser = require('./c32/allergies');\r\nvar DemographicsParser = require('./c32/demographics');\r\nvar DocumentParser = require('./c32/document');\r\nvar EncountersParser = require('./c32/encounters');\r\nvar ImmunizationsParser = require('./c32/immunizations');\r\nvar MedicationsParser = require('./c32/medications');\r\nvar ProblemsParser = require('./c32/problems');\r\nvar ProceduresParser = require('./c32/procedures');\r\nvar ResultsParser = require('./c32/results');\r\nvar VitalsParser = require('./c32/vitals');\r\nvar ParseGenericInfo = require('./generic');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.demographicsParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n self.run = function (c32) {\r\n var data = {};\r\n \r\n data.document = self.demographicsParser.parse(c32);\r\n data.allergies = self.allergiesParser.parse(c32);\r\n data.demographics = self.demographicsParser.parse(c32);\r\n data.encounters = self.encountersParser.parse(c32);\r\n var parsedImmunizations = self.immunizationsParser.parse(c32);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.results = self.resultsParser.parse(c32);\r\n data.medications = self.medicationsParser.parse(c32);\r\n data.problems = self.problemsParser.parse(c32);\r\n data.procedures = self.proceduresParser.parse(c32);\r\n data.vitals = self.vitals.parse(c32);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.vitals.json = Core.json;\r\n \r\n // Sections that are in CCDA but not C32... we want to keep the API\r\n // consistent, even if the entries are always null\r\n data.smoking_status = {\r\n date: null,\r\n name: null,\r\n code: null,\r\n code_system: null,\r\n code_system_name: null\r\n };\r\n data.smoking_status.json = Core.json;\r\n \r\n data.chief_complaint = {\r\n text: null\r\n };\r\n data.chief_complaint.json = Core.json;\r\n \r\n data.care_plan = [];\r\n data.care_plan.json = Core.json;\r\n \r\n data.instructions = [];\r\n data.instructions.json = Core.json;\r\n \r\n data.functional_statuses = [];\r\n data.functional_statuses.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(c32, data);\r\n \r\n return data;\r\n };\r\n};\r\n\r\n\r\n","/*\r\n * Parser for the C32 allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = c32.section('allergies');\r\n\r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n\r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // an irregularity seen in some c32s\r\n if (!reaction_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('text');\r\n if (!el.isEmpty()) {\r\n reaction_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n\r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.1.55').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n\r\n // another irregularity seen in some c32s\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.1.39').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n }); \r\n return data;\r\n }\r\n};\r\n","/*\r\n * Parser for the C32 demographics section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = c32.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value'),\r\n provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = c32.section('document');\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n \r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n // Sometimes C32s include names that are just like <name>String</name>\r\n // and we still want to get something out in that case\r\n if (!name_dict.prefix && !name_dict.given.length && !name_dict.family) {\r\n name_dict.family = el.val();\r\n }\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i].tag('assignedPerson').tag('name');\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = performers[i].tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = c32.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer');\r\n var performer_name = el.tag('name').val(),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('name').val(),\r\n location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 immunizations section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = c32.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n \r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.1.53');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.1.49');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 medications section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n \r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var medications = c32.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n var text = null;\r\n el = entry.tag('substanceAdministration').immediateChildTag('text');\r\n if (!el.isEmpty()) {\r\n // technically C32s don't use this, but C83s (another CCD) do,\r\n // and CCDAs do, so we may see it anyways\r\n text = Core.stripWhitespace(el.val());\r\n }\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n // irregularity in some c32s\r\n if (!product_name) {\r\n el = entry.tag('manufacturedProduct').tag('name');\r\n if (!el.isEmpty()) {\r\n product_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n // (which for C32s is in fact the primary field for this info)\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: text,\r\n product: {\r\n name: product_name,\r\n text: product_original_text,\r\n code: product_code,\r\n code_system: product_code_system,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 problems section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var problems = c32.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // Pre-C32 CCDs put the problem name in this \"originalText\" field, and some vendors\r\n // continue doing this with their C32, even though it's not technically correct\r\n if (!name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('originalText');\r\n if (!el.isEmpty()) {\r\n name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.50');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.1.38');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: null // not part of C32\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = c32.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.tag('participant').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = c32.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n \r\n results.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var panel_date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!panel_date) {\r\n panel_date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n // sometimes results organizers contain non-results. we only want tests\r\n if (observation.template('2.16.840.1.113883.10.20.1.31').val()) {\r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n date: panel_date,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the C32 vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = c32.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var j = 0; j < results.length; j++) {\r\n result = results[j];\r\n \r\n // Results\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\nvar DocumentParser = require('./ccd/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n \r\n self.run = function (ccda) {\r\n var data = {};\r\n\r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.document = document;\r\n\r\n function document(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","var Core = require('../core');\r\nvar AllergiesParser = require('./ccda/allergies');\r\nvar CarePlanParser = require('./ccda/care_plan');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar DocumentParser = require('./ccda/document');\r\nvar EncountersParser = require('./ccda/encounters');\r\nvar FreeTextParser = require('./ccda/free_text');\r\nvar FunctionalStatusesParser = require('./ccda/functional_statuses');\r\nvar ImmunizationsParser = require('./ccda/immunizations');\r\nvar InstructionsParser = require('./ccda/instructions');\r\nvar MedicationsParser = require('./ccda/medications');\r\nvar ProblemsParser = require('./ccda/problems');\r\nvar ProceduresParser = require('./ccda/procedures');\r\nvar ResultsParser = require('./ccda/results');\r\nvar SmokingStatusParser = require('./ccda/smoking_status');\r\nvar VitalsParser = require('./ccda/vitals');\r\n\r\nvar ParseGenericInfo = require('./generic');\r\n\r\n/*\r\n * Parser for the CCDA document\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.carePlanParser = new CarePlanParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.freeTextParser = new FreeTextParser();\r\n self.functionalStatusesParser = new FunctionalStatusesParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.instructionsParser = new InstructionsParser();\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.smokingStatusParser = new SmokingStatusParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n\r\n self.run = function (ccda) {\r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.allergies = self.allergiesParser.allergies(ccda);\r\n data.care_plan = self.carePlanParser.care_plan(ccda);\r\n data.chief_complaint = self.freeTextParser.free_text(ccda, 'chief_complaint');\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.encounters = self.encountersParser.encounters(ccda);\r\n data.functional_statuses = self.functionalStatusesParser.functional_statuses(ccda);\r\n var parsedImmunizations = self.immunizationsParser.immunizations(ccda);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.instructions = self.instructionsParser.instructions(ccda);\r\n data.results = self.resultsParser.results(ccda);\r\n data.medications = self.medicationsParser.medications(ccda);\r\n data.problems = self.problemsParser.problems(ccda);\r\n data.procedures = self.proceduresParser.procedures(ccda);\r\n data.smoking_status = self.smokingStatusParser.smoking_status(ccda);\r\n data.vitals = self.vitalsParser.vitals(ccda);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.care_plan.json = Core.json;\r\n data.chief_complaint.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.functional_statuses.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.instructions.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.smoking_status.json = Core.json;\r\n data.vitals.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n \r\n self.allergies = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = ccda.section('allergies');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n \r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.9').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.8').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n \r\n // this is not a valid place to store the allergen name but some vendors use it\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.28').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.care_plan = function (ccda) { \r\n var data = [], el;\r\n \r\n var data = {}, el;\r\n care_plan = ccda.section('care_plan');\r\n data.entries = [];\r\n data.displayName = \"Care Plan\";\r\n data.templateId = care_plan.tag('templateId').attr('root');\r\n data.text = care_plan.tag('text').val(true);\r\n \r\n care_plan.entries().each(function (entry) {\r\n \r\n var name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null;\r\n \r\n // Plan of care encounters, which have no other details\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.40');\r\n if (!el.isEmpty()) {\r\n name = 'encounter';\r\n } else {\r\n el = entry.tag('code');\r\n \r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n }\r\n \r\n var text = Core.stripWhitespace(entry.tag('text').val(true));\r\n var time = entry.tag('effectiveTime').immediateChildTag('center').attr('value');\r\n \r\n data.entries.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n effective_time: parse(time)\r\n });\r\n });\r\n \r\n return data;\r\n \r\n function parse(str) {\r\n if (!str) return null;\r\n var y = str.substr(0, 4),\r\n m = str.substr(4, 2) - 1,\r\n d = str.substr(6, 2);\r\n var D = new Date(y, m, d);\r\n return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : null;\r\n }\r\n };\r\n}","/*\r\n * Parser for the CCDA demographics section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.demographics = demographics;\r\n\r\n function demographics(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = ccda.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value');\r\n \r\n var provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n \r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.encounters = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = ccda.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer').tag('code');\r\n var performer_name = el.attr('displayName'),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('code').attr('displayName');\r\n \r\n var location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for any freetext section (i.e., contains just a single <text> element)\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.free_text = function (ccda, sectionName) { \r\n var data = {};\r\n \r\n var doc = ccda.section(sectionName);\r\n var text = Core.stripWhitespace(doc.tag('text').val(true));\r\n \r\n data = {\r\n text: text\r\n };\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA functional & cognitive status\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.functional_statuses = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var data = [], el;\r\n \r\n var statuses = ccda.section('functional_statuses');\r\n \r\n statuses.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('value');\r\n \r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n data.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n \r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA immunizations section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.immunizations = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = ccda.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.22.4.54');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.20');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n\r\n\r\n","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n \r\n self.instructions = function (ccda) {\r\n \r\n var data = [], el;\r\n \r\n var instructions = ccda.section('instructions');\r\n data.templateId = instructions.tag('templateId').attr('root');\r\n \r\n instructions.entries().each(function(entry) {\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n var text = Core.stripWhitespace(entry.tag('text').val(true));\r\n \r\n data.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA medications section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function (doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.medications = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var medications = ccda.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n el = entry.tag('text');\r\n var sig = Core.stripWhitespace(el.val());\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.19').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: sig,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n text: product_original_text,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA problems section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.problems = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n var problems = ccda.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.6');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.31');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.64');\r\n var comment = Core.stripWhitespace(el.tag('text').val());\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: comment\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.procedures = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = ccda.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.37').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.results = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = ccda.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n results.entries().each(function(entry) {\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA smoking status in social history section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.smoking_status = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data, el;\r\n \r\n var name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null,\r\n entry_date = null;\r\n \r\n // We can parse all of the social_history sections,\r\n // but in practice, this section seems to be used for\r\n // smoking status, so we're just going to break that out.\r\n // And we're just looking for the first non-empty one.\r\n var social_history = ccda.section('social_history');\r\n var entries = social_history.entries();\r\n for (var i=0; i < entries.length; i++) {\r\n var entry = entries[i];\r\n \r\n var smoking_status = entry.template('2.16.840.1.113883.10.20.22.4.78');\r\n if (smoking_status.isEmpty()) {\r\n smoking_status = entry.template('2.16.840.1.113883.10.22.4.78');\r\n }\r\n if (smoking_status.isEmpty()) {\r\n continue;\r\n }\r\n \r\n el = smoking_status.tag('effectiveTime');\r\n entry_date = parseDate(el.attr('value'));\r\n \r\n el = smoking_status.tag('value');\r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (name) {\r\n break;\r\n }\r\n }\r\n \r\n data = {\r\n date: entry_date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n };\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.vitals = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = ccda.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var i = 0; i < results.length; i++) {\r\n result = results[i];\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\n\r\nvar DocumentParser = require('./ccdar2/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n\r\n self.run = function (ccda) { \r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 Health Concerns Section\r\n * 2.16.840.1.113883.10.20.22.2.58\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.health_concerns_document = function (ccda) {\r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n // Helper to create each iterator for collection\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var model = {}, el;\r\n model.entries = [];\r\n \r\n model.text = ccda.tag('text').val(true);\r\n \r\n var health_concerns = ccda.section('health_concerns_document');\r\n var title = health_concerns.tag('title').val();\r\n \r\n health_concerns.entries().each(function(entry) {\r\n \r\n var entryModel = {};\r\n // Parse out the ACT Body\r\n //A record of something that is being done, has been done, can be done, or is intended or requested to be done.\r\n var act = entry.tag('act');\r\n var er = act.elsByTag('entryRelationship');\r\n var templateId = act.tag('templateId').attr('root');\r\n var id = act.tag('id').attr('root');\r\n var statusCode = act.tag('statusCode').attr('code');\r\n var code = act.tag('code');\r\n var name = code.attr('displayName');\r\n var effectiveTime = parseDate(entry.tag('effectiveTime'));\r\n \r\n // The model we want to return in json\r\n var actModel = {\r\n effective_time: effectiveTime,\r\n name: name,\r\n entry_relationship:[]\r\n };\r\n \r\n // Parse Entity Relationship child nodes\r\n \r\n var ers = entry.elsByTag('entryRelationship');\r\n ers.each = each;\r\n \r\n ers.each(function(er){\r\n \r\n var erModel = {\r\n type_code : er.attr('typeCode'),\r\n observations : []\r\n };\r\n \r\n var obs = er.elsByTag('observation');\r\n obs.each = each;\r\n \r\n // Parse out Obsevations for Each ER\r\n obs.each(function(ob) {\r\n erModel.observations.push({\r\n class_code: ob.attr('classCode'),\r\n mood_code: ob.attr('moodCode'),\r\n display_name : ob.tag('value').attr('displayName'),\r\n status: ob.tag('statusCode').attr('code')\r\n });\r\n });\r\n \r\n actModel.entry_relationship.push(erModel);\r\n \r\n });\r\n \r\n // Add ACT Model to our final return model\r\n entryModel['act'] = actModel;\r\n model.entries.push(entryModel);\r\n });\r\n \r\n return model;\r\n }; \r\n}","/* Parses out basic data about each section */\r\n\r\nmodule.exports = function (ccda, data) {\r\n\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n\r\n var containsTemplateId = function(templateId, data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property)) {\r\n var p = data[property].templateId;\r\n //var display = this[property].displayName;\r\n if(p) {\r\n if(p === templateId) {\r\n //console.log(\"TemplateId Match \" + templateId + \" \" + display);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var allSections = ccda.elsByTag('section');\r\n allSections.each = each;\r\n\r\n allSections.each(function(s) {\r\n\r\n var code = s.tag('code').attr('displayName');\r\n var templateId = s.tag('templateId').attr('root');\r\n\r\n var existingTemplateId = containsTemplateId(templateId, data);\r\n\r\n if (code) {\r\n var nodeName = code.split(' ').join('_').toLowerCase();\r\n\r\n //console.log(\"NODE NAME \" + nodeName);\r\n\r\n if (!data[nodeName] && !existingTemplateId) {\r\n //console.log(\"CREATE NODE \" + code);\r\n data[nodeName] = {};\r\n }\r\n\r\n if(data[nodeName]) {\r\n data[nodeName].displayName = code;\r\n data[nodeName].templateId = templateId;\r\n data[nodeName].text = s.tag('text').val(true);\r\n }\r\n\r\n }\r\n });\r\n};","module.exports = require(\"lodash\");;","module.exports = require(\"xmldom\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(97);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://bluebutton/webpack/universalModuleDefinition","webpack://bluebutton/./lib/bluebutton.js","webpack://bluebutton/./lib/core.js","webpack://bluebutton/./lib/core/codes.js","webpack://bluebutton/./lib/core/common.js","webpack://bluebutton/./lib/core/xml.js","webpack://bluebutton/./lib/documents.js","webpack://bluebutton/./lib/documents/c32.js","webpack://bluebutton/./lib/documents/ccd.js","webpack://bluebutton/./lib/documents/ccda.js","webpack://bluebutton/./lib/documents/ccdar2.js","webpack://bluebutton/./lib/generators.js","webpack://bluebutton/./lib/generators/c32.js","webpack://bluebutton/./lib/generators/ccda.js","webpack://bluebutton/./lib/parsers.js","webpack://bluebutton/./lib/parsers/c32.js","webpack://bluebutton/./lib/parsers/c32/allergies.js","webpack://bluebutton/./lib/parsers/c32/demographics.js","webpack://bluebutton/./lib/parsers/c32/document.js","webpack://bluebutton/./lib/parsers/c32/encounters.js","webpack://bluebutton/./lib/parsers/c32/immunizations.js","webpack://bluebutton/./lib/parsers/c32/medications.js","webpack://bluebutton/./lib/parsers/c32/problems.js","webpack://bluebutton/./lib/parsers/c32/procedures.js","webpack://bluebutton/./lib/parsers/c32/results.js","webpack://bluebutton/./lib/parsers/c32/vitals.js","webpack://bluebutton/./lib/parsers/ccd.js","webpack://bluebutton/./lib/parsers/ccd/document.js","webpack://bluebutton/./lib/parsers/ccda.js","webpack://bluebutton/./lib/parsers/ccda/allergies.js","webpack://bluebutton/./lib/parsers/ccda/care_plan.js","webpack://bluebutton/./lib/parsers/ccda/demographics.js","webpack://bluebutton/./lib/parsers/ccda/document.js","webpack://bluebutton/./lib/parsers/ccda/encounters.js","webpack://bluebutton/./lib/parsers/ccda/free_text.js","webpack://bluebutton/./lib/parsers/ccda/functional_statuses.js","webpack://bluebutton/./lib/parsers/ccda/immunizations.js","webpack://bluebutton/./lib/parsers/ccda/instructions.js","webpack://bluebutton/./lib/parsers/ccda/medications.js","webpack://bluebutton/./lib/parsers/ccda/problems.js","webpack://bluebutton/./lib/parsers/ccda/procedures.js","webpack://bluebutton/./lib/parsers/ccda/results.js","webpack://bluebutton/./lib/parsers/ccda/smoking_status.js","webpack://bluebutton/./lib/parsers/ccda/vitals.js","webpack://bluebutton/./lib/parsers/ccdar2.js","webpack://bluebutton/./lib/parsers/ccdar2/document.js","webpack://bluebutton/./lib/parsers/ccdar2/health_concerns.js","webpack://bluebutton/./lib/parsers/generic.js","webpack://bluebutton/external \"lodash\"","webpack://bluebutton/external \"xmldom\"","webpack://bluebutton/webpack/bootstrap","webpack://bluebutton/webpack/runtime/global","webpack://bluebutton/webpack/startup"],"names":["Core","require","Documents","Generators","Parsers","module","exports","source","opts","type","parsedData","parsedDocument","parseData","parser","documents","detect","parsers","C32","process","run","CCDA","CCDAR2","CCD","generatorType","template","testingMode","data","Codes","XML","stripWhitespace","json","trim","charAt","parse","e","console","log","JSON","error","datePad","number","replacerFn","key","value","originalValue","Date","isNaN","getTime","_parsedWithTimeData","getHours","getMinutes","getSeconds","getMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getMonth","getDate","getFullYear","stringify","o","y","x","hasOwnProperty","Object","GENDER_MAP","MARITAL_STATUS_MAP","RELIGION_MAP","RACE_ETHNICITY_MAP","ROLE_MAP","PROBLEM_STATUS_MAP","invertKeys","obj","result","keys","i","length","lookupFnGenerator","map","reverseLookupFnGenerator","invertedMap","toLowerCase","gender","reverseGender","maritalStatus","reverseMaritalStatus","religion","reverseReligion","raceEthnicity","reverseRaceEthnicity","role","reverseRole","problemStatus","reverseProblemStatus","str","replace","wrapElement","el","wrapElementHelper","currentEl","content","tag","immediateChildTag","elsByTag","attr","boolAttr","val","isEmpty","els","push","tagAttrVal","getElementsByTagName","getAttribute","templateId","emptyEl","parentNode","contentId","unescapeSpecialChars","s","attrName","attrVal","rawAttr","html","childNodes","textContent","innerHTML","root","XMLSerializer","serializeToString","tagName","slice","docRoot","ownerDocument","contentTag","doc","createElement","xml","isNode","xmldom","DOMParser","parseFromString","window","ActiveXObject","async","loadXML","documentElement","global","document","prototype","toString","call","DOMImplementation","createDocument","self","entries","parseDate","parseName","parseAddress","getEntries","each","callback","year","substr","month","parseInt","day","hour","min","secs","utcOffset","_utcOffsetFromString","_toInt","date","UTC","parseTimezoneChunker","parseTokenTimezone","string","possibleTzMatches","match","tzChunk","parts","minutes","argumentForCoercion","coercedNumber","isFinite","Math","floor","ceil","nameEl","prefix","given","family","addrEl","street","city","state","zip","country","section","c32","name","ccda","method","_","now","filename","bb","tagHelpers","ejs","helpers","codes","AllergiesParser","DemographicsParser","DocumentParser","EncountersParser","ImmunizationsParser","MedicationsParser","ProblemsParser","ProceduresParser","ResultsParser","VitalsParser","ParseGenericInfo","allergiesParser","demographicsParser","encountersParser","immunizationsParser","medicationsParser","problemsParser","proceduresParser","resultsParser","vitalsParser","allergies","demographics","encounters","parsedImmunizations","immunizations","administered","immunization_declines","declined","results","medications","problems","procedures","vitals","smoking_status","code","code_system","code_system_name","chief_complaint","text","care_plan","instructions","functional_statuses","displayName","entry","start_date","end_date","reaction_type_name","reaction_type_code","reaction_type_code_system","reaction_type_code_system_name","reaction_name","reaction_code","reaction_code_system","severity","allergen_name","allergen_code","allergen_code_system","allergen_code_system_name","status","date_range","start","end","reaction","reaction_type","allergen","patient","patient_name_dict","dob","marital_status","patient_address_dict","home","work","mobile","email","language","race","ethnicity","birthplace_dict","guardian_relationship","guardian_relationship_code","guardian_home","guardian_name_dict","guardian_address_dict","provider_organization","provider_phone","provider_address_dict","address","phone","birthplace","guardian","relationship","relationship_code","provider","organization","templates","rootTemplate","secondTemplate","loinc","nonXml","nonXmlNodes","bodyType","nonXmlBody","mediaType","representation","rawText","reference","docType","rootTemplateId","title","author","name_dict","address_dict","work_phone","documentation_of_list","performers","performer_name_dict","performer_phone","performer_addr","location_name","location_addr_dict","encounter_date","documentation_of","location","code_system_version","translation_name","translation_code","translation_code_system","translation_code_system_name","performer_name","performer_code","performer_code_system","performer_code_system_name","location_dict","findings","findingEls","translation","performer","administeredData","declinedData","product","product_name","product_code","product_code_system","product_code_system_name","lot_number","manufacturer_name","route_name","route_code","route_code_system","route_code_system_name","instructions_text","education_name","education_code","education_code_system","dose_value","dose_unit","dose_quantity","unit","route","education_type","effectiveTimes","schedule_type","schedule_period_value","schedule_period_unit","institutionSpecified","product_original_text","rate_quantity_value","rate_quantity_unit","precondition_name","precondition_code","precondition_code_system","reason_name","reason_code","reason_code_system","vehicle_name","vehicle_code","vehicle_code_system","vehicle_code_system_name","administration_name","administration_code","administration_code_system","administration_code_system_name","prescriber_organization","prescriber_person","rate_quantity","precondition","reason","schedule","period_value","period_unit","vehicle","administration","prescriber","person","age","parseFloat","comment","specimen_name","specimen_code","specimen_code_system","performer_dict","device_name","device_code","device_code_system","specimen","device","panel_date","panel_name","panel_code","panel_code_system","panel_code_system_name","observation","tests","tests_data","reference_range_text","reference_range_low_unit","reference_range_low_value","reference_range_high_unit","reference_range_high_value","reference_range","low_unit","low_value","high_unit","high_value","entry_date","results_data","j","HealthConcernsParser","documentParser","healthConcernsParser","health_concerns_document","CarePlanParser","FreeTextParser","FunctionalStatusesParser","InstructionsParser","SmokingStatusParser","carePlanParser","freeTextParser","functionalStatusesParser","instructionsParser","smokingStatusParser","free_text","time","effective_time","m","d","D","sectionName","statuses","sig","social_history","model","health_concerns","entryModel","act","er","id","statusCode","effectiveTime","actModel","entry_relationship","ers","erModel","type_code","observations","obs","ob","class_code","mood_code","display_name","containsTemplateId","property","p","allSections","existingTemplateId","nodeName","split","join"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;;AClJA;AACA;AACA;AAEAf,MAAM,CAACC,OAAP,GAAiB;AACfa,KAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC;AAA2B;AAC3BU,SAAO,CAACC,GAAR,CAAY,uCAAZ;AACA,SAAO,IAAP;AACD;;AAAA,C;;;;;;;ACfD;AACA;AACA;AACA,IAAI0K,CAAC,GAAG7M,mBAAO,CAAC,GAAD,CAAf;;AAEAI,MAAM,CAACC,OAAP,GAAiB;AACfa,KAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC,MAAI,CAACD,QAAL,EAAe;AACbW,WAAO,CAACC,GAAR,CAAY,kEACA,4DADZ;AAEA,WAAO,IAAP;AACD,GALuC,CAOxC;AACA;;;AACA,MAAI2K,GAAG,GAAItL,WAA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","file":"bluebutton.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bluebutton\"] = factory();\n\telse\n\t\troot[\"bluebutton\"] = factory();\n})(self, function() {\nreturn ","'use strict';\r\n/*\r\n * ...\r\n */\r\n\r\nvar Core = require('./core');\r\n\r\nvar Documents = require('./documents');\r\n\r\nvar Generators = require('./generators');\r\n\r\nvar Parsers = require('./parsers');\r\n\r\n\r\n/* exported BlueButton */\r\nmodule.exports = function (source, opts) {\r\n var type, parsedData, parsedDocument;\r\n \r\n // Look for options\r\n if (!opts) opts = {};\r\n \r\n // Detect and parse the source data\r\n parsedData = Core.parseData(source);\r\n \r\n // Detect and parse the document\r\n if (opts.parser) {\r\n \r\n // TODO: parse the document with provided custom parser\r\n parsedDocument = opts.parser();\r\n \r\n } else {\r\n var documents = new Documents();\r\n type = documents.detect(parsedData);\r\n var parsers = new Parsers(documents);\r\n switch (type) {\r\n case 'c32':\r\n parsedData = documents.C32.process(parsedData);\r\n parsedDocument = parsers.C32.run(parsedData);\r\n break;\r\n case 'ccda':\r\n parsedData = documents.CCDA.process(parsedData);\r\n parsedDocument = parsers.CCDA.run(parsedData);\r\n break;\r\n case 'ccdar2':\r\n parsedData = documents.CCDAR2.process(parsedData);\r\n parsedDocument = parsers.CCDAR2.run(parsedData);\r\n break;\r\n case 'ccd':\r\n parsedData = documents.CCD.process(parsedData);\r\n parsedDocument = parsers.CCD.run(parsedData);\r\n break;\r\n case 'json':\r\n /* Expects a call like:\r\n * BlueButton(json string, {\r\n * generatorType: 'ccda',\r\n * template: < EJS file contents >\r\n * })\r\n * The returned \"type\" will be the requested type (not \"json\")\r\n * and the XML will be turned as a string in the 'data' key\r\n */\r\n switch (opts.generatorType) {\r\n // only the unit tests ever need to worry about this testingMode argument\r\n case 'c32':\r\n type = 'c32';\r\n parsedDocument = Generators.C32.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n case 'ccda':\r\n type = 'ccda';\r\n parsedDocument = Generators.CCDA.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n return {\r\n type: type,\r\n data: parsedDocument,\r\n source: parsedData\r\n };\r\n\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nvar Codes = require('./core/codes');\r\nvar XML = require('./core/xml');\r\nvar { stripWhitespace } = require('./core/common');\r\n\r\n/* exported Core */\r\nmodule.exports = {\r\n parseData: parseData,\r\n stripWhitespace: stripWhitespace,\r\n json: json,\r\n trim: trim,\r\n Codes: Codes,\r\n XML: XML\r\n};\r\n/*\r\n * ...\r\n */\r\nfunction parseData(source) {\r\n source = stripWhitespace(source);\r\n \r\n if (source.charAt(0) === '<') {\r\n try {\r\n return XML.parse(source);\r\n } catch (e) {\r\n if (console.log) {\r\n console.log(\"File looked like it might be XML but couldn't be parsed.\");\r\n }\r\n }\r\n }\r\n\r\n try {\r\n return JSON.parse(source);\r\n } catch (e) {\r\n if (console.error) {\r\n console.error(\"Error: Cannot parse this file. BB.js only accepts valid XML \" +\r\n \"(for parsing) or JSON (for generation). If you are attempting to provide \" +\r\n \"XML or JSON, please run your data through a validator to see if it is malformed.\\n\");\r\n }\r\n throw e;\r\n }\r\n};\r\n\r\n/*\r\n * A wrapper around JSON.stringify which allows us to produce customized JSON.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/\r\n * JavaScript/Guide/Using_native_JSON#The_replacer_parameter\r\n * for documentation on the replacerFn.\r\n */\r\nfunction json() {\r\n\r\n var datePad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return number;\r\n };\r\n \r\n var replacerFn = function(key, value) {\r\n /* By default, Dates are output as ISO Strings like \"2014-01-03T08:00:00.000Z.\" This is\r\n * tricky when all we have is a date (not a datetime); JS sadly ignores that distinction.\r\n *\r\n * To paper over this JS wart, we use two different JSON formats for dates and datetimes.\r\n * This is a little ugly but makes sure that the dates/datetimes mostly just parse\r\n * correclty for clients:\r\n *\r\n * 1. Datetimes are rendered as standard ISO strings, without the misleading millisecond\r\n * precision (misleading because we don't have it): YYYY-MM-DDTHH:mm:ssZ\r\n * 2. Dates are rendered as MM/DD/YYYY. This ensures they are parsed as midnight local-time,\r\n * no matter what local time is, and therefore ensures the date is always correct.\r\n * Outputting \"YYYY-MM-DD\" would lead most browsers/node to assume midnight UTC, which\r\n * means \"2014-04-27\" suddenly turns into \"04/26/2014 at 5PM\" or just \"04/26/2014\"\r\n * if you format it as a date...\r\n *\r\n * See http://stackoverflow.com/questions/2587345/javascript-date-parse and\r\n * http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html\r\n * for more on this issue.\r\n */\r\n var originalValue = this[key]; // a Date\r\n\r\n if ( value && (originalValue instanceof Date) && !isNaN(originalValue.getTime()) ) {\r\n\r\n // If while parsing we indicated that there was time-data specified, or if we see\r\n // non-zero values in the hour/minutes/seconds/millis fields, output a datetime.\r\n if (originalValue._parsedWithTimeData ||\r\n originalValue.getHours() || originalValue.getMinutes() ||\r\n originalValue.getSeconds() || originalValue.getMilliseconds()) {\r\n\r\n // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/\r\n // Reference/Global_Objects/Date/toISOString\r\n return originalValue.getUTCFullYear() +\r\n '-' + datePad( originalValue.getUTCMonth() + 1 ) +\r\n '-' + datePad( originalValue.getUTCDate() ) +\r\n 'T' + datePad( originalValue.getUTCHours() ) +\r\n ':' + datePad( originalValue.getUTCMinutes() ) +\r\n ':' + datePad( originalValue.getUTCSeconds() ) +\r\n 'Z';\r\n }\r\n \r\n // We just have a pure date\r\n return datePad( originalValue.getMonth() + 1 ) +\r\n '/' + datePad( originalValue.getDate() ) +\r\n '/' + originalValue.getFullYear();\r\n\r\n }\r\n\r\n return value;\r\n };\r\n \r\n return JSON.stringify(this, replacerFn, 2);\r\n};\r\n\r\n\r\n/*\r\n * Removes all `null` properties from an object.\r\n */\r\nfunction trim(o) {\r\n var y;\r\n for (var x in o) {\r\n if (o.hasOwnProperty(x)) {\r\n y = o[x];\r\n // if (y === null || (y instanceof Object && Object.keys(y).length == 0)) {\r\n if (y === null) {\r\n delete o[x];\r\n }\r\n if (y instanceof Object) y = trim(y);\r\n }\r\n }\r\n return o;\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\n\r\n \r\n/*\r\n * Administrative Gender (HL7 V3)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=8DE75E17-176B-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.1.11.1\r\n */\r\nvar GENDER_MAP = {\r\n 'F': 'female',\r\n 'M': 'male',\r\n 'UN': 'undifferentiated'\r\n};\r\n\r\n/*\r\n * Marital Status (HL7)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=46D34BBC-617F-DD11-B38D-00188B398520\r\n * OID: 2.16.840.1.114222.4.11.809\r\n */\r\nvar MARITAL_STATUS_MAP = {\r\n 'N': 'annulled',\r\n 'C': 'common law',\r\n 'D': 'divorced',\r\n 'P': 'domestic partner',\r\n 'I': 'interlocutory',\r\n 'E': 'legally separated',\r\n 'G': 'living together',\r\n 'M': 'married',\r\n 'O': 'other',\r\n 'R': 'registered domestic partner',\r\n 'A': 'separated',\r\n 'S': 'single',\r\n 'U': 'unknown',\r\n 'B': 'unmarried',\r\n 'T': 'unreported',\r\n 'W': 'widowed'\r\n};\r\n\r\n/*\r\n * Religious Affiliation (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=6BFDBFB5-A277-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.5.1076\r\n */\r\nvar RELIGION_MAP = {\r\n \"1001\": \"adventist\",\r\n \"1002\": \"african religions\",\r\n \"1003\": \"afro-caribbean religions\",\r\n \"1004\": \"agnosticism\",\r\n \"1005\": \"anglican\",\r\n \"1006\": \"animism\",\r\n \"1061\": \"assembly of god\",\r\n \"1007\": \"atheism\",\r\n \"1008\": \"babi & baha'i faiths\",\r\n \"1009\": \"baptist\",\r\n \"1010\": \"bon\",\r\n \"1062\": \"brethren\",\r\n \"1011\": \"cao dai\",\r\n \"1012\": \"celticism\",\r\n \"1013\": \"christian (non-catholic, non-specific)\",\r\n \"1063\": \"christian scientist\",\r\n \"1064\": \"church of christ\",\r\n \"1065\": \"church of god\",\r\n \"1014\": \"confucianism\",\r\n \"1066\": \"congregational\",\r\n \"1015\": \"cyberculture religions\",\r\n \"1067\": \"disciples of christ\",\r\n \"1016\": \"divination\",\r\n \"1068\": \"eastern orthodox\",\r\n \"1069\": \"episcopalian\",\r\n \"1070\": \"evangelical covenant\",\r\n \"1017\": \"fourth way\",\r\n \"1018\": \"free daism\",\r\n \"1071\": \"friends\",\r\n \"1072\": \"full gospel\",\r\n \"1019\": \"gnosis\",\r\n \"1020\": \"hinduism\",\r\n \"1021\": \"humanism\",\r\n \"1022\": \"independent\",\r\n \"1023\": \"islam\",\r\n \"1024\": \"jainism\",\r\n \"1025\": \"jehovah's witnesses\",\r\n \"1026\": \"judaism\",\r\n \"1027\": \"latter day saints\",\r\n \"1028\": \"lutheran\",\r\n \"1029\": \"mahayana\",\r\n \"1030\": \"meditation\",\r\n \"1031\": \"messianic judaism\",\r\n \"1073\": \"methodist\",\r\n \"1032\": \"mitraism\",\r\n \"1074\": \"native american\",\r\n \"1075\": \"nazarene\",\r\n \"1033\": \"new age\",\r\n \"1034\": \"non-roman catholic\",\r\n \"1035\": \"occult\",\r\n \"1036\": \"orthodox\",\r\n \"1037\": \"paganism\",\r\n \"1038\": \"pentecostal\",\r\n \"1076\": \"presbyterian\",\r\n \"1039\": \"process, the\",\r\n \"1077\": \"protestant\",\r\n \"1078\": \"protestant, no denomination\",\r\n \"1079\": \"reformed\",\r\n \"1040\": \"reformed/presbyterian\",\r\n \"1041\": \"roman catholic church\",\r\n \"1080\": \"salvation army\",\r\n \"1042\": \"satanism\",\r\n \"1043\": \"scientology\",\r\n \"1044\": \"shamanism\",\r\n \"1045\": \"shiite (islam)\",\r\n \"1046\": \"shinto\",\r\n \"1047\": \"sikism\",\r\n \"1048\": \"spiritualism\",\r\n \"1049\": \"sunni (islam)\",\r\n \"1050\": \"taoism\",\r\n \"1051\": \"theravada\",\r\n \"1081\": \"unitarian universalist\",\r\n \"1052\": \"unitarian-universalism\",\r\n \"1082\": \"united church of christ\",\r\n \"1053\": \"universal life church\",\r\n \"1054\": \"vajrayana (tibetan)\",\r\n \"1055\": \"veda\",\r\n \"1056\": \"voodoo\",\r\n \"1057\": \"wicca\",\r\n \"1058\": \"yaohushua\",\r\n \"1059\": \"zen buddhism\",\r\n \"1060\": \"zoroastrianism\"\r\n};\r\n\r\n/*\r\n * Race & Ethnicity (HL7 V3)\r\n * Full list at http://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.6.238\r\n * OID: 2.16.840.1.113883.6.238\r\n *\r\n * Abbreviated list closer to real usage at: (Race / Ethnicity)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=67D34BBC-617F-DD11-B38D-00188B398520\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=35D34BBC-617F-DD11-B38D-00188B398520\r\n */\r\nvar RACE_ETHNICITY_MAP = {\r\n '2028-9': 'asian',\r\n '2054-5': 'black or african american',\r\n '2135-2': 'hispanic or latino',\r\n '2076-8': 'native',\r\n '2186-5': 'not hispanic or latino',\r\n '2131-1': 'other',\r\n '2106-3': 'white'\r\n};\r\n\r\n/*\r\n * Role (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.5.111\r\n * OID: 2.16.840.1.113883.5.111\r\n */\r\nvar ROLE_MAP = {\r\n \"ACC\": \"accident site\",\r\n \"ACHFID\": \"accreditation location identifier\",\r\n \"ACTMIL\": \"active duty military\",\r\n \"ALL\": \"allergy clinic\",\r\n \"AMB\": \"ambulance\",\r\n \"AMPUT\": \"amputee clinic\",\r\n \"ANTIBIOT\": \"antibiotic\",\r\n \"ASSIST\": \"assistive non-person living subject\",\r\n \"AUNT\": \"aunt\",\r\n \"B\": \"blind\",\r\n \"BF\": \"beef\",\r\n \"BILL\": \"billing contact\",\r\n \"BIOTH\": \"biotherapeutic non-person living subject\",\r\n \"BL\": \"broiler\",\r\n \"BMTC\": \"bone marrow transplant clinic\",\r\n \"BMTU\": \"bone marrow transplant unit\",\r\n \"BR\": \"breeder\",\r\n \"BREAST\": \"breast clinic\",\r\n \"BRO\": \"brother\",\r\n \"BROINLAW\": \"brother-in-law\",\r\n \"C\": \"calibrator\",\r\n \"CANC\": \"child and adolescent neurology clinic\",\r\n \"CAPC\": \"child and adolescent psychiatry clinic\",\r\n \"CARD\": \"ambulatory health care facilities; clinic/center; rehabilitation: cardiac facilities\",\r\n \"CAS\": \"asylum seeker\",\r\n \"CASM\": \"single minor asylum seeker\",\r\n \"CATH\": \"cardiac catheterization lab\",\r\n \"CCO\": \"clinical companion\",\r\n \"CCU\": \"coronary care unit\",\r\n \"CHEST\": \"chest unit\",\r\n \"CHILD\": \"child\",\r\n \"CHLDADOPT\": \"adopted child\",\r\n \"CHLDFOST\": \"foster child\",\r\n \"CHLDINLAW\": \"child in-law\",\r\n \"CHR\": \"chronic care facility\",\r\n \"CLAIM\": \"claimant\",\r\n \"CN\": \"national\",\r\n \"CNRP\": \"non-country member without residence permit\",\r\n \"CNRPM\": \"non-country member minor without residence permit\",\r\n \"CO\": \"companion\",\r\n \"COAG\": \"coagulation clinic\",\r\n \"COCBEN\": \"continuity of coverage beneficiary\",\r\n \"COMM\": \"community location\",\r\n \"COMMUNITYLABORATORY\": \"community laboratory\",\r\n \"COUSN\": \"cousin\",\r\n \"CPCA\": \"permit card applicant\",\r\n \"CRIMEVIC\": \"crime victim\",\r\n \"CRP\": \"non-country member with residence permit\",\r\n \"CRPM\": \"non-country member minor with residence permit\",\r\n \"CRS\": \"colon and rectal surgery clinic\",\r\n \"CSC\": \"community service center\",\r\n \"CVDX\": \"cardiovascular diagnostics or therapeutics unit\",\r\n \"DA\": \"dairy\",\r\n \"DADDR\": \"delivery address\",\r\n \"DAU\": \"natural daughter\",\r\n \"DAUADOPT\": \"adopted daughter\",\r\n \"DAUC\": \"daughter\",\r\n \"DAUFOST\": \"foster daughter\",\r\n \"DAUINLAW\": \"daughter in-law\",\r\n \"DC\": \"therapeutic class\",\r\n \"DEBR\": \"debridement\",\r\n \"DERM\": \"dermatology clinic\",\r\n \"DIFFABL\": \"differently abled\",\r\n \"DOMPART\": \"domestic partner\",\r\n \"DPOWATT\": \"durable power of attorney\",\r\n \"DR\": \"draft\",\r\n \"DU\": \"dual\",\r\n \"DX\": \"diagnostics or therapeutics unit\",\r\n \"E\": \"electronic qc\",\r\n \"ECHO\": \"echocardiography lab\",\r\n \"ECON\": \"emergency contact\",\r\n \"ENDO\": \"endocrinology clinic\",\r\n \"ENDOS\": \"endoscopy lab\",\r\n \"ENROLBKR\": \"enrollment broker\",\r\n \"ENT\": \"otorhinolaryngology clinic\",\r\n \"EPIL\": \"epilepsy unit\",\r\n \"ER\": \"emergency room\",\r\n \"ERL\": \"enrollment\",\r\n \"ETU\": \"emergency trauma unit\",\r\n \"EXCEST\": \"executor of estate\",\r\n \"EXT\": \"extended family member\",\r\n \"F\": \"filler proficiency\",\r\n \"FAMDEP\": \"family dependent\",\r\n \"FAMMEMB\": \"family member\",\r\n \"FI\": \"fiber\",\r\n \"FMC\": \"family medicine clinic\",\r\n \"FRND\": \"unrelated friend\",\r\n \"FSTUD\": \"full-time student\",\r\n \"FTH\": \"father\",\r\n \"FTHINLAW\": \"father-in-law\",\r\n \"FULLINS\": \"fully insured coverage sponsor\",\r\n \"G\": \"group\",\r\n \"GACH\": \"hospitals; general acute care hospital\",\r\n \"GD\": \"generic drug\",\r\n \"GDF\": \"generic drug form\",\r\n \"GDS\": \"generic drug strength\",\r\n \"GDSF\": \"generic drug strength form\",\r\n \"GGRFTH\": \"great grandfather\",\r\n \"GGRMTH\": \"great grandmother\",\r\n \"GGRPRN\": \"great grandparent\",\r\n \"GI\": \"gastroenterology clinic\",\r\n \"GIDX\": \"gastroenterology diagnostics or therapeutics lab\",\r\n \"GIM\": \"general internal medicine clinic\",\r\n \"GRFTH\": \"grandfather\",\r\n \"GRMTH\": \"grandmother\",\r\n \"GRNDCHILD\": \"grandchild\",\r\n \"GRNDDAU\": \"granddaughter\",\r\n \"GRNDSON\": \"grandson\",\r\n \"GRPRN\": \"grandparent\",\r\n \"GT\": \"guarantor\",\r\n \"GUADLTM\": \"guardian ad lidem\",\r\n \"GUARD\": \"guardian\",\r\n \"GYN\": \"gynecology clinic\",\r\n \"HAND\": \"hand clinic\",\r\n \"HANDIC\": \"handicapped dependent\",\r\n \"HBRO\": \"half-brother\",\r\n \"HD\": \"hemodialysis unit\",\r\n \"HEM\": \"hematology clinic\",\r\n \"HLAB\": \"hospital laboratory\",\r\n \"HOMEHEALTH\": \"home health\",\r\n \"HOSP\": \"hospital\",\r\n \"HPOWATT\": \"healthcare power of attorney\",\r\n \"HRAD\": \"radiology unit\",\r\n \"HSIB\": \"half-sibling\",\r\n \"HSIS\": \"half-sister\",\r\n \"HTN\": \"hypertension clinic\",\r\n \"HU\": \"hospital unit\",\r\n \"HUSB\": \"husband\",\r\n \"HUSCS\": \"specimen collection site\",\r\n \"ICU\": \"intensive care unit\",\r\n \"IEC\": \"impairment evaluation center\",\r\n \"INDIG\": \"member of an indigenous people\",\r\n \"INFD\": \"infectious disease clinic\",\r\n \"INJ\": \"injured plaintiff\",\r\n \"INJWKR\": \"injured worker\",\r\n \"INLAB\": \"inpatient laboratory\",\r\n \"INPHARM\": \"inpatient pharmacy\",\r\n \"INV\": \"infertility clinic\",\r\n \"JURID\": \"jurisdiction location identifier\",\r\n \"L\": \"pool\",\r\n \"LABORATORY\": \"laboratory\",\r\n \"LOCHFID\": \"local location identifier\",\r\n \"LY\": \"layer\",\r\n \"LYMPH\": \"lympedema clinic\",\r\n \"MAUNT\": \"maternalaunt\",\r\n \"MBL\": \"medical laboratory\",\r\n \"MCOUSN\": \"maternalcousin\",\r\n \"MGDSF\": \"manufactured drug strength form\",\r\n \"MGEN\": \"medical genetics clinic\",\r\n \"MGGRFTH\": \"maternalgreatgrandfather\",\r\n \"MGGRMTH\": \"maternalgreatgrandmother\",\r\n \"MGGRPRN\": \"maternalgreatgrandparent\",\r\n \"MGRFTH\": \"maternalgrandfather\",\r\n \"MGRMTH\": \"maternalgrandmother\",\r\n \"MGRPRN\": \"maternalgrandparent\",\r\n \"MHSP\": \"military hospital\",\r\n \"MIL\": \"military\",\r\n \"MOBL\": \"mobile unit\",\r\n \"MT\": \"meat\",\r\n \"MTH\": \"mother\",\r\n \"MTHINLAW\": \"mother-in-law\",\r\n \"MU\": \"multiplier\",\r\n \"MUNCLE\": \"maternaluncle\",\r\n \"NBOR\": \"neighbor\",\r\n \"NBRO\": \"natural brother\",\r\n \"NCCF\": \"nursing or custodial care facility\",\r\n \"NCCS\": \"neurology critical care and stroke unit\",\r\n \"NCHILD\": \"natural child\",\r\n \"NEPH\": \"nephrology clinic\",\r\n \"NEPHEW\": \"nephew\",\r\n \"NEUR\": \"neurology clinic\",\r\n \"NFTH\": \"natural father\",\r\n \"NFTHF\": \"natural father of fetus\",\r\n \"NIECE\": \"niece\",\r\n \"NIENEPH\": \"niece/nephew\",\r\n \"NMTH\": \"natural mother\",\r\n \"NOK\": \"next of kin\",\r\n \"NPRN\": \"natural parent\",\r\n \"NS\": \"neurosurgery unit\",\r\n \"NSIB\": \"natural sibling\",\r\n \"NSIS\": \"natural sister\",\r\n \"O\": \"operator proficiency\",\r\n \"OB\": \"obstetrics clinic\",\r\n \"OF\": \"outpatient facility\",\r\n \"OMS\": \"oral and maxillofacial surgery clinic\",\r\n \"ONCL\": \"medical oncology clinic\",\r\n \"OPH\": \"opthalmology clinic\",\r\n \"OPTC\": \"optometry clinic\",\r\n \"ORG\": \"organizational contact\",\r\n \"ORTHO\": \"orthopedics clinic\",\r\n \"OUTLAB\": \"outpatient laboratory\",\r\n \"OUTPHARM\": \"outpatient pharmacy\",\r\n \"P\": \"patient\",\r\n \"PAINCL\": \"pain clinic\",\r\n \"PATHOLOGIST\": \"pathologist\",\r\n \"PAUNT\": \"paternalaunt\",\r\n \"PAYOR\": \"payor contact\",\r\n \"PC\": \"primary care clinic\",\r\n \"PCOUSN\": \"paternalcousin\",\r\n \"PEDC\": \"pediatrics clinic\",\r\n \"PEDCARD\": \"pediatric cardiology clinic\",\r\n \"PEDE\": \"pediatric endocrinology clinic\",\r\n \"PEDGI\": \"pediatric gastroenterology clinic\",\r\n \"PEDHEM\": \"pediatric hematology clinic\",\r\n \"PEDHO\": \"pediatric oncology clinic\",\r\n \"PEDICU\": \"pediatric intensive care unit\",\r\n \"PEDID\": \"pediatric infectious disease clinic\",\r\n \"PEDNEPH\": \"pediatric nephrology clinic\",\r\n \"PEDNICU\": \"pediatric neonatal intensive care unit\",\r\n \"PEDRHEUM\": \"pediatric rheumatology clinic\",\r\n \"PEDU\": \"pediatric unit\",\r\n \"PGGRFTH\": \"paternalgreatgrandfather\",\r\n \"PGGRMTH\": \"paternalgreatgrandmother\",\r\n \"PGGRPRN\": \"paternalgreatgrandparent\",\r\n \"PGRFTH\": \"paternalgrandfather\",\r\n \"PGRMTH\": \"paternalgrandmother\",\r\n \"PGRPRN\": \"paternalgrandparent\",\r\n \"PH\": \"policy holder\",\r\n \"PHARM\": \"pharmacy\",\r\n \"PHLEBOTOMIST\": \"phlebotomist\",\r\n \"PHU\": \"psychiatric hospital unit\",\r\n \"PL\": \"pleasure\",\r\n \"PLS\": \"plastic surgery clinic\",\r\n \"POD\": \"podiatry clinic\",\r\n \"POWATT\": \"power of attorney\",\r\n \"PRC\": \"pain rehabilitation center\",\r\n \"PREV\": \"preventive medicine clinic\",\r\n \"PRN\": \"parent\",\r\n \"PRNINLAW\": \"parent in-law\",\r\n \"PROCTO\": \"proctology clinic\",\r\n \"PROFF\": \"provider's office\",\r\n \"PROG\": \"program eligible\",\r\n \"PROS\": \"prosthodontics clinic\",\r\n \"PSI\": \"psychology clinic\",\r\n \"PSTUD\": \"part-time student\",\r\n \"PSY\": \"psychiatry clinic\",\r\n \"PSYCHF\": \"psychiatric care facility\",\r\n \"PT\": \"patient\",\r\n \"PTRES\": \"patient's residence\",\r\n \"PUNCLE\": \"paternaluncle\",\r\n \"Q\": \"quality control\",\r\n \"R\": \"replicate\",\r\n \"RADDX\": \"radiology diagnostics or therapeutics unit\",\r\n \"RADO\": \"radiation oncology unit\",\r\n \"RC\": \"racing\",\r\n \"RESPRSN\": \"responsible party\",\r\n \"RETIREE\": \"retiree\",\r\n \"RETMIL\": \"retired military\",\r\n \"RH\": \"rehabilitation hospital\",\r\n \"RHAT\": \"addiction treatment center\",\r\n \"RHEUM\": \"rheumatology clinic\",\r\n \"RHII\": \"intellectual impairment center\",\r\n \"RHMAD\": \"parents with adjustment difficulties center\",\r\n \"RHPI\": \"physical impairment center\",\r\n \"RHPIH\": \"physical impairment - hearing center\",\r\n \"RHPIMS\": \"physical impairment - motor skills center\",\r\n \"RHPIVS\": \"physical impairment - visual skills center\",\r\n \"RHU\": \"rehabilitation hospital unit\",\r\n \"RHYAD\": \"youths with adjustment difficulties center\",\r\n \"RNEU\": \"neuroradiology unit\",\r\n \"ROOM\": \"roommate\",\r\n \"RTF\": \"residential treatment facility\",\r\n \"SCHOOL\": \"school\",\r\n \"SCN\": \"screening\",\r\n \"SEE\": \"seeing\",\r\n \"SELF\": \"self\",\r\n \"SELFINS\": \"self insured coverage sponsor\",\r\n \"SH\": \"show\",\r\n \"SIB\": \"sibling\",\r\n \"SIBINLAW\": \"sibling in-law\",\r\n \"SIGOTHR\": \"significant other\",\r\n \"SIS\": \"sister\",\r\n \"SISINLAW\": \"sister-in-law\",\r\n \"SLEEP\": \"sleep disorders unit\",\r\n \"SNF\": \"skilled nursing facility\",\r\n \"SNIFF\": \"sniffing\",\r\n \"SON\": \"natural son\",\r\n \"SONADOPT\": \"adopted son\",\r\n \"SONC\": \"son\",\r\n \"SONFOST\": \"foster son\",\r\n \"SONINLAW\": \"son in-law\",\r\n \"SPMED\": \"sports medicine clinic\",\r\n \"SPON\": \"sponsored dependent\",\r\n \"SPOWATT\": \"special power of attorney\",\r\n \"SPS\": \"spouse\",\r\n \"STPBRO\": \"stepbrother\",\r\n \"STPCHLD\": \"step child\",\r\n \"STPDAU\": \"stepdaughter\",\r\n \"STPFTH\": \"stepfather\",\r\n \"STPMTH\": \"stepmother\",\r\n \"STPPRN\": \"step parent\",\r\n \"STPSIB\": \"step sibling\",\r\n \"STPSIS\": \"stepsister\",\r\n \"STPSON\": \"stepson\",\r\n \"STUD\": \"student\",\r\n \"SU\": \"surgery clinic\",\r\n \"SUBJECT\": \"self\",\r\n \"SURF\": \"substance use rehabilitation facility\",\r\n \"THIRDPARTY\": \"third party\",\r\n \"TPA\": \"third party administrator\",\r\n \"TR\": \"transplant clinic\",\r\n \"TRAVEL\": \"travel and geographic medicine clinic\",\r\n \"TRB\": \"tribal member\",\r\n \"UMO\": \"utilization management organization\",\r\n \"UNCLE\": \"uncle\",\r\n \"UPC\": \"underage protection center\",\r\n \"URO\": \"urology clinic\",\r\n \"V\": \"verifying\",\r\n \"VET\": \"veteran\",\r\n \"VL\": \"veal\",\r\n \"WARD\": \"ward\",\r\n \"WIFE\": \"wife\",\r\n \"WL\": \"wool\",\r\n \"WND\": \"wound clinic\",\r\n \"WO\": \"working\",\r\n \"WORK\": \"work site\",\r\n};\r\n\r\nvar PROBLEM_STATUS_MAP = {\r\n \"55561003\": \"active\",\r\n \"73425007\": \"inactive\",\r\n \"413322009\": \"resolved\"\r\n};\r\n\r\n\r\n// copied from _.invert to avoid making browser users include all of underscore\r\nvar invertKeys = function(obj) {\r\n var result = {};\r\n var keys = Object.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n result[obj[keys[i]]] = keys[i];\r\n }\r\n return result;\r\n};\r\n\r\nvar lookupFnGenerator = function(map) {\r\n return function(key) {\r\n return map[key] || null;\r\n };\r\n};\r\nvar reverseLookupFnGenerator = function(map) {\r\n return function(key) {\r\n if (!key) { return null; }\r\n var invertedMap = invertKeys(map);\r\n key = key.toLowerCase();\r\n return invertedMap[key] || null;\r\n };\r\n};\r\n\r\n\r\nmodule.exports = {\r\n gender: lookupFnGenerator(GENDER_MAP),\r\n reverseGender: reverseLookupFnGenerator(GENDER_MAP),\r\n maritalStatus: lookupFnGenerator(MARITAL_STATUS_MAP),\r\n reverseMaritalStatus: reverseLookupFnGenerator(MARITAL_STATUS_MAP),\r\n religion: lookupFnGenerator(RELIGION_MAP),\r\n reverseReligion: reverseLookupFnGenerator(RELIGION_MAP),\r\n raceEthnicity: lookupFnGenerator(RACE_ETHNICITY_MAP),\r\n reverseRaceEthnicity: reverseLookupFnGenerator(RACE_ETHNICITY_MAP),\r\n role: lookupFnGenerator(ROLE_MAP),\r\n reverseRole: reverseLookupFnGenerator(ROLE_MAP),\r\n problemStatus: lookupFnGenerator(PROBLEM_STATUS_MAP),\r\n reverseProblemStatus: reverseLookupFnGenerator(PROBLEM_STATUS_MAP)\r\n};\r\n","module.exports = {\r\n stripWhitespace: stripWhitespace\r\n}\r\n\r\nfunction stripWhitespace (str) {\r\n if (!str) { return str; }\r\n return str.replace(/^\\s+|\\s+$/g,'');\r\n};","/*\r\n * ...\r\n */\r\nvar { stripWhitespace } = require('./common');\r\n/*\r\n * A function used to wrap DOM elements in an object so methods can be added\r\n * to the element object. IE8 does not allow methods to be added directly to\r\n * DOM objects.\r\n */\r\nvar wrapElement = function (el) {\r\n function wrapElementHelper(currentEl) {\r\n return {\r\n el: currentEl,\r\n template: template,\r\n content: content,\r\n tag: tag,\r\n immediateChildTag: immediateChildTag,\r\n elsByTag: elsByTag,\r\n attr: attr,\r\n boolAttr: boolAttr,\r\n val: val,\r\n isEmpty: isEmpty\r\n };\r\n }\r\n \r\n // el is an array of elements\r\n if (el.length) {\r\n var els = [];\r\n for (var i = 0; i < el.length; i++) {\r\n els.push(wrapElementHelper(el[i]));\r\n }\r\n return els;\r\n \r\n // el is a single element\r\n } else {\r\n return wrapElementHelper(el);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Find element by tag name, then attribute value.\r\n */\r\nvar tagAttrVal = function (el, tag, attr, value) {\r\n el = el.getElementsByTagName(tag);\r\n for (var i = 0; i < el.length; i++) {\r\n if (el[i].getAttribute(attr) === value) {\r\n return el[i];\r\n }\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Search for a template ID, and return its parent element.\r\n * Example:\r\n * <templateId root=\"2.16.840.1.113883.10.20.22.2.17\"/>\r\n * Can be found using:\r\n * el = dom.template('2.16.840.1.113883.10.20.22.2.17');\r\n */\r\nvar template = function (templateId) {\r\n var el = tagAttrVal(this.el, 'templateId', 'root', templateId);\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el.parentNode);\r\n }\r\n};\r\n\r\n/*\r\n * Search for a content tag by \"ID\", and return it as an element.\r\n * These are used in the unstructured versions of each section but\r\n * referenced from the structured version sometimes.\r\n * Example:\r\n * <content ID=\"UniqueNameReferencedElsewhere\"/>\r\n * Can be found using:\r\n * el = dom.content('UniqueNameReferencedElsewhere');\r\n *\r\n * We can't use `getElementById` because `ID` (the standard attribute name\r\n * in this context) is not the same attribute as `id` in XML, so there are no matches\r\n */\r\nvar content = function (contentId) {\r\n var el = tagAttrVal(this.el, 'content', 'ID', contentId);\r\n if (!el) {\r\n // check the <td> tag too, which isn't really correct but\r\n // will inevitably be used sometimes because it looks like very\r\n // normal HTML to put the data directly in a <td>\r\n el = tagAttrVal(this.el, 'td', 'ID', contentId);\r\n }\r\n if (!el) {\r\n // Ugh, Epic uses really non-standard locations.\r\n el = tagAttrVal(this.el, 'caption', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'paragraph', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'tr', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'item', 'ID', contentId);\r\n }\r\n\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n };\r\n\r\n\r\n/*\r\n * Search for the first occurrence of an element by tag name.\r\n */\r\nvar tag = function (tag) {\r\n var el = this.el.getElementsByTagName(tag)[0];\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n};\r\n\r\n/*\r\n * Like `tag`, except it will only count a tag that is an immediate child of `this`.\r\n * This is useful for tags like \"text\" which A. may not be present for a given location\r\n * in every document and B. have a very different meaning depending on their positioning\r\n *\r\n * <parent>\r\n * <target></target>\r\n * </parent>\r\n * vs.\r\n * <parent>\r\n * <intermediate>\r\n * <target></target>\r\n * </intermediate>\r\n * </parent>\r\n * parent.immediateChildTag('target') will have a result in the first case but not in the second.\r\n */\r\nvar immediateChildTag = function (tag) {\r\n var els = this.el.getElementsByTagName(tag);\r\n if (!els) { return null; }\r\n for (var i = 0; i < els.length; i++) {\r\n if (els[i].parentNode === this.el) {\r\n return wrapElement(els[i]);\r\n }\r\n }\r\n return emptyEl();\r\n};\r\n\r\n\r\n/*\r\n * Search for all elements by tag name.\r\n */\r\nvar elsByTag = function (tag) {\r\n return wrapElement(this.el.getElementsByTagName(tag));\r\n};\r\n\r\n\r\nvar unescapeSpecialChars = function(s) {\r\n if (!s) { return s; }\r\n return s.replace(/&lt;/g, '<')\r\n .replace(/&gt;/g, '>')\r\n .replace(/&amp;/g, '&')\r\n .replace(/&quot;/g, '\"')\r\n .replace(/&apos;/g, \"'\");\r\n};\r\n\r\n\r\n/*\r\n * Retrieve the element's attribute value. Example:\r\n * value = el.attr('displayName');\r\n *\r\n * The browser and jsdom return \"null\" for empty attributes;\r\n * xmldom (which we now use because it's faster / can be explicitly\r\n * told to parse malformed XML as XML anyways), return the empty\r\n * string instead, so we fix that here.\r\n */\r\nvar attr = function (attrName) {\r\n if (!this.el) { return null; }\r\n var attrVal = this.el.getAttribute(attrName);\r\n if (attrVal) {\r\n return unescapeSpecialChars(attrVal);\r\n }\r\n return null;\r\n};\r\n\r\n/*\r\n * Wrapper for attr() for retrieving boolean attributes;\r\n * a raw call attr() will return Strings, which can be unexpected,\r\n * since the string 'false' will by truthy\r\n */\r\nvar boolAttr = function (attrName) {\r\n var rawAttr = this.attr(attrName);\r\n if (rawAttr === 'true' || rawAttr === '1') {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n/*\r\n * Retrieve the element's value. For example, if the element is:\r\n * <city>Madison</city>\r\n * Use:\r\n * value = el.tag('city').val();\r\n *\r\n * This function also knows how to retrieve the value of <reference> tags,\r\n * which can store their content in a <content> tag in a totally different\r\n * part of the document.\r\n */\r\nvar val = function (html) {\r\n if (!this.el) { return null; }\r\n if (!this.el.childNodes || !this.el.childNodes.length) { return null; }\r\n \r\n var textContent;\r\n if (html) {\r\n textContent = this.el.innerHTML;\r\n if (!textContent && root.XMLSerializer)\r\n textContent = new XMLSerializer().serializeToString(this.el);\r\n } else {\r\n textContent = this.el.textContent;\r\n }\r\n\r\n // if there's no text value here and the only thing inside is a\r\n // <reference> tag, see if there's a linked <content> tag we can\r\n // get something out of\r\n if (!stripWhitespace(textContent)) {\r\n\r\n var contentId;\r\n // \"no text value\" might mean there's just a reference tag\r\n if (this.el.childNodes.length === 1 &&\r\n this.el.childNodes[0].tagName === 'reference') {\r\n contentId = this.el.childNodes[0].getAttribute('value');\r\n\r\n // or maybe a newlines on top/above the reference tag\r\n } else if (this.el.childNodes.length === 3 &&\r\n this.el.childNodes[1].tagName === 'reference') {\r\n contentId = this.el.childNodes[1].getAttribute('value');\r\n\r\n } else {\r\n return unescapeSpecialChars(textContent);\r\n }\r\n\r\n if (contentId && contentId[0] === '#') {\r\n contentId = contentId.slice(1); // get rid of the '#'\r\n var docRoot = wrapElement(this.el.ownerDocument);\r\n var contentTag = docRoot.content(contentId);\r\n return contentTag.val();\r\n }\r\n }\r\n\r\n return unescapeSpecialChars(textContent);\r\n};\r\n\r\n\r\n/*\r\n * Creates and returns an empty DOM element with tag name \"empty\":\r\n * <empty></empty>\r\n */\r\nvar emptyEl = function () {\r\n var el = doc.createElement('empty');\r\n return wrapElement(el);\r\n};\r\n\r\n\r\n/*\r\n * Determines if the element is empty, i.e.:\r\n * <empty></empty>\r\n * This element is created by function `emptyEL`.\r\n */\r\nvar isEmpty = function () {\r\n if (this.el.tagName.toLowerCase() === 'empty') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Cross-browser XML parsing supporting IE8+ and Node.js.\r\n */\r\nfunction parse(data) {\r\n // XML data must be a string\r\n if (!data || typeof data !== \"string\") {\r\n console.log(\"BB Error: XML data is not a string\");\r\n return null;\r\n }\r\n \r\n var xml, parser;\r\n \r\n // Node\r\n if (isNode) {\r\n parser = new (xmldom.DOMParser)();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // Browser\r\n } else {\r\n \r\n // Standard parser\r\n if (window.DOMParser) {\r\n parser = new DOMParser();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // IE\r\n } else {\r\n try {\r\n xml = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xml.async = \"false\";\r\n xml.loadXML(data);\r\n } catch (e) {\r\n console.log(\"BB ActiveX Exception: Could not parse XML\");\r\n }\r\n }\r\n }\r\n \r\n if (!xml || !xml.documentElement || xml.getElementsByTagName(\"parsererror\").length) {\r\n console.log(\"BB Error: Could not parse XML\");\r\n return null;\r\n }\r\n \r\n return wrapElement(xml);\r\n};\r\n\r\n\r\n// Establish the root object, `window` in the browser, or `global` in Node.\r\nvar root = window || global,\r\n xmldom,\r\n isNode = false,\r\n doc = root.document; // Will be `undefined` if we're in Node\r\n\r\n// Check if we're in Node. If so, pull in `xmldom` so we can simulate the DOM.\r\nif (typeof process === 'object' && Object.prototype.toString.call(process) === '[object process]') {\r\n isNode = true;\r\n xmldom = require(\"xmldom\");\r\n doc = new xmldom.DOMImplementation().createDocument();\r\n}\r\n\r\nmodule.exports = {\r\n parse: parse\r\n};","/*\r\n * ...\r\n */\r\nvar C32 = require('./documents/c32');\r\nvar CCD = require('./documents/ccd');\r\nvar CCDA = require('./documents/ccda');\r\nvar CCDAR2 = require('./documents/ccdar2');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.detect = detect;\r\n self.entries = entries;\r\n self.parseDate = parseDate;\r\n self.parseName = parseName;\r\n self.parseAddress = parseAddress;\r\n self.C32 = new C32(getEntries);\r\n self.CCD = new CCD(getEntries);\r\n self.CCDA = new CCDA(getEntries);\r\n self.CCDAR2 = new CCDAR2(getEntries);\r\n};\r\n\r\nfunction getEntries() {\r\n return entries;\r\n};\r\n\r\nfunction detect(data) {\r\n if (!data.template) {\r\n return 'json';\r\n }\r\n \r\n if (!data.template('2.16.840.1.113883.3.88.11.32.1').isEmpty()) {\r\n return 'c32';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.1').isEmpty()) {\r\n return 'ccda';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.15').isEmpty()) {\r\n return 'ccdar2';\r\n }else if(!data.template('2.16.840.1.113883.10.20.22.1.2').isEmpty()) {\r\n return 'ccd';\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Get entries within an element (with tag name 'entry'), adds an `each` function\r\n */\r\nfunction entries() {\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var els = this.elsByTag('entry');\r\n els.each = each;\r\n return els;\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 date in String form and creates a new Date object.\r\n * \r\n * TODO: CCDA dates can be in form:\r\n * <effectiveTime value=\"20130703094812\"/>\r\n * ...or:\r\n * <effectiveTime>\r\n * <low value=\"19630617120000\"/>\r\n * <high value=\"20110207100000\"/>\r\n * </effectiveTime>\r\n * For the latter, parseDate will not be given type `String`\r\n * and will return `null`.\r\n */\r\nfunction parseDate(str) {\r\n if (!str || typeof str !== 'string') {\r\n return null;\r\n }\r\n\r\n // Note: months start at 0 (so January is month 0)\r\n\r\n // e.g., value=\"1999\" translates to Jan 1, 1999\r\n if (str.length === 4) {\r\n return new Date(str, 0, 1);\r\n }\r\n\r\n var year = str.substr(0, 4);\r\n // subtract 1 from the month since they're zero-indexed\r\n var month = parseInt(str.substr(4, 2), 10) - 1;\r\n // days are not zero-indexed. If we end up with the day 0 or '',\r\n // that will be equivalent to the last day of the previous month\r\n var day = str.substr(6, 2) || 1;\r\n\r\n // check for time info (the presence of at least hours and mins after the date)\r\n if (str.length >= 12) {\r\n var hour = str.substr(8, 2);\r\n var min = str.substr(10, 2);\r\n var secs = str.substr(12, 2);\r\n\r\n // check for timezone info (the presence of chars after the seconds place)\r\n if (str.length > 14) {\r\n // _utcOffsetFromString will return 0 if there's no utc offset found.\r\n var utcOffset = _utcOffsetFromString(str.substr(14));\r\n // We subtract that offset from the local time to get back to UTC\r\n // (e.g., if we're -480 mins behind UTC, we add 480 mins to get back to UTC)\r\n min = _toInt(min) - utcOffset;\r\n }\r\n\r\n var date = new Date(Date.UTC(year, month, day, hour, min, secs));\r\n // This flag lets us output datetime-precision in our JSON even if the time happens\r\n // to translate to midnight local time. If we clone the date object, it is not\r\n // guaranteed to survive.\r\n date._parsedWithTimeData = true;\r\n return date;\r\n }\r\n\r\n return new Date(year, month, day);\r\n};\r\n\r\n// These regexes and the two functions below are copied from moment.js\r\n// http://momentjs.com/\r\n// https://github.com/moment/moment/blob/develop/LICENSE\r\nvar parseTimezoneChunker = /([\\+\\-]|\\d\\d)/gi;\r\nvar parseTokenTimezone = /Z|[\\+\\-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\r\nfunction _utcOffsetFromString(string) {\r\n string = string || '';\r\n var possibleTzMatches = (string.match(parseTokenTimezone) || []),\r\n tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],\r\n parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],\r\n minutes = +(parts[1] * 60) + _toInt(parts[2]);\r\n\r\n return parts[0] === '+' ? minutes : -minutes;\r\n}\r\nfunction _toInt(argumentForCoercion) {\r\n var coercedNumber = +argumentForCoercion,\r\n value = 0;\r\n\r\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\r\n if (coercedNumber >= 0) {\r\n value = Math.floor(coercedNumber);\r\n } else {\r\n value = Math.ceil(coercedNumber);\r\n }\r\n }\r\n\r\n return value;\r\n}\r\n\r\n\r\n/*\r\n * Parses an HL7 name (prefix / given [] / family)\r\n */\r\nfunction parseName(nameEl) {\r\n var prefix = nameEl.tag('prefix').val();\r\n \r\n var els = nameEl.elsByTag('given');\r\n var given = [];\r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { given.push(val); }\r\n }\r\n \r\n var family = nameEl.tag('family').val();\r\n \r\n return {\r\n prefix: prefix,\r\n given: given,\r\n family: family\r\n };\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 address (streetAddressLine [], city, state, postalCode, country)\r\n */\r\nfunction parseAddress(addrEl) {\r\n var els = addrEl.elsByTag('streetAddressLine');\r\n var street = [];\r\n \r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { street.push(val); }\r\n }\r\n \r\n var city = addrEl.tag('city').val(),\r\n state = addrEl.tag('state').val(),\r\n zip = addrEl.tag('postalCode').val(),\r\n country = addrEl.tag('country').val();\r\n \r\n return {\r\n street: street,\r\n city: city,\r\n state: state,\r\n zip: zip,\r\n country: country\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n \r\nmodule.exports = function(getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the C32 document\r\n */\r\n function process(c32) {\r\n c32.section = section;\r\n return c32;\r\n };\r\n\r\n /*\r\n * Finds the section of a C32 document\r\n *\r\n * Usually we check first for the HITSP section ID and then for the HL7-CCD ID.\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.102');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.127');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.117');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.6');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.122');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.14');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.112');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.8');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.103');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.11');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.108');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.12');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.119');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.16');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n \r\n /*\r\n * Preprocesses the CCDA document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n }; \r\n \r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.6.1');\r\n el.entries = entries;\r\n return el;\r\n case 'care_plan':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.10');\r\n el.entries = entries;\r\n return el;\r\n case 'chief_complaint':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.13');\r\n if (el.isEmpty()) {\r\n el = this.template('1.3.6.1.4.1.19376.1.5.3.1.1.13.2.1');\r\n }\r\n // no entries in Chief Complaint\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'functional_statuses':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.14');\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'instructions':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.45');\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'social_history':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.17');\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n }; \r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n \r\n self.process = process;\r\n self.section = section; \r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nvar C32 = require('./generators/c32');\r\nvar CCDA = require('./generators/ccda');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Generators */\r\nmodule.exports = {\r\n method: method,\r\n C32: C32,\r\n CCDA: CCDA\r\n};\r\n \r\n\r\n\r\n /* Import ejs if we're in Node. Then setup custom formatting filters\r\n */\r\n /*if (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n ejs = require(\"ejs\");\r\n }\r\n }\r\n\r\n if (typeof ejs !== 'undefined') {\r\n /* Filters are automatically available to ejs to be used like \"... | hl7Date\"\r\n * Helpers are functions that we'll manually pass in to ejs.\r\n * The intended distinction is that a helper gets called with regular function-call syntax\r\n */ /*\r\n var pad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return String(number);\r\n };\r\n\r\n ejs.filters.hl7Date = function(obj) {\r\n try {\r\n if (obj === null || obj === undefined) { return 'nullFlavor=\"UNK\"'; }\r\n var date = new Date(obj);\r\n if (isNaN(date.getTime())) { return obj; }\r\n\r\n var dateStr = null;\r\n if (date.getHours() || date.getMinutes() || date.getSeconds()) {\r\n // If there's a meaningful time, output a UTC datetime\r\n dateStr = date.getUTCFullYear() +\r\n pad( date.getUTCMonth() + 1 ) +\r\n pad( date.getUTCDate() );\r\n var timeStr = pad( date.getUTCHours() ) +\r\n pad( date.getUTCMinutes() ) +\r\n pad ( date.getUTCSeconds() ) +\r\n \"+0000\";\r\n return 'value=\"' + dateStr + timeStr + '\"';\r\n \r\n } else {\r\n // If there's no time, don't apply timezone tranformations: just output a date\r\n dateStr = String(date.getFullYear()) +\r\n pad( date.getMonth() + 1 ) +\r\n pad( date.getDate() );\r\n return 'value=\"' + dateStr + '\"';\r\n }\r\n\r\n } catch (e) {\r\n return obj;\r\n }\r\n };\r\n\r\n var escapeSpecialChars = function(s) {\r\n return s.replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/&/g, '&amp;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&apos;');\r\n };\r\n\r\n ejs.filters.hl7Code = function(obj) {\r\n if (!obj) { return ''; }\r\n\r\n var tag = '';\r\n var name = obj.name || '';\r\n if (obj.name) { tag += 'displayName=\"'+escapeSpecialChars(name)+'\"'; }\r\n\r\n if (obj.code) {\r\n tag += ' code=\"'+obj.code+'\"';\r\n if (obj.code_system) { tag += ' codeSystem=\"'+escapeSpecialChars(obj.code_system)+'\"'; }\r\n if (obj.code_system_name) { tag += ' codeSystemName=\"' +\r\n escapeSpecialChars(obj.code_system_name)+'\"'; }\r\n } else {\r\n tag += ' nullFlavor=\"UNK\"';\r\n }\r\n\r\n if (!obj.name && ! obj.code) {\r\n return 'nullFlavor=\"UNK\"';\r\n }\r\n \r\n return tag;\r\n };\r\n\r\n ejs.filters.emptyStringIfFalsy = function(obj) {\r\n if (!obj) { return ''; }\r\n return obj;\r\n };\r\n\r\n if (!ejs.helpers) ejs.helpers = {};\r\n ejs.helpers.simpleTag = function(tagName, value) {\r\n if (value) {\r\n return \"<\"+tagName+\">\"+value+\"</\"+tagName+\">\";\r\n } else {\r\n return \"<\"+tagName+\" nullFlavor=\\\"UNK\\\" />\";\r\n }\r\n };\r\n\r\n ejs.helpers.addressTags = function(addressDict) {\r\n if (!addressDict) {\r\n return '<streetAddressLine nullFlavor=\"NI\" />\\n' +\r\n '<city nullFlavor=\"NI\" />\\n' +\r\n '<state nullFlavor=\"NI\" />\\n' +\r\n '<postalCode nullFlavor=\"NI\" />\\n' +\r\n '<country nullFlavor=\"NI\" />\\n';\r\n }\r\n \r\n var tags = '';\r\n if (!addressDict.street.length) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', null) + '\\n';\r\n } else {\r\n for (var i=0; i<addressDict.street.length; i++) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', addressDict.street[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('city', addressDict.city) + '\\n';\r\n tags += ejs.helpers.simpleTag('state', addressDict.state) + '\\n';\r\n tags += ejs.helpers.simpleTag('postalCode', addressDict.zip) + '\\n';\r\n tags += ejs.helpers.simpleTag('country', addressDict.country) + '\\n';\r\n return tags;\r\n };\r\n\r\n ejs.helpers.nameTags = function(nameDict) {\r\n if (!nameDict) {\r\n return '<given nullFlavor=\"NI\" />\\n' +\r\n '<family nullFlavor=\"NI\" />\\n';\r\n }\r\n\r\n var tags = '';\r\n if (nameDict.prefix) {\r\n tags += ejs.helpers.simpleTag('prefix', nameDict.prefix) + '\\n';\r\n }\r\n if (!nameDict.given.length) {\r\n tags += ejs.helpers.simpleTag('given', null) + '\\n';\r\n } else {\r\n for (var i=0; i<nameDict.given.length; i++) {\r\n tags += ejs.helpers.simpleTag('given', nameDict.given[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('family', nameDict.family) + '\\n';\r\n if (nameDict.suffix) {\r\n tags += ejs.helpers.simpleTag('suffix', nameDict.suffix) + '\\n';\r\n }\r\n return tags;\r\n };\r\n\r\n }*/\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a C32 document\r\n */\r\nfunction run(json, template, testingMode) {\r\n /* jshint unused: false */ // only until this stub is actually implemented\r\n console.log(\"C32 generation is not implemented yet\");\r\n return null;\r\n};","/*\r\n * ...\r\n */\r\nvar _ = require('lodash');\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a CCDA document\r\n * A lot of the EJS setup happens in generators.js\r\n *\r\n * If `testingMode` is true, we'll set the \"now\" variable to a specific,\r\n * fixed time, so that the expected XML doesn't change across runs\r\n */\r\nfunction run(json, template, testingMode) {\r\n if (!template) {\r\n console.log(\"Please provide a template EJS file for the Generator to use. \" +\r\n \"Load it via fs.readFileSync in Node or XHR in the browser.\");\r\n return null;\r\n }\r\n\r\n // `now` is actually now, unless we're running this for a test,\r\n // in which case it's always Jan 1, 2000 at 12PM UTC\r\n var now = (testingMode) ?\r\n new Date('2000-01-01T12:00:00Z') : new Date();\r\n\r\n var ccda = _.template(template, {\r\n filename: 'ccda.xml',\r\n bb: json,\r\n now: now,\r\n tagHelpers: ejs.helpers,\r\n codes: Core.Codes\r\n });\r\n return ccda;\r\n};","/*\r\n * ...\r\n */\r\nvar C32 = require('./parsers/c32');\r\nvar CCD = require('./parsers/ccd');\r\nvar CCDA = require('./parsers/ccda');\r\nvar CCDAR2 = require('./parsers/ccdar2');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Parsers */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.method = method;\r\n self.C32 = new C32(self.doc);\r\n self.CCD = new CCD(self.doc);\r\n self.CCDA = new CCDA(self.doc);\r\n self.CCDAR2 = new CCDAR2(self.doc);\r\n}; ","/*\r\n * Parser for the C32 document\r\n */\r\n\r\nvar Core = require('../core');\r\nvar AllergiesParser = require('./c32/allergies');\r\nvar DemographicsParser = require('./c32/demographics');\r\nvar DocumentParser = require('./c32/document');\r\nvar EncountersParser = require('./c32/encounters');\r\nvar ImmunizationsParser = require('./c32/immunizations');\r\nvar MedicationsParser = require('./c32/medications');\r\nvar ProblemsParser = require('./c32/problems');\r\nvar ProceduresParser = require('./c32/procedures');\r\nvar ResultsParser = require('./c32/results');\r\nvar VitalsParser = require('./c32/vitals');\r\nvar ParseGenericInfo = require('./generic');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.demographicsParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n self.run = function (c32) {\r\n var data = {};\r\n \r\n data.document = self.demographicsParser.parse(c32);\r\n data.allergies = self.allergiesParser.parse(c32);\r\n data.demographics = self.demographicsParser.parse(c32);\r\n data.encounters = self.encountersParser.parse(c32);\r\n var parsedImmunizations = self.immunizationsParser.parse(c32);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.results = self.resultsParser.parse(c32);\r\n data.medications = self.medicationsParser.parse(c32);\r\n data.problems = self.problemsParser.parse(c32);\r\n data.procedures = self.proceduresParser.parse(c32);\r\n data.vitals = self.vitals.parse(c32);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.vitals.json = Core.json;\r\n \r\n // Sections that are in CCDA but not C32... we want to keep the API\r\n // consistent, even if the entries are always null\r\n data.smoking_status = {\r\n date: null,\r\n name: null,\r\n code: null,\r\n code_system: null,\r\n code_system_name: null\r\n };\r\n data.smoking_status.json = Core.json;\r\n \r\n data.chief_complaint = {\r\n text: null\r\n };\r\n data.chief_complaint.json = Core.json;\r\n \r\n data.care_plan = [];\r\n data.care_plan.json = Core.json;\r\n \r\n data.instructions = [];\r\n data.instructions.json = Core.json;\r\n \r\n data.functional_statuses = [];\r\n data.functional_statuses.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(c32, data);\r\n \r\n return data;\r\n };\r\n};\r\n\r\n\r\n","/*\r\n * Parser for the C32 allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = c32.section('allergies');\r\n\r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n\r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // an irregularity seen in some c32s\r\n if (!reaction_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('text');\r\n if (!el.isEmpty()) {\r\n reaction_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n\r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.1.55').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n\r\n // another irregularity seen in some c32s\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.1.39').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n }); \r\n return data;\r\n }\r\n};\r\n","/*\r\n * Parser for the C32 demographics section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = c32.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value'),\r\n provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = c32.section('document');\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n \r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n // Sometimes C32s include names that are just like <name>String</name>\r\n // and we still want to get something out in that case\r\n if (!name_dict.prefix && !name_dict.given.length && !name_dict.family) {\r\n name_dict.family = el.val();\r\n }\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i].tag('assignedPerson').tag('name');\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = performers[i].tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = c32.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer');\r\n var performer_name = el.tag('name').val(),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('name').val(),\r\n location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 immunizations section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = c32.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n \r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.1.53');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.1.49');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 medications section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n \r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var medications = c32.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n var text = null;\r\n el = entry.tag('substanceAdministration').immediateChildTag('text');\r\n if (!el.isEmpty()) {\r\n // technically C32s don't use this, but C83s (another CCD) do,\r\n // and CCDAs do, so we may see it anyways\r\n text = Core.stripWhitespace(el.val());\r\n }\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n // irregularity in some c32s\r\n if (!product_name) {\r\n el = entry.tag('manufacturedProduct').tag('name');\r\n if (!el.isEmpty()) {\r\n product_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n // (which for C32s is in fact the primary field for this info)\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: text,\r\n product: {\r\n name: product_name,\r\n text: product_original_text,\r\n code: product_code,\r\n code_system: product_code_system,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 problems section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var problems = c32.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // Pre-C32 CCDs put the problem name in this \"originalText\" field, and some vendors\r\n // continue doing this with their C32, even though it's not technically correct\r\n if (!name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('originalText');\r\n if (!el.isEmpty()) {\r\n name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.50');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.1.38');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: null // not part of C32\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = c32.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.tag('participant').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = c32.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n \r\n results.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var panel_date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!panel_date) {\r\n panel_date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n // sometimes results organizers contain non-results. we only want tests\r\n if (observation.template('2.16.840.1.113883.10.20.1.31').val()) {\r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n date: panel_date,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the C32 vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = c32.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var j = 0; j < results.length; j++) {\r\n result = results[j];\r\n \r\n // Results\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\nvar DocumentParser = require('./ccd/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n \r\n self.run = function (ccda) {\r\n var data = {};\r\n\r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.document = document;\r\n\r\n function document(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","var Core = require('../core');\r\nvar AllergiesParser = require('./ccda/allergies');\r\nvar CarePlanParser = require('./ccda/care_plan');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar DocumentParser = require('./ccda/document');\r\nvar EncountersParser = require('./ccda/encounters');\r\nvar FreeTextParser = require('./ccda/free_text');\r\nvar FunctionalStatusesParser = require('./ccda/functional_statuses');\r\nvar ImmunizationsParser = require('./ccda/immunizations');\r\nvar InstructionsParser = require('./ccda/instructions');\r\nvar MedicationsParser = require('./ccda/medications');\r\nvar ProblemsParser = require('./ccda/problems');\r\nvar ProceduresParser = require('./ccda/procedures');\r\nvar ResultsParser = require('./ccda/results');\r\nvar SmokingStatusParser = require('./ccda/smoking_status');\r\nvar VitalsParser = require('./ccda/vitals');\r\n\r\nvar ParseGenericInfo = require('./generic');\r\n\r\n/*\r\n * Parser for the CCDA document\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.carePlanParser = new CarePlanParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.freeTextParser = new FreeTextParser();\r\n self.functionalStatusesParser = new FunctionalStatusesParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.instructionsParser = new InstructionsParser();\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.smokingStatusParser = new SmokingStatusParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n\r\n self.run = function (ccda) {\r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.allergies = self.allergiesParser.allergies(ccda);\r\n data.care_plan = self.carePlanParser.care_plan(ccda);\r\n data.chief_complaint = self.freeTextParser.free_text(ccda, 'chief_complaint');\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.encounters = self.encountersParser.encounters(ccda);\r\n data.functional_statuses = self.functionalStatusesParser.functional_statuses(ccda);\r\n var parsedImmunizations = self.immunizationsParser.immunizations(ccda);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.instructions = self.instructionsParser.instructions(ccda);\r\n data.results = self.resultsParser.results(ccda);\r\n data.medications = self.medicationsParser.medications(ccda);\r\n data.problems = self.problemsParser.problems(ccda);\r\n data.procedures = self.proceduresParser.procedures(ccda);\r\n data.smoking_status = self.smokingStatusParser.smoking_status(ccda);\r\n data.vitals = self.vitalsParser.vitals(ccda);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.care_plan.json = Core.json;\r\n data.chief_complaint.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.functional_statuses.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.instructions.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.smoking_status.json = Core.json;\r\n data.vitals.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n \r\n self.allergies = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = ccda.section('allergies');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n \r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.9').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.8').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n \r\n // this is not a valid place to store the allergen name but some vendors use it\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.28').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\n'use strict'\r\nlet Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n let self = this;\r\n self.doc = doc;\r\n\r\n self.care_plan = function (ccda) {\r\n let care_plan = ccda.section('care_plan');\r\n \r\n let data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Care Plan\";\r\n data.templateId = care_plan.tag('templateId').attr('root');\r\n data.text = care_plan.tag('text').val(true);\r\n \r\n care_plan.entries().each(function (entry) {\r\n \r\n let name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null;\r\n \r\n // Plan of care encounters, which have no other details\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.40');\r\n if (!el.isEmpty()) {\r\n name = 'encounter';\r\n } else {\r\n el = entry.tag('code');\r\n \r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n }\r\n \r\n let text = Core.stripWhitespace(entry.tag('text').val(true));\r\n let time = entry.tag('effectiveTime').immediateChildTag('center').attr('value');\r\n \r\n data.entries.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n effective_time: parse(time)\r\n });\r\n });\r\n \r\n return data;\r\n \r\n function parse(str) {\r\n if (!str) return null;\r\n let y = str.substr(0, 4),\r\n m = str.substr(4, 2) - 1,\r\n d = str.substr(6, 2);\r\n let D = new Date(y, m, d);\r\n return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : null;\r\n }\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA demographics section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.demographics = demographics;\r\n\r\n function demographics(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = ccda.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value');\r\n \r\n var provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n \r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.encounters = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = ccda.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer').tag('code');\r\n var performer_name = el.attr('displayName'),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('code').attr('displayName');\r\n \r\n var location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for any freetext section (i.e., contains just a single <text> element)\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.free_text = function (ccda, sectionName) { \r\n var data = {};\r\n \r\n var doc = ccda.section(sectionName);\r\n var text = Core.stripWhitespace(doc.tag('text').val(true));\r\n \r\n data = {\r\n text: text\r\n };\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA functional & cognitive status\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.functional_statuses = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var data = [], el;\r\n \r\n var statuses = ccda.section('functional_statuses');\r\n \r\n statuses.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('value');\r\n \r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n data.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n \r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA immunizations section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.immunizations = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = ccda.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.22.4.54');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.20');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n\r\n\r\n","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n \r\n self.instructions = function (ccda) {\r\n \r\n var data = [], el;\r\n \r\n var instructions = ccda.section('instructions');\r\n data.templateId = instructions.tag('templateId').attr('root');\r\n \r\n instructions.entries().each(function(entry) {\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n var text = Core.stripWhitespace(entry.tag('text').val(true));\r\n \r\n data.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA medications section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function (doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.medications = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var medications = ccda.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n el = entry.tag('text');\r\n var sig = Core.stripWhitespace(el.val());\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.19').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: sig,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n text: product_original_text,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA problems section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.problems = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n var problems = ccda.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.6');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.31');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.64');\r\n var comment = Core.stripWhitespace(el.tag('text').val());\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: comment\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.procedures = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = ccda.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.37').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.results = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = ccda.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n results.entries().each(function(entry) {\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA smoking status in social history section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.smoking_status = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data, el;\r\n \r\n var name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null,\r\n entry_date = null;\r\n \r\n // We can parse all of the social_history sections,\r\n // but in practice, this section seems to be used for\r\n // smoking status, so we're just going to break that out.\r\n // And we're just looking for the first non-empty one.\r\n var social_history = ccda.section('social_history');\r\n var entries = social_history.entries();\r\n for (var i=0; i < entries.length; i++) {\r\n var entry = entries[i];\r\n \r\n var smoking_status = entry.template('2.16.840.1.113883.10.20.22.4.78');\r\n if (smoking_status.isEmpty()) {\r\n smoking_status = entry.template('2.16.840.1.113883.10.22.4.78');\r\n }\r\n if (smoking_status.isEmpty()) {\r\n continue;\r\n }\r\n \r\n el = smoking_status.tag('effectiveTime');\r\n entry_date = parseDate(el.attr('value'));\r\n \r\n el = smoking_status.tag('value');\r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (name) {\r\n break;\r\n }\r\n }\r\n \r\n data = {\r\n date: entry_date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n };\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.vitals = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = ccda.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var i = 0; i < results.length; i++) {\r\n result = results[i];\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\n\r\nvar DocumentParser = require('./ccdar2/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n\r\n self.run = function (ccda) { \r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 Health Concerns Section\r\n * 2.16.840.1.113883.10.20.22.2.58\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.health_concerns_document = function (ccda) {\r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n // Helper to create each iterator for collection\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var model = {}, el;\r\n model.entries = [];\r\n \r\n model.text = ccda.tag('text').val(true);\r\n \r\n var health_concerns = ccda.section('health_concerns_document');\r\n var title = health_concerns.tag('title').val();\r\n \r\n health_concerns.entries().each(function(entry) {\r\n \r\n var entryModel = {};\r\n // Parse out the ACT Body\r\n //A record of something that is being done, has been done, can be done, or is intended or requested to be done.\r\n var act = entry.tag('act');\r\n var er = act.elsByTag('entryRelationship');\r\n var templateId = act.tag('templateId').attr('root');\r\n var id = act.tag('id').attr('root');\r\n var statusCode = act.tag('statusCode').attr('code');\r\n var code = act.tag('code');\r\n var name = code.attr('displayName');\r\n var effectiveTime = parseDate(entry.tag('effectiveTime'));\r\n \r\n // The model we want to return in json\r\n var actModel = {\r\n effective_time: effectiveTime,\r\n name: name,\r\n entry_relationship:[]\r\n };\r\n \r\n // Parse Entity Relationship child nodes\r\n \r\n var ers = entry.elsByTag('entryRelationship');\r\n ers.each = each;\r\n \r\n ers.each(function(er){\r\n \r\n var erModel = {\r\n type_code : er.attr('typeCode'),\r\n observations : []\r\n };\r\n \r\n var obs = er.elsByTag('observation');\r\n obs.each = each;\r\n \r\n // Parse out Obsevations for Each ER\r\n obs.each(function(ob) {\r\n erModel.observations.push({\r\n class_code: ob.attr('classCode'),\r\n mood_code: ob.attr('moodCode'),\r\n display_name : ob.tag('value').attr('displayName'),\r\n status: ob.tag('statusCode').attr('code')\r\n });\r\n });\r\n \r\n actModel.entry_relationship.push(erModel);\r\n \r\n });\r\n \r\n // Add ACT Model to our final return model\r\n entryModel['act'] = actModel;\r\n model.entries.push(entryModel);\r\n });\r\n \r\n return model;\r\n }; \r\n}","/* Parses out basic data about each section */\r\n\r\nmodule.exports = function (ccda, data) {\r\n\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n\r\n var containsTemplateId = function(templateId, data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property)) {\r\n var p = data[property].templateId;\r\n //var display = this[property].displayName;\r\n if(p) {\r\n if(p === templateId) {\r\n //console.log(\"TemplateId Match \" + templateId + \" \" + display);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var allSections = ccda.elsByTag('section');\r\n allSections.each = each;\r\n\r\n allSections.each(function(s) {\r\n\r\n var code = s.tag('code').attr('displayName');\r\n var templateId = s.tag('templateId').attr('root');\r\n\r\n var existingTemplateId = containsTemplateId(templateId, data);\r\n\r\n if (code) {\r\n var nodeName = code.split(' ').join('_').toLowerCase();\r\n\r\n //console.log(\"NODE NAME \" + nodeName);\r\n\r\n if (!data[nodeName] && !existingTemplateId) {\r\n //console.log(\"CREATE NODE \" + code);\r\n data[nodeName] = {};\r\n }\r\n\r\n if(data[nodeName]) {\r\n data[nodeName].displayName = code;\r\n data[nodeName].templateId = templateId;\r\n data[nodeName].text = s.tag('text').val(true);\r\n }\r\n\r\n }\r\n });\r\n};","module.exports = require(\"lodash\");;","module.exports = require(\"xmldom\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(97);\n"],"sourceRoot":""}