diff --git a/README.md b/README.md
index 4ca75b6a..95576393 100644
--- a/README.md
+++ b/README.md
@@ -189,11 +189,11 @@ This framework consists of three key components: Extractors, Modules and Templat
### Glossary
-
+
### High Level Diagram
-
+
These diagrams can be modified by updating the XML files in the `/docs/diagrams/` directory using draw.io or a company licensed equivalent.
diff --git a/docs/diagrams/20_11_23_steam-high-level-arch.png b/docs/diagrams/archive/20_11_23_steam-high-level-arch.png
similarity index 100%
rename from docs/diagrams/20_11_23_steam-high-level-arch.png
rename to docs/diagrams/archive/20_11_23_steam-high-level-arch.png
diff --git a/docs/diagrams/20_11_23_steam-high-level-arch.xml b/docs/diagrams/archive/20_11_23_steam-high-level-arch.xml
similarity index 100%
rename from docs/diagrams/20_11_23_steam-high-level-arch.xml
rename to docs/diagrams/archive/20_11_23_steam-high-level-arch.xml
diff --git a/docs/diagrams/20_11_23_steam-terminology-breakdown.png b/docs/diagrams/archive/20_11_23_steam-terminology-breakdown.png
similarity index 100%
rename from docs/diagrams/20_11_23_steam-terminology-breakdown.png
rename to docs/diagrams/archive/20_11_23_steam-terminology-breakdown.png
diff --git a/docs/diagrams/20_11_23_steam-terminology-breakdown.xml b/docs/diagrams/archive/20_11_23_steam-terminology-breakdown.xml
similarity index 100%
rename from docs/diagrams/20_11_23_steam-terminology-breakdown.xml
rename to docs/diagrams/archive/20_11_23_steam-terminology-breakdown.xml
diff --git a/docs/diagrams/archive/21_06_11_steam-high-level-arch.png b/docs/diagrams/archive/21_06_11_steam-high-level-arch.png
new file mode 100644
index 00000000..857a5b54
Binary files /dev/null and b/docs/diagrams/archive/21_06_11_steam-high-level-arch.png differ
diff --git a/docs/diagrams/archive/21_06_11_steam-high-level-arch.xml b/docs/diagrams/archive/21_06_11_steam-high-level-arch.xml
new file mode 100644
index 00000000..cfd9feea
--- /dev/null
+++ b/docs/diagrams/archive/21_06_11_steam-high-level-arch.xml
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/diagrams/steam-high-level-arch.png b/docs/diagrams/steam-high-level-arch.png
new file mode 100644
index 00000000..857a5b54
Binary files /dev/null and b/docs/diagrams/steam-high-level-arch.png differ
diff --git a/docs/diagrams/steam-high-level-arch.xml b/docs/diagrams/steam-high-level-arch.xml
new file mode 100644
index 00000000..cfd9feea
--- /dev/null
+++ b/docs/diagrams/steam-high-level-arch.xml
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/docs/diagrams/steam-terminology-breakdown.png b/docs/diagrams/steam-terminology-breakdown.png
new file mode 100644
index 00000000..9c9cfd14
Binary files /dev/null and b/docs/diagrams/steam-terminology-breakdown.png differ
diff --git a/docs/diagrams/steam-terminology-breakdown.xml b/docs/diagrams/steam-terminology-breakdown.xml
new file mode 100644
index 00000000..8e292df0
--- /dev/null
+++ b/docs/diagrams/steam-terminology-breakdown.xml
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/src/cli/app.js b/src/application/app.js
similarity index 95%
rename from src/cli/app.js
rename to src/application/app.js
index 99d1d632..2bd7781d 100644
--- a/src/cli/app.js
+++ b/src/application/app.js
@@ -2,9 +2,9 @@ const fs = require('fs');
const path = require('path');
const moment = require('moment');
const logger = require('../helpers/logger');
-const { RunInstanceLogger } = require('./RunInstanceLogger');
-const { sendEmailNotification, zipErrors } = require('./emailNotifications');
-const { extractDataForPatients } = require('./mcodeExtraction');
+const { RunInstanceLogger } = require('./tools/RunInstanceLogger');
+const { sendEmailNotification, zipErrors } = require('./tools/emailNotifications');
+const { extractDataForPatients } = require('./tools/mcodeExtraction');
const { maskMRN } = require('../helpers/patientUtils');
const { parsePatientIds } = require('../helpers/appUtils');
diff --git a/src/application/index.js b/src/application/index.js
new file mode 100644
index 00000000..0b4521e1
--- /dev/null
+++ b/src/application/index.js
@@ -0,0 +1,12 @@
+const { mcodeApp } = require('./app');
+const { RunInstanceLogger } = require('./tools/RunInstanceLogger');
+const { sendEmailNotification, zipErrors } = require('./tools/emailNotifications');
+const { extractDataForPatients } = require('./tools/mcodeExtraction');
+
+module.exports = {
+ mcodeApp,
+ RunInstanceLogger,
+ extractDataForPatients,
+ sendEmailNotification,
+ zipErrors,
+};
diff --git a/src/cli/RunInstanceLogger.js b/src/application/tools/RunInstanceLogger.js
similarity index 97%
rename from src/cli/RunInstanceLogger.js
rename to src/application/tools/RunInstanceLogger.js
index aac87761..b6000706 100644
--- a/src/cli/RunInstanceLogger.js
+++ b/src/application/tools/RunInstanceLogger.js
@@ -1,7 +1,7 @@
const path = require('path');
const moment = require('moment');
const fs = require('fs');
-const logger = require('../helpers/logger');
+const logger = require('../../helpers/logger');
// Sort Log records by `dateRun`, more recent (larger) dates to least recent (smaller)
function logSorter(a, b) {
diff --git a/src/cli/emailNotifications.js b/src/application/tools/emailNotifications.js
similarity index 98%
rename from src/cli/emailNotifications.js
rename to src/application/tools/emailNotifications.js
index edb5dc41..d3ddb755 100644
--- a/src/cli/emailNotifications.js
+++ b/src/application/tools/emailNotifications.js
@@ -1,5 +1,5 @@
const nodemailer = require('nodemailer');
-const logger = require('../helpers/logger');
+const logger = require('../../helpers/logger');
function zipErrors(...allErrorSources) {
// NOTE: assumes each error object is a k-v pair: k is the MRN-id CSV row of the patient, v is an [errors] for that patient at some pipeline step
diff --git a/src/cli/mcodeExtraction.js b/src/application/tools/mcodeExtraction.js
similarity index 92%
rename from src/cli/mcodeExtraction.js
rename to src/application/tools/mcodeExtraction.js
index c37abd4e..11791f67 100644
--- a/src/cli/mcodeExtraction.js
+++ b/src/application/tools/mcodeExtraction.js
@@ -1,5 +1,5 @@
-const logger = require('../helpers/logger');
-const { getResourceCountInBundle } = require('../helpers/fhirUtils');
+const logger = require('../../helpers/logger');
+const { getResourceCountInBundle } = require('../../helpers/fhirUtils');
async function extractDataForPatients(patientIds, mcodeClient, fromDate, toDate) {
// Using an initialized mcodeClient, extract data for patient ids in the appropriate toDate-fromDate range
diff --git a/src/cli/cli.js b/src/cli/cli.js
index d7a6e7af..d957c9e9 100644
--- a/src/cli/cli.js
+++ b/src/cli/cli.js
@@ -3,7 +3,7 @@ const path = require('path');
const program = require('commander');
const { MCODEClient } = require('../client/MCODEClient');
const logger = require('../helpers/logger');
-const { mcodeApp } = require('./app');
+const { mcodeApp } = require('../application');
const defaultPathToConfig = path.join('config', 'csv.config.json');
const defaultPathToRunLogs = path.join('logs', 'run-logs.json');
diff --git a/src/cli/index.js b/src/cli/index.js
deleted file mode 100644
index a952d967..00000000
--- a/src/cli/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const { mcodeApp } = require('./app');
-const { RunInstanceLogger } = require('./RunInstanceLogger');
-const { sendEmailNotification, zipErrors } = require('./emailNotifications');
-const { extractDataForPatients } = require('./mcodeExtraction');
-
-module.exports = {
- mcodeApp,
- RunInstanceLogger,
- extractDataForPatients,
- sendEmailNotification,
- zipErrors,
-};
diff --git a/src/index.js b/src/index.js
index 5c862ee7..53ebd3a9 100644
--- a/src/index.js
+++ b/src/index.js
@@ -7,7 +7,7 @@ const {
extractDataForPatients,
sendEmailNotification,
zipErrors,
-} = require('./cli');
+} = require('./application');
const {
BaseFHIRExtractor,
CSVAdverseEventExtractor,
diff --git a/test/cli/app.test.js b/test/application/app.test.js
similarity index 96%
rename from test/cli/app.test.js
rename to test/application/app.test.js
index 13a8a633..9a102fa0 100644
--- a/test/cli/app.test.js
+++ b/test/application/app.test.js
@@ -2,7 +2,7 @@ const fs = require('fs');
const rewire = require('rewire');
const testConfig = require('./fixtures/test-config.json');
-const app = rewire('../../src/cli/app.js');
+const app = rewire('../../src/application/app.js');
const getConfig = app.__get__('getConfig');
const checkInputAndConfig = app.__get__('checkInputAndConfig');
const checkLogFile = app.__get__('checkLogFile');
@@ -10,7 +10,7 @@ const getEffectiveFromDate = app.__get__('getEffectiveFromDate');
describe('App Tests', () => {
describe('getConfig', () => {
- const pathToConfig = 'test/cli/fixtures/test-config.json';
+ const pathToConfig = 'test/application/fixtures/test-config.json';
it('should throw error when pathToConfig does not point to valid JSON file.', () => {
expect(() => getConfig()).toThrowError();
diff --git a/test/cli/emailNotifications.test.js b/test/application/emailNotifications.test.js
similarity index 98%
rename from test/cli/emailNotifications.test.js
rename to test/application/emailNotifications.test.js
index e201ce82..ebc313eb 100644
--- a/test/cli/emailNotifications.test.js
+++ b/test/application/emailNotifications.test.js
@@ -1,5 +1,5 @@
const nodemailer = require('nodemailer');
-const { sendEmailNotification } = require('../../src/cli/emailNotifications');
+const { sendEmailNotification } = require('../../src/application/tools/emailNotifications');
const createTransportSpy = jest.spyOn(nodemailer, 'createTransport');
diff --git a/test/cli/fixtures/example-clinical-trial-info.csv b/test/application/fixtures/example-clinical-trial-info.csv
similarity index 100%
rename from test/cli/fixtures/example-clinical-trial-info.csv
rename to test/application/fixtures/example-clinical-trial-info.csv
diff --git a/test/cli/fixtures/example-condition.csv b/test/application/fixtures/example-condition.csv
similarity index 100%
rename from test/cli/fixtures/example-condition.csv
rename to test/application/fixtures/example-condition.csv
diff --git a/test/cli/fixtures/example-disease-status.csv b/test/application/fixtures/example-disease-status.csv
similarity index 100%
rename from test/cli/fixtures/example-disease-status.csv
rename to test/application/fixtures/example-disease-status.csv
diff --git a/test/cli/fixtures/example-patient.csv b/test/application/fixtures/example-patient.csv
similarity index 100%
rename from test/cli/fixtures/example-patient.csv
rename to test/application/fixtures/example-patient.csv
diff --git a/test/cli/fixtures/patient-mrns.csv b/test/application/fixtures/patient-mrns.csv
similarity index 100%
rename from test/cli/fixtures/patient-mrns.csv
rename to test/application/fixtures/patient-mrns.csv
diff --git a/test/cli/fixtures/test-bundle.json b/test/application/fixtures/test-bundle.json
similarity index 100%
rename from test/cli/fixtures/test-bundle.json
rename to test/application/fixtures/test-bundle.json
diff --git a/test/cli/fixtures/test-config.json b/test/application/fixtures/test-config.json
similarity index 68%
rename from test/cli/fixtures/test-config.json
rename to test/application/fixtures/test-config.json
index 989a7366..c7581035 100644
--- a/test/cli/fixtures/test-config.json
+++ b/test/application/fixtures/test-config.json
@@ -1,5 +1,5 @@
{
- "patientIdCsvPath": "test/cli/fixtures/patient-mrns.csv",
+ "patientIdCsvPath": "test/application/fixtures/patient-mrns.csv",
"commonExtractorArgs": {},
"extractors": [],
"notificationInfo": {
@@ -8,4 +8,4 @@
"demo@example.com"
]
}
-}
\ No newline at end of file
+}
diff --git a/test/cli/mcodeExtraction.test.js b/test/application/mcodeExtraction.test.js
similarity index 98%
rename from test/cli/mcodeExtraction.test.js
rename to test/application/mcodeExtraction.test.js
index e1d58c8c..1c6f2c6b 100644
--- a/test/cli/mcodeExtraction.test.js
+++ b/test/application/mcodeExtraction.test.js
@@ -1,6 +1,6 @@
const _ = require('lodash');
const path = require('path');
-const { extractDataForPatients } = require('../../src/cli/mcodeExtraction');
+const { extractDataForPatients } = require('../../src/application/tools/mcodeExtraction');
const { MCODEClient } = require('../../src/client/MCODEClient');
const testBundle = require('./fixtures/test-bundle.json');