diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index fe97a702..c7d51a37 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -7,18 +7,22 @@ jobs: name: Check tsc, lint, and prettier runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - name: Checkout Repository uses: actions/checkout@v3 with: submodules: true - node-version: '14.x' + clean: true + + - uses: actions/setup-node@v1 + with: + node-version: "18.x" - run: npm install - run: npm run lint - run: npm run prettier env: CI: true + test: name: Test on node ${{ matrix.node-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -29,12 +33,24 @@ jobs: steps: - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} + + - name: Install OpenSSL 1.1 on Ubuntu + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y libssl1.1 || { + # Fallback for newer Ubuntu versions + wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb + sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb + } + - run: npm install - run: git submodule update --init - run: npm test env: - CI: true + CI: true \ No newline at end of file diff --git a/.github/workflows/docker-cd-dev.yml b/.github/workflows/docker-cd-dev.yml index 809f1648..fe2bb5e1 100644 --- a/.github/workflows/docker-cd-dev.yml +++ b/.github/workflows/docker-cd-dev.yml @@ -14,6 +14,7 @@ jobs: uses: actions/checkout@v3 with: submodules: true + clean: true - name: Setup Docker Buildx uses: docker/setup-buildx-action@v2 diff --git a/.github/workflows/docker-cd.yml b/.github/workflows/docker-cd.yml index 78a22edf..858a0c1e 100644 --- a/.github/workflows/docker-cd.yml +++ b/.github/workflows/docker-cd.yml @@ -14,6 +14,7 @@ jobs: uses: actions/checkout@v3 with: submodules: true + clean: true - name: Setup Docker Buildx uses: docker/setup-buildx-action@v2 diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 5edae1d3..36f1abe5 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -15,6 +15,7 @@ jobs: uses: actions/checkout@v3 with: submodules: true + clean: true - name: Test Server Docker image Builds run: docker build . \ No newline at end of file diff --git a/.github/workflows/docker-tag-cd.yml b/.github/workflows/docker-tag-cd.yml index 0287fe9f..e5655955 100644 --- a/.github/workflows/docker-tag-cd.yml +++ b/.github/workflows/docker-tag-cd.yml @@ -14,7 +14,8 @@ jobs: uses: actions/checkout@v3 with: submodules: true - + clean: true + - name: Setup Docker Buildx uses: docker/setup-buildx-action@v2 diff --git a/README.md b/README.md index 84cdb6ba..777d9ada 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ The FHIR server built into the REMS Admin can be queried for the questionnaire p - Input requires a parameter containing the following: - `patient` - Patient FHIR Resource, must include `medication` with `patient` - `medication` - Medication or MedicationRequest FHIR Resource, must include `patient` with `medication` - - `authNumber` - String containing the REMS Authorization Number, may be sent without `patient` or `medication` + - `caseNumber` - String containing the REMS Case Number, may be sent without `patient` or `medication` - Returns a GuidanceResponse within a Parameter with the status - Contains Nested GuidanceResponse resources for each ETASU requirement with their status - `/4_0_0/Questionnaire/\/$questionnaire-package` - The endpoint for the FHIR Operation used for retrieving the Questionnaire package for a given form diff --git a/frontend/src/views/DataViews/CaseCollection.tsx b/frontend/src/views/DataViews/CaseCollection.tsx index 0c7e4962..5589d5bd 100644 --- a/frontend/src/views/DataViews/CaseCollection.tsx +++ b/frontend/src/views/DataViews/CaseCollection.tsx @@ -21,7 +21,6 @@ import FormPopup from '../FormPopup'; export type RemsCase = { case_number?: string; - auth_number?: string; patientFirstName?: string; patientLastName?: string; patientDOB?: string; @@ -162,7 +161,6 @@ const CaseCollection = (props: { refresh: boolean }) => { Patient DOB Status Dispense Status - Authorization Number Met Requirements Delete @@ -180,7 +178,6 @@ const CaseCollection = (props: { refresh: boolean }) => { {row.patientDOB} {row.status} {row.dispenseStatus} - {row.auth_number} {metReq} ( const remsCaseCollectionSchema = new Schema({ case_number: { type: String }, - auth_number: { type: String }, status: { type: String }, dispenseStatus: { type: String }, drugName: { type: String }, diff --git a/src/lib/etasu.ts b/src/lib/etasu.ts index 8922b5b9..e66ac424 100644 --- a/src/lib/etasu.ts +++ b/src/lib/etasu.ts @@ -33,11 +33,6 @@ router.get('/met/:caseId', async (req: Request, res: Response) => { res.send(await remsCaseCollection.findOne({ case_number: req.params.caseId })); }); -router.get('/met/auth/:authNumber', async (req: Request, res: Response) => { - console.log('get etasu by authnumber: ' + req.params.authNumber); - res.send(await remsCaseCollection.findOne({ auth_number: req.params.authNumber })); -}); - export const getCaseInfo = async ( remsCaseSearchDict: FilterQuery, medicationSearchDict: FilterQuery @@ -45,7 +40,7 @@ export const getCaseInfo = async ( RemsCase, | 'status' | 'drugName' - | 'auth_number' + | 'case_number' | 'drugCode' | 'patientFirstName' | 'patientLastName' @@ -66,7 +61,7 @@ export const getCaseInfo = async ( RemsCase, | 'status' | 'drugName' - | 'auth_number' + | 'case_number' | 'drugCode' | 'patientFirstName' | 'patientLastName' @@ -75,7 +70,7 @@ export const getCaseInfo = async ( > = { status: 'Approved', drugName: drug?.name, - auth_number: remsCaseSearchDict.auth_number || '', + case_number: remsCaseSearchDict.case_number || '', drugCode: drug?.code, patientFirstName: remsCaseSearchDict.patientFirstName || '', patientLastName: remsCaseSearchDict.patientLastName || '', @@ -230,7 +225,6 @@ const createMetRequirementAndNewCase = async ( const remsRequest: Pick< RemsCase, | 'case_number' - | 'auth_number' | 'status' | 'dispenseStatus' | 'drugName' @@ -241,7 +235,6 @@ const createMetRequirementAndNewCase = async ( | 'metRequirements' > = { case_number: case_number, - auth_number: '', status: remsRequestCompletedStatus, dispenseStatus: dispenseStatusDefault, drugName: drug?.name, @@ -390,7 +383,6 @@ const createMetRequirementAndUpdateCase = async ( if (!foundUncompleted && remsRequestToUpdate?.status === 'Pending') { remsRequestToUpdate.status = 'Approved'; - remsRequestToUpdate.auth_number = uid(); await remsRequestToUpdate.save(); } } diff --git a/src/services/guidanceresponse.service.ts b/src/services/guidanceresponse.service.ts index de37ed92..c2739e5a 100644 --- a/src/services/guidanceresponse.service.ts +++ b/src/services/guidanceresponse.service.ts @@ -58,7 +58,7 @@ module.exports.remsEtasu = async (args: any, context: any, logger: any) => { const parameters: Parameters = args?.resource; let patient: Patient | undefined; let medication: Medication | MedicationRequest | undefined; - let authNumber: string | undefined; + let caseNumber: string | undefined; parameters?.parameter?.forEach(param => { if (param?.name === 'patient' && param?.resource?.resourceType === 'Patient') { @@ -69,15 +69,15 @@ module.exports.remsEtasu = async (args: any, context: any, logger: any) => { param.resource?.resourceType === 'MedicationRequest') ) { medication = param.resource; - } else if (param?.name === 'authNumber') { - authNumber = param.valueString; + } else if (param?.name === 'caseNumber') { + caseNumber = param.valueString; } }); let etasu: Pick< RemsCase, | 'drugName' - | 'auth_number' + | 'case_number' | 'status' | 'drugCode' | 'patientFirstName' @@ -86,9 +86,9 @@ module.exports.remsEtasu = async (args: any, context: any, logger: any) => { | 'metRequirements' > | null; - if (authNumber) { + if (caseNumber) { const remsCaseSearchDict = { - auth_number: authNumber + case_number: caseNumber }; const medicationSearchDict = {}; diff --git a/test/server.test.ts b/test/server.test.ts index 8b57a17b..f96340ee 100644 --- a/test/server.test.ts +++ b/test/server.test.ts @@ -25,7 +25,7 @@ describe('REMSServer class', () => { const set = sinon.spy(server.app, 'set'); const use = sinon.spy(server.app, 'use'); - server.configureMiddleware(); + server.configureMiddleware({}); expect(set.callCount).to.equal(6); expect(set.getCall(4).args[0]).to.equal('showStackError'); expect(set.getCall(4).args[1]).to.be.true; @@ -87,20 +87,20 @@ describe('REMSServer class', () => { }); it('should be able to prepopulate data without error', async () => { - expect(await metRequirementsCollection.count({})).to.equal(0); - expect(await medicationCollection.count({})).to.equal(0); + expect(await metRequirementsCollection.countDocuments({})).to.equal(0); + expect(await medicationCollection.countDocuments({})).to.equal(0); await FhirUtilities.populateDB(); - expect(await metRequirementsCollection.count({})).to.not.equal(0); - expect(await medicationCollection.count({})).to.not.equal(0); + expect(await metRequirementsCollection.countDocuments({})).to.not.equal(0); + expect(await medicationCollection.countDocuments({})).to.not.equal(0); await FhirUtilities.populateDB(); }); it('should be able to load artifacts from filesystem', async () => { - expect(await LibraryModel.count({})).to.equal(0); - expect(await QuestionnaireModel.count({})).to.equal(0); + expect(await LibraryModel.countDocuments({})).to.equal(0); + expect(await QuestionnaireModel.countDocuments({})).to.equal(0); await FhirUtilities.loadResources('./test/fixtures/cds-library'); - expect(await LibraryModel.count({})).to.not.equal(0); - expect(await QuestionnaireModel.count({})).to.not.equal(0); + expect(await LibraryModel.countDocuments({})).to.not.equal(0); + expect(await QuestionnaireModel.countDocuments({})).to.not.equal(0); await FhirUtilities.loadResources('./test/fixtures/cds-library'); }); });