Skip to content

Commit

Permalink
U4X-575 : Include ART Numbers in the lab window as a second identifier (
Browse files Browse the repository at this point in the history
  • Loading branch information
jabahum authored May 17, 2024
1 parent ea128f0 commit 1abd692
Show file tree
Hide file tree
Showing 11 changed files with 141 additions and 111 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ const LaboratoryActiveTestOrderResults: React.FC<
enableSendingLabTestsByEmail,
laboratoryEncounterTypeUuid,
artCardEncounterTypeUuid,
laboratoryOrderTypeUuid,
} = useConfig();

const displayText = t(
Expand All @@ -103,15 +104,23 @@ const LaboratoryActiveTestOrderResults: React.FC<
return [...items]
?.filter(
(item) =>
item?.encounterType?.uuid === laboratoryEncounterTypeUuid ||
item?.encounterType?.uuid === artCardEncounterTypeUuid
(item?.encounterType?.uuid === laboratoryEncounterTypeUuid ||
item?.encounterType?.uuid === artCardEncounterTypeUuid) &&
item.orders.filter(
(order) => order.orderType === laboratoryOrderTypeUuid
)
)
?.sort((a, b) => {
const dateA = new Date(a.encounterDatetime);
const dateB = new Date(b.encounterDatetime);
return dateB.getTime() - dateA.getTime();
});
}, [artCardEncounterTypeUuid, items, laboratoryEncounterTypeUuid]);
}, [
artCardEncounterTypeUuid,
items,
laboratoryEncounterTypeUuid,
laboratoryOrderTypeUuid,
]);

const [searchTerm, setSearchTerm] = useState("");
const [laboratoryOrders, setLaboratoryOrders] = useState(sortedLabRequests);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ const LaboratoryOrderReferalResults: React.FC<
enableSendingLabTestsByEmail,
laboratoryEncounterTypeUuid,
artCardEncounterTypeUuid,
laboratoryOrderTypeUuid,
} = useConfig();

const displayText = t(
Expand Down Expand Up @@ -114,14 +115,23 @@ const LaboratoryOrderReferalResults: React.FC<
(item) =>
(item?.encounterType?.uuid === laboratoryEncounterTypeUuid ||
item?.encounterType?.uuid === artCardEncounterTypeUuid) &&
item?.orders?.filter((item) => item?.instructions === "REFER TO cphl")
item?.orders?.filter(
(order) =>
order?.instructions === "REFER TO cphl" ||
order.orderType === laboratoryOrderTypeUuid
)
)
?.sort((a, b) => {
const dateA = new Date(a.encounterDatetime);
const dateB = new Date(b.encounterDatetime);
return dateB.getTime() - dateA.getTime();
});
}, [artCardEncounterTypeUuid, items, laboratoryEncounterTypeUuid]);
}, [
artCardEncounterTypeUuid,
items,
laboratoryEncounterTypeUuid,
laboratoryOrderTypeUuid,
]);

const [searchTerm, setSearchTerm] = useState("");
const [laboratoryOrders, setLaboratoryOrders] = useState(sortedLabRequests);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ const LaboratoryPastTestOrderResults: React.FC<
enableSendingLabTestsByEmail,
laboratoryEncounterTypeUuid,
artCardEncounterTypeUuid,
laboratoryOrderTypeUuid,
} = useConfig();

const displayText = t(
Expand All @@ -98,15 +99,23 @@ const LaboratoryPastTestOrderResults: React.FC<
return [...items]
?.filter(
(item) =>
item?.encounterType?.uuid === laboratoryEncounterTypeUuid ||
item?.encounterType?.uuid === artCardEncounterTypeUuid
(item?.encounterType?.uuid === laboratoryEncounterTypeUuid ||
item?.encounterType?.uuid === artCardEncounterTypeUuid) &&
item.orders.filter(
(order) => order.orderType === laboratoryOrderTypeUuid
)
)
?.sort((a, b) => {
const dateA = new Date(a.encounterDatetime);
const dateB = new Date(b.encounterDatetime);
return dateB.getTime() - dateA.getTime();
});
}, [artCardEncounterTypeUuid, items, laboratoryEncounterTypeUuid]);
}, [
artCardEncounterTypeUuid,
items,
laboratoryEncounterTypeUuid,
laboratoryOrderTypeUuid,
]);

const [searchTerm, setSearchTerm] = useState("");
const [laboratoryOrders, setLaboratoryOrders] = useState(sortedLabRequests);
Expand Down
15 changes: 10 additions & 5 deletions src/referred-orders/referred-orders.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,17 @@ const ReferredOrdersList: React.FC = () => {

{ id: 1, header: t("orderNumber", "Order Number"), key: "orderNumber" },
{ id: 2, header: t("patient", "Patient"), key: "patient" },
{ id: 3, header: t("artNumber", "Art Number"), key: "artNumber" },

{
id: 3,
id: 4,
header: t("accessionNumber", "Accession Number"),
key: "accessionNumber",
},
{ id: 4, header: t("test", "Test"), key: "test" },
{ id: 5, header: t("status", "Status"), key: "status" },
{ id: 6, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 7, header: t("urgency", "Urgency"), key: "urgency" },
{ id: 5, header: t("test", "Test"), key: "test" },
{ id: 6, header: t("status", "Status"), key: "status" },
{ id: 7, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 8, header: t("urgency", "Urgency"), key: "urgency" },
];
const tableRows = useMemo(() => {
return paginatedReferredOrderEntries.map((entry, index) => ({
Expand All @@ -78,6 +79,10 @@ const ReferredOrdersList: React.FC = () => {
{entry?.patient?.display.split("-")[1]}
</ConfigurableLink>
),
artNumber: entry.patient?.identifiers.find(
(item) =>
item?.identifierType?.uuid === "e1731641-30ab-102d-86b0-7a5022ba4115"
).display,
orderNumber: entry?.orderNumber,
accessionNumber: entry?.accessionNumber,
test: entry?.concept?.display,
Expand Down
17 changes: 6 additions & 11 deletions src/reject-order/reject-order-dialog.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,18 @@ import React, { useState } from "react";

import {
Button,
ContentSwitcher,
Form,
ModalBody,
ModalFooter,
ModalHeader,
Select,
SelectItem,
Switch,
TextArea,
Grid,
Checkbox,
TextInput,
IconButton,
} from "@carbon/react";
import { useTranslation } from "react-i18next";
import styles from "./reject-order-dialog.scss";
import { Result } from "../work-list/work-list.resource";
import { RejectOrder } from "./reject-order-dialog.resource";
import { showNotification, showSnackbar } from "@openmrs/esm-framework";
import { extractErrorMessagesFromResponse } from "../utils/functions";

interface RejectOrderDialogProps {
order: Result;
Expand All @@ -39,7 +32,7 @@ const RejectOrderDialog: React.FC<RejectOrderDialogProps> = ({
event.preventDefault();

const payload = {
fulfillerStatus: "EXCEPTION", // Todo changed to Declined when UgEMR module is upgraded to 2.6.1
fulfillerStatus: "DECLINED", // Todo changed to Declined when UgEMR module is upgraded to 2.6.1
fulfillerComment: notes,
};
RejectOrder(order.uuid, payload).then(
Expand All @@ -55,12 +48,14 @@ const RejectOrderDialog: React.FC<RejectOrderDialogProps> = ({
});
closeModal();
},
(err) => {
(error) => {
const errorMessages = extractErrorMessagesFromResponse(error);

showNotification({
title: t(`errorRejecting order', 'Error Rejecting a order`),
kind: "error",
critical: true,
description: err?.message,
description: errorMessages.join(", "),
});
}
);
Expand Down
23 changes: 17 additions & 6 deletions src/reject-order/rejected-tests-list.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const RejectedTestsList: React.FC = () => {
const { data: pickedOrderList, isLoading } = useGetOrdersWorklist("");

const data = pickedOrderList.filter(
(item) => item?.fulfillerStatus === "EXCEPTION" || item?.action === "REVISE"
(item) => item?.fulfillerStatus === "DECLINED"
);

const pageSizes = [10, 20, 30, 40, 50];
Expand All @@ -44,12 +44,19 @@ const RejectedTestsList: React.FC = () => {
{ id: 0, header: t("date", "Date"), key: "date" },

{ id: 1, header: t("orderNumber", "Order Number"), key: "orderNumber" },
{ id: 2, header: t("patient", "Patient"), key: "patient" },
{ id: 3, header: t("test", "Test"), key: "test" },
{ id: 4, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 5, header: t("urgency", "Urgency"), key: "urgency" },
{
id: 6,
id: 2,
header: t("accessionNumber", "Accession Number"),
key: "accessionNumber",
},
{ id: 3, header: t("patient", "Patient"), key: "patient" },
{ id: 4, header: t("artNumber", "Art Number"), key: "artNumber" },

{ id: 5, header: t("test", "Test"), key: "test" },
{ id: 6, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 7, header: t("urgency", "Urgency"), key: "urgency" },
{
id: 8,
header: t("fulfillerComment", "Reason for Rejection"),
key: "fulfillerComment",
},
Expand All @@ -65,6 +72,10 @@ const RejectedTestsList: React.FC = () => {
</span>
),
patient: entry?.patient?.display.split("-")[1],
artNumber: entry.patient?.identifiers.find(
(item) =>
item?.identifierType?.uuid === "e1731641-30ab-102d-86b0-7a5022ba4115"
).display,
orderNumber: entry?.orderNumber,
accessionNumber: entry?.accessionNumber,
test: entry?.concept?.display,
Expand Down
11 changes: 7 additions & 4 deletions src/review-list/dialog/review-item.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { useGetConceptById } from "../../patient-chart/results-summary/results-s
import { ApproverOrder } from "./review-item.resource";
import { showNotification, showSnackbar } from "@openmrs/esm-framework";
import { Result } from "../../work-list/work-list.resource";
import { extractErrorMessagesFromResponse } from "../../utils/functions";

interface ReviewItemDialogProps {
encounterUuid: string;
Expand All @@ -43,9 +44,9 @@ const ReviewItem: React.FC<ReviewItemDialogProps> = ({

const testsOrder = useMemo(() => {
return encounter?.obs?.filter(
(item) => item?.order?.display === orderItem?.display
(item) => item?.order?.display === "Test Order"
);
}, [encounter?.obs, orderItem?.display]);
}, [encounter?.obs]);

const filteredGroupedResults = useMemo(() => {
let groupedResults = [];
Expand Down Expand Up @@ -74,12 +75,14 @@ const ReviewItem: React.FC<ReviewItemDialogProps> = ({
});
closeModal();
},
(err) => {
(error) => {
const errorMessages = extractErrorMessagesFromResponse(error);

showNotification({
title: t(`errorApproving order', 'Error Approving a order`),
kind: "error",
critical: true,
description: err?.message,
description: errorMessages.join(", "),
});
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
useSpecimenTypes,
} from "./add-to-worklist-dialog.resource";
import { Order } from "../../types/patient-queues";
import { extractErrorMessagesFromResponse } from "../../utils/functions";

interface AddToWorklistDialogProps {
queueId;
Expand Down Expand Up @@ -85,11 +86,13 @@ const AddToWorklistDialog: React.FC<AddToWorklistDialogProps> = ({
closeModal();
},
(error) => {
const errorMessages = extractErrorMessagesFromResponse(error);

showNotification({
title: t(`errorPicking an order', 'Error Picking an Order`),
kind: "error",
critical: true,
description: error?.message,
description: errorMessages.join(", "),
});
}
);
Expand All @@ -115,12 +118,14 @@ const AddToWorklistDialog: React.FC<AddToWorklistDialogProps> = ({
),
});
},
(err) => {
(error) => {
const errorMessages = extractErrorMessagesFromResponse(error);

showNotification({
title: t(`errorGeneratingId', 'Error Generating Sample Id`),
kind: "error",
critical: true,
description: err?.message,
description: errorMessages.join(", "),
});
}
);
Expand Down
13 changes: 9 additions & 4 deletions src/tests-ordered/tests-ordered-list.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,11 @@ const TestsOrderedList: React.FC<LaboratoryPatientListProps> = () => {

{ id: 1, header: t("orderNumber", "Order Number"), key: "orderNumber" },
{ id: 2, header: t("patient", "Patient"), key: "patient" },
{ id: 3, header: t("test", "Test"), key: "test" },
{ id: 4, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 5, header: t("urgency", "Urgency"), key: "urgency" },
{ id: 6, header: t("actions", "Actions"), key: "actions" },
{ id: 3, header: t("artNumber", "Art Number"), key: "artNumber" },
{ id: 4, header: t("test", "Test"), key: "test" },
{ id: 5, header: t("orderer", "Ordered By"), key: "orderer" },
{ id: 6, header: t("urgency", "Urgency"), key: "urgency" },
{ id: 7, header: t("actions", "Actions"), key: "actions" },
];

const tableRows = useMemo(() => {
Expand All @@ -74,6 +75,10 @@ const TestsOrderedList: React.FC<LaboratoryPatientListProps> = () => {
</span>
),
patient: entry?.patient?.display.split("-")[1],
artNumber: entry.patient?.identifiers.find(
(item) =>
item?.identifierType?.uuid === "e1731641-30ab-102d-86b0-7a5022ba4115"
).display,
orderNumber: entry?.orderNumber,
test: entry?.concept?.display,
action: entry?.action,
Expand Down
10 changes: 10 additions & 0 deletions src/utils/functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,3 +273,13 @@ export function OrderTagStyle(order: any) {
};
}
}

export function extractErrorMessagesFromResponse(errorObject) {
const fieldErrors = errorObject?.responseBody?.error?.fieldErrors;
if (!fieldErrors) {
return [errorObject?.responseBody?.error?.message ?? errorObject?.message];
}
return Object.values(fieldErrors).flatMap((errors: Array<Error>) =>
errors.map((error) => error.message)
);
}
Loading

0 comments on commit 1abd692

Please sign in to comment.