Description
Construction or renovation of buildings is regulated by Municipal Body in India. One must get permission from ULB prior to construction . This process involves submitting the building plan to ULB along with other documents, ULB verifies the plan with other documents and approves the construction. The document which authorizes the construction is called “Permit Order” One must have this permit order with him till the completion of construction. ULB officials will inspect various stages of construction and make sure it is compliance to the plan . When construction completed ,after inspection Secretary provides “Completion certificate” and finally will provide “Occupancy Certificate”. This entire process is known as “Building Plan Approval”.
Functionality:
This section covers the high-level details of the functionalities available in the Building Plan Application system.
Centralized login page for citizen, official and stakeholders
Citizen functionalities
Online application submission - New construction
Occupancy certificate request
FieldInspection Report Capture
Pay fee online and generate permit order online
Inspection of applications and online status
Configurable workflow
Auto fee calculation
Online and off line payment collection
Rejection process
Revocation process
Configurable functionalities
System Requirements:
Knowledge of Java/J2EE(preferably Java 8 version)
Knowledge of Spring Boot and spring-boot microservices.
Knowledge of Git or any version control system.
Knowledge of RESTful Web services.
Knowledge of the Lombok library will helpful.
knowledge of eGov-mdms service, eGov-persister, eGov-idgen, eGov-sms, eGov-email,eGov-user, eGov-localization, eGov-workflow-service will be helpful.
Setup and usage:
The Application is present among the municipal services group of applications available in the eGov-services git repository with the folder name bpa-services , bpa-calculator and land-services. The spring boot application needs the 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
API Information :
Please refer to Swagger API for YAML file details. Link - API Specs.
Application.properties File Information:
Here we are listing the configs apart from dependent service host, url’s, DB and Flyway configs.
kafka topics persister configs for eGov persister to save and update BPA Data
persister.save.buildingplan.topic=save-bpa-buildingplan
persister.update.buildingplan.topic=update-bpa-buildingplan
persister.update.buildingplan.workflow.topic=update-bpa-workflow
persister.update.buildingplan.adhoc.topic=update-bpa-adhoc-buildingplan
Receipt kafka topics where BPA application listens to move the application Status after payment completion
kafka.topics.receipt.create=egov.collection.payment-create
Config for Demand Business service codes for different fees to be paid for BPA
egov.receipt.businessservice=
BPA.NC_APP_FEE := Building Plan Approval Application Fee
BPA.NC_SAN_FEE := Building Plan Approval Sanction Fee
BPA.LOW_RISK_PERMIT_FEE := Building Plan Approval Low Risk Permit Fee
BPA.NC_OC_APP_FEE := Building Plan Approval Occupancy Certificate Application Fee
BPA.NC_OC_SAN_FEE := Building Plan Approval Occupancy Certificate Sanction Fee
Application and Permit Number Formats
egov.idgen.bpa.applicationNum.format=PB-BP-[cy:yyyy-MM-dd]-[SEQ_EG_BP_APN]
egov.idgen.bpa.permitNum.format=PB-BP-[cy:yyyy-MM-dd]-[SEQ_EG_BP_PN]
SMS Notification Topic to push the SMS and Notification’s to be sent by BPA module
kafka.topics.notification.sms=egov.core.notification.sms
Payment Notification Config
egov.ui.app.host=https://egov-micro-dev.egovernments.org
egov.usr.events.create.topic=persist-user-events-async
egov.usr.events.pay.link=citizen/otpLogin?mobileNo=$mobile&redirectTo=egov-common/pay?consumerCode=$applicationNo&tenantId=$tenantId&businessService=$businessService
egov.usr.events.pay.code=PAY
List of Application Statuses on which payment notification to be sent
egov.usr.events.pay.triggers=PENDING_SANC_FEE_PAYMENT,PENDING_APPL_FEE,PENDING_FEE
Validity of the permit order generated in no of months
egov.bpa.validity.date.in.months=36
Workflow code for the combination of applicationType , ServiceType
appSrvTypeBussSrvCode={"BUILDING_PLAN_SCRUTINY":{"NEW_CONSTRUCTION":"BPA,BPA_LOW"},"BUILDING_OC_PLAN_SCRUTINY":{"NEW_CONSTRUCTION":"BPA_OC"}}
Application Status on which SKIP_PAYMENT action to be considered
egov.bpa.skippayment.status=PENDING_APPL_FEE,PENDING_SANC_FEE_PAYMENT,PENDING_FEE
Business Service Code for WorkflowCode and Application Status
workflowStatusFeeBusinessSrvMap={"BPA":{"PENDING_APPL_FEE":"BPA.NC_APP_FEE","PENDING_SANC_FEE_PAYMENT":"BPA.NC_SAN_FEE"},"BPA_LOW":{"PENDING_FEE":"BPA.LOW_RISK_PERMIT_FEE"},"BPA_OC":{"PENDING_APPL_FEE":"BPA.NC_OC_APP_FEE","PENDING_SANC_FEE_PAYMENT":"BPA.NC_OC_SAN_FEE"}}
external API references:
egov-user - ( Manage user )
tl-services - Stakeholder Registration ( Registration process of Stakeholder is handled by this service )
egov-user-event ( What’s New and Events )
egov-filestore ( To store the documents uploaded by the user )
egov-idgen ( To generate the application No, Permit No )
egov-indexer ( To index the bpa data )
egov-localization ( To use the localized messages )
egov-location ( To store the address locality )
egov-mdms ( Configurations/master data used in the application is served by MDMS )
egov-notification-sms ( Service to send SMS to the users involved in the application )
egov-persister ( Helps to persist the data )
egov-searcher ( Search query used to simply the search )
egov-workflow-v2 ( Workflow configuration for different BPA application is configured )
pdf-service ( Receipt’s, permitorder etc.. and prepared )
billing-service ( Create demands and bills for the fees to be collected )
collection-services ( Create receipt for the payment received for the bills )
bpa-calculator ( Calculates the fees to be collected at different stages)
land-services ( land information related to BPA application is stored )
dcr-services ( get and validate Edcr data )
Configuration:
BPA Specific Mdms configuration:
Under the data/<state code> folder you can find the BPA which has all the MDMS JSON’s
master-config.json for BPA
Code Block |
---|
"BPA": {
"ServiceType": {
"masterName": "ServiceType",
"isStateLevel": true,
"uniqueKeys": [
"$.code"
]
},
"ApplicationType": {
"masterName": "ApplicationType",
"isStateLevel": true,
"uniqueKeys": [
"$.code"
]
},
"DocTypeMapping": {
"masterName": "DocTypeMapping",
"isStateLevel": true,
"uniqueKeys": [
"$.code"
]
},
"CalculationType": {
"masterName": "CalculationType",
"isStateLevel": true,
"uniqueKeys": []
},
"RiskTypeComputation": {
"masterName": "RiskTypeComputation",
"isStateLevel": true,
"uniqueKeys": []
},
"OccupancyType": {
"masterName": "OccupancyType",
"isStateLevel": true,
"uniqueKeys": [
"$.code"
]
},
"SubOccupancyType": {
"masterName": "SubOccupancyType",
"isStateLevel": true,
"uniqueKeys": [
"$.code"
]
},
"CheckList": {
"masterName": "CheckList",
"isStateLevel": true,
"uniqueKeys": [
"$.question"
]
}
} |
MDMS Details
MDMS Name | MDMS Path | Description | Example | ||
---|---|---|---|---|---|
ServiceType | Values for ServiceType Dropdown | NA | |||
Application Type | Values for Application Type Dropdown | NA | |||
Occupancy Type | Values for Occupancy Type Dropdown | NA | |||
SubOccupancy Type | Values for SubOccupancy Type Dropdown | NA | |||
DocumentTypeMapping | List’s out the documents required at the given stage of the application for Given ApplicationType, ServiceType, RiskType and WorklowState. In the docTypes we have
|
Above example indicates Documents from the common-master documentTypes starting with code(s) in the above example should be displayed in BPA Application UI when the Application of ApplicationType -BUILDINGPLAN_SCRUTINY | |||
CalculationType | Used by bpa-calculator Service which Defines the Fee to be collected for Given ApplicationType, ServiceType, RiskType and feeType |
From the above example
| |||
RiskTypeComputation | Helps to Defines the RiskType of the Application based on the building Height and plotArea received from the EDCR System |
| |||
CheckList | Used to Define the List of Questions and Documents to be attached on Field Inspection Pending Stage by Field Inspector. The Example indicates Four Questions with fieldType “YES/NO/NA“ ( Which indicates that field of type dropdown with Yes, NO and NA options) should be asked. Readable question will be available in |
|
Access MDMS Config
Action Test : URL Actions adding
Code Block |
---|
{
"id": 1971,
"name": "BPA-PermitOrderEDCR Report",
"url": "/bpa-services/v1/bpa/_permitorderedcr",
"displayName": "Apply",
"orderNumber": 0,
"enabled": false,
"serviceCode": "BPA",
"code": "null",
"path": ""
}, {
"id": 1975,
"name": "Locality searcher endpoint for BPA",
"url": "/egov-searcher/locality/bpa-services/_get",
"displayName": "BPA locality searcher",
"orderNumber": 0,
"enabled": false,
"serviceCode": "egov-searcher",
"code": "null",
"path": ""
},{
"id": 1924,
"name": "BPA-Applyforservice",
"url": "/bpa-services/v1/bpa/_create",
"displayName": "Apply",
"orderNumber": 0,
"enabled": false,
"serviceCode": "BPA",
"code": "null",
"path": ""
}, {
"id": 1930,
"name": "BPA-applicationsearch",
"url": "/bpa-services/v1/bpa/_search",
"displayName": "Search",
"orderNumber": 0,
"enabled": false,
"serviceCode": "BPA",
"code": "null",
"path": ""
},{
"id": 1931,
"name": "BPA-updateapplicationservice",
"url": "/bpa-services/v1/bpa/_update",
"displayName": "Apply",
"orderNumber": 0,
"enabled": false,
"serviceCode": "BPA",
"code": "null",
"path": ""
}, |
Access to the Roles for the above Actions
Code Block |
---|
{
"rolecode": "CEMP",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_TOWNPLANNER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_BUILDER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_STRUCTURALENGINEER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_SUPERVISOR",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_VERIFIER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_FIELD_INSPECTOR",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_NOC_VERIFIER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_APPROVER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_ARCHITECT",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "CITIZEN",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_ENGINEER",
"actionid": 1971,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_VERIFIER",
"actionid": 1975,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_FIELD_INSPECTOR",
"actionid": 1975,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_NOC_VERIFIER",
"actionid": 1975,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_APPROVER",
"actionid": 1975,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_ARCHITECT",
"actionid": 1924,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_ARCHITECT",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "CITIZEN",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
}, {
"rolecode": "BPA_VERIFIER",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
}, {
"rolecode": "BPA_APPROVER",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_FIELD_INSPECTOR",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_NOC_VERIFIER",
"actionid": 1931,
"actioncode": "",
"tenantId": "pb"
},{
"rolecode": "BPA_ARCHITECT",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},{
"rolecode": "BPA_VERIFIER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "CEMP",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_APPROVER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
}, {
"rolecode": "CITIZEN",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
}, {
"rolecode": "BPA_FIELD_INSPECTOR",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "BPA_NOC_VERIFIER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},{
"rolecode": "AIRPORT_AUTHORITY_APPROVER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "FIRE_NOC_APPROVER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
},
{
"rolecode": "NOC_DEPT_APPROVER",
"actionid": 1930,
"actioncode": "",
"tenantId": "pb"
} |
Billing Service MDMS Config
BusinessService Config for Fee’s to be collected
Application Fee, Sanction Fee BPA High/Medium Risk
Code Block |
---|
{
"businessService": "BPA.NEWCONSTRUCTION_APP_FEE",
"code": "BPA.NC_APP_FEE",
"collectionModesNotAllowed": [
"DD"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true
},
{
"businessService": "BPA.NEWCONSTRUCTION_SANC_FEE",
"code": "BPA.NC_SAN_FEE",
"collectionModesNotAllowed": [
"DD"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true
},
|
Application Fee, Sanction Fee for BPA Low Risk
Code Block |
---|
{
"businessService": "BPA.NEWCONSTRUCTION_LOW_RISK_PERMIT_FEE",
"code": "BPA.LOW_RISK_PERMIT_FEE",
"collectionModesNotAllowed": [
"DD"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true
}, |
Application Fee, Sanction Fee for BPA OC
Code Block |
---|
{
"businessService": "BPA.NEWCONSTRUCTION_OC_APP_FEE",
"code": "BPA.NC_OC_APP_FEE",
"collectionModesNotAllowed": [
"DD"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true
},
{
"businessService": "BPA.NEWCONSTRUCTION_OC_SANC_FEE",
"code": "BPA.NC_OC_SAN_FEE",
"collectionModesNotAllowed": [
"DD"
],
"partPaymentAllowed": false,
"isAdvanceAllowed": false,
"isVoucherCreationEnabled": true,
"isActive": true
} |
TaxHead MDMS
Tax Head for BPA High/Medium Risk
Code Block |
---|
{
"category": "FEE",
"service": "BPA.NC_APP_FEE",
"name": "BPA Application fees",
"code": "BPA_APPL_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "1",
"isRequired": false
},
{
"category": "FEE",
"service": "BPA.NC_SAN_FEE",
"name": "BPA Sanction fees",
"code": "BPA_SANC_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "2",
"isRequired": false
},
|
TaxHead config for BPA Low Risk
Code Block |
---|
{
"category": "FEE",
"service": "BPA.LOW_RISK_PERMIT_FEE",
"name": "BPA Low Risk Appllication Fees",
"code": "BPA_LOW_APPL_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "1",
"isRequired": false
},
{
"category": "FEE",
"service": "BPA.LOW_RISK_PERMIT_FEE",
"name": "BPA Low Risk Permit Fees",
"code": "BPA_LOW_SANC_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "1",
"isRequired": false
}, |
TaxHead config for BPA OC
Code Block |
---|
{
"category": "FEE",
"service": "BPA.NC_OC_APP_FEE",
"name": "BPA Application fees",
"code": "BPA_OC_APPL_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "1",
"isRequired": false
},
{
"category": "FEE",
"service": "BPA.NC_OC_SAN_FEE",
"name": "BPA Sanction fees",
"code": "BPA_OC_SANC_FEES",
"isDebit": false,
"isActualDemand": true,
"order": "2",
"isRequired": false
}, |
TaxPeriod MDMS Config
TaxPeriod MDMS for BPA High/Medium Risk
Code Block |
---|
{
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "BPA.NC_APP_FEE",
"code": "BPA10YRS2018",
"financialYear": "2018-28"
},
{
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "BPA.NC_SAN_FEE",
"code": "BPA10YRS2018",
"financialYear": "2018-28"
}, |
TaxPeriod MDMS for BPA Low Risk
Code Block |
---|
{
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "BPA.LOW_RISK_PERMIT_FEE",
"code": "BPA10YRS2018",
"financialYear": "2018-28"
}, |
TaxPeriod Config for BPA OC
Code Block |
---|
{
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "BPA.NC_OC_APP_FEE",
"code": "BPAOCAPP10YRS2018",
"financialYear": "2018-28"
},
{
"fromDate": 1522540801000,
"toDate": 1838159999000,
"periodCycle": "FORTENYEARS",
"service": "BPA.NC_OC_SAN_FEE",
"code": "BPAOCSAN10YRS2018",
"financialYear": "2018-28"
} |
ID Gen Config for BPA Numbers
BPA Application Number format Config
Code Block |
---|
{
"idname":"egov.idgen.bpa.applicationNum",
"format":"PB-BP-[cy:yyyy-MM-dd]-[SEQ_EG_BP_APN]"
}, |
BPA Permit Number format Config
Code Block |
---|
{
"idname":"egov.idgen.bpa.applicationNum",
"format":"PB-BP-[cy:yyyy-MM-dd]-[SEQ_EG_BP_PN]"
}, |
BPA Receipt Number format config
Code Block |
---|
{
"format": "BPA/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]",
"idname": "bpa.nc_app_fee.receipt.id"
},
{
"format": "BPA/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]",
"idname": "bpa.nc_san_fee.receipt.id"
}, |
BPA OC Receipt Number format config
Code Block |
---|
{
"format": "BPA/OC/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]",
"idname": "bpa.nc_oc_app_fee.receipt.id"
},
{
"format": "BPA/OC/[CITY.CODE]/[fy:yyyy-yy]/[SEQ_EGOV_COMMON]",
"idname": "bpa.nc_oc_san_fee.receipt.id"
}, |
Persister configuration:
Indexer Configuration:
Locality Search Configuration:
Setup the locality Search query in the localitySearcher.yml as new entry. Add RoleAction Test and Role Action for the URL “/egov-searcher/locality/bpa-services/_get
“
Code Block |
---|
- name: bpa-services
query:
baseQuery: |
Select row_to_json(result) from
(
select applicationNo as referenceNumber,locality from eg_bpa_buildingplan bpa
INNER JOIN eg_land_Address ad ON ad.landInfoId = bpa.landid
) result $where
groupBy:
orderBy:
searchParams:
condition: AND
params:
- name: result.referenceNumber
isMandatory: true
jsonPath: $.searchCriteria.referenceNumber
operator:
output:
jsonFormat: {"ResponseInfo": {}}
outJsonPath: $.Localities
responseInfoPath: $.ResponseInfo |
Database Schema
...
Postman Links
Workflow Configuration
BPA - Building Plan Approval Apply High/Medium Risk
BPA Low – Building Plan Approval Apply Low Risk
BPA OC - Building Plan Approval Occupancy Certificate Apply
Validations included
On Workflow action of Every Stage, System verifies the Documents Configured for the given stage of the workflow from the DocumentTypeMapping MDMS and validates the required Documents attached to move forward
DropDown values to be validate against the MDMS values, Value in those field should be one of the MDMS value.
Notifications
Notifications Message codes for SMS and User Events are prepared as follows
ApplicationType_ServiceType_WorkflowAction_ApplicationStatus.
Example BPA Apply Application (i.e applicationType is BUILDING_PLAN_SCRUTINY) with ServiceType NEW_CONSTRUCTION and the current application status is DOCUMENT_VERIFICATION_PENDING and workflow Action of the request is FORWARD then the localized message for this notification will be looked for the code: BUILDING_PLAN_SCRUTINY_NEW_CONSTRUCTION_FORWARD_DOCUMENT_VERIFICATION_PENDING
The message text for the above code is sent through SMS and Notification filling the owner, serviceType, application Number and other values.
PDFS used
BPA supports below PDF’s
PDF Name | Description | Config’s |
---|---|---|
BPA Permit Order | PDF Generated for the Permit Order on approval of the BPA HIGH and MEDIUM RISK Applications | |
BPA LOW Permit Order | PDF Generated for the Permit Order on approval of the BPA LOW RISK Applications | |
Revocation Letter | PDF of the Revocation Letter Generated when the LOW RISK BPA Application is Rejected | |
Occupancy Certificate | PDF Germinated for the Occupancy Certificate on Approval of the Occupancy Certificate Application |