Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/extractors/CSVClinicalTrialInformationExtractor.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,19 @@ function getPatientId(context) {
}

class CSVClinicalTrialInformationExtractor extends BaseCSVExtractor {
constructor({ filePath, clinicalSiteID }) {
constructor({ filePath, clinicalSiteID, clinicalSiteSystem }) {
super({ filePath, csvSchema: CSVClinicalTrialInformationSchema });
if (!clinicalSiteID) logger.warn(`${this.constructor.name} expects a value for clinicalSiteID but got ${clinicalSiteID}`);
this.clinicalSiteID = clinicalSiteID;
this.clinicalSiteSystem = clinicalSiteSystem;
}

joinClinicalTrialData(patientId, clinicalTrialData) {
logger.debug('Reformatting clinical trial data from CSV into template format');
const {
trialSubjectID, enrollmentStatus, trialResearchID, trialStatus, trialResearchSystem,
} = clinicalTrialData;
const { clinicalSiteID } = this;
const { clinicalSiteID, clinicalSiteSystem } = this;

if (!(patientId && clinicalSiteID && trialSubjectID && enrollmentStatus && trialResearchID && trialStatus)) {
throw new Error('Clinical trial missing an expected property: patientId, clinicalSiteID, trialSubjectID, enrollmentStatus, trialResearchID, and trialStatus are required.');
Expand All @@ -46,6 +47,7 @@ class CSVClinicalTrialInformationExtractor extends BaseCSVExtractor {
trialStatus,
trialResearchID,
clinicalSiteID,
clinicalSiteSystem,
trialResearchSystem,
},
};
Expand Down
8 changes: 4 additions & 4 deletions src/templates/ResearchStudyTemplate.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const { identifierArr, identifier } = require('./snippets');

function siteTemplate(clinicalSiteID) {
function siteTemplate(clinicalSiteID, clinicalSiteSystem) {
return {
site: [
{
display: 'ID associated with Clinical Trial',
...identifier({
system: 'http://example.com/clinicalSiteIds',
system: clinicalSiteSystem,
value: clinicalSiteID,
}),
},
Expand All @@ -27,7 +27,7 @@ function researchStudyIdentifierTemplate(trialResearchID, trialResearchSystem) {

// Based on https://www.hl7.org/fhir/researchstudy.html
function researchStudyTemplate({
id, trialStatus, trialResearchID, clinicalSiteID, trialResearchSystem,
id, trialStatus, trialResearchID, clinicalSiteID, clinicalSiteSystem, trialResearchSystem,
}) {
if (!(id && trialStatus && trialResearchID && clinicalSiteID)) {
throw Error('Trying to render a ResearchStudyTemplate, but a required argument is missing; ensure that id, trialStatus, trialResearchID, clinicalSiteID are all present');
Expand All @@ -37,7 +37,7 @@ function researchStudyTemplate({
resourceType: 'ResearchStudy',
id,
status: trialStatus,
...siteTemplate(clinicalSiteID),
...siteTemplate(clinicalSiteID, clinicalSiteSystem),
...researchStudyIdentifierTemplate(trialResearchID, trialResearchSystem),
};
}
Expand Down
3 changes: 3 additions & 0 deletions test/extractors/CSVClinicalTrialInformationExtractor.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ const exampleClinicalTrialInformationBundle = require('./fixtures/csv-clinical-t
// Constants for mock tests
const MOCK_CSV_PATH = path.join(__dirname, 'fixtures/example.csv'); // need a valid path/csv here to avoid parse error
const MOCK_CLINICAL_SITE_ID = 'EXAMPLE-CLINICAL-SITE-ID';
const MOCK_CLINICAL_SITE_SYSTEM = 'EXAMPLE-CLINICAL-SITE-SYSTEM';
const MOCK_PATIENT_MRN = 'EXAMPLE-MRN';

// Instantiate module with mock parameters
const csvClinicalTrialInformationExtractor = new CSVClinicalTrialInformationExtractor({
filePath: MOCK_CSV_PATH,
clinicalSiteID: MOCK_CLINICAL_SITE_ID,
clinicalSiteSystem: MOCK_CLINICAL_SITE_SYSTEM,
});

// Destructure all modules
Expand Down Expand Up @@ -58,6 +60,7 @@ describe('CSVClinicalTrialInformationExtractor', () => {
trialStatus: firstClinicalTrialInfoResponse.trialStatus,
trialResearchID: firstClinicalTrialInfoResponse.trialResearchID,
clinicalSiteID: MOCK_CLINICAL_SITE_ID,
clinicalSiteSystem: MOCK_CLINICAL_SITE_SYSTEM,
trialResearchSystem: firstClinicalTrialInfoResponse.trialResearchSystem,
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@
}
},
{
"fullUrl": "urn:uuid:b245aa8a67b5f67263f5a688813c435ccfb364e0f7865885c512e3a5ca3c9093",
"fullUrl": "urn:uuid:28bd7a4890539dc60998a1b2d423e631a6d4373eb05001c45bd9f2bab3166506",
"resource": {
"resourceType": "ResearchStudy",
"id": "b245aa8a67b5f67263f5a688813c435ccfb364e0f7865885c512e3a5ca3c9093",
"id": "28bd7a4890539dc60998a1b2d423e631a6d4373eb05001c45bd9f2bab3166506",
"status": "example-trialStatus",
"site": [
{
"display": "ID associated with Clinical Trial",
"identifier": {
"system": "http://example.com/clinicalSiteIds",
"system": "EXAMPLE-CLINICAL-SITE-SYSTEM",
"value": "EXAMPLE-CLINICAL-SITE-ID"
}
}
Expand Down
2 changes: 1 addition & 1 deletion test/templates/fixtures/research-study-resource.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{
"display": "ID associated with Clinical Trial",
"identifier": {
"system": "http://example.com/clinicalSiteIds",
"system": "EXAMPLE_SITE_SYSTEM",
"value": "EXAMPLE_SITE_ID"
}
}
Expand Down
1 change: 1 addition & 0 deletions test/templates/researchStudy.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const VALID_DATA = {
trialStatus: 'active',
trialResearchID: 'AFT1235',
clinicalSiteID: 'EXAMPLE_SITE_ID',
clinicalSiteSystem: 'EXAMPLE_SITE_SYSTEM',
trialResearchSystem: 'example-system',
};

Expand Down