From 5496b1d54dba2996d48a0efb846f1b12c77ca3fe Mon Sep 17 00:00:00 2001
From: Priyanka-eGov <74049060+Priyanka-eGov@users.noreply.github.com>
Date: Thu, 12 Dec 2024 14:59:19 +0530
Subject: [PATCH 1/9] HCMPRE-1635 Microplanning v0.1 master merge (#1271)
---
health-services/census-service/CHANGELOG.md | 13 +
health-services/census-service/README.md | 18 +
health-services/census-service/pom.xml | 141 ++++
.../src/main/java/digit/Main.java | 20 +
.../main/java/digit/config/Configuration.java | 86 +++
.../java/digit/config/MainConfiguration.java | 41 ++
.../java/digit/config/ServiceConstants.java | 114 +++
.../kafka/FacilityCatchmentConsumer.java | 99 +++
.../src/main/java/digit/kafka/Producer.java | 20 +
.../digit/kafka/ResourceCensusConsumer.java | 37 +
.../digit/repository/CensusRepository.java | 21 +
.../repository/ServiceRequestRepository.java | 45 ++
.../repository/impl/CensusRepositoryImpl.java | 219 ++++++
.../querybuilder/CensusQueryBuilder.java | 219 ++++++
.../repository/rowmapper/CensusRowMapper.java | 148 ++++
.../rowmapper/StatusCountRowMapper.java | 30 +
.../java/digit/service/CensusService.java | 127 ++++
.../service/enrichment/CensusEnrichment.java | 218 ++++++
.../enrichment/CensusTimeframeEnrichment.java | 47 ++
.../service/validator/CensusValidator.java | 337 +++++++++
.../service/workflow/WorkflowService.java | 331 +++++++++
.../main/java/digit/util/BoundaryUtil.java | 111 +++
.../java/digit/util/BusinessServiceUtil.java | 81 +++
.../src/main/java/digit/util/CommonUtil.java | 151 ++++
.../util/PlanEmployeeAssignmnetUtil.java | 59 ++
.../src/main/java/digit/util/QueryUtil.java | 139 ++++
.../java/digit/util/ResponseInfoFactory.java | 27 +
.../web/controllers/CensusController.java | 76 ++
.../digit/web/models/AdditionalField.java} | 27 +-
.../digit/web/models/BulkCensusRequest.java | 33 +
.../main/java/digit/web/models/Census.java | 142 ++++
.../main/java/digit/web/models/CensusDTO.java | 104 +++
.../java/digit/web/models/CensusRequest.java | 31 +
.../digit/web/models/CensusRequestDTO.java | 31 +
.../java/digit/web/models/CensusResponse.java | 42 ++
.../web/models/CensusSearchCriteria.java | 72 ++
.../digit/web/models/CensusSearchRequest.java | 33 +
.../web/models/PopulationByDemographic.java | 69 ++
.../digit/web/models/RequestInfoWrapper.java | 18 +
.../boundary/BoundarySearchResponse.java | 42 ++
.../boundary/BoundaryTypeHierarchy.java | 30 +
.../BoundaryTypeHierarchyDefinition.java | 45 ++
.../BoundaryTypeHierarchyResponse.java | 36 +
.../BoundaryTypeHierarchySearchCriteria.java | 38 +
.../BoundaryTypeHierarchySearchRequest.java | 33 +
.../web/models/boundary/EnrichedBoundary.java | 42 ++
.../models/boundary/HierarchyRelation.java | 34 +
.../models/plan/PlanEmployeeAssignment.java | 63 ++
.../plan/PlanEmployeeAssignmentResponse.java | 37 +
.../PlanEmployeeAssignmentSearchCriteria.java | 50 ++
.../PlanEmployeeAssignmentSearchRequest.java | 29 +
.../web/models/plan/PlanFacilityDTO.java | 72 ++
.../models/plan/PlanFacilityRequestDTO.java | 33 +
.../src/main/resources/application.properties | 82 +++
.../src/main/resources/db/Dockerfile | 9 +
.../src/main/resources/db/migrate.sh | 2 +-
.../V20240925155908__census_create_ddl.sql | 36 +
...00__census_additional_field_create_ddl.sql | 12 +
...0700__alter_census_assignee_create_ddl.sql | 1 +
.../src/main/resources/start.sh | 11 +
.../test/java/digit/TestConfiguration.java | 16 +
.../web/controllers/CensusControllerTest.java | 69 ++
health-services/plan-service/CHANGELOG.md | 42 +-
health-services/plan-service/pom.xml | 11 +
.../src/main/java/digit/Main.java | 2 +-
.../main/java/digit/config/Configuration.java | 88 ++-
.../java/digit/config/ServiceConstants.java | 304 +++++++-
...jectFactoryCreatePlanFacilityConsumer.java | 57 ++
.../digit/kafka/UpdatePlanConfigConsumer.java | 1 +
.../PlanConfigurationRepository.java | 1 +
.../PlanEmployeeAssignmentRepository.java | 16 +
.../repository/PlanFacilityRepository.java | 15 +
.../java/digit/repository/PlanRepository.java | 10 +-
.../repository/ServiceRequestRepository.java | 5 +-
.../impl/PlanEmployeeAssignmentImpl.java | 121 ++++
.../impl/PlanFacilityRepositoryImpl.java | 150 ++++
.../repository/impl/PlanRepositoryImpl.java | 124 +++-
.../querybuilder/PlanConfigQueryBuilder.java | 62 +-
.../PlanEmployeeAssignmentQueryBuilder.java | 170 +++++
.../PlanFacilityQueryBuilder.java | 154 ++++
.../querybuilder/PlanQueryBuilder.java | 136 +++-
.../rowmapper/PlanConfigRowMapper.java | 87 ++-
.../PlanEmployeeAssignmentRowMapper.java | 66 ++
.../rowmapper/PlanFacilityRowMapper.java | 79 ++
.../repository/rowmapper/PlanRowMapper.java | 88 +--
.../rowmapper/PlanStatusCountRowMapper.java | 31 +
.../service/PlanConfigurationService.java | 54 +-
.../digit/service/PlanEmployeeService.java | 91 +++
.../main/java/digit/service/PlanEnricher.java | 130 +++-
.../digit/service/PlanFacilityService.java | 98 +++
.../main/java/digit/service/PlanService.java | 48 +-
.../java/digit/service/PlanValidator.java | 457 +++++++++---
.../service/enrichment/EnrichmentService.java | 237 +++---
.../PlanEmployeeAssignmentEnricher.java | 71 ++
.../enrichment/PlanFacilityEnricher.java | 213 ++++++
.../validator/PlanConfigurationValidator.java | 675 +++++++++++-------
.../PlanEmployeeAssignmentValidator.java | 349 +++++++++
.../validator/PlanFacilityValidator.java | 301 ++++++++
.../service/validator/WorkflowValidator.java | 141 ++++
.../service/workflow/WorkflowService.java | 432 +++++++++++
.../main/java/digit/util/BoundaryUtil.java | 111 +++
.../main/java/digit/util/CampaignUtil.java | 91 +++
.../src/main/java/digit/util/CensusUtil.java | 60 ++
.../src/main/java/digit/util/CommonUtil.java | 275 +++++++
.../main/java/digit/util/FacilityUtil.java | 84 +++
.../src/main/java/digit/util/MdmsUtil.java | 38 +-
.../src/main/java/digit/util/MdmsV2Util.java | 76 ++
.../src/main/java/digit/util/QueryUtil.java | 91 ++-
.../src/main/java/digit/util/ServiceUtil.java | 12 +
.../src/main/java/digit/util/UserUtil.java | 73 ++
.../web/controllers/PlanConfigController.java | 9 +-
.../digit/web/controllers/PlanController.java | 17 +-
.../controllers/PlanEmployeeController.java | 62 ++
.../controllers/PlanFacilityController.java | 61 ++
.../java/digit/web/models/Assumption.java | 13 +-
.../digit/web/models/BulkPlanRequest.java | 33 +
.../src/main/java/digit/web/models/File.java | 12 +-
.../java/digit/web/models/MetricDetail.java | 11 +-
.../main/java/digit/web/models/Operation.java | 32 +-
.../java/digit/web/models/Pagination.java | 35 +
.../src/main/java/digit/web/models/Plan.java | 30 +-
.../digit/web/models/PlanConfiguration.java | 39 +-
.../PlanConfigurationSearchCriteria.java | 13 +-
.../main/java/digit/web/models/PlanDTO.java | 90 +++
.../web/models/PlanEmployeeAssignment.java | 71 ++
.../web/models/PlanEmployeeAssignmentDTO.java | 69 ++
.../models/PlanEmployeeAssignmentRequest.java | 30 +
.../PlanEmployeeAssignmentRequestDTO.java | 30 +
.../PlanEmployeeAssignmentResponse.java | 36 +
.../PlanEmployeeAssignmentSearchCriteria.java | 72 ++
.../PlanEmployeeAssignmentSearchRequest.java | 29 +
.../java/digit/web/models/PlanFacility.java | 92 +++
.../digit/web/models/PlanFacilityDTO.java | 79 ++
.../digit/web/models/PlanFacilityRequest.java | 33 +
.../web/models/PlanFacilityRequestDTO.java | 33 +
.../web/models/PlanFacilityResponse.java | 33 +
.../models/PlanFacilitySearchCriteria.java | 64 ++
.../web/models/PlanFacilitySearchRequest.java | 34 +
.../java/digit/web/models/PlanRequestDTO.java | 29 +
.../java/digit/web/models/PlanResponse.java | 10 +
.../digit/web/models/PlanSearchCriteria.java | 29 +-
.../digit/web/models/RequestInfoWrapper.java | 18 +
.../main/java/digit/web/models/Resource.java | 2 +-
.../main/java/digit/web/models/Source.java | 5 +
.../boundary/BoundarySearchResponse.java | 42 ++
.../boundary/BoundaryTypeHierarchy.java | 30 +
.../BoundaryTypeHierarchyDefinition.java | 45 ++
.../BoundaryTypeHierarchyResponse.java | 36 +
.../BoundaryTypeHierarchySearchCriteria.java | 39 +
.../BoundaryTypeHierarchySearchRequest.java | 31 +
.../web/models/boundary/EnrichedBoundary.java | 42 ++
.../models/boundary/HierarchyRelation.java | 34 +
.../web/models/census/AdditionalField.java | 48 ++
.../java/digit/web/models/census/Census.java | 139 ++++
.../web/models/census/CensusResponse.java | 42 ++
.../models/census/CensusSearchCriteria.java | 72 ++
.../models/census/CensusSearchRequest.java | 31 +
.../census/PopulationByDemographic.java | 69 ++
.../web/models/facility/AdditionalFields.java | 25 +
.../digit/web/models/facility/Address.java | 62 ++
.../digit/web/models/facility/Facility.java | 64 ++
.../web/models/facility/FacilityDetail.java | 19 +
.../web/models/facility/FacilityResponse.java | 22 +
.../facility/FacilitySearchCriteria.java | 30 +
.../facility/FacilitySearchRequest.java | 20 +
.../java/digit/web/models/facility/Field.java | 20 +
.../digit/web/models/facility/Locality.java | 33 +
.../java/digit/web/models/mdmsV2/Mdms.java | 55 ++
.../web/models/mdmsV2/MdmsCriteriaReqV2.java | 23 +
.../web/models/mdmsV2/MdmsCriteriaV2.java | 62 ++
.../web/models/mdmsV2/MdmsResponseV2.java | 25 +
.../web/models/projectFactory/Boundary.java | 32 +
.../models/projectFactory/CampaignDetail.java | 85 +++
.../projectFactory/CampaignResponse.java | 29 +
.../CampaignSearchCriteria.java | 51 ++
.../projectFactory/CampaignSearchReq.java | 22 +
.../web/models/projectFactory/Condition.java | 27 +
.../models/projectFactory/DeliveryRule.java | 43 ++
.../web/models/projectFactory/Pagination.java | 35 +
.../web/models/projectFactory/Product.java | 26 +
.../web/models/projectFactory/Resource.java | 32 +
.../src/main/resources/application.properties | 50 +-
.../src/main/resources/db/Dockerfile | 4 +-
.../src/main/resources/db/migrate.sh | 2 +-
...5113045__plan_configuration_create_ddl.sql | 40 +-
.../main/V20240305113047__plan_create_ddl.sql | 5 +-
...plan_configuration_add_filestoreid_ddl.sql | 1 -
...figuration_add_template_identifier_ddl.sql | 1 -
...240923113045__plan_facility_create_ddl.sql | 19 +
...000__plan_configuration_add_status_ddl.sql | 2 -
...000__plan_configuration_add_active_ddl.sql | 11 -
...0__plan_employee_assignment_create_ddl.sql | 19 +
...115700__alter_plan_assignee_create_ddl.sql | 1 +
...cility_add_boundary_ancestral_path_ddl.sql | 1 +
.../resource-estimation-service/CHANGELOG.md | 8 -
.../processor/config/ServiceConstants.java | 72 --
.../processor/web/models/MetricDetail.java | 34 -
.../resource-generator/CHANGELOG.md | 13 +
.../LOCALSETUP.md | 0
.../README.md | 0
.../pom.xml | 8 +-
.../main/java/org/egov/processor/Main.java | 0
.../egov/processor/config/Configuration.java | 67 +-
.../processor/config/MainConfiguration.java | 0
.../processor/config/ServiceConstants.java | 123 ++++
.../egov/processor/kafka/PlanConsumer.java | 17 +-
.../org/egov/processor/kafka/Producer.java | 0
.../repository/ServiceRequestRepository.java | 0
.../egov/processor/service/ExcelParser.java | 364 +++++-----
.../egov/processor/service/FileParser.java | 0
.../egov/processor/service/GeoJsonParser.java | 0
.../service/ResourceEstimationService.java | 27 +-
.../processor/service/ShapeFileParser.java | 0
.../org/egov/processor/util/BoundaryUtil.java | 0
.../egov/processor/util/CalculationUtil.java | 58 +-
.../util/CampaignIntegrationUtil.java | 210 ++++--
.../org/egov/processor/util/CensusUtil.java | 191 +++++
.../egov/processor/util/EnrichmentUtil.java | 295 ++++++++
.../egov/processor/util/FilestoreUtil.java | 0
.../org/egov/processor/util/LocaleUtil.java | 18 +-
.../org/egov/processor/util/MdmsUtil.java | 2 +-
.../org/egov/processor/util/MdmsV2Util.java | 79 ++
.../org/egov/processor/util/ParsingUtil.java | 202 +++++-
.../processor/util/PlanConfigurationUtil.java | 18 +-
.../org/egov/processor/util/PlanUtil.java | 84 ++-
.../org/egov/processor/web/PlanResponse.java | 42 ++
.../processor/web/PlanSearchCriteria.java | 57 ++
.../egov/processor/web/PlanSearchRequest.java | 30 +
.../web/controllers/FileController.java | 0
.../egov/processor/web/models/Activity.java | 12 +-
.../egov/processor/web/models/Assumption.java | 58 ++
.../egov/processor/web/models/Condition.java | 6 +-
.../org/egov/processor/web/models/File.java | 27 +-
.../org/egov/processor/web/models/Locale.java | 0
.../processor/web/models/LocaleResponse.java | 0
.../processor/web/models/MetricDetail.java | 75 ++
.../egov/processor/web/models/Operation.java | 38 +-
.../org/egov/processor/web/models/Plan.java | 36 +-
.../web/models/PlanConfiguration.java | 38 +-
.../web/models/PlanConfigurationRequest.java | 0
.../web/models/PlanConfigurationResponse.java | 0
.../PlanConfigurationSearchCriteria.java | 0
.../PlanConfigurationSearchRequest.java | 0
.../processor/web/models/PlanRequest.java | 0
.../egov/processor/web/models/Resource.java | 8 +-
.../processor/web/models/ResourceMapping.java | 7 +-
.../org/egov/processor/web/models/Source.java | 5 +
.../org/egov/processor/web/models/Target.java | 6 +-
.../boundary/BoundarySearchResponse.java | 0
.../web/models/boundary/EnrichedBoundary.java | 0
.../models/boundary/HierarchyRelation.java | 0
.../campaignManager/AdditionalDetails.java | 0
.../web/models/campaignManager/Boundary.java | 0
.../web/models/campaignManager/Campaign.java | 18 +-
.../campaignManager/CampaignCondition.java | 0
.../campaignManager/CampaignDetails.java | 0
.../campaignManager/CampaignRequest.java | 0
.../campaignManager/CampaignResources.java | 0
.../campaignManager/CampaignResponse.java | 0
.../CampaignSearchRequest.java | 0
.../campaignManager/CycleConfigureDate.java | 0
.../web/models/campaignManager/CycleData.java | 0
.../models/campaignManager/DeliveryRule.java | 0
.../campaignManager/MicroplanDetails.java | 32 +
.../MicroplanDetailsRequest.java | 26 +
.../web/models/campaignManager/Product.java | 0
.../campaignManager/ResourceDetails.java | 48 ++
.../ResourceDetailsRequest.java | 30 +
.../web/models/census/AdditionalField.java | 48 ++
.../processor/web/models/census/Census.java | 138 ++++
.../web/models/census/CensusRequest.java | 31 +
.../web/models/census/CensusResponse.java | 41 ++
.../models/census/CensusSearchCriteria.java | 71 ++
.../models/census/CensusSearchRequest.java | 31 +
.../census/PopulationByDemographic.java | 69 ++
.../processor/web/models/mdmsV2/Mdms.java | 55 ++
.../web/models/mdmsV2/MdmsCriteriaReqV2.java | 26 +
.../web/models/mdmsV2/MdmsCriteriaV2.java | 62 ++
.../web/models/mdmsV2/MdmsResponseV2.java | 28 +
.../src/main/resources/application.properties | 33 +-
.../src/main/resources/db/Dockerfile | 2 +-
.../src/main/resources/db/migrate.sh | 3 +
282 files changed, 15144 insertions(+), 1363 deletions(-)
create mode 100644 health-services/census-service/CHANGELOG.md
create mode 100644 health-services/census-service/README.md
create mode 100644 health-services/census-service/pom.xml
create mode 100644 health-services/census-service/src/main/java/digit/Main.java
create mode 100644 health-services/census-service/src/main/java/digit/config/Configuration.java
create mode 100644 health-services/census-service/src/main/java/digit/config/MainConfiguration.java
create mode 100644 health-services/census-service/src/main/java/digit/config/ServiceConstants.java
create mode 100644 health-services/census-service/src/main/java/digit/kafka/FacilityCatchmentConsumer.java
create mode 100644 health-services/census-service/src/main/java/digit/kafka/Producer.java
create mode 100644 health-services/census-service/src/main/java/digit/kafka/ResourceCensusConsumer.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/CensusRepository.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/ServiceRequestRepository.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/impl/CensusRepositoryImpl.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/querybuilder/CensusQueryBuilder.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/rowmapper/CensusRowMapper.java
create mode 100644 health-services/census-service/src/main/java/digit/repository/rowmapper/StatusCountRowMapper.java
create mode 100644 health-services/census-service/src/main/java/digit/service/CensusService.java
create mode 100644 health-services/census-service/src/main/java/digit/service/enrichment/CensusEnrichment.java
create mode 100644 health-services/census-service/src/main/java/digit/service/enrichment/CensusTimeframeEnrichment.java
create mode 100644 health-services/census-service/src/main/java/digit/service/validator/CensusValidator.java
create mode 100644 health-services/census-service/src/main/java/digit/service/workflow/WorkflowService.java
create mode 100644 health-services/census-service/src/main/java/digit/util/BoundaryUtil.java
create mode 100644 health-services/census-service/src/main/java/digit/util/BusinessServiceUtil.java
create mode 100644 health-services/census-service/src/main/java/digit/util/CommonUtil.java
create mode 100644 health-services/census-service/src/main/java/digit/util/PlanEmployeeAssignmnetUtil.java
create mode 100644 health-services/census-service/src/main/java/digit/util/QueryUtil.java
create mode 100644 health-services/census-service/src/main/java/digit/util/ResponseInfoFactory.java
create mode 100644 health-services/census-service/src/main/java/digit/web/controllers/CensusController.java
rename health-services/{resource-estimation-service/src/main/java/org/egov/processor/web/models/Assumption.java => census-service/src/main/java/digit/web/models/AdditionalField.java} (52%)
create mode 100644 health-services/census-service/src/main/java/digit/web/models/BulkCensusRequest.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/Census.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusDTO.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusRequest.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusRequestDTO.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusResponse.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusSearchCriteria.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/CensusSearchRequest.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/PopulationByDemographic.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/RequestInfoWrapper.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundarySearchResponse.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchy.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchyDefinition.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchyResponse.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchySearchCriteria.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchySearchRequest.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/EnrichedBoundary.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/boundary/HierarchyRelation.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanEmployeeAssignment.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanEmployeeAssignmentResponse.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanEmployeeAssignmentSearchCriteria.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanEmployeeAssignmentSearchRequest.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanFacilityDTO.java
create mode 100644 health-services/census-service/src/main/java/digit/web/models/plan/PlanFacilityRequestDTO.java
create mode 100644 health-services/census-service/src/main/resources/application.properties
create mode 100644 health-services/census-service/src/main/resources/db/Dockerfile
rename health-services/{resource-estimation-service => census-service}/src/main/resources/db/migrate.sh (67%)
create mode 100644 health-services/census-service/src/main/resources/db/migration/main/V20240925155908__census_create_ddl.sql
create mode 100644 health-services/census-service/src/main/resources/db/migration/main/V20241105152700__census_additional_field_create_ddl.sql
create mode 100644 health-services/census-service/src/main/resources/db/migration/main/V20241126120700__alter_census_assignee_create_ddl.sql
create mode 100644 health-services/census-service/src/main/resources/start.sh
create mode 100644 health-services/census-service/src/test/java/digit/TestConfiguration.java
create mode 100644 health-services/census-service/src/test/java/digit/web/controllers/CensusControllerTest.java
create mode 100644 health-services/plan-service/src/main/java/digit/kafka/ProjectFactoryCreatePlanFacilityConsumer.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/PlanEmployeeAssignmentRepository.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/PlanFacilityRepository.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/impl/PlanEmployeeAssignmentImpl.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/impl/PlanFacilityRepositoryImpl.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/querybuilder/PlanEmployeeAssignmentQueryBuilder.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/querybuilder/PlanFacilityQueryBuilder.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/rowmapper/PlanEmployeeAssignmentRowMapper.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/rowmapper/PlanFacilityRowMapper.java
create mode 100644 health-services/plan-service/src/main/java/digit/repository/rowmapper/PlanStatusCountRowMapper.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/PlanEmployeeService.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/PlanFacilityService.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/enrichment/PlanEmployeeAssignmentEnricher.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/enrichment/PlanFacilityEnricher.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/validator/PlanEmployeeAssignmentValidator.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/validator/PlanFacilityValidator.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/validator/WorkflowValidator.java
create mode 100644 health-services/plan-service/src/main/java/digit/service/workflow/WorkflowService.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/BoundaryUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/CampaignUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/CensusUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/CommonUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/FacilityUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/MdmsV2Util.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/ServiceUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/util/UserUtil.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/controllers/PlanEmployeeController.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/controllers/PlanFacilityController.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/BulkPlanRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/Pagination.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignment.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentRequestDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentSearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanEmployeeAssignmentSearchRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacility.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilityDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilityRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilityRequestDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilityResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilitySearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanFacilitySearchRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/PlanRequestDTO.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/RequestInfoWrapper.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/Source.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundarySearchResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchy.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchyDefinition.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchyResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchySearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/BoundaryTypeHierarchySearchRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/EnrichedBoundary.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/boundary/HierarchyRelation.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/AdditionalField.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/Census.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/CensusResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/CensusSearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/CensusSearchRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/census/PopulationByDemographic.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/AdditionalFields.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/Address.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/Facility.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/FacilityDetail.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/FacilityResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/FacilitySearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/FacilitySearchRequest.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/Field.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/facility/Locality.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/mdmsV2/Mdms.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/mdmsV2/MdmsCriteriaReqV2.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/mdmsV2/MdmsCriteriaV2.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/mdmsV2/MdmsResponseV2.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/Boundary.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/CampaignDetail.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/CampaignResponse.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/CampaignSearchCriteria.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/CampaignSearchReq.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/Condition.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/DeliveryRule.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/Pagination.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/Product.java
create mode 100644 health-services/plan-service/src/main/java/digit/web/models/projectFactory/Resource.java
delete mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20240404113045__plan_configuration_add_filestoreid_ddl.sql
delete mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20240404150000__plan_configuration_add_template_identifier_ddl.sql
create mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20240923113045__plan_facility_create_ddl.sql
delete mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20241604150000__plan_configuration_add_status_ddl.sql
delete mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20242105150000__plan_configuration_add_active_ddl.sql
create mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20242109141800__plan_employee_assignment_create_ddl.sql
create mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20242110115700__alter_plan_assignee_create_ddl.sql
create mode 100644 health-services/plan-service/src/main/resources/db/migration/main/V20242112141500__alter plan_facility_add_boundary_ancestral_path_ddl.sql
delete mode 100644 health-services/resource-estimation-service/CHANGELOG.md
delete mode 100644 health-services/resource-estimation-service/src/main/java/org/egov/processor/config/ServiceConstants.java
delete mode 100644 health-services/resource-estimation-service/src/main/java/org/egov/processor/web/models/MetricDetail.java
create mode 100644 health-services/resource-generator/CHANGELOG.md
rename health-services/{resource-estimation-service => resource-generator}/LOCALSETUP.md (100%)
rename health-services/{resource-estimation-service => resource-generator}/README.md (100%)
rename health-services/{resource-estimation-service => resource-generator}/pom.xml (95%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/Main.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/config/Configuration.java (54%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/config/MainConfiguration.java (100%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/config/ServiceConstants.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/kafka/PlanConsumer.java (66%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/kafka/Producer.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/repository/ServiceRequestRepository.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/service/ExcelParser.java (74%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/service/FileParser.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/service/GeoJsonParser.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/service/ResourceEstimationService.java (82%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/service/ShapeFileParser.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/BoundaryUtil.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/CalculationUtil.java (74%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/CampaignIntegrationUtil.java (61%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/util/CensusUtil.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/util/EnrichmentUtil.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/FilestoreUtil.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/LocaleUtil.java (89%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/MdmsUtil.java (99%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/util/MdmsV2Util.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/ParsingUtil.java (59%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/PlanConfigurationUtil.java (85%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/util/PlanUtil.java (70%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/PlanResponse.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/PlanSearchCriteria.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/PlanSearchRequest.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/controllers/FileController.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Activity.java (99%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/Assumption.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Condition.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/File.java (81%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Locale.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/LocaleResponse.java (100%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/MetricDetail.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Operation.java (70%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Plan.java (63%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanConfiguration.java (68%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanConfigurationRequest.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanConfigurationResponse.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanConfigurationSearchCriteria.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanConfigurationSearchRequest.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/PlanRequest.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Resource.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/ResourceMapping.java (99%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/Source.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/Target.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/boundary/BoundarySearchResponse.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/boundary/EnrichedBoundary.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/boundary/HierarchyRelation.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/AdditionalDetails.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/Boundary.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/Campaign.java (94%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignCondition.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignDetails.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignRequest.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignResources.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignResponse.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CampaignSearchRequest.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CycleConfigureDate.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/CycleData.java (100%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/DeliveryRule.java (100%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/campaignManager/MicroplanDetails.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/campaignManager/MicroplanDetailsRequest.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/java/org/egov/processor/web/models/campaignManager/Product.java (100%)
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/campaignManager/ResourceDetails.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/campaignManager/ResourceDetailsRequest.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/AdditionalField.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/Census.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/CensusRequest.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/CensusResponse.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/CensusSearchCriteria.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/CensusSearchRequest.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/census/PopulationByDemographic.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/mdmsV2/Mdms.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/mdmsV2/MdmsCriteriaReqV2.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/mdmsV2/MdmsCriteriaV2.java
create mode 100644 health-services/resource-generator/src/main/java/org/egov/processor/web/models/mdmsV2/MdmsResponseV2.java
rename health-services/{resource-estimation-service => resource-generator}/src/main/resources/application.properties (68%)
rename health-services/{resource-estimation-service => resource-generator}/src/main/resources/db/Dockerfile (83%)
create mode 100644 health-services/resource-generator/src/main/resources/db/migrate.sh
diff --git a/health-services/census-service/CHANGELOG.md b/health-services/census-service/CHANGELOG.md
new file mode 100644
index 00000000000..38562489c90
--- /dev/null
+++ b/health-services/census-service/CHANGELOG.md
@@ -0,0 +1,13 @@
+# Changelog
+All notable changes to this module will be documented in this file.
+
+## 1.0.0 - 2024-11-28
+#### Census Service
+The Census Service introduces core functionalities for managing census data:
+
+1. Validation of Census: Ensures data integrity by validating all census requests before processing.
+2. Census Create: Creates new census records after validation and enrichment, publishing request to the designated Kafka topic to handle the creation process asynchronously.
+3. Census Update: Updates existing records post-validation and enrichment by sending request to the designated Kafka update topic.
+4. Census Bulk Update: Updates multiple census records in one operation after successful validation.
+5. Census Search: Enables searching for census records with the provided search criteria.
+6. Plan Facility Consumer: Listens to Plan Facility Update topic to assign facility to a boundary in census.
\ No newline at end of file
diff --git a/health-services/census-service/README.md b/health-services/census-service/README.md
new file mode 100644
index 00000000000..a2e8a9f7b84
--- /dev/null
+++ b/health-services/census-service/README.md
@@ -0,0 +1,18 @@
+# Swagger generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project.
+By using the [OpenAPI-Spec](https://github.com/swagger-api/swagger-core), you can easily generate a server stub.
+This is an example of building a swagger-enabled server in Java using the SpringBoot framework.
+
+The underlying library integrating swagger to SpringBoot is [springfox](https://github.com/springfox/springfox)
+
+Start your server as an simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:8080/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/health-services/census-service/pom.xml b/health-services/census-service/pom.xml
new file mode 100644
index 00000000000..7e6f7adc8fb
--- /dev/null
+++ b/health-services/census-service/pom.xml
@@ -0,0 +1,141 @@
+
+ 4.0.0
+ org.egov
+ census-service
+ jar
+ census-service
+ 1.0.0
+
+ 17
+ ${java.version}
+ ${java.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.2.2
+
+
+ src/main/java
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.egov.common
+ health-services-models
+ 1.0.21-SNAPSHOT
+ compile
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+ org.flywaydb
+ flyway-core
+ 9.22.3
+
+
+ org.postgresql
+ postgresql
+ 42.7.1
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ io.swagger
+ swagger-core
+ 1.5.18
+
+
+ io.swagger.core.v3
+ swagger-annotations
+ 2.2.8
+
+
+ net.minidev
+ json-smart
+ 2.5.0
+
+
+
+ org.egov.services
+ tracer
+ 2.9.0-SNAPSHOT
+
+
+
+
+
+
+
+ org.egov
+ mdms-client
+ 2.9.0-SNAPSHOT
+ compile
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+
+
+ repo.egovernments.org
+ eGov ERP Releases Repository
+ https://nexus-repo.egovernments.org/nexus/content/repositories/releases/
+
+
+ repo.egovernments.org.snapshots
+ eGov ERP Releases Repository
+ https://nexus-repo.egovernments.org/nexus/content/repositories/snapshots/
+
+
+ repo.egovernments.org.public
+ eGov Public Repository Group
+ https://nexus-repo.egovernments.org/nexus/content/groups/public/
+
+
+ repo.digit.org
+ eGov DIGIT Releases Repository
+ https://nexus-repo.digit.org/nexus/content/repositories/snapshots/
+
+
+
diff --git a/health-services/census-service/src/main/java/digit/Main.java b/health-services/census-service/src/main/java/digit/Main.java
new file mode 100644
index 00000000000..6e3d79db11c
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/Main.java
@@ -0,0 +1,20 @@
+package digit;
+
+
+import org.egov.tracer.config.TracerConfiguration;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Import;
+
+@Import({ TracerConfiguration.class })
+@SpringBootApplication
+@ComponentScan(basePackages = { "digit", "digit.web.controllers" , "digit.config"})
+public class Main {
+
+
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(Main.class, args);
+ }
+
+}
diff --git a/health-services/census-service/src/main/java/digit/config/Configuration.java b/health-services/census-service/src/main/java/digit/config/Configuration.java
new file mode 100644
index 00000000000..8459885357e
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/config/Configuration.java
@@ -0,0 +1,86 @@
+package digit.config;
+
+import lombok.*;
+import org.egov.tracer.config.TracerConfiguration;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Import;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Data
+@Import({TracerConfiguration.class})
+@NoArgsConstructor
+@AllArgsConstructor
+@Setter
+@Getter
+public class Configuration {
+
+ // Allowed roles for census
+ @Value("#{${allowed.census.roles}}")
+ private List allowedCensusRoles;
+
+ @Value("#{${workflow.restricted.roles}}")
+ private List workflowRestrictedRoles;
+
+ // Persister Topic
+ @Value("${census.create.topic}")
+ private String censusCreateTopic;
+
+ @Value("${census.update.topic}")
+ private String censusUpdateTopic;
+
+ @Value("${census.bulk.update.topic}")
+ private String censusBulkUpdateTopic;
+
+ @Value("${plan.facility.update.topic}")
+ private String planFcailityUpdateTopic;
+
+ // Boundary Service
+ @Value("${egov.boundary.service.host}")
+ private String boundaryServiceHost;
+
+ @Value("${egov.boundary.relationship.search.endpoint}")
+ private String boundaryRelationshipSearchEndpoint;
+
+ @Value("${egov.boundary.hierarchy.search.endpoint}")
+ private String boundaryHierarchySearchEndpoint;
+
+ // Plan Service
+ @Value("${egov.plan.service.host}")
+ private String planServiceHost;
+
+ @Value("${egov.plan.employee.assignment.search.endpoint}")
+ private String planEmployeeAssignmentSearchEndpoint;
+
+ //Workflow
+ @Value("${egov.workflow.host}")
+ private String wfHost;
+
+ @Value("${egov.workflow.transition.path}")
+ private String wfTransitionPath;
+
+ @Value("${egov.business.service.search.endpoint}")
+ private String businessServiceSearchEndpoint;
+
+ @Value("${workflow.initiate.action}")
+ private List wfInitiateActions;
+
+ @Value("${workflow.intermediate.action}")
+ private List wfIntermediateActions;
+
+ @Value("${workflow.send.back.actions}")
+ private List wfSendBackActions;
+
+ //SMSNotification
+ @Value("${egov.sms.notification.topic}")
+ private String smsNotificationTopic;
+
+ //Pagination
+ @Value("${census.default.offset}")
+ private Integer defaultOffset;
+
+ @Value("${census.default.limit}")
+ private Integer defaultLimit;
+}
diff --git a/health-services/census-service/src/main/java/digit/config/MainConfiguration.java b/health-services/census-service/src/main/java/digit/config/MainConfiguration.java
new file mode 100644
index 00000000000..239331c9cd8
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/config/MainConfiguration.java
@@ -0,0 +1,41 @@
+package digit.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.util.TimeZone;
+
+import jakarta.annotation.PostConstruct;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.egov.tracer.config.TracerConfiguration;
+
+
+@Import({TracerConfiguration.class})
+public class MainConfiguration {
+
+ @Value("${app.timezone}")
+ private String timeZone;
+
+ @PostConstruct
+ public void initialize() {
+ TimeZone.setDefault(TimeZone.getTimeZone(timeZone));
+ }
+
+ @Bean
+ public ObjectMapper objectMapper() {
+ return new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).setTimeZone(TimeZone.getTimeZone(timeZone));
+ }
+
+ @Bean
+ @Autowired
+ public MappingJackson2HttpMessageConverter jacksonConverter(ObjectMapper objectMapper) {
+ MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+ converter.setObjectMapper(objectMapper);
+ return converter;
+ }
+}
\ No newline at end of file
diff --git a/health-services/census-service/src/main/java/digit/config/ServiceConstants.java b/health-services/census-service/src/main/java/digit/config/ServiceConstants.java
new file mode 100644
index 00000000000..5d944060848
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/config/ServiceConstants.java
@@ -0,0 +1,114 @@
+package digit.config;
+
+
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class ServiceConstants {
+
+ public static final String EXTERNAL_SERVICE_EXCEPTION = "External Service threw an Exception: ";
+ public static final String SEARCHER_SERVICE_EXCEPTION = "Exception while fetching from searcher: ";
+
+ public static final String IDGEN_ERROR = "IDGEN ERROR";
+ public static final String NO_IDS_FOUND_ERROR = "No ids returned from idgen Service";
+
+ public static final String ERROR_WHILE_FETCHING_FROM_MDMS = "Exception occurred while fetching category lists from mdms: ";
+
+ public static final String ERROR_WHILE_FETCHING_BOUNDARY_DETAILS = "Exception occurred while fetching boundary relationship from boundary service: ";
+
+ public static final String ERROR_WHILE_FETCHING_BOUNDARY_HIERARCHY_DETAILS = "Exception occurred while fetching boundary hierarchy details from boundary service: ";
+
+ public static final String ERROR_WHILE_FETCHING_EMPLOYEE_ASSIGNMENT_DETAILS = "Exception occurred while fetching plan employee assignment details from plan service: ";
+
+ public static final String ERROR_WHILE_FETCHING_BUSINESS_SERVICE_DETAILS = "Exception occurred while fetching business service details: ";
+
+ public static final String RES_MSG_ID = "uief87324";
+ public static final String SUCCESSFUL = "successful";
+ public static final String FAILED = "failed";
+
+ public static final String URL = "url";
+ public static final String URL_SHORTENING_ERROR_CODE = "URL_SHORTENING_ERROR";
+ public static final String URL_SHORTENING_ERROR_MESSAGE = "Unable to shorten url: ";
+
+ public static final String DOB_FORMAT_Y_M_D = "yyyy-MM-dd";
+ public static final String DOB_FORMAT_D_M_Y = "dd/MM/yyyy";
+ public static final String ILLEGAL_ARGUMENT_EXCEPTION_CODE = "IllegalArgumentException";
+ public static final String OBJECTMAPPER_UNABLE_TO_CONVERT = "ObjectMapper not able to convertValue in userCall";
+ public static final String DOB_FORMAT_D_M_Y_H_M_S = "dd-MM-yyyy HH:mm:ss";
+ public static final String CREATED_DATE = "createdDate";
+ public static final String LAST_MODIFIED_DATE = "lastModifiedDate";
+ public static final String DOB = "dob";
+ public static final String PWD_EXPIRY_DATE = "pwdExpiryDate";
+ public static final String INVALID_DATE_FORMAT_CODE = "INVALID_DATE_FORMAT";
+ public static final String INVALID_DATE_FORMAT_MESSAGE = "Failed to parse date format in user";
+ public static final String CITIZEN_UPPER = "CITIZEN";
+ public static final String CITIZEN_LOWER = "Citizen";
+ public static final String USER = "user";
+ public static final String PIPE_REGEX = "\\|";
+ public static final String FACILITY_ID_FIELD = "facilityId";
+ public static final String FACILITY_NAME_FIELD = "facilityName";
+
+ public static final String PARSING_ERROR_CODE = "PARSING ERROR";
+ public static final String PARSING_ERROR_MESSAGE = "Failed to parse JSON data from PGobject";
+
+ public static final String FAILED_TO_PARSE_BUSINESS_SERVICE_SEARCH = "Failed to parse response of workflow business service search";
+ public static final String BUSINESS_SERVICE_NOT_FOUND = "BUSINESSSERVICE_NOT_FOUND";
+ public static final String THE_BUSINESS_SERVICE = "The businessService ";
+ public static final String NOT_FOUND = " is not found";
+ public static final String TENANTID = "?tenantId=";
+ public static final String BUSINESS_SERVICES = "&businessServices=";
+
+ public static final String NO_BOUNDARY_DATA_FOUND_FOR_GIVEN_BOUNDARY_CODE_CODE = "NO_BOUNDARY_DATA_FOUND_FOR_GIVEN_BOUNDARY_CODE";
+ public static final String NO_BOUNDARY_DATA_FOUND_FOR_GIVEN_BOUNDARY_CODE_MESSAGE = "Invalid or incorrect boundaryCode. No boundary data found.";
+
+ public static final String NO_BUSINESS_SERVICE_DATA_FOUND_CODE = "NO_BUSINESS_SERVICE_DATA_FOUND";
+ public static final String NO_BUSINESS_SERVICE_DATA_FOUND_MESSAGE = "Invalid or incorrect businessService. No business service data found.";
+
+ public static final String USERINFO_MISSING_CODE = "USERINFO_MISSING";
+ public static final String USERINFO_MISSING_MESSAGE = "UserInfo is missing in Request Info ";
+
+ public static final String ERROR_WHILE_UPDATING_ADDITIONAL_DETAILS_CODE = "ERROR_WHILE_UPDATING_ADDITIONAL_DETAILS";
+ public static final String ERROR_WHILE_UPDATING_ADDITIONAL_DETAILS_MESSAGE = "Exception occurred while updating additional details : ";
+
+ public static final String WORKFLOW_INTEGRATION_ERROR_CODE = "WORKFLOW_INTEGRATION_ERROR";
+ public static final String WORKFLOW_INTEGRATION_ERROR_MESSAGE = "Exception occured while integrating with workflow : ";
+
+ public static final String INVALID_PARTNER_CODE = "INVALID_PARTNER";
+ public static final String INVALID_PARTNER_MESSAGE = "Invalid partner assignment or invalid jurisdiction of the assigned partner";
+
+ public static final String INVALID_CENSUS_CODE = "INVALID_CENSUS";
+ public static final String INVALID_CENSUS_MESSAGE = "Provided census does not exist";
+
+ public static final String DUPLICATE_CENSUS_ID_IN_BULK_UPDATE_CODE = "DUPLICATE_CENSUS_ID_IN_BULK_UPDATE";
+ public static final String DUPLICATE_CENSUS_ID_IN_BULK_UPDATE_MESSAGE = "Census provided in the bulk update request are not unique.";
+
+ public static final String INVALID_SOURCE_OR_TENANT_ID_FOR_BULK_UPDATE_CODE = "INVALID_SOURCE_OR_TENANT_ID_FOR_BULK_UPDATE";
+ public static final String INVALID_SOURCE_OR_TENANT_ID_FOR_BULK_UPDATE_MESSAGE = "Tenant id and source should be same across all entries for bulk update.";
+
+ public static final String WORKFLOW_NOT_FOUND_FOR_BULK_UPDATE_CODE = "WORKFLOW_NOT_FOUND_FOR_BULK_UPDATE";
+ public static final String WORKFLOW_NOT_FOUND_FOR_BULK_UPDATE_MESSAGE = "Workflow information is mandatory for each entry for bulk update";
+
+ public static final String DUPLICATE_KEY_IN_ADDITIONAL_FIELD_CODE = "DUPLICATE_KEY_IN_ADDITIONAL_FIELD";
+ public static final String DUPLICATE_KEY_IN_ADDITIONAL_FIELD_MESSGAE = "Duplicate key found in additional field : ";
+
+ public static final String CENSUS_ALREADY_EXISTS_CODE = "CENSUS_ALREADY_EXISTS";
+ public static final String CENSUS_ALREADY_EXISTS_MESSAGE = "Census with the given boundary and source already exists.";
+
+ public static final String DIFFERENT_WORKFLOW_FOR_BULK_UPDATE_CODE = "DIFFERENT_WORKFLOW_FOR_BULK_UPDATE";
+ public static final String DIFFERENT_WORKFLOW_FOR_BULK_UPDATE_MESSAGE = "All entries should be in the same state for bulk transitioning census records.";
+
+ public static final String UNAUTHORIZED_WORKFLOW_ACCESS_CODE = "UNAUTHORIZED_WORKFLOW_ACCESS";
+ public static final String UNAUTHORIZED_WORKFLOW_ACCESS_MESSAGE = "User with provided roles cannot have an active workflow. Please remove the workflow or update user roles.";
+
+ public static final String SEARCH_CRITERIA_EMPTY_CODE = "SEARCH_CRITERIA_EMPTY";
+ public static final String SEARCH_CRITERIA_EMPTY_MESSAGE = "Search criteria cannot be empty";
+
+ public static final String TENANT_ID_EMPTY_CODE = "TENANT_ID_EMPTY";
+ public static final String TENANT_ID_EMPTY_MESSAGE = "Tenant Id cannot be empty, TenantId should be present";
+
+ //Workflow constants
+ public static final String MODULE_NAME_VALUE = "census-service";
+
+ public static final String CENSUS_BUSINESS_SERVICE = "CENSUS";
+}
diff --git a/health-services/census-service/src/main/java/digit/kafka/FacilityCatchmentConsumer.java b/health-services/census-service/src/main/java/digit/kafka/FacilityCatchmentConsumer.java
new file mode 100644
index 00000000000..d5be4b7458c
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/kafka/FacilityCatchmentConsumer.java
@@ -0,0 +1,99 @@
+package digit.kafka;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import digit.repository.CensusRepository;
+import digit.service.CensusService;
+import digit.service.enrichment.CensusEnrichment;
+import digit.util.BoundaryUtil;
+import digit.util.CommonUtil;
+import digit.web.models.BulkCensusRequest;
+import digit.web.models.Census;
+import digit.web.models.CensusResponse;
+import digit.web.models.boundary.BoundaryTypeHierarchyResponse;
+import digit.web.models.plan.PlanFacilityDTO;
+import digit.web.models.plan.PlanFacilityRequestDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.kafka.support.KafkaHeaders;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static digit.config.ServiceConstants.FACILITY_ID_FIELD;
+import static digit.config.ServiceConstants.FACILITY_NAME_FIELD;
+
+@Component
+@Slf4j
+public class FacilityCatchmentConsumer {
+
+ private ObjectMapper objectMapper;
+
+ private CensusService service;
+
+ private CensusRepository repository;
+
+ private CommonUtil commonUtil;
+
+ private BoundaryUtil boundaryUtil;
+
+ private CensusEnrichment enrichment;
+
+ public FacilityCatchmentConsumer(ObjectMapper objectMapper, CensusService service, CommonUtil commonUtil, CensusRepository repository, BoundaryUtil boundaryUtil, CensusEnrichment enrichment) {
+ this.objectMapper = objectMapper;
+ this.service = service;
+ this.commonUtil = commonUtil;
+ this.repository = repository;
+ this.boundaryUtil = boundaryUtil;
+ this.enrichment = enrichment;
+ }
+
+ @KafkaListener(topics = {"${plan.facility.update.topic}"})
+ public void listen(Map consumerRecord, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {
+ try {
+ PlanFacilityRequestDTO planFacilityRequestDTO = objectMapper.convertValue(consumerRecord, PlanFacilityRequestDTO.class);
+ PlanFacilityDTO planFacilityDTO = planFacilityRequestDTO.getPlanFacilityDTO();
+
+ CensusResponse censusResponse = service.search(commonUtil.getCensusSearchRequest(planFacilityDTO.getTenantId(), planFacilityDTO.getPlanConfigurationId(), planFacilityDTO.getServiceBoundaries(), planFacilityDTO.getInitiallySetServiceBoundaries(), planFacilityRequestDTO.getRequestInfo()));
+ List censusFromSearch = censusResponse.getCensus();
+
+ BoundaryTypeHierarchyResponse boundaryTypeHierarchyResponse = boundaryUtil.fetchBoundaryHierarchy(planFacilityRequestDTO.getRequestInfo(), censusFromSearch.get(0).getTenantId(), censusFromSearch.get(0).getHierarchyType());
+ String facilityId = planFacilityRequestDTO.getPlanFacilityDTO().getFacilityId();
+ String facilityName = planFacilityRequestDTO.getPlanFacilityDTO().getFacilityName();
+
+ Set boundariesWithFacility = new HashSet<>(List.of(planFacilityDTO.getServiceBoundaries().split(",")));
+ Set boundariesWithNoFacility = new HashSet<>(planFacilityDTO.getInitiallySetServiceBoundaries());
+
+ censusFromSearch.forEach(census -> {
+ String boundaryCode = census.getBoundaryCode();
+
+ if (!boundariesWithFacility.contains(boundaryCode)) {
+
+ // Unassigning facilities to the boundaries which were initially assigned that facility
+ census.setAdditionalDetails(commonUtil.removeFieldFromAdditionalDetails(census.getAdditionalDetails(), FACILITY_ID_FIELD));
+ census.setAdditionalDetails(commonUtil.removeFieldFromAdditionalDetails(census.getAdditionalDetails(), FACILITY_NAME_FIELD));
+ census.setFacilityAssigned(Boolean.FALSE);
+ census.setPartnerAssignmentValidationEnabled(Boolean.FALSE);
+
+ } else if (!boundariesWithNoFacility.contains(boundaryCode)) {
+
+ // Assigning facilities to the newly added boundaries in the update request.
+ census.setAdditionalDetails(commonUtil.updateFieldInAdditionalDetails(census.getAdditionalDetails(), FACILITY_ID_FIELD, facilityId));
+ census.setAdditionalDetails(commonUtil.updateFieldInAdditionalDetails(census.getAdditionalDetails(), FACILITY_NAME_FIELD, facilityName));
+ census.setFacilityAssigned(Boolean.TRUE);
+ census.setPartnerAssignmentValidationEnabled(Boolean.FALSE);
+ }
+ });
+
+ // Enrich jurisdiction mapping in census for indexer
+ enrichment.enrichJurisdictionMapping(censusFromSearch, boundaryTypeHierarchyResponse.getBoundaryHierarchy().get(0));
+ repository.bulkUpdate(BulkCensusRequest.builder().requestInfo(planFacilityRequestDTO.getRequestInfo()).census(censusFromSearch).build());
+
+ } catch (Exception exception) {
+ log.error("Error in census consumer", exception);
+ }
+ }
+}
diff --git a/health-services/census-service/src/main/java/digit/kafka/Producer.java b/health-services/census-service/src/main/java/digit/kafka/Producer.java
new file mode 100644
index 00000000000..542f4f686c0
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/kafka/Producer.java
@@ -0,0 +1,20 @@
+package digit.kafka;
+
+import lombok.extern.slf4j.Slf4j;
+import org.egov.tracer.kafka.CustomKafkaTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+// NOTE: If tracer is disabled change CustomKafkaTemplate to KafkaTemplate in autowiring
+
+@Service
+@Slf4j
+public class Producer {
+
+ @Autowired
+ private CustomKafkaTemplate kafkaTemplate;
+
+ public void push(String topic, Object value) {
+ kafkaTemplate.send(topic, value);
+ }
+}
diff --git a/health-services/census-service/src/main/java/digit/kafka/ResourceCensusConsumer.java b/health-services/census-service/src/main/java/digit/kafka/ResourceCensusConsumer.java
new file mode 100644
index 00000000000..e161225b23a
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/kafka/ResourceCensusConsumer.java
@@ -0,0 +1,37 @@
+package digit.kafka;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import digit.service.CensusService;
+import digit.web.models.CensusRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.kafka.support.KafkaHeaders;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@Slf4j
+public class ResourceCensusConsumer {
+
+ private CensusService censusService;
+
+ private ObjectMapper mapper;
+
+ public ResourceCensusConsumer(CensusService censusService, ObjectMapper mapper) {
+ this.censusService = censusService;
+ this.mapper = mapper;
+ }
+
+ @KafkaListener(topics = {"${resource.config.consumer.census.create.topic}"})
+ public void listen(Map consumerRecord, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {
+ try {
+ CensusRequest censusRequest = mapper.convertValue(consumerRecord, CensusRequest.class);
+ censusRequest.getCensus().setPartnerAssignmentValidationEnabled(Boolean.FALSE);
+ censusService.create(censusRequest);
+ } catch (Exception exception) {
+ log.error("Error in resource census consumer", exception);
+ }
+ }
+}
diff --git a/health-services/census-service/src/main/java/digit/repository/CensusRepository.java b/health-services/census-service/src/main/java/digit/repository/CensusRepository.java
new file mode 100644
index 00000000000..4a9f159e7e9
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/repository/CensusRepository.java
@@ -0,0 +1,21 @@
+package digit.repository;
+
+import digit.web.models.*;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CensusRepository {
+
+ public void create(CensusRequest censusRequest);
+
+ public List search(CensusSearchCriteria censusSearchCriteria);
+
+ public void update(CensusRequest censusRequest);
+
+ public void bulkUpdate(BulkCensusRequest request);
+
+ public Integer count(CensusSearchCriteria censusSearchCriteria);
+
+ public Map statusCount(CensusSearchRequest censusSearchRequest);
+}
diff --git a/health-services/census-service/src/main/java/digit/repository/ServiceRequestRepository.java b/health-services/census-service/src/main/java/digit/repository/ServiceRequestRepository.java
new file mode 100644
index 00000000000..d09d230e4fa
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/repository/ServiceRequestRepository.java
@@ -0,0 +1,45 @@
+package digit.repository;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import lombok.extern.slf4j.Slf4j;
+import org.egov.tracer.model.ServiceCallException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+
+import static digit.config.ServiceConstants.*;
+
+@Repository
+@Slf4j
+public class ServiceRequestRepository {
+
+ private ObjectMapper mapper;
+
+ private RestTemplate restTemplate;
+
+ public ServiceRequestRepository(ObjectMapper mapper, RestTemplate restTemplate) {
+ this.mapper = mapper;
+ this.restTemplate = restTemplate;
+ }
+
+
+ public Object fetchResult(StringBuilder uri, Object request) {
+ mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+ Object response = null;
+ try {
+ response = restTemplate.postForObject(uri.toString(), request, Map.class);
+ } catch (HttpClientErrorException e) {
+ log.error(EXTERNAL_SERVICE_EXCEPTION, e);
+ throw new ServiceCallException(e.getResponseBodyAsString());
+ } catch (Exception e) {
+ log.error(SEARCHER_SERVICE_EXCEPTION, e);
+ }
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/health-services/census-service/src/main/java/digit/repository/impl/CensusRepositoryImpl.java b/health-services/census-service/src/main/java/digit/repository/impl/CensusRepositoryImpl.java
new file mode 100644
index 00000000000..c6dec4b4d11
--- /dev/null
+++ b/health-services/census-service/src/main/java/digit/repository/impl/CensusRepositoryImpl.java
@@ -0,0 +1,219 @@
+package digit.repository.impl;
+
+import digit.config.Configuration;
+import digit.kafka.Producer;
+import digit.repository.CensusRepository;
+import digit.repository.querybuilder.CensusQueryBuilder;
+import digit.repository.rowmapper.CensusRowMapper;
+import digit.repository.rowmapper.StatusCountRowMapper;
+import digit.util.CommonUtil;
+import digit.web.models.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.SingleColumnRowMapper;
+import org.springframework.stereotype.Repository;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static digit.config.ServiceConstants.CENSUS_BUSINESS_SERVICE;
+
+@Slf4j
+@Repository
+public class CensusRepositoryImpl implements CensusRepository {
+
+ private Producer producer;
+
+ private Configuration config;
+
+ private CensusQueryBuilder queryBuilder;
+
+ private CensusRowMapper censusRowMapper;
+
+ private JdbcTemplate jdbcTemplate;
+
+ private StatusCountRowMapper statusCountRowMapper;
+
+ private CommonUtil commonUtil;
+
+ public CensusRepositoryImpl(Producer producer, Configuration config, CensusQueryBuilder queryBuilder, CensusRowMapper censusRowMapper, JdbcTemplate jdbcTemplate, StatusCountRowMapper statusCountRowMapper,CommonUtil commonUtil) {
+ this.producer = producer;
+ this.config = config;
+ this.queryBuilder = queryBuilder;
+ this.censusRowMapper = censusRowMapper;
+ this.jdbcTemplate = jdbcTemplate;
+ this.statusCountRowMapper = statusCountRowMapper;
+ this.commonUtil = commonUtil;
+ }
+
+ /**
+ * Pushes a new census record to persister kafka topic.
+ *
+ * @param censusRequest The request containing the census details
+ */
+ @Override
+ public void create(CensusRequest censusRequest) {
+ CensusRequestDTO requestDTO = convertToReqDTO(censusRequest);
+ producer.push(config.getCensusCreateTopic(), requestDTO);
+ }
+
+ /**
+ * Searches for census records based on the provided search criteria.
+ *
+ * @param censusSearchCriteria The criteria to use for searching census records.
+ * @return A list of census records that match the search criteria.
+ */
+ @Override
+ public List search(CensusSearchCriteria censusSearchCriteria) {
+
+ if(censusSearchCriteria.getAreaCodes() != null && censusSearchCriteria.getAreaCodes().isEmpty())
+ return new ArrayList<>();
+
+ // Fetch census ids from database
+ List censusIds = queryDatabaseForCensusIds(censusSearchCriteria);
+
+ // Return empty list back as response if no census ids are found
+ if(CollectionUtils.isEmpty(censusIds)) {
+ log.info("No census ids found for provided census search criteria.");
+ return new ArrayList<>();
+ }
+
+ // Fetch census from database based on the acquired ids
+ return searchCensusByIds(censusIds);
+ }
+
+ private List searchCensusByIds(List censusIds) {
+
+ List