From 7a49c849459d6eef14c71982e0fd454f124aef08 Mon Sep 17 00:00:00 2001 From: musa-mets Date: Mon, 18 Nov 2024 21:44:20 +0300 Subject: [PATCH] U4X-838:Add a validation rule in that the clinical encounters (clinical assessment form) is saved only once in a day. --- package.json | 1 + packages/esm-ugandaemr-app/src/constants.ts | 1 + .../src/custom-expressions/custom-apis.ts | 27 +++++++++++++++++++ .../custom-expressions/custom-expressions.ts | 6 +++-- packages/esm-ugandaemr-app/src/index.ts | 2 ++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4d51385d..d3b7bdde 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ }, "devDependencies": { "@carbon/react": "^1.64.1", + "@openmrs/esm-form-engine-lib": "latest", "@openmrs/esm-framework": "next", "@openmrs/esm-patient-common-lib": "next", "@openmrs/esm-styleguide": "next", diff --git a/packages/esm-ugandaemr-app/src/constants.ts b/packages/esm-ugandaemr-app/src/constants.ts index 28f3aa44..1b88a022 100644 --- a/packages/esm-ugandaemr-app/src/constants.ts +++ b/packages/esm-ugandaemr-app/src/constants.ts @@ -30,3 +30,4 @@ export const REGISTRY_REGIONS_URL = 'https://nhfr-staging-api.planetsystems.co/n // privileges export const PRIVILEGE_UPDATE_FACILITY_CODE = 'Update Facility Code'; +export const dateFormat = 'YYYY-MM-DD'; diff --git a/packages/esm-ugandaemr-app/src/custom-expressions/custom-apis.ts b/packages/esm-ugandaemr-app/src/custom-expressions/custom-apis.ts index 08ad04e0..58dbf0b5 100644 --- a/packages/esm-ugandaemr-app/src/custom-expressions/custom-apis.ts +++ b/packages/esm-ugandaemr-app/src/custom-expressions/custom-apis.ts @@ -1,5 +1,7 @@ import { fhirBaseUrl, restBaseUrl, openmrsFetch } from '@openmrs/esm-framework'; import { configSchema } from '@ugandaemr/esm-care-panel-app/src/config-schema'; +import dayjs from "dayjs"; +import {dateFormat} from "../constants"; export async function getLatestObs(patientUuid: string, conceptUuid: string, encounterTypeUuid?: string) { let params = `patient=${patientUuid}&code=${conceptUuid}${ @@ -47,3 +49,28 @@ export async function getCohortCategorization(uuid: string) { return await openmrsFetch(apiUrl); } + +export async function getEncounters(patientUuid: string, encounterTypeUuid?: string) { + let params = `patient=${patientUuid}${encounterTypeUuid ? `&encounterType=${encounterTypeUuid}` : ''}`; + + const apiUrl = `${restBaseUrl}/encounter?${params}&v=custom:(uuid,encounterDatetime,encounterType:(uuid,name))`; + const { data } = await openmrsFetch(apiUrl); + + return ( + data?.results?.map((encounter) => ({ + uuid: encounter.uuid, + encounterDatetime: encounter.encounterDatetime, + encounterType: encounter.encounterType.name, + })) || [] + ); +} + +export function getPatientEncounterDates(patientUuid: string, encounterTypeUuid: string) { + let params = `encounterType=${encounterTypeUuid}&patient=${patientUuid}&v=custom:(uuid,encounterDatetime)`; + return openmrsFetch(`${restBaseUrl}/encounter?${params}`).then(({ data }) => { + if (data.results.length === 0) { + return []; + } + return data.results.map((encounter: any) => dayjs(encounter.encounterDatetime).format(dateFormat)); + }); +} diff --git a/packages/esm-ugandaemr-app/src/custom-expressions/custom-expressions.ts b/packages/esm-ugandaemr-app/src/custom-expressions/custom-expressions.ts index 6df05881..76f4dc29 100644 --- a/packages/esm-ugandaemr-app/src/custom-expressions/custom-expressions.ts +++ b/packages/esm-ugandaemr-app/src/custom-expressions/custom-expressions.ts @@ -1,8 +1,9 @@ -import { getCohortCategorization, getConceptDataType, getLatestObs, getPatientPrograms } from './custom-apis'; +import { getCohortCategorization, getConceptDataType, getLatestObs, getPatientPrograms, getEncounters } from './custom-apis'; import dayjs from 'dayjs'; import { configSchema } from '@ugandaemr/esm-care-panel-app/src/config-schema'; import { DataSource } from '@openmrs/openmrs-form-engine-lib'; -import { OpenmrsResource } from '@openmrs/esm-framework'; +import {openmrsFetch, OpenmrsResource, restBaseUrl} from '@openmrs/esm-framework'; +import {dateFormat} from "../constants"; export async function latestObs(patientId: string, conceptUuid: string) { const response = await getLatestObs(patientId, conceptUuid); @@ -67,3 +68,4 @@ export class DSDMCategorizationDatasource implements DataSource return data; } } + diff --git a/packages/esm-ugandaemr-app/src/index.ts b/packages/esm-ugandaemr-app/src/index.ts index d9487812..96f60082 100644 --- a/packages/esm-ugandaemr-app/src/index.ts +++ b/packages/esm-ugandaemr-app/src/index.ts @@ -24,6 +24,7 @@ import { latestObs, patientDSDM, } from './custom-expressions/custom-expressions'; +import {getPatientEncounterDates} from "./custom-expressions/custom-apis"; export const importTranslation = require.context('../translations', false, /.json$/, 'lazy'); @@ -45,6 +46,7 @@ export function startupApp() { registerExpressionHelper('cusGetLatestObs', latestObs); registerExpressionHelper('getPatientDSMD', patientDSDM); registerExpressionHelper('CustomMonthsOnARTCalc', CalcMonthsOnART); + registerExpressionHelper('getPreviousEncounterDates', getPatientEncounterDates); registerCustomDataSource({ name: 'dsdm_categorization_datasource',