Validation Rule Builder for Form Builder
The Validation Rule Builder for Form Builder streamlines the creation and management of conditional logic within forms. It provides an intuitive user interface for dynamically building conditions, making it easier for users to handle complex form logic without worrying about underlying technical details.
Specific Dropdowns and Their Needs
Trigger Component
The Trigger Component dropdown specifies the form field that the validation rule will apply to. This is the field whose value or state will be monitored to determine if the condition is met.
Trigger Condition
The Trigger Condition dropdown lets users define the specific condition to be checked on the Trigger Component. This could include options like "is empty", "not empty", "equals", “not equals”, "greater than or equal to", "less than or equal to", etc.
Conditional Value
The Conditional Value ( or target value ) dropdown is used to select or enter the value to be checked against the Trigger Condition. The Target Value component will only be visible if the conditions are "equals," "not equals," "greater than or equal to," or "less than or equal to."
Target Action
The Target Action dropdown specifies what action should be taken when the Trigger Condition is met. Examples: include hiding a field or custom validation logic.
Target Component
The Target Component dropdown allows users to select the form field that will be affected by the action defined in the Target Action dropdown. This lets users select which field they want to control based on the condition they define.
By configuring these dropdowns, users can create sophisticated validation rules that enhance the functionality and user experience of their forms without requiring extensive technical knowledge.
Working Principle
The core of the Validation Rule Builder revolves around a rule-builder component that offers a user-friendly interface for creating multiple conditional logic rules. Users can define conditions and actions that determine how form fields should behave based on specific inputs and criteria.
Benefits for Users
Ease of Use: Users can build complex validation rules without needing deep technical knowledge.
Dynamic Logic Building: Create and manage conditions dynamically, even for complex forms.
Time-Saving: Simplifies the form development process, reducing the need for custom coding.
Features
Toggle Functionality
Make a Field Required with a Simple Click
Ensure that users do not skip mandatory fields in your form. With a simple toggle button, you can make any field required.
Example:
In a form, if you want to ensure that the "Name" field is mandatory, simply toggle the "Required" option for the "Name" field to enforce this validation.
Allow or Disallow Future Dates
Control whether date fields can accept future dates. This is particularly useful for fields like "Date of Birth" where future dates should be restricted.
Example:
For a "Date of Birth" field, toggle the "Disallow Future Dates" option to ensure users cannot select a date in the future.
Disallow Decimal Values
Enable fields to decline decimal values when necessary. For example, age cannot be in decimal values.
Example:
For an "Age" field, toggle the "Disallow Decimal Values" option to decline entries like 12.2.
Conditional-Logic Functionality
Conditions
Check if a Field is Empty or Not Empty
Example:
Build a condition to check if the "Name" field is empty and trigger a corresponding action if it is.
Check if a Field is Equal to a Target Value
Example:
Check if the "Sex" field value is equal to "F" and display relevant fields accordingly.
Check if a Field's Value is Greater Than or Less Than a Target Value
Example:
Ensure the "Age" field value is greater than 18 to display additional fields for adult users.
Multiple Conditions
Combine conditions using logical operators (&&, ||) to build comprehensive validation rules.
Example:
Check if the Name and Age fields are not empty, then show relevant fields accordingly.
Actions
hideWhenExpression
i ) Hiding the form field
The hideWhenExpression
action allows you to control the visibility of form fields based on specified conditions. This is particularly useful when you want certain fields to appear only when certain criteria are met, enhancing the user experience by showing only relevant fields.
Example Scenario
Consider a scenario where you are building a form that has two fields: Are you currently in HIV care or under ART?
and Reason for being in HIV care or on ART
. You want the Reason for being in HIV care or on the ART
field to be visible only if Are you currently in HIV care or under ART?
is equal to Yes
.
How It Works
Define the Expression: Create a condition that checks if the
Are you currently in HIV care or under ART?
equals 'No'.Apply the Expression: Use
hideWhenExpression
to make theReason for being in HIV care or on the ART
field hidden unless the condition is met.
Code Example
"hide": { "hideWhenExpression": "currentlyOnArt === 'a899b42e-1350-11df-a1f1-0026b9348838'" }
In this example, the Reason for being in HIV care or the ART
field will only be shown when the Are you currently in HIV care or under ART?
is equal to Yes.
ii ) Hiding the specified page
iii ) Hiding the specified section
Failing a field:
The failsWhenExpression
action is used to define custom validation logic that determines when a form input should fail validation. This is useful for scenarios where default validation rules are not sufficient and you need to create more complex, condition-based validations.
Example Scenario
Imagine you are creating a form where the user's age and their response to a question need to be validated together. Specifically, the question must be answered if the user's age is less than or equal to 14.
How It Works
Define the Expression: Create a condition that checks if the age is less than or equal to 14.
Apply the Expression: Use
fail
action to enforce this validation.
Code Example
"validators": [ { "type": "js_expression", "failsWhenExpression": "height <= 0", "message": "Height should be greater than or equal to zero" } ]
In this example, the height
field will fail validation if it is height is lesser than zero. When the condition evaluates to true, the provided message will be displayed, indicating the validation error.
Detailed Breakdown
Expression: The logical condition that must be met for the validation to fail.
Message: The error message displayed to the user when the validation fails.
Calculation Expression:
The purpose of the calculation expression
is to automatically calculate values without requiring any manual effort.
i) Body Mass Index (BMI)
Example Scenario:
Consider a scenario where a doctor wants to calculate a patient's BMI using their height and weight as inputs. Typically, the doctor would need to perform the mathematical calculation manually each time, increasing their workload. It would be more efficient if the doctor could simply enter the patient's height and weight, and the patient's BMI would be automatically calculated and displayed in the BMI field.
Code Example
"calculate": { "calculateExpression": "calcBMI('height', 'weight')" }
ii) Body Surface Area (BSA) Calculation:
This function takes the height and weight values and returns the Body Surface Area (BSA).
Example Scenario:
Consider a scenario where a doctor needs to determine a patient's Body Surface Area (BSA) for medical dosing or treatment plans. By inputting the patient's height and weight, the function can automatically calculate and provide the BSA value, reducing the need for manual calculation and ensuring precision.
Code Example
{ "calculate": { "calculateExpression": "calcBSA('height','weight')" } }
iii) Calculate Gravida :
The calcGravida
function calculates the total number of pregnancies (gravida) based on the number of term pregnancies and abortions/miscarriages. This function ensures that the inputs are valid numbers and returns the sum of the term pregnancies and abortions.
Code Example
{ "calculate": { "calculateExpression": "calcGravida('parityTerm','parityAbortion')" } }
Does not Match Expression
This helper allows users to validate fields against regular expressions eg. in the failsWhenExpression as below
Time Calculation
Calculate Time Difference in days/weeks/months/years
Date Calculation:
i) Expected Date of Delivery (EDD) Calculation:
This function takes the last menstruation date and returns the expected date of delivery (EDD).
Example Scenario:
Consider a scenario where a doctor needs to determine the expected date of delivery (EDD) for a pregnant patient. By inputting the patient's last menstruation date, the function can automatically calculate and provide the EDD, eliminating the need for manual calculation and ensuring accuracy.
Code Example
{ "calculate": { "calculateExpression": "calcEDD('LMP')" } }
ii) Next Visit Date Calculation :
In a healthcare setting, particularly in the management of HIV patients, it is crucial to ensure that patients adhere to their antiretroviral (ARV) therapy. Patients are typically dispensed a specific number of days' worth of ARV medication, and their next clinic visit is scheduled based on the dispensed medication duration. The calcNextVisitDate
function helps calculate the next visit date based on the follow-up date and the number of days for which ARV medication is dispensed.
Example Scenario
A patient visits a clinic on July 10, 2024, for their routine follow-up. During this visit, they are given a supply of ARV medication for the next 10 days. The healthcare provider needs to schedule the patient's next visit based on this information.
Code Example
{ "calculate": { "calculateExpression": "calcNextVisitDate('followUpDate', 'arvDispensedInDays')" } }
iii) Treatment End Date Calculation:
For instance, a patient with a particular medical condition (indicated by a specific status code) might be given additional days beyond the regular ARV dispensed days to ensure better health outcomes.
Example Scenario
A patient visits a clinic on July 10, 2024, for their routine follow-up. They are given a supply of ARV medication for the next 10 days. The patient has a status code '160429AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', indicating a need for extended treatment.
Code Example
{ "calculate": { "calculateExpression": "calcTreatmentEndDate('followUpDate', 'arvDispensedInDays', 'patientStatus')" } }
Date Validation
This helper function ( isDateBefore, isDateAfter )
allows users to validate the date field by checking whether the selected date is in the past or future by comparing it with a base date.
Example:
Consider a scenario where a patient wishes to book an appointment with a doctor. The appointment date should be in the future and not in the past. If the patient mistakenly books an appointment for a past date, it leads to an invalid appointment. To prevent this, the date field should be validated to ensure the selected date is not in the past, thereby guiding the patient to choose a valid appointment date.
Code Example
"validators": [ { "type": "js_expression", "failsWhenExpression": "isDateBefore(appointment, '2024-07-13')", "message": "Appointment cannot be in the past" } ]