...
Each PolicyHolder (employer) will be registered in openIMIS.
Each PolicyHolder will have access to some schemescontribution plan attached to insurance product.
The PolicyHolder would have the possibility to add insuree insurees with a contract period, default pricing parameters (e.g., income) and the contribution plan bundle to use.
The PolicyHolder will have user (Accountant, assistant … ) that will be able to connect on the policyholder portal
...
Business Processes
The process bellow will all respect the location scope of the users, meaning that, to add a policyholder PolicyHolder for a region, the scheme clerk must have access to that very region.
The enrollment process that will be supported will be coming from is defined by Nepal requirements, even if we tried to . Although we try to make it broader, it might not support all the enrollment process processes of all group insurances.
...
Use cases
PolicyHolder (employer)
The first step before enrolling insure insuree under a PolicyHolder, one needs to make sure that the PolicyHolder is defined in the tool; openIMIS. Read right is required to have access to the search/list screen, Managing PolicyHolder . Managing PolicyHolders will be the role of the SchemeClerkClerk.
Web
...
application
UC7-1: Search: PolicyHolder List > use the search box > search, the default list will show only the active
policy holderPolicyHolders (not deleted and today between dateValidFrom/TO)
UC7-2: Add: PolicyHolder List > "
addAdd" PolicyHolder > fill the details on the
Policy holderPolicyHolder page >
saveSave
UC7-3: Update: PolicyHolder List > "Select" PolicyHolder > update the details on the Policy holder page >
saveSave
UC7-4: Delete: PolicyHolder List > "Select" PolicyHolder > Delete (this role should be only available to admin, others should only archive by setting the DateValidTo)
PolicyHolder User
Web application
UC7-5:
searchSearch users: PolicyHolder List > "Select" PolicyHolder >
UserListUser List >
>search, the default list will show only the
active policy holder usersactive PolicyHolder's users (not deleted and today between dateValidFrom/TO)
UC7-6:
addAdd users: PolicyHolder List > "Select" PolicyHolder >
UserListUser List > add user > add details on create popup (validity dates) > Save
UC7-7:
updateUpdate users: "Select" PolicyHolder > UserList > (Search user) >Select User > change details on edit popup (validity dates) > Save
UC1-4: Replace users: "Select" PolicyHolder > User List > (Search user) >Select User > click on the replace button > create new version popup > conf : This will set the ValiditTo of previous to ValidityFrom of the new
UC7-8:
blockDelete user: "Select" PolicyHolder > UserList > (Search user) >Select User > change details > Delete >
Blockconfirmation popup
PolicyHolder insuree
Managing PolicyHolder's insure insurees will be possible from the PolicyHolder page. This should be possible for the PolicyHolderClerk and the SchemeClerkClerk roles.
Web application
UC1-1: Search: PolicyHolder List > "Select" PolicyHolder > Insuree tab > use the search box > search, the default list will show only the active policy holder insuree (not deleted and today between dateValidFrom/TO)
UC1-2: Add: PolicyHolder List > "Select" PolicyHolder > Insuree tab > 'add' insure > fill the details on the PolicyHolder insuree
pagecreate popup > save
UC1-3: Update (error): PolicyHolder List > "Select" PolicyHolder > Insuree tab > update the details on the PolicyHolder
pageinsuree edit popup > save
UC1-4: Replace: (new version) PolicyHolder List > "Select" PolicyHolder > Insuree tab >
update the detailsclick on the
Policy holder pagereplace button >
createnew version
> add ValidityTopopup > conf : This will set the ValiditTo of previous to ValidityFrom of the new
UC1-5: Delete: PolicyHolder List > "Select" PolicyHolder > Insuree tab > "Select" an insuree>
Delete (this role should be only available to admin, other should only archive by setting the DateValidTo)Delete> confirmation popup
PolicyHolder contribution plan bundle
Managing Policy holder contribution plan bundle, this should be possible for the SchemeClerk or SchemeAdmin.
Web application
UC11-1: Search: PolicyHolder List > "Select" PolicyHolder > contribution plan tab > use the search box > search, the default list will show only the active contribution plan(not deleted and today between dateValidFrom/TO)
UC11-2: Add: PolicyHolder List > "Select" PolicyHolder > contribution plan tab > 'add' contribution plan bundles
> fill>fill the details on
the Policy holder insuree pagecreate popup > save
UC11-3: Replace (new version)
:> "Select" PolicyHolder > contribution plan tab > "Select" a contribution plan bundles >
update the contribution plan > create aclick on the replace button > new version
> add ValidityTopopup > conf : This will set the ValiditTo of previous to ValidityFrom of the new
UC11-4: Delete: PolicyHolder List > "Select" PolicyHolder > contribution plan tab > "Select" a contribution plan bundles > Delete
...
> confirmation popup
UC11-5(should have): Update(error) > "Select" PolicyHolder > contribution plan tab > "Select" a contribution plan bundles > click on the edit button > fill the details on edit popup > Save
Backend
UC11-5: Replacing / removing propagation to
policyholder insurePolicyHolder insuree contribution plan bundle
Authorities
To manage the group insurance several authorities will be added, the existing authorities have a "*" :
- PolicyHolder
Details design
Backend module
Because openIMIS can already have an adapter to read the openIMIS roles and authority, no business function will be required outside the database updates and profile replacements.
Mutations
Mutation as part of the schema file:
Authorities
The following authorities will be added for group insurance management, the Prefix will be 150
PolicyHolder, the Prefix will be 1501
Search → 150101
Create → 150102
Update → 150103
Delete → 150104
PolicyHolderInsuree, the Prefix will be 1502
Search → 150201
Create → 150202
Update → 150203
Delete → 150204
Replace → 150206
PolicyHolderUser, the Prefix will be 1503
Search → 150301
Create → 150302
Update → 150303
Delete → 150304
Replace → 150306
PolicyHolderContributionPlanBundle, the Prefix will be 1504
Search → 150401
Create → 150402
Update → 150403
Delete → 150404
Replace → 150406
Roles
The following roles need to be created or updated with the new authorities (new roles have * ):
SchemeClerk (Clerk)
PolicyHolder
C/R/U
PolicyHolderInsuree
C/R/U/D
Approve (
TBC)
PolicyHolderUser
C/R/U/D
SchemeAdmin
UUID (char(24) )PolicyHolder
C/R/U/D
PolicyHolderInsuree
C/R/U/D
Approve (TBC)
PolicyHolderContributionPlan
C/R/U/D
PolicyHolderUser
C/R/U/D
Entities
PolicyHolder
PolicyHolderClerk*
PolicyHolderInsuree
C/R/U
Models
mandatory fields have *
Technical fields have **
PolicyHolder (HistoryBusinessModel)
Code (varchar
)Version ( integer - to be used for optimistic locking)32)*
TradeName (varchar 256)*
- LocationsUUID
LocationsID (fk tblLocations)
Not limited to one level
Address (
varcharjson 1024)
Phone (varchar 16)
Fax (varchar 16)
Email (varchar 256)
ContactName (
varcharjson)
LegalForm (configEnum:legalForm)
ActivityCode (configEnum:activity)
AccountancyAccount (varchar 64)
- PaymentReference (varchar)
- DateValidFrom (date)
- DateValidTo (date)
- isActive (bool)
- Json_ext (json)
- DateCreated (date)
- DateUpdated (date)
- UserUpdatedUUID (fk users)
- UserCreatedUUID (fk users)
PolicyHolderInsuree
- UUID (char(24)
bankAccount (json)( validation: (^.+$))
PaymentReference (varchar 128)
PolicyHolderInsuree (HistoryBusinessModel)
Version (integer - to be used for optimistic locking)
PolicyHolderUUID (fk policyHolder)*
- InsureeUUID
InsureeID (fk Insuree)*
ContributionPlanBundleUUID (fk_contributionPlanBundle)
- LastPolicyUUID
LastPolicyID (fk Policy)
- Json_ext (json)
- DateCreated (date)
- DateUpdated (date)
- UserUpdatedUUID (fk users)
- UserCreatedUUID (fk users)
- isActive
- DateValidFrom (date)
- DateValidTo (date)
PolicyHolderContributionPlanBundle
...
(
...
HistoryBusinessModel)
...
- Version (integer - to be used for optimistic locking)
ContributionPlanBundleUUID (fk_contributionPlanBundle)*
PolicyHolderUUID (fk policyHolder)
- Json_ext (json)
- DateCreated (date)
- DateUpdated (date)
- UserUpdatedUUID (fk users)
- UserCreatedUUID (fk users)
- isActive (bool)
- DateValidFrom (date)
- DateValidTo (date)
PolicyHolderUser
- UUID (char(24)
*
PolicyHolderUser (HistoryBusinessModel)
UserUUID (fk_user)*
PolicyHolderUUID (fk policyHolder)
- Json_ext (json)
- DateCreated (date)
- DateUpdated (date)
- UserUpdatedUUID (fk users)
- UserCreatedUUID (fk users)
- isActive (bool)
- DateValidFrom (date)
- DateValidTo (date)
Details design
Back end module
...
Mutations
Mutation as part of the schema file:
Permissions
Models
See models section above
Services
replacePolicyolder
replacePolicyHolderInsuree
replacePoicyHolderContributionPlanBundle
Front end
...
*
Services
CRUD services
replacePolicyHolderUser
replacePolicyHolderInsuree
replacePoicyHolderContributionPlanBundle
Frontend
The list of PolicyHolders should use the same layout as other existing list in openIMIS (claims, insuree ...).
Menu
...
Policyholder menu item should be located under the main menu "Insuree and policy menu
search
...
".
PolicyHolder search page
PolicyHolder search criteria
Code (string) with
icontains
field lookupTradename (string)
with
icontains
field lookupLocation (4 Select, one per level)
LegalForm (configEnum:legalForm ) (Select)
ActivityCode (configEnum:activity) (Select)
DateValidFrom (
dateToday by default) - Date
pickerPicker
DateValidTo
(date) - Date picker
search result
...
- Date Picker
checkbox to show deleted
Launch search button
reset search button
(nice to have in R4) search per insuree
(nice to have in R4) search per contribution plan bundle
The PolicyHolder result columns
Display name (Code - Tradename )
Location
LegalForm (configEnum:legalForm )
ActivityCode (configEnum:activity)
DateValidFrom (date)
DateValidTo (date)
Delete
...
(Trash) and Edit (Pen) buttons at the end of the line (see Location module)
MaterialUI + to add a policy holder
The PolicyHolder card will have:
...
by opening an empty PH card.
Double click or click on Edit button to update a PolicyHolder.
Backend Configuration
configEnum:legalForm
[{ “value“: “1”,
“label“: {“en”: “Personal Company”,
“fr”:”Persone physique”}
}, {“value“: “2”,
“label“: { “en”: “Limited Risk Company”,
“fr”:”Société à risque limité”}
}, {“value“: “3”,
“label“: { “en”: “Association”,
“fr”:”Association”}
}, {“value“: “4”,
“label“: { “en”: “Government”,
“fr”:”Gouvernement”}
}, {“value“: “5”,
“label“: { “en”: “Union”,
“fr”:”Syndicat”}
}]
configEnum:ActivityCode
[{ “value“: “1”,
“label“: {“en”: “Retail”,
“fr”:”Vente au détails”}
}, {“value“: “2”,
“label“: { “en”: “Industry”,
“fr”:”Industrie”}
}, {“value“: “3”,
“label“: { “en”: “Building”,
“fr”:”Construction”}
}, {“value“: “4”,
“label“: { “en”: “Sailing”,
“fr”:”Maritime”}
}, {“value“: “5”,
“label“: { “en”: “Services”,
“fr”:”Services”}
}]
Phone
default :
Code Block "phoneValidation": { "regex": /^[0-9]*$/, "regexMsg": { "en": "Invalid phone number", "fr": "Numéro de téléphone invalide" } }
Fax
default:
Code Block "faxValidation", { "regex": /^[0-9]{8,9}$/, "regexMsg": { "en": "Invalid fax number", "fr": "Numéro de fax invalide" } }
PaymentReference
default:
Code Block "paymentReferenceValidation", { "regex": /.+/, "regexMsg": { "en": "Invalid payment reference", "fr": "Référence de payement invalide" } }
AccountancyAccount
default:
Code Block "accountancyAccountValidation", { "regex": /.+/, "regexMsg": { "en": "Invalid accountancy account", "fr": "Numéro de compte comptable invalide" } }
The PolicyHolder card
General Information
Once a PolicyHolder view/update page opens from the search list, the "General information" section or tab is displayed with those fields (editable for the one with enough rights):
Code (varchar) (Mandatory, not editable once created)
TradeName (varchar) (Mandatory)
LocationsUUID (fk tblLocations) - (
Mandatory)
Search for location with Level - Code - Name (all stringslocation contribution_fe) (Mandatory)
Address (
varchar/json):
mutliline Box String OR (Address line 1, line2 , post code, city)multiline TextInput
Phone (varchar): string + configurable Regex for validation/constraint
Fax (varchar): + configurable Regex for validation/constraint
Email (varchar): + std email field validation
Code Block "regex": /^[^\s@]+@[^\s@]+\.[^\s@]+$/, "regexMsg": { "en": "Invalid email", "fr": "Couriel invalide" }
ContactName (
varchar/json)
LegalForm (configEnum:legalForm )
ActivityCode (configEnum:activity)
AccountancyAccount (varchar) + configurable Regex for validation/constraint
- ?bankAccount
BankAccount (json)
PaymentReference (varchar) + configurable Regex for validation/constraint
DateValidFrom (date) (Mandatory)
DateValidTo (date)
...
The material (Save) UI button will save the changes, when no change are detected the same button should be greyed out
(should have) The tab content (User, insuree, CBP) should be editable after the policy holder is saved (i.e. not before ), reloading the page should be avoided if possible.
on Policyholder create
all fields should be editable
On PolicyHolder update
all fields but Code and dateValidFrom should be editable
“isDeleted“ Policy holder cannot be updated
PolicyHolder Users
This page will link interactive (openIMIS) user to PolicyHolder, in order to allow them to access the PolicyHolder’s data on the PolicyHolder portal.
PolicyHolder Users search criteria
option to show deleted user
Launch search button
reset search button
DateValidFrom (Today by default)
DateValidTo
user search (contribution_fe ?)
PolicyHolder Users result column
(User name / firstname / lastname) Contribution of fe user module, Dropdown for new and value (or readonly dropdown preselected) for existing
DateValidFrom (date) (input field)
DateValidTo (date) (input field)
Delete
...
button
...
...
It should be
...
- once filled, new empty line should be displayed
...
possible to sort the result per column in ASC or DESC order.
PolicyHolder Users create
A
button on bottom right of the page. Clicking it results in a popup to add the user.
Fields:
User (User picker, required)
Policy Holder (Policy Holder picker, required)
Date Valid From (Date picker, required),
Date Valid To (Date picker)
PolicyHolder Users replace
All fields could be changed
PolicyHolder Users edit
All fields but the user could be changed
The material (Save) UI button will save all the changes made on the list.
Journal messages
Create: <UserLabel> is added on <PHlabel>
Delete: <UserLabel> is removed from<PHlabel>
Update: <UserLabel> - <PHlabel> is updated
Replace: <UserLabelNew> is replacing <UserLabelOld> on <PHlabel>
NTG done: PHUser tab in PH
tab showed if the user have the PHuser rights or the PHPortalUser right + link to PH in PHUser
PolicyHolder Insurees
This pages/section will link the PolicyHolder and a given insuree, and will enable the addition of data on that relationship (contribution plan bundle and calculation rules parameters).
This page or section could be in different form:
a tab in the Policyholder card
a dedicated page, access from the PolicyHolder card via a link that prefill PolicyHolder search criteria
a new "menu" that have the name of the PolicyHolder
PolicyHolder insuree search criteria
option to show deleted user
Launch search button
reset search button
insuree search (contribution_fe ?)
contribution plan bundle search (contribution_fe ?)
DateValidFrom (Today by default)
DateValidTo
PolicyHolder insuree result column
(Insuree data) contribution_fe insure module, Dropdown for new and value for existing
(contribution plan bundle data) contribution_fe "contribution plan bundle" module,
...
“Dropdown of
...
PHCPB" for new, and
...
“value” for existing
(calculation data) contribution_fe "calculation/rules" module, (inputs fields)
DateValidFrom (date) (input field)
DateValidTo (date) (input field)
...
replace, edit and Delete button
It should be possible to sort the result per column in ASC or DESC order
PolicyHolder insuree create
mandatory fields
DateValidFrom
PolicyHolder insuree replace
All fields but insuree could be changed
PolicyHolder insuree edit
Only dateValidTo can be changed
An empty line at the top of the list
...
with the add button in place of delete
...
, once filled, new empty line should be displayed.
...
Or a button will be on the top right of the table + a popup to add the insuree.
The material (Save) UI button will save all the changes made on the list.
PolicyHolder Contribution plan bundle
This page/section will link the CPB to PolicyHolder, only CPB part of that list will selectable on the PHInsuree page/section
This page or section could be in different form:
a tab in the Policyholder card
a dedicated page, access from the PolicyHolder card via a link that prefill PolicyHolder search criteria
a new "menu" that have the name of the PolicyHolder
PolicyHolder Contribution plan bundle search criteria
...
Launch search button
reset search button
option to show inactive PHCPB
...
contribution plan bundle search (contribution_fe ?)
DateValidFrom (Today by default)
DateValidTo
PolicyHolder Contribution plan bundle result columns
(CPB data) contribution_fe CPB module, Dropdown for new and value for existing
(calculation data) contribution_fe "calculation/rules" module, (inputs fields, if any)
replace, edit and Delete button
...
(TBC)
DateValidFrom
DateValidTo
It should be possible to sort the result per column in ASC or DESC order
PolicyHolder PHCPB create
All fields could be changed but the PH which is define by the parent page
CPB*
DateValidFrom*
DateValidTo
PolicyHolder PHCPB replace
All fields could be changed but the PH which is define by the parent page
CPB*
DateValidFrom*
DateValidTo
PolicyHolder PHCPB edit
Only dateValidTo can be changed
An empty line at the top of the list
...
with the add button in place of delete
...
, once filled, new empty line should be displayed.>
...
Or a button will be on the top right of the table + a popup to add the PHCPB.
The material (Save) UI button will save all the changes made on the list.
PolicyHolder payment
Same filter As payment, only an addtionnal filter that will be hidden to have only payment with payment details that are linked to PHCPD when a Payment Query $
NTG done: PHPayment tab in PH
tab showed if the user have the PHPayment rights or the PHPortalPayment right + link to PH in PHUser
Solution
Idea to make this additionnal filter within the payment module (i.e the payment tab could be a contribution from payment)
implement “Dynamic“ parameter in the Query
adapt the payment payment query to be able take “dynamic“ filters (I hope this is possible), but don’t use it in the payment module BUT enable the “pre_query“ signals to add filters in the query set
in PH be module, register a signal on the payment “pre_query“, check if there is an PH uuid on the mutation “dynamic“ params, if it is the case and if the user have either the Payment right or (the payment portal right + have a link to PH in PH user table ) then add the filters to retrieve only payment with payment details that are linked to CPD link to PH contracts
the Payment module, should block the query if the user have no right or if there is no additional filter on the query
(Nice to have)in the contract be module, register a signal on the payment “pre_query“, check if there is a contract uuid on the query “dynamic“ params, if it is the case and if the user have either the Payment right or (the payment portal right + have a link to contract PH in PH user table ) then add the filters to retrieve only payment with payment details that are linked to CPD
...
Link to other entities
place holder for other tab / link to search pages → those should be added by contribution_fe
...
1 tab from the contract module
shows the contract for the PH
1 tab form the payment module (NTHD):
shows the payment related to the contract
3 tab from the policy module (Nice to have):
a tab for the contribution search
a tab for the policy search
a tab for the insureePolicy
Frontend Configuration
Get Backend Configuration for the dropdown/enums or duplicate it
configurable Regex for validation/constraint for the phone and FAX (
NTH)Get Be Config or duplicate itNTHD)
plus message when the constraint is not respected (in different languages)
configurable Regex for validation/constraint for AccountancyAccount (
NTHNice to have)
plus message when the constraint is not respected (in different languages)
configurable Regex for validation/constraint PaymentReference
(NTH(Nice to have)
plus message when the constraint is not respected (in different languages)
When a tab is opened, only the id and the name of the policy holder PolicyHolder will be displayed in a top ribbon (as bread crumbs) . or Prefilled search fieldsFIXME: replace UI, search sub list (PHuser, PHinsuree, PHCPB)