Assessment of property
For overview Please refer to the parent file - Property Services
Key Functionality:
The assessment set of services inside the property module is used for assessing the value of a property in a given time frame and collect taxes for the same. Assessment is a snapshot of Property for a given transaction on that Property. These APIs provide functionalities to create/update/search the assessments. An assessment cannot exist without property.
Configuration Details:
MDMS CONFIG:
Configs:
Assessment shares most of the configs with Property as mentioned above, only exclusive properties are mentioned in this section.
name | value | description |
---|---|---|
assessment id format | PB-AS-[cy:yyyy-MM-dd]-[SEQ_EG_PT_ASSM] |
|
kafka create assessment topic | save-pt-assessment |
|
kafka update assesmsent topic | update-pt-assessment |
|
| true/false | Workflow integration can be controlled by the following two properties |
|
|
PERSISTER CONFIG: https://raw.githubusercontent.com/egovernments/configs/master/egov-persister/assessment-persister.yml?token=AE4Z2KFWEQBDCUY6AZLGGIK6AM3QQ
serviceMaps:
serviceName: property-services
mappings:
- version: 1.0
description: Persists assessment details to eg_pt_asmt_assessment table
fromTopic: save-pt-assessment
isTransaction: true
queryMaps:
- query: INSERT INTO eg_pt_asmt_assessment(id, tenantid, assessmentnumber, financialyear, propertyid, status, source, channel, assessmentdate, additionaldetails, createdby, createdtime, lastmodifiedby, lastmodifiedtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
basePath: Assessment
jsonMaps:
- jsonPath: $.Assessment.id
- jsonPath: $.Assessment.tenantId
- jsonPath: $.Assessment.assessmentNumber
- jsonPath: $.Assessment.financialYear
- jsonPath: $.Assessment.propertyId
- jsonPath: $.Assessment.status
- jsonPath: $.Assessment.source
- jsonPath: $.Assessment.channel
- jsonPath: $.Assessment.assessmentDate
- jsonPath: $.Assessment.additionalDetails
type: JSON
dbType: JSONB
- jsonPath: $.Assessment.auditDetails.createdBy
- jsonPath: $.Assessment.auditDetails.createdTime
- jsonPath: $.Assessment.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.auditDetails.lastModifiedTime
- query: INSERT INTO eg_pt_asmt_unitusage (tenantid, id, assessmentid, unitid, usagecategory, occupancytype, occupancydate, active, createdby, createdtime, lastmodifiedby, lastmodifiedtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
basePath: Assessment.unitUsageList.*
jsonMaps:
- jsonPath: $.Assessment.unitUsageList.*.tenantId
- jsonPath: $.Assessment.unitUsageList.*.id
- jsonPath: $.Assessment[?({id} in @.unitUsageList[*].id)].id
- jsonPath: $.Assessment.unitUsageList.*.unitId
- jsonPath: $.Assessment.unitUsageList.*.usageCategory
- jsonPath: $.Assessment.unitUsageList.*.occupancyType
- jsonPath: $.Assessment.unitUsageList.*.occupancyDate
- jsonPath: $.Assessment.unitUsageList.*.active
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.createdBy
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.createdTime
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedTime
- query: INSERT INTO eg_pt_asmt_document (id, tenantid, entityid, documenttype, filestoreid, documentuid, status, createdby, lastmodifiedby, createdtime, lastmodifiedtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
basePath: $.Assessment.documents.*
jsonMaps:
- jsonPath: $.Assessment.documents.*.id
- jsonPath: $.Assessment.tenantId
- jsonPath: $.Assessment.id
- jsonPath: $.Assessment.documents.*.documentType
- jsonPath: $.Assessment.documents.*.fileStoreId
- jsonPath: $.Assessment.documents.*.documentUid
- jsonPath: $.Assessment.documents.*.status
- jsonPath: $.Assessment.documents.*.auditDetails.createdBy
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.documents.*.auditDetails.createdTime
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedTime
- version: 1.0
description: Updates assessment details to eg_pt_asmt_assessment table
fromTopic: update-pt-assessment
isTransaction: true
queryMaps:
- query: INSERT INTO eg_pt_asmt_assessment_audit SELECT *, (SELECT extract(epoch from now())) FROM eg_pt_asmt_assessment WHERE id = ?;
basePath: Assessment
jsonMaps:
- jsonPath: $.Assessment.id
- query: INSERT INTO eg_pt_asmt_unitusage_audit SELECT *, (SELECT extract(epoch from now())) FROM eg_pt_asmt_unitusage WHERE id = ?;
basePath: Assessment.unitUsageList.*
jsonMaps:
- jsonPath: $.Assessment.unitUsageList.*.id
- query: UPDATE eg_pt_asmt_assessment SET financialyear = ?, status = ?, source = ?, assessmentDate = ?, additionaldetails = ?, lastmodifiedby = ?, lastmodifiedtime = ? WHERE id = ?;
basePath: Assessment
jsonMaps:
- jsonPath: $.Assessment.financialYear
- jsonPath: $.Assessment.status
- jsonPath: $.Assessment.source
- jsonPath: $.Assessment.assessmentDate
- jsonPath: $.Assessment.additionalDetails
type: JSON
dbType: JSONB
- jsonPath: $.Assessment.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.auditDetails.lastModifiedTime
- jsonPath: $.Assessment.id
- query: INSERT INTO eg_pt_asmt_unitusage (tenantid, id, assessmentId, unitid, usageCategory, occupancyType, occupancyDate, active, createdby, createdtime, lastmodifiedby, lastmodifiedtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE SET usageCategory = ?, occupancyType = ?, occupancyDate = ?, active = ?, lastmodifiedby = ?, lastmodifiedtime = ?;
basePath: Assessment.unitUsageList.*
jsonMaps:
- jsonPath: $.Assessment.unitUsageList.*.tenantId
- jsonPath: $.Assessment.unitUsageList.*.id
- jsonPath: $.Assessment[?({id} in @.unitUsageList[*].id)].id
- jsonPath: $.Assessment.unitUsageList.*.unitId
- jsonPath: $.Assessment.unitUsageList.*.usageCategory
- jsonPath: $.Assessment.unitUsageList.*.occupancyType
- jsonPath: $.Assessment.unitUsageList.*.occupancyDate
- jsonPath: $.Assessment.unitUsageList.*.active
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.createdBy
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.createdTime
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedTime
- jsonPath: $.Assessment.unitUsageList.*.usageCategory
- jsonPath: $.Assessment.unitUsageList.*.occupancyType
- jsonPath: $.Assessment.unitUsageList.*.occupancyDate
- jsonPath: $.Assessment.unitUsageList.*.active
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.unitUsageList.*.auditDetails.lastModifiedTime
- query: INSERT INTO eg_pt_asmt_document (id, tenantid, entityid, documenttype, filestoreid, documentuid, status, createdby, lastmodifiedby, createdtime, lastmodifiedtime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO UPDATE documenttype = ?, documentuid = ?, status = ?, lastmodifiedby = ?, lastmodifiedtime = ?;
basePath: $.Assessment.documents.*
jsonMaps:
- jsonPath: $.Assessment.documents.*.id
- jsonPath: $.Assessment.tenantId
- jsonPath: $.Assessment.id
- jsonPath: $.Assessment.documents.*.documentType
- jsonPath: $.Assessment.documents.*.fileStoreId
- jsonPath: $.Assessment.documents.*.documentUid
- jsonPath: $.Assessment.documents.*.status
- jsonPath: $.Assessment.documents.*.auditDetails.createdBy
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.documents.*.auditDetails.createdTime
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedTime
- jsonPath: $.Assessment.documents.*.documentType
- jsonPath: $.Assessment.documents.*.documentUid
- jsonPath: $.Assessment.documents.*.status
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedBy
- jsonPath: $.Assessment.documents.*.auditDetails.lastModifiedTime
Workflow Congif:
The first property switches workflow on or off, while the second property provides a way to control which field change can trigger the workflow. A businessService needs to be created using the workflow /egov-workflow-v2/egov-wf/businessservice/_create API.
Sample businessService create API body for Assessment workflow:
{
"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": "ASMT",
"business": "pt-services",
"businessServiceSla": 172800000,
"states": [
{
"sla": null,
"state": null,
"applicationStatus": null,
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"isStateUpdatable": true,
"actions": [
{
"action": "INITIATE",
"nextState": "INITIATED",
"roles": [
"CITIZEN",
"PT_CEMP"
]
}
]
},
{
"sla": null,
"state": "INITIATED",
"applicationStatus": "INITIATED",
"docUploadRequired": false,
"isStartState": true,
"isTerminateState": false,
"actions": [
{
"action": "APPLY",
"nextState": "APPLIED",
"roles": [
"CITIZEN",
"PT_CEMP"
]
},
{
"action": "INITIATE",
"nextState": "INITIATED",
"roles": [
"CITIZEN",
"PT_CEMP"
]
}
]
},
{
"sla": null,
"state": "APPLIED",
"applicationStatus": "APPLIED",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": false,
"isStateUpdatable": true,
"actions": [
{
"action": "FORWARD",
"nextState": "FIELDINSPECTION",
"roles": [
"PT_DOC_VERIFIER"
]
},
{
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"PT_DOC_VERIFIER"
]
},
{
"action" : "SENDBACKTOCITIZEN",
"nextState" : "INITIATED",
"roles":["PT_DOC_VERIFIER"]
}
]
},
{
"sla": null,
"state": "REJECTED",
"applicationStatus": "REJECTED",
"isStateUpdatable": false,
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": true
},
{
"sla": 86400000,
"state": "FIELDINSPECTION",
"applicationStatus": "FIELDINSPECTION",
"docUploadRequired": false,
"isStartState": false,
"isStateUpdatable": true,
"isTerminateState": false,
"actions": [
{
"action": "FORWARD",
"nextState": "PENDINGAPPROVAL",
"roles": [
"PT_FIELD_INSPECTOR"
]
},
{
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"PT_FIELD_INSPECTOR"
]
},
{
"action": "SENDBACK",
"nextState": "APPLIED",
"roles": [
"PT_FIELD_INSPECTOR"
]
}
]
},
{
"sla": 43200000,
"state": "PENDINGAPPROVAL",
"applicationStatus": "PENDINGAPPROVAL",
"docUploadRequired": false,
"isStartState": false,
"isStateUpdatable": false,
"isTerminateState": false,
"actions": [
{
"action": "APPROVE",
"nextState": "PENDINGPAYMENT",
"roles": [
"PT_APPROVER"
]
},
{
"action": "REJECT",
"nextState": "REJECTED",
"roles": [
"PT_APPROVER"
]
},
{
"action": "SENDBACK",
"nextState": "FIELDINSPECTION",
"roles": [
"PT_APPROVER"
]
}
]
},
{
"sla": 43200000,
"state": "PENDINGPAYMENT",
"applicationStatus": "PENDINGPAYMENT",
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": false,
"isStateUpdatable": false,
"actions": [
{
"action": "PAY",
"nextState": "APPROVED",
"roles": [
"CITIZEN",
"PT_CEMP",
"SYSTEM_PAYMENT"
]
},
{
"action": "ADHOC",
"nextState": "PENDINGPAYMENT",
"roles": [
"PT_CEMP"
]
}
]
},
{
"sla": null,
"state": "APPROVED",
"applicationStatus": "APPROVED",
"isStateUpdatable": false,
"docUploadRequired": false,
"isStartState": false,
"isTerminateState": true
}
]
}
]
}
Other system-level configs are the same as PT-Registry as mentioned above.
Notification Configs:
Payment Notification:
{
"code": "PT_NOTIFICATION_PAYMENT_FAIL",
"message": "Dear Citizen, Your payment of Rs. <insert amount to pay> for Property Tax Unique ID <insert ID> has failed. Your assessment is pending. Please try again. Ignore this message if you have completed your payment. You can pay your Property Tax online here - <payLink>",
"module": "rainmaker-pt",
"locale": "en_IN"
},
{
"code": "PT_NOTIFICATION_PAYMENT_OFFILE",
"message": "Dear Citizen, Your Property Tax payment of Rs. <amount> has been accepted. Mode of Payment: <insert mode of payment> Pending Amount: <Enter pending amount>.",
"module": "rainmaker-pt",
"locale": "en_IN"
},
{
"code": "PT_NOTIFICATION_PAYMENT_ONLINE",
"message": "Dear Citizen, Your payment of Rs.< insert amount paid> with payment transaction id < insert payment transaction id from PG> has been made successfully. Assessment for Property Tax Unique ID <insert Property Tax Assessment ID> was succesful. Property Tax due is Rs.<pt due>.",
"module": "rainmaker-pt",
"locale": "en_IN"
},
{
"code": "PT_NOTIFICATION_PAYMENT_PARTIAL_OFFLINE",
"message": "Dear Citizen, Your Property Tax payment of Rs. <amount> has been accepted. Mode of Payment: <insert mode of payment> Pending Amount: <Enter pending amount>. You can pay your Property Tax online here - <payLink>",
"module": "rainmaker-pt",
"locale": "en_IN"
},
{
"code": "PT_NOTIFICATION_PAYMENT_PARTIAL_ONLINE",
"message": "Dear Citizen, Your payment of Rs.< insert amount paid> with payment transaction id < insert payment transaction id from PG> has been made successfully. Assessment for Property Tax Unique ID <insert ID> was succesful. Property Tax due is Rs.<pt due>. You can pay your Property Tax here - <payLink>",
"module": "rainmaker-pt",
"locale": "en_IN"
}
Assessment Notification:
For adding localization for any status append ASMT_
prefix to the status and for adding a message for any status add ASMT_MSG_
before the status.
Assessment(Property Calculator) -
The calculator service Prepares and property tax and files the demand in the billing service for payment. It has the ‘estimate’ API to give the estimated property tax without persisting data and a calculated API to create demand for payments.
The calculator service PT Calculator
Integration
Integration Scope
Assessment integration helps citizens to assess their property with ease and helps them verify their tax values by themselves which gives more control to the citizens and hep the municipality collect taxes with ease.
Integration Benefits
Easy to create and simple process of self-assessment to avoid the hassle.
Integrated payment for multiple years enables by digit platform.
Steps to Integration
Customer can create an assessment on a given property using the
/assessment/_create
Search the assessment and its workflow status by using
/assessment/_search
endpoint/assessment/_update
endpoint to update the assessment and its workflow states as per need.
Reference Docs: - please refer property document Property Services | Doc Links
API LIST:
Title | Link |
/assessment/_create | |
/assessment/_update | |
/assessment/_search |