Concepts

Contract

This documents the contract that binds the policyHolder (e.g. employer) to pay the contributions and binds the insurance to provide coverage for the agreed benefit packages for the policyholder insuree.
Before every period, a Contract (list of contributions terms) will be generated based on the policy holder insuree information provided by the policy holder (default param, contract dates, CPB).
(Optional) Once generated the policy holder could update the contract (refresh list of employees and change insuree parameters).
Once submitted by the policy holder and approved by scheme admin the contributions part of the contract will be created and be eligible for payment, a trusted user could create directly an approved contract through the API.

Disclaimer for contract outside formal sector

Even if on the data structure level the contract should be usable for direct contracting (without policyholder), this work focuses on the formal sector work that means that the team will deliver a solution that work with the formal sector but may not directly usable for direct contracting

Payment and policy update

Policy holder will make a single payment per contract (list of contributions of his insuree)
The payment will be linked to all the contributions which are related to the contract.
Depending on the configuration of openIMIS, the policy validity will be adapted based on the contribution plan and benefit plan rules (i.e., the insureepolicy will be created) based on the creation of the contribution or reception of the payment.

Business Processes

The process bellow will respect the location scope of the users, meaning that to add a policyholder for a region the scheme clerk must have access to that very region.
First the contract will need to be created and approved the payment on a contract will update the status of the contract and the underlying policies
Use cases

Three dots menu

(…) means actions for selected item in the list (cf HF claims)

the three dots menu will apply either to all selected line OR to all records filtered, once an option is selected a confirmation popup will precise the action and how many instance are concerned, the mutation result will show how many entity “update“ were successful and failed

Contract

Web application


Backend


Payment

The new policy state "contracted" indicate that the insuree policy doesn't have the same dates as the policy because it is renewable contract payment that defines the validity of the insureepolicy
on payment, a script will:

  1. retrieve the policies attached the “paid“ contribution (payment is for a contribution)

  2. check that total payment for each contribution match the contribution value

  3. Create or update the policyinsure up to the end of the grace period, two insurees policies could be created if two policies are required to cover the contract period.

Web application

Back end

Back end module Details design

Entities

Contract (Contribution Collection)(HistoryBusinessModel)

Communications on the contract will be saved on the jsonExt fields with that structure:

{“comments”:[{“From”:”Portal/webapp”, “user“:<userid>, “date“:<datetime>,”msg”<message> }]}

A special filter should be available on the queryset to retrieve all contract that have the the “amount between 2 values following that logic (should be usable by FE):

Entity ContractDetails (input) - under Contract (HistoryModel)

Entity ContractContributionPlanDetails (output) - under ContractDetails (HistoryBusinessModel)

ContributionPlan parameters will be stored in the json_ext part of the HistoryModel

Payment table already exist tblPayment. in scope in BS migration (TBC)

https://github.com/openimis/openimis-be-payment_py

Payment status

-1 Error when saving Intent to pay (see RejectedReason)
0 Intent to pay saved without errors
1 Control Number request sent
2 Control Number request sent
3 Control Number received without error
-3 Error related to Control Number request or Payment confirmation (should have different values per post)
4 Received Payment
5 Payment matched

RejectedReason

2 Insurance number missing Not valid insurance or missing product code
3 Invalid Officer Code Not valid enrolment officer code
4 Missing product or Product does not exists Not valid insurance or missing product code
4 Wrong match of Enrollment Officer agaists Product Enrolment officer code and insurance product code are not compatible
5 The family doesn't contain this product for renewal Beneficiary has no policy of specified insurance product for renewal
5 Proxy family can not renew Beneficiary has no policy of specified insurance product for renewal
7 Insurance number not existing in system Insuree not enrolled and prior enrollment mandatory

Authorities

To manage the group insurance several authorities will be added, the existing authorities have a "*" :

(*) ContractDetails don’t have rights anymore because they inherit from contract

Services

Signal

ApprovedContract

Config

"ContractState":[

{

"value":"1",
"label":{
"fr":"Demande d'information",
"en":"Request for information"

}
}, {

"value":"2",
"label":{
"fr":"Brouillon",
"en":"Draft"

}
}, {

"value":"3",
"label":{
"fr":"Offre",
"en":"offer"

}
}, {

"value":"4",
"label":{
"fr":"En negociation",
"en":"Negotiable"

}
}, {

"value":"5",
"label":{
"fr":"Apprové",
"en":"executable"

}
}, {

"value":"6",
"label":{
"fr":"addendum",
"en":"addendum"

}
}, {

"value":"7",
"label":{
"fr":"En cours",
"en":"effective"

}
}, {

"value":"8",
"label":{
"fr":"Appliqué",
"en":"executed"

}
}, {

"value":"9",
"label":{
"fr":"Suspendu",
"en":"Disputed"

}
}, {

"value":"10",
"label":{
"fr":"Terminé",
"en":"terminated"

}

, {

"value":"11",
"label":{
"fr":"révision demandé",
"en":"counter"

}
}

}

“updatable”:[1,2,11] (that corresponds to “draft”, “request for information“ and “counter”),

“Approvable”:[4] (that corresponds to “negotiable“)

“payment_notification“:{“en“:”Dear <CONTACT-NAME>\n The contract<CONTRACT-CODE> - <CONTRACT-NAME> was approved\n Please proceed to the payment of <CONTRACT-DUEAMOUNT> with the reference <CONTRACT-PAYMENT-REFERENCE>\n Best regards ” , “fr“:”Monsieur, Madame <CONTACT-NAME>\n le contract<CONTRACT-CODE> - <CONTRACT-NAME> à été apprové\n Veuillez faire un paiement de <CONTRACT-DUEAMOUNT> avec la référence <CONTRACT-PAYMENT-REFERENCE>\n Meilleurs Salutations ”}

“counter_notification“:{“en“:”Dear <CONTACT-NAME>\n The contract<CONTRACT-CODE> - <CONTRACT-NAME> was counter\n Please proceed recheck the information and correct the issues, in case of questions please check contact us\n Best regards ” , “fr“:”Monsieur, Madame <CONTACT-NAME>\n le contract<CONTRACT-CODE> - <CONTRACT-NAME> à été contré, veuillez verifier les information saisie, en cas de question veuillez nous contacter\n Meilleurs Salutations ”}

Front end detail design

menu

Contract search page

search options

it will be possible to search on:

search results column

… 3dot menu above the result table with action on single/multi select of contract (if no contract selected, the options applies to all contract from the search result)

Material UI “add” to add a new contract (redirect to new contract page)

Contract card

the contract card will have the same layout as the PH page: a general information section and 3 tabs

General information

Material UI will have different function

on contract amend (for contract not terminated, not Negociable nor updatable state )

Code, PH, DateValidFrom cannot be changed

NICE TO HAVE: text box that will be save a comment json_ext

on contract creation

Code, DateValidFrom and DateValidTo is mandatory

Nice to have:

on contract update

PH Can be set but not edited once saved.

NICE TO HAVE: text box that will be save a comment json_ext

on contract submission

at least 1 contract detail must be present

on contract counter

NICE TO HAVE: text box that will be save a comment json_ext

on contract create invoice

Show how many invoice were created

Contract details tab

search criteria / filter

will show the contract details

on add contract details

a popup will be display with (mandatory fields marked with *):

The relationship with the contract is not displayed because implicit

on delete contract details

confirmation popup

on edit contract details

confirmation popup

Contract contributiondetails tab

this that is readonly, availabable only in state NOT approvable or updatable

search criteria / filter

will show the contract details

(Nice to have)Contract payment tab

Will display the payments that concern contribution linked to CCPD

the material UI button can create a payment for the remaining amount not covered by the payment.

Insureepolicy tab

Will dispaly the list of insuree impacted by the contract (as primary insuree or dependant)

Search criteria

Insuree (search box popup with name .. )

Result page

read only lines

columns

INSUREEPOLICY_SEARCH perms = 101500

NICE TO HAVE: Contract comment tab

Will dispaly the comments entered on the contact, comment are saved as a list in the json_ext

a input box will be available at the bottom of the list to add a new comment

Contract Tab on PolicyHolder

should display only Contracts, which have this particular Policy Holder assigned

search options

it will be possible to search on:

search results column

… 3dot menu above the result table with action on single/multi select of contract (if no contract selected, the options applies to all contract from the search result)

Material UI “add” to add a new contract (redirect to new contract page)