contributionValuationRule inherit from absCalculationRule
static version = 1
status = active
static UUID = 0e1b6dd4-04a0-4ee6-ac47-2a99cfa5e9a8
static CalculationRuleName = “CV: percent of income “
...
dateValidFrom = 2000-01-01
static description = “ This calcutation will add the income in the contract details and PHinsuree and the percentage in the Contribution plan so when a contract valuation is requested then the calculation will determine the value based on the contract details income and CP percentage “
list of impacted class and parameters
{class:"ContributionPlan", ‘parameters':[
{'type':"select",'name':"rate",'label':{'en':'Percentage of income',’fr':'Pourcentage du salaire'},'rights':{'read':"151201",
...
“write':'151202', 'update’:'151203','replace’:'151206'}, relevance:"True",condition:".$_>1", 'optionSet':[{'value':'5',label:{'en':'5%','fr':'5%'}},{'value':'10',label:{'en':'10%','fr':'10%'}},{'value':'15',label:{'en':'15%','fr':'15%'}},],'default':'5'},
{'type':"checkbox",'name':"includeFamilly",'label':{'en':'include family members',’fr':'Inclure les membres de la familles'},'rights':{'read':"151201", ‘write':'151202','update’:'151203','replace’:'151206'},relevance:"True"}]}
{class:"ContractDetails", ‘parameters':[{'type':"floatnumber",'name':"income",'label':{'en':'Income','fr':'Salaire'},'rights':{'read':"152101", ‘create':"152102”,'update’:”152103",'replace’:”152103"},relevance:"True",condition:"$_>100",'default':''}]}
{class:"PolicyHolderInsuree", ‘parameters':[{'type':"floatnumber",'name':"income",'label':{'en':'Income','fr':'Salaire'},'rights':{'read':"150201", ‘create':"150202”,'update’:”150203",'replace’:”150206"},relevance:"True",condition:"$_>100",'default':''}]}@rafa
relevance and condition are Nice to have.
Methods
ready()
Make sure the now is within dataValid (or after dateValidFrom if dateValidTo is None)
...
getParameter to getParameter signal
getLinkedClass ot getLinkedClass signal
activeForObject(self, instance, context)
instance.__class__ == CCPD and context IN (create,update) and self.checkCalculation(instance)
checkCalculation(self, instance)
class= class of instance
match = False
...
if checkCalculation(cp)
match = True
break
}
calculate(instance)
if instance.__class__ == ContractContributionPlanDetails
...
return CCPD.value
else Return False
getLinkedClass(classname)
ListClass = []
if class == ContributionPlan or class == None
...
ListClass.amend(ContributionPlan)
return listClass
getParamteres(ClassName, instance)
#className is the class name of the object where the calculation param need to be added
#instance is where the link with a calculation need to be found, like the CPB in case of PH insuree or Contract Details
This function has two steps
1- getRuleDetails(className)
2- define if the calculation should be used
for each “eligible“ ruleDetails,
checkCalculation(instance) #check if the calculation is really concerning the class for that context
...