Calculation rule: validation (coreMIS)
module: https://github.com/openimis/openimis-be-calcrule_validations_py
How we can configure strategy for validation?
The schema within the
Benefit Plan/Programmeentity holds a crucial role in this process.For instance,
validationCalculationin the schema triggers a specific validation strategy. Similarly, in the duplications section of the schema, settinguniqueness: truesignifies the need for duplication checks based on the record's field value.Based on the provided schema below (from
programme/benefit plan), it indicates that validations will run for theemailfield (validationCalculation), and duplication checks will be performed fornational_id(uniqueness: true)
{
"$id":"https://example.com/beneficiares.schema.json",
"type":"object",
"title":"Record of beneficiares",
"$schema":"http://json-schema.org/draft-04/schema#",
"properties":{
"email":{
"type":"string",
"description":"email address to contact with beneficiary",
"validationCalculation":{
"name":"EmailValidationStrategy"
}
},
"able_bodied":{
"type":"boolean",
"description":"Flag determining whether someone is able bodied or not"
},
"national_id":{
"type":"string",
"uniqueness":true,
"description":"national id"
},
"educated_level":{
"type":"string",
"description":"The level of person when it comes to the school/education/studies"
},
"chronic_illness":{
"type":"boolean",
"description":"Flag determining whether someone has such kind of illness or not"
},
"national_id_type":{
"type":"string",
"description":"A type of national id"
},
"number_of_elderly":{
"type":"integer",
"description":"Number of elderly"
},
"number_of_children":{
"type":"integer",
"description":"Number of children"
},
"beneficiary_data_source":{
"type":"string",
"description":"The source from where such beneficiary comes"
}
},
"description":"This document records the details beneficiares"
}
In essence, to create a custom validation rule applicable to a schema field, you'll need to define a class in python file within the
strategiesfolder (The filename should conclude with_validation_strategy.py).The example of validation class implementation:
from dataclasses import asdict
from calcrule_validations.strategies.base_strategy import BaseValidationsStrategy
from calcrule_validations.strategies.validation_strategy_interface import ValidationResult
class YourCustomValidationStrategy(BaseValidationsStrategy):
VALIDATION_CLASS = "YourCustomValidationStrategy"
@classmethod
def validate(cls, field_name, field_value, **kwargs):
return asdict(ValidationResult(
success=False,
field_name=field_name,
note="<YOUR VALIDATION NOTE>"
))
The
VALIDATION_CLASSproperty plays a significant role in defining the value for thevalidationCalculation: nameproperty within the JSON schema of the schema for theBenefit Plan/Programmeentity.The validation implementation needs to be executed within the
validatemethod. It's expected to return aValidationResultas a dictionary structured as follows:
return asdict(ValidationResult(
success=False,
field_name=field_name,
note="<YOUR VALIDATION NOTE>"
))
For a valid condition, the expected return should resemble the following:
return asdict(ValidationResult(
success=True,
field_name=field_name,
note="Ok"
))
The signature of
validatemethod isdef validate(cls, field_name, field_value, **kwargs)
Did you encounter a problem or do you have a suggestion?
Please contact our Service Desk
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. https://creativecommons.org/licenses/by-sa/4.0/