|
1 | | -const { extensionArr, coding, valueX } = require('./snippets'); |
| 1 | +const { dataAbsentReasonExtension, extensionArr, coding, valueX } = require('./snippets'); |
2 | 2 | const { ifAllArgsObj, ifSomeArgsObj } = require('../helpers/templateUtils'); |
3 | 3 |
|
4 | 4 | function mrnIdentifierTemplate({ mrn }) { |
@@ -73,13 +73,35 @@ function birthDateTemplate({ dateOfBirth }) { |
73 | 73 | }; |
74 | 74 | } |
75 | 75 |
|
| 76 | +function genderTemplate({ gender }) { |
| 77 | + if (!gender) { |
| 78 | + // gender is 1..1 in mCODE |
| 79 | + return { |
| 80 | + _gender: extensionArr(dataAbsentReasonExtension('unknown')), |
| 81 | + }; |
| 82 | + } |
| 83 | + |
| 84 | + return { |
| 85 | + gender, |
| 86 | + }; |
| 87 | +} |
| 88 | + |
76 | 89 | function nameTemplate({ familyName, givenName }) { |
| 90 | + if (!familyName && !givenName) { |
| 91 | + // name is 1..* in mCODE |
| 92 | + return { |
| 93 | + name: [ |
| 94 | + extensionArr(dataAbsentReasonExtension('unknown')), |
| 95 | + ], |
| 96 | + }; |
| 97 | + } |
| 98 | + |
77 | 99 | return { |
78 | 100 | name: [ |
79 | 101 | { |
80 | 102 | text: `${givenName} ${familyName}`, |
81 | | - family: familyName, |
82 | | - given: givenName.split(' '), |
| 103 | + ...(familyName && { family: familyName }), |
| 104 | + ...(givenName && { given: givenName.split(' ') }), |
83 | 105 | }, |
84 | 106 | ], |
85 | 107 | }; |
@@ -125,13 +147,13 @@ function languageTemplate({ language }) { |
125 | 147 | function patientTemplate({ |
126 | 148 | id, mrn, familyName, givenName, gender, birthsex, dateOfBirth, language, addressLine, city, state, zip, raceCodesystem, raceCode, raceText, ethnicityCode, ethnicityText, |
127 | 149 | }) { |
128 | | - if (!(id && mrn && familyName && givenName && gender)) { |
129 | | - throw Error('Trying to render a PatientTemplate, but a required argument is missing; ensure that id, mrn, familyName, givenName, and gender are all present'); |
| 150 | + if (!(id && mrn)) { |
| 151 | + throw Error('Trying to render a PatientTemplate, but a required argument is missing; ensure that id and mrn are both present'); |
130 | 152 | } |
131 | 153 | return { |
132 | 154 | resourceType: 'Patient', |
133 | 155 | id, |
134 | | - gender, |
| 156 | + ...genderTemplate({ gender }), |
135 | 157 | ...mrnIdentifierTemplate({ mrn }), |
136 | 158 | ...nameTemplate({ familyName, givenName }), |
137 | 159 | ...ifSomeArgsObj(addressTemplate)({ addressLine, city, state, zip }), |
|
0 commit comments