@smarttracker/blue-button-generate
Version:
Blue Button CCDA Generator.
147 lines (130 loc) • 3.25 kB
JavaScript
;
var moment = require("moment");
var bbm = require("@amida-tech/blue-button-meta");
var css = bbm.code_systems;
exports.codeFromName = function (OID) {
return function (input) {
var cs = css.find(OID);
var code = cs ? cs.displayNameCode(input) : undefined;
var systemInfo = cs.systemId(OID);
return {
"displayName": cs.codeDisplayName(code) || input.name || input,
"code": code,
"codeSystem": systemInfo.codeSystem,
"codeSystemName": systemInfo.codeSystemName
};
};
};
exports.code = function (input) {
var result = {};
if (input.code) {
result.code = input.code;
}
if (input.name) {
result.displayName = input.name;
}
var code_system = input.code_system || (input.code_system_name && css.findFromName(input.code_system_name));
if (code_system) {
result.codeSystem = code_system;
}
if (input.code_system_name) {
result.codeSystemName = input.code_system_name;
}
return result;
};
var precisionToFormat = {
year: 'YYYY',
month: 'YYYYMM',
day: 'YYYYMMDD',
hour: 'YYYYMMDDHH',
minute: 'YYYYMMDDHHMM',
second: 'YYYYMMDDHHmmssZZ',
subsecond: 'YYYYMMDDHHmmss.SSSZZ'
};
exports.time = function (input) {
var m = moment.parseZone(input.date);
var formatSpec = precisionToFormat[input.precision];
var result = m.format(formatSpec);
return result;
};
var acronymize = exports.acronymize = function (string) {
var ret = string.split(" ");
var fL = ret[0].slice(0, 1);
var lL = ret[1].slice(0, 1);
fL = fL.toUpperCase();
lL = lL.toUpperCase();
ret = fL + lL;
if (ret === "PH") {
ret = "HP";
}
if (ret === "HA") {
ret = "H";
}
return ret;
};
exports.telecom = function (input) {
var transformPhones = function (input) {
var phones = input.phone;
if (phones) {
return phones.reduce(function (r, phone) {
if (phone && phone.number) {
var attrs = {
value: "tel:" + phone.number
};
if (phone.type) {
attrs.use = acronymize(phone.type);
}
r.push(attrs);
}
return r;
}, []);
} else {
return [];
}
};
var transformEmails = function (input) {
var emails = input.email;
if (emails) {
return emails.reduce(function (r, email) {
if (email && email.address) {
var attrs = {
value: "mailto:" + email.address
};
if (email.type) {
attrs.use = acronymize(email.type);
}
r.push(attrs);
}
return r;
}, []);
} else {
return [];
}
};
var result = [].concat(transformPhones(input), transformEmails(input));
return result.length === 0 ? null : result;
};
var nameSingle = function (input) {
var given = null;
if (input.first) {
given = [input.first];
if (input.middle && input.middle[0]) {
given.push(input.middle[0]);
}
}
return {
prefix: input.prefix,
given: given,
family: input.last,
suffix: input.suffix
};
};
exports.name = function (input) {
if (Array.isArray(input)) {
return input.map(function (e) {
return nameSingle(e);
});
} else {
return nameSingle(input);
}
};