CCDA and Other (#4382)
[openemr.git] / ccdaservice / oe-blue-button-generate / lib / translate.js
blobc865bc6fb0dcec339d109327384147d636154446
1 "use strict";
3 var moment = require("moment");
4 var bbm = require("../../oe-blue-button-meta");
6 var css = bbm.code_systems;
8 exports.codeFromName = function (OID) {
9     return function (input) {
10         var cs = css.find(OID);
11         var code = cs ? cs.displayNameCode(input) : undefined;
12         var systemInfo = cs.systemId(OID);
13         return {
14             "displayName": input,
15             "code": code,
16             "codeSystem": systemInfo.codeSystem,
17             "codeSystemName": systemInfo.codeSystemName
18         };
19     };
22 exports.code = function (input) {
23     var result = {};
24     if (input.code) {
25         result.code = input.code;
26     }
28     if (input.name) {
29         result.displayName = input.name;
30     }
32     var code_system = input.code_system || (input.code_system_name && css.findFromName(input.code_system_name));
33     if (code_system) {
34         result.codeSystem = code_system;
35     }
37     if (input.code_system_name) {
38         result.codeSystemName = input.code_system_name;
39     }
41     return result;
44 var precisionToFormat = {
45     year: 'YYYY',
46     month: 'YYYYMM',
47     day: 'YYYYMMDD',
48     hour: 'YYYYMMDDHH',
49     minute: 'YYYYMMDDHHMM',
50     second: 'YYYYMMDDHHmmss',
51     subsecond: 'YYYYMMDDHHmmss.SSS'
54 exports.time = function (input) {
55     var m = moment.parseZone(input.date);
56     /*if (m._isValid !== true) {
57         return "";
58     }*/
59     var formatSpec = precisionToFormat[input.precision];
60     var result = m.format(formatSpec);
61     return result;
64 var acronymize = exports.acronymize = function (string) {
65     var ret = string.split(" ");
66     var fL = ret[0].slice(0, 1);
67     var lL = ret[1].slice(0, 1);
68     fL = fL.toUpperCase();
69     lL = lL.toUpperCase();
70     ret = fL + lL;
71     if (ret === "PH") {
72         ret = "HP";
73     }
74     if (ret === "PM") {
75         ret = "MC";
76     }
77     if (ret === "HA") {
78         ret = "H";
79     }
80     return ret;
83 exports.telecom = function (input) {
84     var transformPhones = function (input) {
85         var phones = input.phone;
86         if (phones) {
87             return phones.reduce(function (r, phone) {
88                 if (phone && phone.number) {
89                     var attrs = {
90                         value: "tel:" + phone.number
91                     };
92                     if (phone.type) {
93                         attrs.use = acronymize(phone.type);
94                     }
95                     r.push(attrs);
96                 }
97                 return r;
98             }, []);
99         } else {
100             return [];
101         }
102     };
104     var transformEmails = function (input) {
105         var emails = input.email;
106         if (emails) {
107             return emails.reduce(function (r, email) {
108                 if (email && email.address) {
109                     var attrs = {
110                         value: "mailto:" + email.address
111                     };
112                     if (email.type) {
113                         attrs.use = acronymize(email.type);
114                     }
115                     r.push(attrs);
116                 }
117                 return r;
118             }, []);
119         } else {
120             return [];
121         }
122     };
124     var result = [].concat(transformPhones(input), transformEmails(input));
125     return result.length === 0 ? null : result;
128 var nameSingle = function (input) {
129     var given = null;
130     if (input.first) {
131         given = [input.first];
132         if (input.middle && input.middle[0]) {
133             given.push(input.middle[0]);
134         }
135     }
136     return {
137         prefix: input.prefix,
138         given: given,
139         family: input.last,
140         suffix: input.suffix
141     };
144 exports.name = function (input) {
145     if (Array.isArray(input)) {
146         return input.map(function (e) {
147             return nameSingle(e);
148         });
149     } else {
150         return nameSingle(input);
151     }