UNPKG

@smarttracker/blue-button-generate

Version:
147 lines (130 loc) 3.25 kB
"use strict"; 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); } };