Skip to content

Commit a5fc299

Browse files
committed
Add MCODE Surgical Procedure Extractor
- Gets all procedure resources - Filters to only include resources with a code from MCODE cancer related surgical procedure VS - Add tests
1 parent b3f9310 commit a5fc299

File tree

6 files changed

+1123
-0
lines changed

6 files changed

+1123
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
const path = require('path');
2+
const { Extractor } = require('./Extractor');
3+
const { FHIRProcedureExtractor } = require('./FHIRProcedureExtractor');
4+
const { getBundleEntriesByResourceType } = require('../helpers/fhirUtils');
5+
const { checkCodeInVs } = require('../helpers/valueSetUtils');
6+
const logger = require('../helpers/logger');
7+
8+
function getMCODESurgicalProcedures(fhirProcedures) {
9+
const surgicalProcedureVSFilepath = path.resolve(__dirname, '..', 'helpers', 'valueSets', 'ValueSet-mcode-cancer-related-surgical-procedure-vs.json');
10+
return fhirProcedures.filter((procedure) => {
11+
const coding = procedure.resource.code ? procedure.resource.code.coding : [];
12+
// NOTE: Update when checkCodeInVS checks code and system (might be able to pass in the full Coding)
13+
return coding.some((c) => checkCodeInVs(c.code, surgicalProcedureVSFilepath));
14+
});
15+
}
16+
17+
class MCODESurgicalProcedureExtractor extends Extractor {
18+
constructor({ baseFhirUrl, requestHeaders }) {
19+
super({ baseFhirUrl, requestHeaders });
20+
this.fhirProcedureExtractor = new FHIRProcedureExtractor({ baseFhirUrl, requestHeaders });
21+
}
22+
23+
updateRequestHeaders(newHeaders) {
24+
this.fhirProcedureExtractor.updateRequestHeaders(newHeaders);
25+
}
26+
27+
async getFHIRProcedures(mrn, context) {
28+
const proceduresInContext = getBundleEntriesByResourceType(context, 'Procedure', {});
29+
if (proceduresInContext.length !== 0) {
30+
logger.debug('Procedure resources found in context.');
31+
return proceduresInContext;
32+
}
33+
34+
logger.debug('Getting procedures available for patient');
35+
const procedureBundle = await this.fhirProcedureExtractor.get({ mrn, context });
36+
37+
logger.debug(`Found ${procedureBundle.entry.length} result(s) in Procedure search`);
38+
return procedureBundle.entry;
39+
}
40+
41+
async get({ mrn, context }) {
42+
const fhirProcedures = await this.getFHIRProcedures(mrn, context);
43+
44+
// Filter to only include procedures that are from MCODE surgical procedure VS
45+
const surgicalProcedures = getMCODESurgicalProcedures(fhirProcedures);
46+
47+
return {
48+
resourceType: 'Bundle',
49+
type: 'collection',
50+
entry: surgicalProcedures,
51+
};
52+
}
53+
}
54+
55+
module.exports = {
56+
MCODESurgicalProcedureExtractor,
57+
};

src/extractors/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const { FHIRMedicationStatementExtractor } = require('./FHIRMedicationStatementE
1818
const { FHIRObservationExtractor } = require('./FHIRObservationExtractor');
1919
const { FHIRPatientExtractor } = require('./FHIRPatientExtractor');
2020
const { FHIRProcedureExtractor } = require('./FHIRProcedureExtractor');
21+
const { MCODESurgicalProcedureExtractor } = require('./MCODESurgicalProcedureExtractor');
2122

2223
module.exports = {
2324
BaseFHIRExtractor,
@@ -40,4 +41,5 @@ module.exports = {
4041
FHIRObservationExtractor,
4142
FHIRPatientExtractor,
4243
FHIRProcedureExtractor,
44+
MCODESurgicalProcedureExtractor,
4345
};

0 commit comments

Comments
 (0)