Property-Services(Registry)
Property services
Reference to Children Document
Property Mutation - Ownership Transfer Technical documentation
https://digit-discuss.atlassian.net/wiki/spaces/EPE/pages/243859820
One of the major application of the eGov stack which helps municipal and citizen to handle property tax payment and other related functions on the property such as assessments, mutation and so on.
The setup of the Application is as follows
Requirements:
Prior Knowledge of Java/J2EE.
Prior Knowledge of Spring Boot.
Prior Knowledge of REST APIs and related concepts like path parameters, headers, JSON etc.
Prior knowledge of Git.
Prior knowledge of eGov-mdms service, eGov-persister, eGov-user, eGov-location, eGov-localization, eGov-idgen, billing-service and eGov-URL-shortener.
FUNCTIONALITY:
The Property Service provides multiple functionalities starting from serving as a central repository where property information is registered for reference of citizen and other municipality-provided services such as water connection and sewerage management.
An assessment can be done so as to calculate and pay tax on the property. The different services provided by the property services are
Property Registry
Assessment
Mutation
Bifurcation
consolidation
Registry Explanation:
The registry flow helps the citizen/Employee to create a property in the system with the minimal information required.
Other workflows such as assessment or mutation can be triggered on the existing ACTIVE Property in the registry.
The property can be created, updated, cancelled, searched, Followed by process of Mutation and Assessment.
The same entry in registry can be referred by other modules for their business purposes(Water charges).
SETUP AND USAGE:
The Application is present among the Municipal-services group of applications available in the eGov-services git repository. The spring boot application needs Lombok* extension added in your IDE to load it. Once the application is up and running API requests can be posted to the url and ids can be generated.
*in case of IntelliJ the plugin can be installed directly, for eclipse the Lombok jar location has to be added in eclipse.ini file in this format javaagent:lombok.jar
For the API information please refer the swagger YAML,
GOTO : https://editor.swagger.io/ and click on file -> import URL Then add the raw URL of the API doc in the pop-up.
https://github.com/egovernments/municipal-services/blob/master/docs/property-services/Assessment.yml
In case the URL is unavailable, please go to the docs folder of the municipal-services git repo
The Postman collection of the service Property registry
https://www.getpostman.com/collections/02d01e7b46c79c140863
########## Persister File Config
The persister File config for property services can be found in the Config repo of eGov Git, which needs to be added in the egov-persister service.
https://github.com/egovernments/configs/blob/master/egov-persister/property-services-registry.yml
The variables in the Application.properties to be updated are as follows
######## URLs for the external API references
eGvo mdms
egov.mdms.host = https://egov-micro-dev.egovernments.orgeGov -idGen
egov.idgen.host = https://egov-micro-dev.egovernments.org/eGov - workflow
workflow.host = https://egov-micro-dev.egovernments.org/eGov - user
egov.user.host=https://egov-micro-dev.egovernments.orgboundary service
egov.location.host=https://egov-micro-dev.egovernments.org
pt- Calculation service
egov.calculation.host = https://egov-micro-dev.egovernments.orglocalization service
egov.localization.host = https://egov-micro-dev.egovernments.orgbilling-service
egbs.host=https://egov-micro-dev.egovernments.org/Url-Shortner
egov.url.shortner.host=http://egov-url-shortening.egov:8080
###### kafka topics persister configs for eGov persister
persister.save.property.topic=save-property-registry
persister.update.property.topic=update-property-registry
persister.cancel.property.topic=cancel-property-registry
persister.cancel.property.assessment.topic=cancel-property-assessment
egov.pt.assessment.create.topic=save-property-assessment
egov.pt.assessment.update.topic=update-property-assessment
Payment topic to udate workflow to paid status
kafka.topics.receipt.create=egov.collection.payment-create
####### Id-Gen Configs for Business ids
egov.idgen.ack.name=pt.acknowledgementnumber
egov.idgen.ack.format=PB-AC-[cy:yyyy-MM-dd]-[SEQ_EG_PT_ACK]
egov.idgen.mutation.name=pt.mutation.number
egov.idgen.mutation.format=PB-MT-[CITY]-[SEQ_EG_PT_MUTATION]
egov.idgen.assm.name=pt.assessmentnumber
egov.idgen.assm.format=PB-AS-[cy:yyyy-MM-dd]-[SEQ_EG_PT_ASSM]
egov.idgen.ptid.name=pt.propertyid
egov.idgen.ptid.format=PB-PT-[cy:yyyy-MM-dd]-[SEQ_EG_PT_PTID]
Property Search Parameters config (filter for search based on fields by user Type)
citizen.allowed.search.params = accountId,ids,propertyDetailids,mobileNumber,oldpropertyids
employee.allowed.search.params = accountId,ids,propertyDetailids,mobileNumber,oldpropertyids
Workflow-configs
Each flow in property has a workflow associated with it, which can be controlled by the following configs
The Boolean field which can enable/disable Workflow - same field controls the update and create workflow
is.workflow.enabled=false
Name of the business code in the workflow, this should be set to matching value to the config businessService field in workflow master
property.workflow.name=PT.CREATE
property.legacy.entry.workflow.name=PT.LEGACY
property.update.workflow.name=PT.UPDATE
Workflow Config for property create if the source is from WATER CONNECTION module
For creation of property from water and sewerage module, as per the use case mentioned in this ticket, different workflow config is used.
For each use case, to identified which workflow to use can be identified from this mdms file.
{
"tenantId": "pb",
"moduleName": "PropertyTax",
"PTWorkflow":[
{
"businessService":"PT.CREATEWITHWNS",
"initialAction":"OPEN",
"inWorkflowStatusAllowed":false,
"enable":false
},
{
"businessService":"PT.CREATE",
"initialAction":"open",
"inWorkflowStatusAllowed":true,
"enable":true
}
]
}
For use case 1 which says, The property which is creating from Water and sewerage module should have one step workflow.
for this requirement in above mdms file businessService
with PT.CREATEWITHWNS
object must have enable field to set as true.
Then for all the property creation from Water and Sewerage module would have one step workflow and property would be created with ACTIVE state.
Fields in above mdms file:
Mdms Fields | Descripton |
---|---|
businessService | Name of workflow config |
initialAction | Indicate the start(initial) action of the particular workflow mention in businessService. |
inWorkflowStatusAllowed | This field indicate whether the property with application status as “inWorkflow” can be use with water and sewerage connection creation. |
enable | If this filed is set as true, then the other fields associate with the particular object is use for property creation. |
(Note: The above objects indicate the each use case mention in this ticket, so at a time only one object (use case)enable field must set as true )
Sample workflow config for use case 1 where property creation is from water and sewerage module with one step workflow
{
"BusinessServices": [
{
"tenantId": "pb",
"businessService": "PT.CREATEWITHWNS",
"business": "PT",
"businessServiceSla": null,
"states": [
{
"sla": null,
"state": null,
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"isStateUpdatable": false,
"actions": [
{
"action": "OPEN",
"nextState": "INITIATED",
"roles": [
"CITIZEN",
"WS_CEMP",
"SW_CEMP"
]
}
]
},
{
"sla": null,
"state": "INITIATED",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"isStateUpdatable": true,
"actions": [
{
"action": "SUBMIT",
"nextState": "APPROVED",
"roles": [
"EMPLOYEE",
"CITIZEN",
"SW_CEMP",
"WS_CEMP"
]
},
{
"action": "BACK",
"nextState": "INWORKFLOW",
"roles": [
"EMPLOYEE",
"CITIZEN",
"SW_CEMP",
"WS_CEMP"
]
}
]
},
{
"sla": null,
"state": "INWORKFLOW",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"isStateUpdatable": true,
"actions": [
{
"action": "SUBMIT",
"nextState": "APPROVED",
"roles": [
"EMPLOYEE",
"CITIZEN",
"SW_CEMP",
"WS_CEMP"
]
}
]
},
{
"sla": null,
"state": "APPROVED",
"applicationStatus": "ACTIVE",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": true,
"isStateUpdatable": false,
"actions": null
}
]
}
]
}
Sample workflow config - (The same PT.CREATE can be used for update workflow also since both involve the same functionality)
{
"RequestInfo": {
"apiId": "Rainmaker",
"action": "",
"did": 1,
"key": "",
"msgId": "20170310130900|en_IN",
"requesterId": "",
"ts": 1513579888683,
"ver": ".01",
"authToken": "b39181b1-5c6b-484a-b825-6be2f62012b8"
},
"BusinessServices": [
{
"tenantId": "pb",
"businessService": "PT.CREATE",
"business": "PT",
"businessServiceSla": null,
"states": [
{
"tenantId": "pb",
"sla": null,
"state": null,
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"actions": [
{
"tenantId": "pb",
"action": "OPEN",
"nextState": "OPEN",
"roles": [
"CITIZEN",
"EMPLOYEE"
]
}
]
},
{
"tenantId": "pb",
"sla": null,
"state": "OPEN",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"actions": [
{
"tenantId": "pb",
"action": "VERIFY",
"nextState": "DOCVERIFIED",
"roles": [
"PT_DOC_VERIFIER"
]
},
{
"tenantId": "pb",
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"PT_DOC_VERIFIER"
]
},
{
"tenantId": "pb",
"action": "SENDBACKTOCITIZEN",
"nextState": "CORRECTIONPENDING",
"roles": [
"PT_DOC_VERIFIER"
]
}
]
},
{
"tenantId": "pb",
"sla": null,
"state": "DOCVERIFIED",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": false,
"actions": [
{
"tenantId": "pb",
"action": "FORWARD",
"nextState": "FIELDVERIFIED",
"roles": [
"PT_FIELD_INSPECTOR"
]
}
]
},
{
"tenantId": "pb",
"sla": null,
"state": "FIELDVERIFIED",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": false,
"actions": [
{
"tenantId": "pb",
"action": "APPROVE",
"nextState": "APPROVED",
"roles": [
"PT_APPROVER"
]
},
{
"tenantId": "pb",
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"PT_APPROVER"
]
}
]
},
{
"tenantId": "pb",
"sla": null,
"state": "REJECTED",
"applicationStatus": "INACTIVE",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": true,
"actions": null
},
{
"tenantId": "pb",
"sla": null,
"state": "APPROVED",
"applicationStatus": "ACTIVE",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": true,
"actions": null
},
{
"tenantId": "pb",
"sla": null,
"state": "CORRECTIONPENDING",
"applicationStatus": "INWORKFLOW",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": false,
"isStateUpdatable": true,
"actions": [
{
"tenantId": "pb",
"action": "REOPEN",
"nextState": "OPEN",
"roles": [
"CITIZEN",
"PT_CEMP"
]
},
{
"tenantId": "pb",
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"CITIZEN",
"PT_CEMP"
]
}
]
}
]
}
]
}
PT.LEGACY workflow config
Notifications :
To enable or disable notifcation
notif.sms.enabled=true
#notif urls - makes use of the UI app host in notification service
egov.notif.commonpay = citizen/egov-common/pay?consumerCode={CONSUMERCODE}&tenantId={TENANTID}
egov.notif.view.property = citizen/property-tax/my-properties/property/{PROPERTYID}/{TENANTID}
egov.notif.view.mutation = citizen/pt-mutation/search-preview?applicationNumber={APPID}&tenantId={TENANTID}
The Current localization messages for notification