diff --git a/src/Components/Medicine/validators.ts b/src/Components/Medicine/validators.ts index a0103d11241..c1cbe560ae9 100644 --- a/src/Components/Medicine/validators.ts +++ b/src/Components/Medicine/validators.ts @@ -6,33 +6,56 @@ import { Prescription } from "./models"; export const PrescriptionFormValidator = () => { return (form: Prescription): FormErrors => { const errors: Partial> = {}; + errors.medicine_object = RequiredFieldValidator()(form.medicine_object); + if (form.dosage_type === "TITRATED") { errors.base_dosage = RequiredFieldValidator()(form.base_dosage); errors.target_dosage = RequiredFieldValidator()(form.target_dosage); + if ( form.base_dosage && form.target_dosage && form.base_dosage.split(" ")[1] !== form.target_dosage.split(" ")[1] ) { - errors.base_dosage = "Unit must be same as target dosage's unit"; - errors.target_dosage = "Unit must be same as base dosage's unit"; + errors.base_dosage = t("inconsistent_dosage_units_error"); + errors.target_dosage = t("inconsistent_dosage_units_error"); } - } else errors.base_dosage = RequiredFieldValidator()(form.base_dosage); - if (form.dosage_type === "PRN") + } else { + errors.base_dosage = RequiredFieldValidator()(form.base_dosage); + } + + if (form.dosage_type === "PRN") { errors.indicator = RequiredFieldValidator()(form.indicator); - if (form.dosage_type !== "PRN") + + const baseDosageValue = getDosageValue(form.base_dosage); + const maxDosageValue = getDosageValue(form.max_dosage); + + if ( + baseDosageValue && + maxDosageValue && + baseDosageValue > maxDosageValue + ) { + errors.max_dosage = t("max_dosage_in_24hrs_gte_base_dosage_error"); + } + } else { errors.frequency = RequiredFieldValidator()(form.frequency); + } + return errors; }; }; +const getDosageValue = (dosage: string | undefined) => { + return dosage ? Number(dosage.split(" ")[0]) : undefined; +}; + export const EditPrescriptionFormValidator = (old: Prescription) => { return (form: Prescription): FormErrors => { const errors = PrescriptionFormValidator()(form); if (comparePrescriptions(old, form)) { - errors.$all = "No changes made"; + errors.$all = t("no_changes_made"); } return errors; @@ -66,10 +89,6 @@ export const AdministrationDosageValidator = ( target_dosage: Prescription["target_dosage"], ) => { return (value: Prescription["base_dosage"]) => { - const getDosageValue = (dosage: string | undefined) => { - return dosage ? Number(dosage.split(" ")[0]) : undefined; - }; - const valueDosage = getDosageValue(value); const baseDosage = getDosageValue(base_dosage); const targetDosage = getDosageValue(target_dosage); @@ -77,13 +96,13 @@ export const AdministrationDosageValidator = ( if (!valueDosage) return t("field_required"); if (value?.split(" ")[1] !== base_dosage?.split(" ")[1]) - return "Unit must be the same as start and target dosage's unit"; + return t("inconsistent_dosage_units_error"); if (baseDosage && targetDosage) { const [min, max] = [baseDosage, targetDosage].sort((a, b) => a - b); if (!(min <= valueDosage && valueDosage <= max)) { - return "Dosage should be between start and target dosage"; + return t("administration_dosage_range_error"); } } }; diff --git a/src/Locale/en/Common.json b/src/Locale/en/Common.json index 62437fcf1ed..c5d6d76564e 100644 --- a/src/Locale/en/Common.json +++ b/src/Locale/en/Common.json @@ -191,5 +191,6 @@ "discard": "Discard", "live": "Live", "discharged": "Discharged", - "archived": "Archived" + "archived": "Archived", + "no_changes_made": "No changes made" } \ No newline at end of file diff --git a/src/Locale/en/Medicine.json b/src/Locale/en/Medicine.json index 3e861f2e486..df0467de7b6 100644 --- a/src/Locale/en/Medicine.json +++ b/src/Locale/en/Medicine.json @@ -61,5 +61,8 @@ "PRESCRIPTION_FREQUENCY_QID": "6th hourly", "PRESCRIPTION_FREQUENCY_Q4H": "4th hourly", "PRESCRIPTION_FREQUENCY_QOD": "Alternate day", - "PRESCRIPTION_FREQUENCY_QWK": "Once a week" -} + "PRESCRIPTION_FREQUENCY_QWK": "Once a week", + "inconsistent_dosage_units_error": "Dosage units must be same", + "max_dosage_in_24hrs_gte_base_dosage_error": "Max. dosage in 24 hours must be greater than or equal to base dosage", + "administration_dosage_range_error": "Dosage should be between start and target dosage" +} \ No newline at end of file