Skip to content

Commit 6efc428

Browse files
authored
Merge pull request #56 from mcode/data-absent-extension
Data Absent Reason extension
2 parents d6773dc + 0a7b4a5 commit 6efc428

File tree

5 files changed

+45
-3
lines changed

5 files changed

+45
-3
lines changed

src/templates/CancerRelatedMedicationTemplate.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
const { coding, extensionArr, reference, valueX } = require('./snippets');
1+
const {
2+
coding,
3+
dataAbsentReasonExtension,
4+
extensionArr,
5+
reference,
6+
valueX,
7+
} = require('./snippets');
28
const { ifAllArgsObj } = require('../helpers/templateUtils');
39

410
function treatmentIntentTemplate({ treatmentIntent }) {
@@ -24,6 +30,13 @@ function subjectTemplate({ id }) {
2430
}
2531

2632
function periodTemplate({ startDate, endDate }) {
33+
// If start and end date are not provided, indicate data absent with extension.
34+
if (!startDate && !endDate) {
35+
return {
36+
effectivePeriod: extensionArr(dataAbsentReasonExtension('unknown')),
37+
};
38+
}
39+
2740
return {
2841
effectivePeriod: {
2942
...(startDate && { start: startDate }),

src/templates/snippets/extensionArr.js renamed to src/templates/snippets/extension.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ function extensionArr(...extensions) { // 0. Spread since 1..n extensions
88
)(...extensions); // 1. Spread to pass each extension individually
99
}
1010

11+
// See http://hl7.org/fhir/R4/extension-data-absent-reason.html
12+
// reasonCode is any code from Value Set http://hl7.org/fhir/R4/valueset-data-absent-reason.html
13+
function dataAbsentReasonExtension(reasonCode) {
14+
return {
15+
url: 'http://hl7.org/fhir/StructureDefinition/data-absent-reason',
16+
valueCode: reasonCode,
17+
};
18+
}
19+
1120
module.exports = {
21+
dataAbsentReasonExtension,
1222
extensionArr,
1323
};

src/templates/snippets/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ const { coding } = require('./coding');
22
const { valueX } = require('./valueX');
33
const { reference } = require('./reference');
44
const { meta, narrative } = require('./resource');
5-
const { extensionArr } = require('./extensionArr');
5+
const { extensionArr, dataAbsentReasonExtension } = require('./extension');
66
const { effectiveX } = require('./effectiveX');
77
const { identifier, identifierArr } = require('./identifier');
88
const { bodySiteTemplate } = require('./bodySiteTemplate');
99

1010
module.exports = {
1111
bodySiteTemplate,
1212
coding,
13+
dataAbsentReasonExtension,
1314
effectiveX,
1415
extensionArr,
1516
identifier,

test/templates/fixtures/minimal-medication-resource.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,12 @@
1717
"subject": {
1818
"reference": "urn:uuid:mrn-1"
1919
},
20-
"effectivePeriod": {}
20+
"effectivePeriod": {
21+
"extension": [
22+
{
23+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
24+
"valueCode": "unknown"
25+
}
26+
]
27+
}
2128
}

test/templates/medication.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,17 @@ describe('test Medication template', () => {
6363
const generatedMedication = cancerRelatedMedicationTemplate(MEDICATION_MINIMAL_DATA);
6464

6565
expect(generatedMedication).toEqual(minimalValidExampleMedication);
66+
67+
// If no start or end date is provided, use the data absent reason extension
68+
expect(generatedMedication.effectivePeriod).toEqual({
69+
extension: [
70+
{
71+
url: 'http://hl7.org/fhir/StructureDefinition/data-absent-reason',
72+
valueCode: 'unknown',
73+
},
74+
],
75+
});
76+
6677
expect(isValidFHIR(generatedMedication)).toBeTruthy();
6778
});
6879

0 commit comments

Comments
 (0)