import type * as React from 'react'; import { vi, describe, expect, test } from 'vitest'; import dayjs from 'dayjs'; import useSWR from 'swr'; import { updateMedicationRequestFulfillerStatus, useMedicationRequest, usePatientAllergies, usePrescriptionDetails, usePrescriptionsTable, } from './medication-request.resource'; import { openmrsFetch, parseDate } from '@openmrs/esm-framework'; import { MedicationRequestFulfillerStatus } from '../types'; import { JSON_MERGE_PATH_MIME_TYPE, OPENMRS_FHIR_EXT_REQUEST_FULFILLER_STATUS } from '../constants'; vi.mocked(openmrsFetch); vi.mock('swr'); vi.mock('react', async (importOriginal) => { const actual = await importOriginal(); return { ...actual, useMemo: vi.fn((fn) => fn()), }; }); describe('Medication Request Resource Test', () => { test('usePrescriptionsTable should call active endpoint and proper date based on expiration period if status parameter is active', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: 'mockedReturnData' } })); usePrescriptionsTable(true, '', 'ACTIVE', 5, 5, 'bob', null, 10, 10000); expect(useSWR).toHaveBeenCalledWith( `/ws/fhir2/R4/Encounter?_query=encountersWithMedicationRequests&_getpagesoffset=5&_count=5&date=ge${dayjs() .startOf('day') .subtract(10, 'day') .toISOString()}&status=ACTIVE&patientSearchTerm=bob`, openmrsFetch, { refreshInterval: 10000 }, ); }); test('usePrescriptionsTable should call all endpoint if status parameter is not active', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: 'mockedReturnData' } })); usePrescriptionsTable(true, '', '', 5, 5, 'bob', null, 10, 10000); expect(useSWR).toHaveBeenCalledWith( `/ws/fhir2/R4/Encounter?_query=encountersWithMedicationRequests&_getpagesoffset=5&_count=5&status=&patientSearchTerm=bob`, openmrsFetch, { refreshInterval: 10000 }, ); }); test('usePrescriptionsTable should include location uuids', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: 'mockedReturnData' } })); usePrescriptionsTable( true, '', '', 5, 5, 'bob', [ { id: '123', name: 'Some Location' }, { id: '456', name: 'Other Location' }, ], 10, 10000, ); expect(useSWR).toHaveBeenCalledWith( `/ws/fhir2/R4/Encounter?_query=encountersWithMedicationRequests&_getpagesoffset=5&_count=5&status=&patientSearchTerm=bob&location=123,456`, openmrsFetch, { refreshInterval: 10000 }, ); }); test('usePrescriptionTable and buildPrescriptionsTableRow should properly parse search results into prescription table', () => { const queryResultsBundle = { resourceType: 'Bundle', id: '098e279f-bab5-4e38-82d5-83e25ec92dfc', meta: { lastUpdated: '2023-02-28T16:01:42.841-05:00', }, type: 'searchset', total: 26, link: [ { relation: 'self', url: 'http://localhost:8080/openmrs/ws/fhir2/R4/Encounter?_count=2&_getpagesoffset=0&_query=encountersWithMedicationRequests&_tag=http%3A%2F%2Ffhir.openmrs.org%2Fext%2Fencounter-tag%7Cencounter', }, { relation: 'next', url: 'http://localhost:8080/openmrs/ws/fhir2/R4?_getpages=05518e5c-1b97-4197-8b79-9c254a097d3a&_getpagesoffset=2&_count=2&_bundletype=searchset', }, ], entry: [ { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/Encounter/7aee7123-9e50-4f72-a636-895d77a63e98', resource: { resourceType: 'Encounter', id: '7aee7123-9e50-4f72-a636-895d77a63e98', meta: { lastUpdated: '2023-01-24T19:02:04.000-05:00', tag: [ { system: 'http://fhir.openmrs.org/ext/encounter-tag', code: 'encounter', display: 'Encounter', }, ], }, text: { status: 'generated', div: '
Id:7aee7123-9e50-4f72-a636-895d77a63e98
Status:UNKNOWN
Class: (Details: http://terminology.hl7.org/CodeSystem/v3-ActCode )
Type: Drug Order Documentation
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Period:2023-01-24 19:02:04.0 - ?
', }, status: 'unknown', class: { system: 'http://terminology.hl7.org/CodeSystem/v3-ActCode', code: 'AMB', }, type: [ { coding: [ { system: 'http://fhir.openmrs.org/code-system/encounter-type', code: '0b242b71-5b60-11eb-8f5a-0242ac110002', display: 'Drug Order Documentation', }, ], }, ], subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, period: { start: '2023-01-24T19:02:04-05:00', }, location: [ { location: { reference: 'Location/083e75b0-5959-11e4-8ed6-0800200c9a66', type: 'Location', display: 'CDI Klinik Ekstèn Jeneral', }, }, ], }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2', resource: { resourceType: 'Encounter', id: '8be2352d-c10d-4111-ac01-0ccada4c54d2', meta: { lastUpdated: '2023-01-24T18:42:09.000-05:00', tag: [ { system: 'http://fhir.openmrs.org/ext/encounter-tag', code: 'encounter', display: 'Encounter', }, ], }, text: { status: 'generated', div: '
Id:8be2352d-c10d-4111-ac01-0ccada4c54d2
Status:UNKNOWN
Class: (Details: http://terminology.hl7.org/CodeSystem/v3-ActCode )
Type: Drug Order Documentation
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Period:2023-01-24 18:42:09.0 - ?
', }, status: 'unknown', class: { system: 'http://terminology.hl7.org/CodeSystem/v3-ActCode', code: 'AMB', }, type: [ { coding: [ { system: 'http://fhir.openmrs.org/code-system/encounter-type', code: '0b242b71-5b60-11eb-8f5a-0242ac110002', display: 'Drug Order Documentation', }, ], }, ], subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, period: { start: '2023-01-24T18:42:09-05:00', }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationRequest/d4f69a68-1171-4e47-8693-478df18daf40', resource: { resourceType: 'MedicationRequest', id: 'd4f69a68-1171-4e47-8693-478df18daf40', meta: { lastUpdated: '2023-01-24T19:02:04.000-05:00', }, text: { status: 'generated', div: '
Id:d4f69a68-1171-4e47-8693-478df18daf40
Status:COMPLETED
Intent:ORDER
Priority:ROUTINE
Medication:Ascorbic acid (Vitamin C), 250mg tablet
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Encounter:Encounter/7aee7123-9e50-4f72-a636-895d77a63e98
Authored On:24/01/2023
Requester:Goodrich, Mark (Identifier: MAADH)
Note:
Dosage Instruction:
test
Dispense Requests:
-Initial FillDispense IntervalValidity PeriodNumber of Repeats AllowedQuantityExpected Supply DurationPerformer
*
Quantity:
Duration:
2023-01-24 19:02:04.0 - ? 8 7.0 Application
', }, status: 'completed', intent: 'order', priority: 'routine', medicationReference: { reference: 'Medication/c8d3444c-41a4-48d3-9ec1-811fe7b27d99', type: 'Medication', display: 'Ascorbic acid (Vitamin C), 250mg tablet', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, encounter: { reference: 'Encounter/7aee7123-9e50-4f72-a636-895d77a63e98', type: 'Encounter', }, authoredOn: '2023-01-24T19:02:04-05:00', requester: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, dosageInstruction: [ { text: 'test', timing: { repeat: { duration: 6, durationUnit: 'd', }, code: { coding: [ { code: '37328251-6759-4270-8a2e-8cab2c0b315b', display: 'OD (once daily)', }, { system: 'http://snomed.info/sct', code: '229797004', display: 'OD (once daily)', }, ], text: 'OD (once daily)', }, }, asNeededBoolean: false, route: { coding: [ { code: '46aaaca8-1f21-410a-aac9-67bfcc1fd577', display: 'Oral', }, { system: 'http://snomed.info/sct', code: '26643006', display: 'Oral', }, ], text: 'Oral', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Ampule(s)', system: 'http://snomed.info/sct', code: '413516001', }, }, ], }, ], dispenseRequest: { validityPeriod: { start: '2023-01-24T19:02:04-05:00', }, numberOfRepeatsAllowed: 8, quantity: { value: 7.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationDispense/d5eb4c01-01a8-44e5-8852-720c499d6260', resource: { resourceType: 'MedicationDispense', id: 'd5eb4c01-01a8-44e5-8852-720c499d6260', meta: { lastUpdated: '2023-02-02T14:19:57.000-05:00', }, status: 'completed', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, performer: [ { actor: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, }, ], authorizingPrescription: [ { reference: 'MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', type: 'MedicationRequest', }, ], quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, whenPrepared: '2023-02-02T14:19:51-05:00', whenHandedOver: '2023-02-02T14:19:51-05:00', dosageInstruction: [ { timing: { code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], substitution: { wasSubstituted: false, type: { coding: [ { code: '99836b5f-12a6-48c0-8bed-8bbc0346c42d', display: 'Generic composition substitution', }, ], text: 'Generic composition substitution', }, reason: [ { coding: [ { code: '9fb2111c-031e-47de-afaf-160c15b19f7c', display: 'Formulary policy', }, ], text: 'Formulary policy', }, ], }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', resource: { resourceType: 'MedicationRequest', id: '1c1ad91e-8653-453a-9f59-8d5c36249aff', meta: { lastUpdated: '2023-01-24T18:42:09.000-05:00', }, text: { status: 'generated', div: '
Id:1c1ad91e-8653-453a-9f59-8d5c36249aff
Status:ACTIVE
Intent:ORDER
Priority:ROUTINE
Medication:Paracetamol, 100mg rectal suppository
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Encounter:Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2
Authored On:24/01/2023
Requester:Goodrich, Mark (Identifier: MAADH)
Note:
Dosage Instruction:
Dispense Requests:
-Initial FillDispense IntervalValidity PeriodNumber of Repeats AllowedQuantityExpected Supply DurationPerformer
*
Quantity:
Duration:
2023-01-24 18:42:09.0 - ? 5 5.0 Application
', }, status: 'active', intent: 'order', priority: 'routine', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, encounter: { reference: 'Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2', type: 'Encounter', }, authoredOn: '2023-01-24T18:42:09-05:00', requester: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, dosageInstruction: [ { timing: { repeat: { duration: 5, durationUnit: 'wk', }, code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], dispenseRequest: { validityPeriod: { start: '2023-01-24T18:42:09-05:00', }, numberOfRepeatsAllowed: 5, quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationDispense/8841f349-0a86-43d2-80f5-020b70553a99', resource: { resourceType: 'MedicationDispense', id: '8841f349-0a86-43d2-80f5-020b70553a99', meta: { lastUpdated: '2023-02-02T14:09:35.000-05:00', }, status: 'completed', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, performer: [ { actor: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, }, ], authorizingPrescription: [ { reference: 'MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', type: 'MedicationRequest', }, ], quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, whenPrepared: '2023-02-02T14:04:11-05:00', whenHandedOver: '2023-02-02T14:04:11-05:00', dosageInstruction: [ { timing: { code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], substitution: { wasSubstituted: false, type: { coding: [ { code: '03795bf1-44be-4589-9873-0ea312a082fb', display: 'Formulary substitution', }, ], text: 'Formulary substitution', }, reason: [ { coding: [ { code: '163057AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Continue treatment', }, { system: 'http://snomed.info/sct', code: '266714009', display: 'Continue treatment', }, ], text: 'Continue treatment', }, ], }, }, }, ], }; // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: queryResultsBundle } })); const { prescriptionsTableRows, totalOrders } = usePrescriptionsTable( true, '', 'ACTIVE', 2, 0, 'bob', [], 90, 10000, ); expect(totalOrders).toBe(26); expect(prescriptionsTableRows.length).toBe(2); expect(prescriptionsTableRows[0].id).toBe('7aee7123-9e50-4f72-a636-895d77a63e98'); expect(prescriptionsTableRows[0].created).toBe('2023-01-24T19:02:04-05:00'); expect(prescriptionsTableRows[0].drugs).toBe('Ascorbic acid (Vitamin C), 250mg tablet'); expect(prescriptionsTableRows[0].lastDispenser).toBeUndefined(); expect(prescriptionsTableRows[0].patient.name).toBe('Dylan, Bob (ZL EMR ID: Y2CK2G)'); expect(prescriptionsTableRows[0].patient.uuid).toBe('558494fe-5850-4b34-a3bf-06550334ba4a'); expect(prescriptionsTableRows[0].prescriber).toBe('Goodrich, Mark (Identifier: MAADH)'); expect(prescriptionsTableRows[0].status).toBe('completed'); expect(prescriptionsTableRows[0].location).toBe('CDI Klinik Ekstèn Jeneral'); expect(prescriptionsTableRows[1].id).toBe('8be2352d-c10d-4111-ac01-0ccada4c54d2'); expect(prescriptionsTableRows[1].created).toBe('2023-01-24T18:42:09-05:00'); expect(prescriptionsTableRows[1].drugs).toBe('Paracetamol, 100mg rectal suppository'); expect(prescriptionsTableRows[1].lastDispenser).toBe('Goodrich, Mark (Identifier: MAADH)'); expect(prescriptionsTableRows[1].patient.name).toBe('Dylan, Bob (ZL EMR ID: Y2CK2G)'); expect(prescriptionsTableRows[1].patient.uuid).toBe('558494fe-5850-4b34-a3bf-06550334ba4a'); expect(prescriptionsTableRows[1].prescriber).toBe('Goodrich, Mark (Identifier: MAADH)'); expect(prescriptionsTableRows[1].status).toBe('expired'); expect(prescriptionsTableRows[1].location).toBeNull(); }); test('usePrescriptionsDetails should call endpoint with encounter uuid', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: [] } })); usePrescriptionDetails('123abc', 10000); expect(useSWR).toHaveBeenCalledWith( '/ws/fhir2/R4/MedicationRequest?encounter=123abc&_revinclude=MedicationDispense:prescription&_include=MedicationRequest:encounter', openmrsFetch, { refreshInterval: 10000 }, ); }); test('usePrescriptionDetails should properly parse medication request response', () => { const queryRequestBundle = { resourceType: 'Bundle', id: '1aafa3c6-83c2-4485-baaa-f700056e43c9', meta: { lastUpdated: '2023-03-01T09:47:17.436-05:00', }, type: 'searchset', total: 1, link: [ { relation: 'self', url: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationRequest?_include=MedicationRequest%3Aencounter&_revinclude=MedicationDispense%3Aprescription&encounter=8be2352d-c10d-4111-ac01-0ccada4c54d2', }, ], entry: [ { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', resource: { resourceType: 'MedicationRequest', id: '1c1ad91e-8653-453a-9f59-8d5c36249aff', meta: { lastUpdated: '2023-01-24T18:42:09.000-05:00', }, text: { status: 'generated', div: '
Id:1c1ad91e-8653-453a-9f59-8d5c36249aff
Status:STOPPED
Intent:ORDER
Priority:ROUTINE
Medication:Paracetamol, 100mg rectal suppository
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Encounter:Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2
Authored On:24/01/2023
Requester:Goodrich, Mark (Identifier: MAADH)
Note:
Dosage Instruction:
Dispense Requests:
-Initial FillDispense IntervalValidity PeriodNumber of Repeats AllowedQuantityExpected Supply DurationPerformer
*
Quantity:
Duration:
2023-01-24 18:42:09.0 - ? 5 5.0 Application
', }, status: 'stopped', intent: 'order', priority: 'routine', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, encounter: { reference: 'Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2', type: 'Encounter', }, authoredOn: '2023-01-24T18:42:09-05:00', requester: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, dosageInstruction: [ { timing: { repeat: { duration: 5, durationUnit: 'wk', }, code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], dispenseRequest: { validityPeriod: { start: '2023-01-24T18:42:09-05:00', }, numberOfRepeatsAllowed: 5, quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationDispense/d5eb4c01-01a8-44e5-8852-720c499d6260', resource: { resourceType: 'MedicationDispense', id: 'd5eb4c01-01a8-44e5-8852-720c499d6260', meta: { lastUpdated: '2023-02-02T14:19:57.000-05:00', }, status: 'completed', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, performer: [ { actor: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, }, ], authorizingPrescription: [ { reference: 'MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', type: 'MedicationRequest', }, ], quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, whenPrepared: '2023-02-02T14:19:51-05:00', whenHandedOver: '2023-02-01T14:19:51-05:00', dosageInstruction: [ { timing: { code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], substitution: { wasSubstituted: false, type: { coding: [ { code: '99836b5f-12a6-48c0-8bed-8bbc0346c42d', display: 'Generic composition substitution', }, ], text: 'Generic composition substitution', }, reason: [ { coding: [ { code: '9fb2111c-031e-47de-afaf-160c15b19f7c', display: 'Formulary policy', }, ], text: 'Formulary policy', }, ], }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/Encounter/8be2352d-c10d-4111-ac01-0ccada4c54d2', resource: { resourceType: 'Encounter', id: '8be2352d-c10d-4111-ac01-0ccada4c54d2', meta: { lastUpdated: '2023-01-24T18:42:09.000-05:00', tag: [ { system: 'http://fhir.openmrs.org/ext/encounter-tag', code: 'encounter', display: 'Encounter', }, ], }, text: { status: 'generated', div: '
Id:8be2352d-c10d-4111-ac01-0ccada4c54d2
Status:UNKNOWN
Class: (Details: http://terminology.hl7.org/CodeSystem/v3-ActCode )
Type: Drug Order Documentation
Subject:Dylan, Bob (ZL EMR ID: Y2CK2G)
Period:2023-01-24 18:42:09.0 - ?
', }, status: 'unknown', class: { system: 'http://terminology.hl7.org/CodeSystem/v3-ActCode', code: 'AMB', }, type: [ { coding: [ { system: 'http://fhir.openmrs.org/code-system/encounter-type', code: '0b242b71-5b60-11eb-8f5a-0242ac110002', display: 'Drug Order Documentation', }, ], }, ], subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, period: { start: '2023-01-24T18:42:09-05:00', }, }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/MedicationDispense/8841f349-0a86-43d2-80f5-020b70553a99', resource: { resourceType: 'MedicationDispense', id: '8841f349-0a86-43d2-80f5-020b70553a99', meta: { lastUpdated: '2023-02-02T14:09:35.000-05:00', }, status: 'completed', medicationReference: { reference: 'Medication/60520315-2c98-425a-b404-d282f8c841ec', type: 'Medication', display: 'Paracetamol, 100mg rectal suppository', }, subject: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, performer: [ { actor: { reference: 'Practitioner/19e06fb0-22ea-4dd4-aafd-da14c14a1487', type: 'Practitioner', identifier: { value: 'MAADH', }, display: 'Goodrich, Mark (Identifier: MAADH)', }, }, ], authorizingPrescription: [ { reference: 'MedicationRequest/1c1ad91e-8653-453a-9f59-8d5c36249aff', type: 'MedicationRequest', }, ], quantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, whenPrepared: '2023-02-02T14:04:11-05:00', whenHandedOver: '2023-02-02T14:04:11-05:00', dosageInstruction: [ { timing: { code: { coding: [ { code: '023bee9c-2dbb-483c-8401-46f0ccf6b333', display: 'ON (night)', }, ], text: 'ON (night)', }, }, asNeededBoolean: false, route: { coding: [ { code: '304da4df-f376-4a3f-ba70-c9fbc8fe8fa6', display: 'Intravenous', }, { system: 'http://snomed.info/sct', code: '47625008', display: 'Intravenous', }, ], text: 'Intravenous', }, doseAndRate: [ { doseQuantity: { value: 5.0, unit: 'Application', system: 'http://snomed.info/sct', code: '413568008', }, }, ], }, ], substitution: { wasSubstituted: false, type: { coding: [ { code: '03795bf1-44be-4589-9873-0ea312a082fb', display: 'Formulary substitution', }, ], text: 'Formulary substitution', }, reason: [ { coding: [ { code: '163057AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Continue treatment', }, { system: 'http://snomed.info/sct', code: '266714009', display: 'Continue treatment', }, ], text: 'Continue treatment', }, ], }, }, }, ], }; // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: queryRequestBundle } })); const { medicationRequestBundles, prescriptionDate } = usePrescriptionDetails( '1aafa3c6-83c2-4485-baaa-f700056e43c9', 10000, ); expect(medicationRequestBundles.length).toBe(1); expect(medicationRequestBundles[0].request.id).toBe('1c1ad91e-8653-453a-9f59-8d5c36249aff'); expect(medicationRequestBundles[0].dispenses.length).toBe(2); expect(medicationRequestBundles[0].dispenses[0].id).toBe('8841f349-0a86-43d2-80f5-020b70553a99'); expect(medicationRequestBundles[0].dispenses[1].id).toBe('d5eb4c01-01a8-44e5-8852-720c499d6260'); expect(prescriptionDate.toISOString()).toBe(parseDate('2023-01-24T18:42:09-05:00').toISOString()); }); test('usePatientAllergies should call endpoint with patient uuid', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: [] } })); usePatientAllergies('123abc', 10000); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/AllergyIntolerance?patient=123abc', openmrsFetch, { refreshInterval: 10000, }); }); test('usePatientAllergies should parse allergy response', () => { const queryRequestBundle = { resourceType: 'Bundle', id: '9fef5048-2d50-4c0c-8e61-4c705b7260b5', meta: { lastUpdated: '2023-03-01T10:02:05.265-05:00', }, type: 'searchset', total: 2, link: [ { relation: 'self', url: 'http://localhost:8080/openmrs/ws/fhir2/R4/AllergyIntolerance?patient=558494fe-5850-4b34-a3bf-06550334ba4a', }, ], entry: [ { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/AllergyIntolerance/c8baf2e4-05d1-4797-a0c0-3c55cf32eda7', resource: { resourceType: 'AllergyIntolerance', id: 'c8baf2e4-05d1-4797-a0c0-3c55cf32eda7', meta: { lastUpdated: '2023-03-01T10:01:52.000-05:00', }, text: { status: 'generated', div: '
Id:c8baf2e4-05d1-4797-a0c0-3c55cf32eda7
Clinical Status:Active
Verification Status:Confirmed
Type:ALLERGY
Category: Enumeration[medication]
Criticality:UNABLETOASSESS
Code: Cephalosporins
Patient:Dylan, Bob (ZL EMR ID: Y2CK2G)
Recorded Date:01/03/2023
Recorder:Goodrich, Mark
Note:
tets
Reaction:
Substance: Cephalosporins
Manifestation:
Anemia
Severity:MODERATE
', }, clinicalStatus: { coding: [ { system: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical', code: 'active', display: 'Active', }, ], text: 'Active', }, verificationStatus: { coding: [ { system: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-verification', code: 'confirmed', display: 'Confirmed', }, ], text: 'Confirmed', }, type: 'allergy', category: ['medication'], criticality: 'unable-to-assess', code: { coding: [ { code: '162301AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Cephalosporins', }, { system: 'http://snomed.info/sct', code: '51779009', display: 'Cephalosporins', }, ], }, patient: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, recordedDate: '2023-03-01T10:01:52-05:00', recorder: { reference: 'Practitioner/92d873a8-c787-4465-aa4b-5b6197902587', type: 'Practitioner', display: 'Goodrich, Mark', }, note: [ { text: 'tets', }, ], reaction: [ { substance: { coding: [ { code: '162301AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Cephalosporins', }, { system: 'http://snomed.info/sct', code: '51779009', display: 'Cephalosporins', }, ], }, manifestation: [ { coding: [ { code: '3ccc4764-26fe-102b-80cb-0017a47871b2', display: 'Anemia', }, { system: 'http://snomed.info/sct', code: '271737000', display: 'Anemia', }, ], }, ], severity: 'moderate', }, ], }, }, { fullUrl: 'http://localhost:8080/openmrs/ws/fhir2/R4/AllergyIntolerance/b65c893f-4cd3-481e-aebf-4e2d03cff28b', resource: { resourceType: 'AllergyIntolerance', id: 'b65c893f-4cd3-481e-aebf-4e2d03cff28b', meta: { lastUpdated: '2023-03-01T10:01:59.000-05:00', }, text: { status: 'generated', div: '
Id:b65c893f-4cd3-481e-aebf-4e2d03cff28b
Clinical Status:Active
Verification Status:Confirmed
Type:ALLERGY
Category: Enumeration[food]
Code: Dairy food
Patient:Dylan, Bob (ZL EMR ID: Y2CK2G)
Recorded Date:01/03/2023
Recorder:Goodrich, Mark
Note:
Reaction:
Substance: Dairy food
Manifestation:
Anaphylaxis
', }, clinicalStatus: { coding: [ { system: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical', code: 'active', display: 'Active', }, ], text: 'Active', }, verificationStatus: { coding: [ { system: 'http://terminology.hl7.org/CodeSystem/allergyintolerance-verification', code: 'confirmed', display: 'Confirmed', }, ], text: 'Confirmed', }, type: 'allergy', category: ['food'], code: { coding: [ { code: '162545AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Dairy food', }, { system: 'http://snomed.info/sct', code: '226760005', display: 'Dairy food', }, ], }, patient: { reference: 'Patient/558494fe-5850-4b34-a3bf-06550334ba4a', type: 'Patient', display: 'Dylan, Bob (ZL EMR ID: Y2CK2G)', }, recordedDate: '2023-03-01T10:01:59-05:00', recorder: { reference: 'Practitioner/92d873a8-c787-4465-aa4b-5b6197902587', type: 'Practitioner', display: 'Goodrich, Mark', }, reaction: [ { substance: { coding: [ { code: '162545AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', display: 'Dairy food', }, { system: 'http://snomed.info/sct', code: '226760005', display: 'Dairy food', }, ], }, manifestation: [ { coding: [ { code: '3cd68008-26fe-102b-80cb-0017a47871b2', display: 'Anaphylaxis', }, { system: 'http://snomed.info/sct', code: '39579001', display: 'Anaphylaxis', }, ], }, ], }, ], }, }, ], }; // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: queryRequestBundle } })); const { totalAllergies } = usePatientAllergies('558494fe-5850-4b34-a3bf-06550334ba4a', 10000); expect(totalAllergies).toBe(2); // TODO allergy parsing doesn't seem to be working? }); test('useMedicationRequest should prepend MedicationRequest and call endpoint if uuid passed in', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: [] } })); useMedicationRequest('123abc', 10000); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/MedicationRequest/123abc', openmrsFetch, { refreshInterval: 10000, }); }); test('useMedicationRequest should prepend MedicationRequest and call endpoint if uuid passed in', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: [] } })); useMedicationRequest('123abc', 10000); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/MedicationRequest/123abc', openmrsFetch, { refreshInterval: 10000, }); }); test('useMedicationRequest should not prepend MedicationRequest and call endpoint if full reference passed in', () => { // @ts-ignore useSWR.mockImplementation(() => ({ data: { data: [] } })); useMedicationRequest('MedicationRequest/123abc', 10000); expect(useSWR).toHaveBeenCalledWith('/ws/fhir2/R4/MedicationRequest/123abc', openmrsFetch, { refreshInterval: 10000, }); }); test('updateMedicationRequestFulfillerStatus should call medication request FHIR endpoint with appropriate data ', () => { const medicationRequestUuid = '123abc'; updateMedicationRequestFulfillerStatus(medicationRequestUuid, MedicationRequestFulfillerStatus.completed); expect(openmrsFetch).toHaveBeenCalledWith(`/ws/fhir2/R4/MedicationRequest/${medicationRequestUuid}`, { method: 'PATCH', headers: { 'Content-Type': JSON_MERGE_PATH_MIME_TYPE, }, body: { extension: [ { url: OPENMRS_FHIR_EXT_REQUEST_FULFILLER_STATUS, valueCode: MedicationRequestFulfillerStatus.completed, }, ], }, }); }); });