Skip to content

Commit

Permalink
(feat) added morgue compartment status logic functionality and make s…
Browse files Browse the repository at this point in the history
…earch services in the admission form searchable from charge items
  • Loading branch information
its-kios09 committed Jan 22, 2025
1 parent 2a96b0e commit 8a9e7a9
Show file tree
Hide file tree
Showing 6 changed files with 197 additions and 76 deletions.
12 changes: 6 additions & 6 deletions packages/esm-morgue-app/src/config-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const configSchema = {
morgueDepartmentServiceTypeUuid: {
_type: Type.String,
_description: ' UUID for morgue department service type',
_default: '030bb7ab-9aea-454a-aa17-96abf17727c7',
_default: '5b9e6cd1-f836-4144-91e4-401c58dd62af',
},
insurancepaymentModeUuid: {
_type: Type.String,
Expand All @@ -36,7 +36,7 @@ export const configSchema = {
tagNumberUuid: {
_type: Type.String,
_description: 'UUID for tag number concept',
_default: '13ba9c45-c540-4f10-b915-fa3d7baeb3d1',
_default: 'f2b35679-7ba9-4619-92cb-6872b0c6bf57',
},
morgueAdmissionEncounterType: {
_type: Type.String,
Expand All @@ -56,17 +56,17 @@ export const configSchema = {
obNumberUuid: {
_type: Type.String,
_description: 'UUID for ob number concept',
_default: 'c756d06a-22a5-4b66-933e-3d44667b72a0',
_default: '0dffecb3-2dc4-4d56-8cd4-56ba38579c69',
},
policeNameUuid: {
_type: Type.String,
_description: 'UUID for police name concept',
_default: '6d58d9b5-6f84-4e77-941e-f5cc86d18a60',
_default: 'd889f05b-0d9b-462f-ae8e-2e9be79fd954',
},
burialPermitNumberUuid: {
_type: Type.String,
_description: 'UUID for burial permit number concept',
_default: '29ef3df3-9845-49b0-96f2-5fb6d6240039',
_default: 'da524812-5600-4677-ba26-eb61eb925eef',
},
policeIDNumber: {
_type: Type.String,
Expand All @@ -81,7 +81,7 @@ export const configSchema = {
dischargeAreaUuid: {
_type: Type.String,
_description: 'UUID for discharge area concept',
_default: '734f9526-84db-4002-9d98-58da580e501f',
_default: '89ebccf1-4cca-4195-aeff-3e75fdf976b4',
},
adminUuid: {
_type: Type.String,
Expand Down
91 changes: 86 additions & 5 deletions packages/esm-morgue-app/src/hook/useMorgue.resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,16 +153,97 @@ export const useBillableItems = () => {
};
};

const getMorgueCompartmentStatus = async (
locationUuid: string,
morgueVisitTypeUuid: string,
morgueDischargeEncounter: string,
): Promise<'occupied' | 'unoccupied' | 'sharing'> => {
const customRepresentation =
'custom:(visitType:(uuid),startDatetime,stopDatetime,encounters:(location:(uuid),encounterType:(uuid)))';
const url = `${restBaseUrl}/visit?includeInactive=true&v=${customRepresentation}&visitType=${morgueVisitTypeUuid}&limit=1`;

const response = await openmrsFetch<{
results: Array<{
visitType: { uuid: string };
startDatetime: string;
stopDatetime: string | null;
encounters: Array<{
location: { uuid: string };
encounterType: { uuid: string };
}>;
}>;
}>(url);

const visits = response?.data?.results ?? [];

const locationVisits = visits.filter((visit) =>
visit.encounters.some((encounter) => encounter.location.uuid === locationUuid),
);

const hasActiveVisit = locationVisits.some((visit) => visit.startDatetime && !visit.stopDatetime);

const hasDischargedEncounter = locationVisits.some(
(visit) =>
visit.stopDatetime &&
visit.encounters.some((encounter) => encounter.encounterType.uuid === morgueDischargeEncounter),
);

if (hasActiveVisit) {
return 'occupied';
}
if (hasDischargedEncounter) {
return 'unoccupied';
}
return 'unoccupied';
};

export const useMorgueCompartment = () => {
const { morgueCompartmentTagUuid } = useConfig<ConfigObject>();
const { morgueCompartmentTagUuid, morgueVisitTypeUuid, morgueDischargeEncounterTypeUuid } = useConfig<ConfigObject>();

const customRepresentation = 'custom:(uuid,display,name)';
const url = `${restBaseUrl}/location?v=${customRepresentation}&tag=${morgueCompartmentTagUuid}`;
const { data, isLoading, error } = useSWR<FetchResponse<{ results: Array<Location> }>>(url, openmrsFetch);

const {
data: locationsData,
isLoading: isLocationsLoading,
error: locationsError,
} = useSWR<FetchResponse<{ results: Array<Location> }>>(url, openmrsFetch);

const [compartmentStatuses, setCompartmentStatuses] = useState([]);
const [statusError, setStatusError] = useState();
const [isStatusLoading, setIsStatusLoading] = useState(false);

useEffect(() => {
if (locationsData?.data?.results?.length) {
(async () => {
try {
setIsStatusLoading(true);

const statuses = await Promise.all(
locationsData.data.results.map((location) =>
getMorgueCompartmentStatus(location.uuid, morgueVisitTypeUuid, morgueDischargeEncounterTypeUuid),
),
);

setCompartmentStatuses(
locationsData.data.results.map((location, index) => ({
...location,
status: statuses[index],
})),
);
} catch (error) {
setStatusError(error);
} finally {
setIsStatusLoading(false);
}
})();
}
}, [locationsData, morgueVisitTypeUuid, morgueDischargeEncounterTypeUuid]);

return {
morgueCompartments: data?.data?.results ?? [],
isLoading,
error,
compartments: compartmentStatuses,
isLoading: isLocationsLoading || isStatusLoading,
error: locationsError ?? statusError,
};
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export const WaitingQueue: React.FC<WaitingQueueProps> = ({ isLoading, deceasedP
{ header: 'Age', key: 'age' },
{ header: 'Date of Death', key: 'deathDate' },
{ header: 'Cause of Death', key: 'causeOfDeath' },
{ header: 'Status', key: 'status' },
];

if (isLoading) {
Expand Down Expand Up @@ -65,7 +64,6 @@ export const WaitingQueue: React.FC<WaitingQueueProps> = ({ isLoading, deceasedP
identifier: openMrsId,
deathDate: formatDateTime(patient?.person?.person?.deathDate) || '--',
causeOfDeath: patient?.person?.person?.causeOfDeath?.display || '--',
status: <Tag type="magenta">{patient?.status || '--'}</Tag>,
};
});

Expand Down
1 change: 1 addition & 0 deletions packages/esm-morgue-app/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ export interface Location {
name: string;
uuid: string;
display: string;
status?: string;
}

export interface Visit {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ const DischargeForm: React.FC<DischargeFormProps> = ({ closeWorkspace, patientUu
{t('discard', 'Discard')}
</Button>
<Button kind="primary" size="lg" type="submit">
{t('admit', 'Admit')}
{t('submit', 'Submit')}
</Button>
</ButtonSet>
</Stack>
Expand Down
Loading

0 comments on commit 8a9e7a9

Please sign in to comment.