Skip to content

Commit b8dcfb4

Browse files
committed
Cardinality matching on category attributes + AE config in example file
1 parent 4574c69 commit b8dcfb4

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

config/mcode-csv-config.example.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@
7474
"constructorArgs": {
7575
"filePath": "./data/procedure-information.csv"
7676
}
77+
},
78+
{
79+
"label": "adverseEvent",
80+
"type": "CSVAdverseEventExtractor",
81+
"constructorArgs": {
82+
"filePath": "./test/sample-client-data/adverse-event-information.csv"
83+
}
7784
}
7885
]
7986
}

src/extractors/CSVAdverseEventExtractor.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ function formatData(adverseEventData) {
2222
const categorySystems = categoryCodeSystem.split('|');
2323
const categoryDisplays = categoryDisplayText.split('|');
2424

25+
if (!(categoryCodes.length === categorySystems.length && categoryCodes.length === categoryDisplays.length)) {
26+
throw new Error('A category atrribute on the adverse event is missing a corresponding categoryCodeSystem or categoryDisplayText value.');
27+
}
28+
2529

2630
return {
2731
id: adverseEventId,

test/extractors/CSVAdverseEventExtractor.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ describe('CSVAdverseEventExtractor', () => {
3434
describe('formatData', () => {
3535
test('should join data appropriately and throw errors when missing required properties', () => {
3636
const expectedErrorString = 'The adverse event is missing an expected attribute. Adverse event code, mrn, and effective date are all required.';
37+
const expectedCategoryErrorString = 'A category atrribute on the adverse event is missing a corresponding categoryCodeSystem or categoryDisplayText value.';
3738
const localData = _.cloneDeep(exampleCSVAdverseEventModuleResponse);
3839

3940
// Test that valid maximal data works fine
@@ -43,6 +44,20 @@ describe('CSVAdverseEventExtractor', () => {
4344
delete localData[0].actuality;
4445
expect(formatData(exampleCSVAdverseEventModuleResponse)).toEqual(expect.anything());
4546

47+
// Test that adding another category but not adding a corresponding categoryCodeSystem throws an error
48+
localData[0].category = 'product-use-error|product-problem';
49+
expect(() => formatData(localData)).toThrow(new Error(expectedCategoryErrorString));
50+
51+
// Test that adding another category but adding a corresponding categoryCodeSystem and categoryDisplayText works fine
52+
localData[0].categoryCodeSystem = 'http://terminology.hl7.org/CodeSystem/adverse-event-category|http://snomed.info/sct';
53+
localData[0].categoryDisplayText = 'Product Use Error|Product Problem';
54+
expect(formatData(localData)).toEqual(expect.anything());
55+
56+
// Test that adding another category but including syntax for default categoryCodeSystem and categoryDisplayText values works fine
57+
localData[0].categoryCodeSystem = 'http://terminology.hl7.org/CodeSystem/adverse-event-category|';
58+
localData[0].categoryDisplayText = 'Product Use Error|';
59+
expect(formatData(localData)).toEqual(expect.anything());
60+
4661
// Test that deleting a mandatory value throws an error
4762
delete localData[0].mrn;
4863
expect(() => formatData(localData)).toThrow(new Error(expectedErrorString));

0 commit comments

Comments
 (0)