diff --git a/cypress/e2e/patient_spec/patient_registration.cy.ts b/cypress/e2e/patient_spec/patient_registration.cy.ts
index 17c9b0b3679..f94dbbe46cd 100644
--- a/cypress/e2e/patient_spec/patient_registration.cy.ts
+++ b/cypress/e2e/patient_spec/patient_registration.cy.ts
@@ -254,7 +254,7 @@ describe("Patient Creation with consultation", () => {
});
it("Patient Registration using the transfer with no consultation", () => {
- // transfer the patient and no consulation
+ // transfer the patient with no consulation and verify the transfer to a new facility
patientPage.createPatient();
patientPage.selectFacility(patientTransferFacility);
patientPage.patientformvisibility();
@@ -264,9 +264,10 @@ describe("Patient Creation with consultation", () => {
patientTransfer.clickTransferPatientNameList(patientTransferName);
patientTransfer.clickTransferPatientYOB(yearOfBirth);
patientTransfer.clickTransferSubmitButton();
- patientTransfer.verifyFacilitySuccessfullMessage();
+ cy.verifyNotification(
+ "Patient Dummy Patient 10 (Male) transferred successfully",
+ );
patientTransfer.clickConsultationCancelButton();
- cy.wait(3000);
// allow the transfer button of a patient
patientTransfer.clickAllowPatientTransferButton();
// Verify the patient error message for the same facility
@@ -280,7 +281,9 @@ describe("Patient Creation with consultation", () => {
patientTransfer.clickTransferPatientNameList(patientTransferName);
patientTransfer.clickTransferPatientYOB(yearOfBirth);
patientTransfer.clickTransferSubmitButton();
- patientTransfer.verifyFacilityErrorMessage();
+ cy.verifyNotification(
+ "Patient - Patient transfer cannot be completed because the patient has an active consultation in the same facility",
+ );
});
it("Patient Registration using External Result Import", () => {
diff --git a/cypress/pageobject/Patient/PatientTransfer.ts b/cypress/pageobject/Patient/PatientTransfer.ts
index 4c884ee2427..0bdd55e9880 100644
--- a/cypress/pageobject/Patient/PatientTransfer.ts
+++ b/cypress/pageobject/Patient/PatientTransfer.ts
@@ -19,44 +19,18 @@ class PatientTransfer {
clickTransferSubmitButton() {
cy.get("#submit-transferpatient").click();
+ cy.wait(2000);
}
clickConsultationCancelButton() {
cy.get("#cancel").scrollIntoView();
cy.get("#cancel").click();
+ cy.wait(2000);
}
clickAllowPatientTransferButton() {
cy.get("#patient-allow-transfer").click();
}
-
- verifyFacilitySuccessfullMessage() {
- cy.get(".pnotify")
- .should("exist")
- .within(() => {
- cy.get(".pnotify-text")
- .invoke("text")
- .then((text) => {
- expect(text.trim()).to.match(
- /^Patient Dummy Patient 10 \(Male\) transferred successfully$/i,
- );
- });
- });
- }
-
- verifyFacilityErrorMessage() {
- cy.get(".pnotify")
- .should("exist")
- .within(() => {
- cy.get(".pnotify-text")
- .invoke("text")
- .then((text) => {
- expect(text).to.match(
- /Patient - Patient transfer cannot be completed because the patient has an active consultation in the same facility/,
- );
- });
- });
- }
}
export default PatientTransfer;
diff --git a/cypress/support/index.ts b/cypress/support/index.ts
index 9ddfd0c819a..c9af6a02c96 100644
--- a/cypress/support/index.ts
+++ b/cypress/support/index.ts
@@ -1,3 +1,4 @@
+///
import "./commands";
declare global {
diff --git a/package-lock.json b/package-lock.json
index 93346b978e6..2458c891d41 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -72,6 +72,7 @@
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.13",
+ "@types/cypress": "^1.1.3",
"@types/echarts": "^4.9.22",
"@types/google.maps": "^3.55.8",
"@types/lodash-es": "^4.17.12",
@@ -87,7 +88,7 @@
"@typescript-eslint/parser": "^5.61.0",
"@vitejs/plugin-react-swc": "^3.6.0",
"autoprefixer": "^10.4.19",
- "cypress": "^13.9.0",
+ "cypress": "^13.13.1",
"cypress-localstorage-commands": "^2.2.5",
"cypress-split": "^1.23.2",
"eslint": "^8.44.0",
@@ -6222,6 +6223,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/cypress": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz",
+ "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==",
+ "deprecated": "This is a stub types definition for cypress (https://cypress.io). cypress provides its own type definitions, so you don't need @types/cypress installed!",
+ "dev": true,
+ "dependencies": {
+ "cypress": "*"
+ }
+ },
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
@@ -9129,9 +9140,9 @@
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/cypress": {
- "version": "13.9.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.9.0.tgz",
- "integrity": "sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==",
+ "version": "13.13.1",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.1.tgz",
+ "integrity": "sha512-8F9UjL5MDUdgC/S5hr8CGLHbS5gGht5UOV184qc2pFny43fnkoaKxlzH/U6//zmGu/xRTaKimNfjknLT8+UDFg==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
@@ -9174,7 +9185,7 @@
"request-progress": "^3.0.0",
"semver": "^7.5.3",
"supports-color": "^8.1.1",
- "tmp": "~0.2.1",
+ "tmp": "~0.2.3",
"untildify": "^4.0.0",
"yauzl": "^2.10.0"
},
diff --git a/package.json b/package.json
index 59fd5cd89e8..aa8d3f5df01 100644
--- a/package.json
+++ b/package.json
@@ -112,6 +112,7 @@
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.13",
+ "@types/cypress": "^1.1.3",
"@types/echarts": "^4.9.22",
"@types/google.maps": "^3.55.8",
"@types/lodash-es": "^4.17.12",
@@ -127,7 +128,7 @@
"@typescript-eslint/parser": "^5.61.0",
"@vitejs/plugin-react-swc": "^3.6.0",
"autoprefixer": "^10.4.19",
- "cypress": "^13.9.0",
+ "cypress": "^13.13.1",
"cypress-localstorage-commands": "^2.2.5",
"cypress-split": "^1.23.2",
"eslint": "^8.44.0",
diff --git a/src/Components/Facility/DischargeModal.tsx b/src/Components/Facility/DischargeModal.tsx
index a85439bfa55..2311ffd7bc4 100644
--- a/src/Components/Facility/DischargeModal.tsx
+++ b/src/Components/Facility/DischargeModal.tsx
@@ -222,9 +222,13 @@ const DischargeModal = ({
title={
Discharge patient from CARE
-
+
- Caution: this action is irreversible.
+
+ {new_discharge_reason === 3 // Expired
+ ? "Caution: Once a patient is marked as expired, the patient file cannot be transferred or edited. Please proceed with caution."
+ : "Caution: This action is irrevesible. Please proceed with caution."}
+
}
diff --git a/src/Components/Facility/TransferPatientDialog.tsx b/src/Components/Facility/TransferPatientDialog.tsx
index 05d08635b01..3ead082c610 100644
--- a/src/Components/Facility/TransferPatientDialog.tsx
+++ b/src/Components/Facility/TransferPatientDialog.tsx
@@ -58,7 +58,12 @@ const TransferPatientDialog = (props: Props) => {
const patientOptions: Array = patientList.map((patient) => {
return {
id: patient.patient_id as unknown as number,
- text: `${patient.name} (${patient.gender})`,
+ text: [
+ patient.name,
+ `(${patient.gender})`,
+ patient.is_expired ? "(Expired)" : "",
+ ].join(" "),
+ disabled: patient.is_expired,
};
});
@@ -171,6 +176,7 @@ const TransferPatientDialog = (props: Props) => {
options={patientOptions}
optionLabel={(patient) => patient.text}
optionValue={(patient) => patient.id}
+ optionDisabled={(patient) => patient.disabled ?? false}
value={state.form.patient}
onChange={handleChange}
error={state.errors.patient}
diff --git a/src/Components/Facility/models.tsx b/src/Components/Facility/models.tsx
index 74a0d4a0f26..6eb9b92e3ae 100644
--- a/src/Components/Facility/models.tsx
+++ b/src/Components/Facility/models.tsx
@@ -202,6 +202,7 @@ export interface DupPatientModel {
date_of_birth: string;
year_of_birth: number;
state_id: number;
+ is_expired: boolean;
}
export interface InventoryItemsModel {
diff --git a/src/Components/Form/MultiSelectMenuV2.tsx b/src/Components/Form/MultiSelectMenuV2.tsx
index ac180a88fca..9ab2f4d55c7 100644
--- a/src/Components/Form/MultiSelectMenuV2.tsx
+++ b/src/Components/Form/MultiSelectMenuV2.tsx
@@ -158,10 +158,10 @@ const MultiSelectMenuV2 = (props: Props) => {
className={classNames(
"text-sm font-normal",
option.disabled
- ? "text-secondary-700"
+ ? "text-secondary-500"
: active
? "text-primary-200"
- : "text-secondary-700",
+ : "text-secondary-500",
)}
>
{option.description}
@@ -226,7 +226,7 @@ export const dropdownOptionClassNames = ({
!disabled && active && "bg-primary-500 text-white",
!disabled && !active && selected && "text-primary-500",
!disabled && !active && !selected && "text-secondary-900",
- disabled && "cursor-not-allowed text-secondary-800",
+ disabled && "cursor-not-allowed text-secondary-600",
selected ? "font-semibold" : "font-normal",
);
};