Skip to content

Commit 8268a97

Browse files
authored
Merge pull request #110 from mcode/case-insensitive-csv-columns
Make CSV column headers case insensitive
2 parents 08351e6 + ca71c5e commit 8268a97

32 files changed

+254
-141
lines changed

src/extractors/CSVAdverseEventExtractor.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,23 @@ function formatData(adverseEventData, patientId) {
1010
logger.debug('Reformatting adverse event data from CSV into template format');
1111
return adverseEventData.map((data) => {
1212
const {
13-
adverseEventId, adverseEventCode, adverseEventCodeSystem, adverseEventDisplayText, suspectedCauseId, suspectedCauseType, seriousness, seriousnessCodeSystem, seriousnessDisplayText,
14-
category, categoryCodeSystem, categoryDisplayText, severity, actuality, studyId, effectiveDate, recordedDate,
13+
adverseeventid: adverseEventId,
14+
adverseeventcode: adverseEventCode,
15+
adverseeventcodesystem: adverseEventCodeSystem,
16+
adverseeventdisplaytext: adverseEventDisplayText,
17+
suspectedcauseid: suspectedCauseId,
18+
suspectedcausetype: suspectedCauseType,
19+
seriousness,
20+
seriousnesscodesystem: seriousnessCodeSystem,
21+
seriousnessdisplaytext: seriousnessDisplayText,
22+
category,
23+
categorycodesystem: categoryCodeSystem,
24+
categorydisplaytext: categoryDisplayText,
25+
severity,
26+
actuality,
27+
studyid: studyId,
28+
effectivedate: effectiveDate,
29+
recordeddate: recordedDate,
1530
} = data;
1631

1732
if (!(adverseEventCode && effectiveDate)) {

src/extractors/CSVCancerDiseaseStatusExtractor.js

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,40 @@ class CSVCancerDiseaseStatusExtractor extends BaseCSVExtractor {
1616
joinAndReformatData(arrOfDiseaseStatusData, patientId) {
1717
logger.debug('Reformatting disease status data from CSV into template format');
1818
// Check the shape of the data
19-
arrOfDiseaseStatusData.forEach((record) => {
20-
if (!record.conditionId || !record.diseaseStatusCode || !record.dateOfObservation) {
19+
return arrOfDiseaseStatusData.map((record) => {
20+
const {
21+
conditionid: conditionId,
22+
diseasestatuscode: diseaseStatusCode,
23+
diseasestatustext: diseaseStatusText,
24+
dateofobservation: dateOfObservation,
25+
observationstatus: observationStatus,
26+
evidence,
27+
} = record;
28+
29+
if (!conditionId || !diseaseStatusCode || !dateOfObservation) {
2130
throw new Error('DiseaseStatusData missing an expected property: conditionId, diseaseStatusCode, and dateOfObservation are required.');
2231
}
32+
33+
return {
34+
status: observationStatus || 'final',
35+
value: {
36+
code: diseaseStatusCode,
37+
system: 'http://snomed.info/sct',
38+
display: diseaseStatusText || getDiseaseStatusDisplay(diseaseStatusCode, this.implementation),
39+
},
40+
subject: {
41+
id: patientId,
42+
},
43+
condition: {
44+
id: conditionId,
45+
},
46+
effectiveDateTime: formatDateTime(dateOfObservation),
47+
evidence: !evidence ? null : evidence.split('|').map((evidenceCode) => ({
48+
code: evidenceCode,
49+
display: getDiseaseStatusEvidenceDisplay(evidenceCode),
50+
})),
51+
};
2352
});
24-
const evidenceDelimiter = '|';
25-
return arrOfDiseaseStatusData.map((record) => ({
26-
status: record.observationStatus || 'final',
27-
value: {
28-
code: record.diseaseStatusCode,
29-
system: 'http://snomed.info/sct',
30-
display: record.diseaseStatusText ? record.diseaseStatusText : getDiseaseStatusDisplay(record.diseaseStatusCode, this.implementation),
31-
},
32-
subject: {
33-
id: patientId,
34-
},
35-
condition: {
36-
id: record.conditionId,
37-
},
38-
effectiveDateTime: formatDateTime(record.dateOfObservation),
39-
evidence: !record.evidence ? null : record.evidence.split(evidenceDelimiter).map((evidenceCode) => ({
40-
code: evidenceCode,
41-
display: getDiseaseStatusEvidenceDisplay(evidenceCode),
42-
})),
43-
}));
4453
}
4554

4655
async getDiseaseStatusData(mrn, fromDate, toDate) {

src/extractors/CSVCancerRelatedMedicationExtractor.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,17 @@ function formatData(medicationData, patientId) {
1111

1212
return medicationData.map((medication) => {
1313
const {
14-
medicationId, code, codeSystem, displayText, startDate, endDate, treatmentReasonCode, treatmentReasonCodeSystem, treatmentReasonDisplayText, treatmentIntent, status,
14+
medicationid: medicationId,
15+
code,
16+
codesystem: codeSystem,
17+
displaytext: displayText,
18+
startdate: startDate,
19+
enddate: endDate,
20+
treatmentreasoncode: treatmentReasonCode,
21+
treatmentreasoncodesystem: treatmentReasonCodeSystem,
22+
treatmentreasondisplaytext: treatmentReasonDisplayText,
23+
treatmentintent: treatmentIntent,
24+
status,
1525
} = medication;
1626

1727
if (!(code && codeSystem && status)) {

src/extractors/CSVClinicalTrialInformationExtractor.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ class CSVClinicalTrialInformationExtractor extends BaseCSVExtractor {
1818
joinClinicalTrialData(clinicalTrialData, patientId) {
1919
logger.debug('Reformatting clinical trial data from CSV into template format');
2020
const {
21-
trialSubjectID, enrollmentStatus, trialResearchID, trialStatus, trialResearchSystem,
21+
trialsubjectid: trialSubjectID,
22+
enrollmentstatus: enrollmentStatus,
23+
trialresearchid: trialResearchID,
24+
trialstatus: trialStatus,
25+
trialresearchsystem: trialResearchSystem,
2226
} = clinicalTrialData;
2327
const { clinicalSiteID, clinicalSiteSystem } = this;
2428

src/extractors/CSVConditionExtractor.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,17 @@ function formatData(conditionData, patientId) {
1111
logger.debug('Reformatting condition data from CSV into template format');
1212
return conditionData.map((data) => {
1313
const {
14-
conditionId, codeSystem, code, displayName, category, dateOfDiagnosis, clinicalStatus, verificationStatus, bodySite, laterality, histology,
14+
conditionid: conditionId,
15+
codesystem: codeSystem,
16+
code,
17+
displayname: displayName,
18+
category,
19+
dateofdiagnosis: dateOfDiagnosis,
20+
clinicalstatus: clinicalStatus,
21+
verificationstatus: verificationStatus,
22+
bodysite: bodySite,
23+
laterality,
24+
histology,
1525
} = data;
1626

1727
if (!(conditionId && codeSystem && code && category)) {

src/extractors/CSVObservationExtractor.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@ function formatData(observationData, patientId) {
99
logger.debug('Reformatting observation data from CSV into template format');
1010
return observationData.map((data) => {
1111
const {
12-
observationId, status, code, codeSystem, displayName, value, valueCodeSystem, effectiveDate, bodySite, laterality,
12+
observationid: observationId,
13+
status,
14+
code,
15+
codesystem: codeSystem,
16+
displayname: displayName,
17+
value,
18+
valuecodesystem: valueCodeSystem,
19+
effectivedate: effectiveDate,
20+
bodysite: bodySite,
21+
laterality,
1322
} = data;
1423

1524
if (!observationId || !status || !code || !codeSystem || !value || !effectiveDate) {

src/extractors/CSVPatientExtractor.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,19 @@ function joinAndReformatData(patientData) {
1313
logger.debug('Reformatting patient data from CSV into template format');
1414
// No join needed, just a reformatting
1515
const {
16-
mrn, familyName, givenName, gender, birthsex, dateOfBirth, race, ethnicity, language, addressLine, city, state, zip,
16+
mrn,
17+
familyname: familyName,
18+
givenname: givenName,
19+
gender,
20+
birthsex,
21+
dateofbirth: dateOfBirth,
22+
race,
23+
ethnicity,
24+
language,
25+
addressline: addressLine,
26+
city,
27+
state,
28+
zip,
1729
} = patientData;
1830

1931
if (!mrn) {

src/extractors/CSVProcedureExtractor.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,19 @@ function formatData(procedureData, patientId) {
1010
logger.debug('Reformatting procedure data from CSV into template format');
1111
return procedureData.map((data) => {
1212
const {
13-
procedureId, conditionId, status, code, codeSystem, displayName, reasonCode, reasonCodeSystem, reasonDisplayName, bodySite, laterality, effectiveDate, treatmentIntent,
13+
procedureid: procedureId,
14+
conditionid: conditionId,
15+
status,
16+
code,
17+
codesystem: codeSystem,
18+
displayname: displayName,
19+
reasoncode: reasonCode,
20+
reasoncodesystem: reasonCodeSystem,
21+
reasondisplayname: reasonDisplayName,
22+
bodysite: bodySite,
23+
laterality,
24+
effectivedate: effectiveDate,
25+
treatmentintent: treatmentIntent,
1426
} = data;
1527

1628
if (!(procedureId && status && code && codeSystem && effectiveDate)) {

src/extractors/CSVStagingExtractor.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ function formatTNMCategoryData(stagingData, patientId) {
99
logger.debug('Reformatting TNM Category data into template format');
1010
const formattedData = [];
1111
const {
12-
conditionId, t, n, m, type, stagingSystem, stagingCodeSystem, effectiveDate,
12+
conditionid: conditionId,
13+
t,
14+
n,
15+
m,
16+
type,
17+
stagingsystem: stagingSystem,
18+
stagingcodesystem: stagingCodeSystem,
19+
effectivedate: effectiveDate,
1320
} = stagingData;
1421

1522
if (!conditionId || !effectiveDate) {
@@ -35,7 +42,12 @@ function formatTNMCategoryData(stagingData, patientId) {
3542

3643
function formatStagingData(stagingData, categoryIds, patientId) {
3744
const {
38-
conditionId, type, stageGroup, stagingSystem, stagingCodeSystem, effectiveDate,
45+
conditionid: conditionId,
46+
type,
47+
stagegroup: stageGroup,
48+
stagingsystem: stagingSystem,
49+
stagingcodesystem: stagingCodeSystem,
50+
effectivedate: effectiveDate,
3951
} = stagingData;
4052

4153
return {

src/extractors/CSVTreatmentPlanChangeExtractor.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ function formatData(tpcData, patientId) {
2121

2222
// If there are multiple entries, combine them into one object with multiple reviews
2323
const combinedData = _.reduce(tpcData, (res, currentDataEntry) => {
24-
const { dateOfCarePlan, changed, reasonCode, reasonDisplayText } = currentDataEntry;
24+
const { dateofcareplan: dateOfCarePlan,
25+
changed,
26+
reasoncode: reasonCode,
27+
reasondisplaytext: reasonDisplayText } = currentDataEntry;
2528

2629
if (!dateOfCarePlan || !changed) {
2730
throw new Error('Treatment Plan Change Data missing an expected property: dateOfCarePlan, changed are required');

0 commit comments

Comments
 (0)