Skip to content

Commit 959622f

Browse files
Merge pull request #86 from mcode/cds-data-absent-reason
Parsing of 'not evaluated' status value in CDS extractor
2 parents 9dedb04 + c771fef commit 959622f

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

src/extractors/CSVCancerDiseaseStatusExtractor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class CSVCancerDiseaseStatusExtractor {
1616
logger.debug('Reformatting disease status data from CSV into template format');
1717
// Check the shape of the data
1818
arrOfDiseaseStatusData.forEach((record) => {
19-
if (!(record.mrn && record.conditionId && record.diseaseStatusCode && record.dateOfObservation)) {
19+
if (!record.mrn || !record.conditionId || !record.diseaseStatusCode || !record.dateOfObservation) {
2020
throw new Error('DiseaseStatusData missing an expected property: mrn, conditionId, diseaseStatusCode, and dateOfObservation are required.');
2121
}
2222
});

src/templates/CancerDiseaseStatusTemplate.js

Lines changed: 14 additions & 3 deletions
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+
extensionArr,
4+
reference,
5+
valueX,
6+
dataAbsentReasonExtension,
7+
} = require('./snippets');
28

39
function evidenceTemplate({ evidence }) {
410
if (!evidence || evidence.length === 0) return [];
@@ -23,6 +29,11 @@ function subjectTemplate({ subject }) {
2329
};
2430
}
2531

32+
function valueTemplate({ code, display, system }) {
33+
if (code === '709137006') return { valueCodeableConcept: extensionArr(dataAbsentReasonExtension('not-asked')) };
34+
return valueX({ code, display, system }, 'valueCodeableConcept');
35+
}
36+
2637
function cancerDiseaseStatusTemplate({
2738
id,
2839
status,
@@ -32,7 +43,7 @@ function cancerDiseaseStatusTemplate({
3243
value,
3344
evidence,
3445
}) {
35-
if (!(id && status && effectiveDateTime && condition && subject && value)) {
46+
if (!id || !status || !effectiveDateTime || !condition || !subject || !value) {
3647
throw Error('Trying to render a CancerDiseaseStatusTemplate, but a required argument is missing; ensure that id, status, effectiveDateTime, condition, subject, and value are all present');
3748
}
3849

@@ -70,7 +81,7 @@ function cancerDiseaseStatusTemplate({
7081
effectiveDateTime,
7182
...focusTemplate({ condition }),
7283
...subjectTemplate({ subject }),
73-
...valueX(value, 'valueCodeableConcept'),
84+
...valueTemplate(value),
7485
};
7586
}
7687

test/templates/cancerDiseaseStatus.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ describe('test CancerDiseaseStatus template', () => {
4646
id: 'CancerDiseaseStatus-fixture',
4747
status: 'final',
4848
value: {
49-
code: '385633008',
49+
code: '709137006',
5050
system: 'http://snomed.info/sct',
51-
display: 'Improving',
51+
display: 'not evaluated',
5252
},
5353
subject: {
5454
id: '123-example-patient',

test/templates/fixtures/minimal-disease-status-resource.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,10 @@
4141
},
4242
"effectiveDateTime" : "1994-12-09T09:07:00Z",
4343
"valueCodeableConcept": {
44-
"coding": [
44+
"extension": [
4545
{
46-
"system": "http://snomed.info/sct",
47-
"code": "385633008",
48-
"display": "Improving"
46+
"url": "http://hl7.org/fhir/StructureDefinition/data-absent-reason",
47+
"valueCode": "not-asked"
4948
}
5049
]
5150
}

0 commit comments

Comments
 (0)