Skip to content
This repository has been archived by the owner on Nov 26, 2024. It is now read-only.

PFM-5638: added changes for Penalty Schedular. #745

Open
wants to merge 63 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
532402d
PFM-5638: added changes for Penalty Schedular.
Mar 11, 2024
a756630
PFM-5638: added changes for Penalty Schedular.
Mar 11, 2024
a60ed70
PFM-5638: added changes for Penalty Schedular.
Mar 11, 2024
ff8aa02
PFM-5638: added changes for Penalty Schedular.
Mar 11, 2024
54b9e55
PFM-5638: added changes for Penalty Schedular.
Mar 11, 2024
3d23038
PFM-5638: Added log lines to check
Mar 11, 2024
264ddac
PFM-5638: Added add Penalty api.
Mar 12, 2024
3c9fae5
PFM-5638: Added add Penalty api.
Mar 12, 2024
7843b37
PFM-5638: Added add Penalty api.
Mar 12, 2024
e4ae5d6
PFM-5638: Added add Penalty api.
Mar 12, 2024
88ea266
PFM-5638: Added add Penalty api.
Mar 12, 2024
da91548
PFM-5638: Added add Penalty api.
Mar 12, 2024
8308ff7
PFM-5638: Added add Penalty api.
Mar 12, 2024
e5000a5
PFM-5638: Added add Penalty api.
Mar 12, 2024
fa53295
PFM-5638: Added add Penalty api.
Mar 12, 2024
162aef4
PFM-5638: Added add Penalty api.
Mar 12, 2024
61d5bf5
PFM-5638: Added add Penalty api.
Mar 12, 2024
5fe91cf
PFM-5638: Added add Penalty api.
Mar 12, 2024
93adc54
PFM-5638: Added add Penalty api.
Mar 12, 2024
207d058
PFM-5638: Added add Penalty api.
Mar 13, 2024
5473ec0
PFM-5638: Added add Penalty api.
Mar 13, 2024
035f968
PFM-5638: Added limit to test in UAT
Mar 13, 2024
9f9c1fc
PFM-5638: Added limit to test in UAT
Mar 13, 2024
5eea170
PFM-5638: Added add penaltyApi
Mar 13, 2024
382f716
PFM-5638: Added topic to reduce time.
Mar 14, 2024
d57780e
PFM-5638: Added log line to check .
Mar 14, 2024
4451c82
PFM-5638: Added log line to check .
Mar 14, 2024
befc2fa
PFM-5638: added changes for Penalty Schedular.
Mar 14, 2024
25e61c7
PFM-5638: Added log line to check .
Mar 14, 2024
fb54fe9
PFM-5638: added changes for Penalty Schedular.
Mar 14, 2024
6e3e776
PFM-5638: added changes for Penalty Schedular.
Mar 14, 2024
0357dc2
PFM-5638: Added log line to check .
Mar 14, 2024
7c28ce4
PFM-5638: Added change in Query
Mar 14, 2024
e5a07fa
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
8779aea
PFM-5638: added changes for Penalty Schedular.
Apr 22, 2024
af45981
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
af70c33
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
ff52ad2
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
0a10f0d
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
c29b715
PFM-5638: Added Api to give all Demand details based on Dates
Apr 22, 2024
331f4fb
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
c846728
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
09d4c56
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
72ec7bf
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
53850c3
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
b144989
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
ecf2dcb
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
33f0862
PFM-5638: Added Api to give all Demand details based on Dates
Apr 24, 2024
7831337
PFM-5638: Added Api to give all Demand details based on Dates
Apr 25, 2024
0dab914
PFM-5638: Added the PenaltyApplicabledays from penalty master call.
Apr 25, 2024
23b60ee
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
1af1ef5
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
380838b
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
2cfb607
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
7aba6b3
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
99c6434
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 29, 2024
f4b349c
PFM-5638: Added the vvalues for all the WS_charge Penalty advance in…
Apr 30, 2024
b472b96
PFM-5638: Added the Applicable penalty values for all the WS_charge …
May 20, 2024
90e2bf9
PFM-5638: Added the Applicable penalty values for all the WS_charge …
May 20, 2024
ec75eb4
PFM-5638: Added the PenaltyApplicabledays from penalty master call.
May 21, 2024
4a7d829
ISTE-44: Added demand change audit db script from ws-calculator service
May 24, 2024
cf43add
ISTE-44: Added demand change audit db script from ws-calculator service
May 24, 2024
fa449c4
ISTE-44: Added demand change audit db script from ws-calculator service
May 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions build/build-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,8 @@ config:
dockerfile: "build/maven/Dockerfile"
- work-dir: "business-services/egov-apportion-service/src/main/resources/db"
image-name: "egov-apportion-service-db"
- name: "builds/mGramSeva/utilities/egov-penalty-schedular"
build:
- work-dir: "utilities/Penalty"
image-name: "egov-penalty-schedular"
dockerfile: "build/maven/Dockerfile"
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.egov.demand.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AggregatedDemandDetailResponse {

private List<Map<Long , List<DemandDetail>>> mapOfDemandDetailList;

private BigDecimal advanceAvailable;

private BigDecimal advanceAdjusted;

private BigDecimal remainingAdvance;

private BigDecimal currentmonthBill;

private BigDecimal currentMonthPenalty;

private BigDecimal currentmonthTotalDue;

private BigDecimal totalAreas;

private BigDecimal totalAreasWithPenalty;

private BigDecimal netdue;

private BigDecimal netDueWithPenalty;

private BigDecimal totalApplicablePenalty;
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,9 @@
*/
package org.egov.demand.service;

import static org.egov.demand.util.Constants.ADVANCE_TAXHEAD_JSONPATH_CODE;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;

import javax.validation.Valid;
Expand All @@ -60,16 +52,8 @@
import org.egov.demand.amendment.model.AmendmentUpdate;
import org.egov.demand.amendment.model.enums.AmendmentStatus;
import org.egov.demand.config.ApplicationProperties;
import org.egov.demand.model.ApportionDemandResponse;
import org.egov.demand.model.AuditDetails;
import org.egov.demand.model.*;
import org.egov.demand.model.BillV2.BillStatus;
import org.egov.demand.model.Demand;
import org.egov.demand.model.DemandApportionRequest;
import org.egov.demand.model.DemandCriteria;
import org.egov.demand.model.DemandDetail;
import org.egov.demand.model.DemandHistory;
import org.egov.demand.model.PaymentBackUpdateAudit;
import org.egov.demand.model.UpdateBillCriteria;
import org.egov.demand.repository.AmendmentRepository;
import org.egov.demand.repository.BillRepositoryV2;
import org.egov.demand.repository.DemandRepository;
Expand All @@ -83,6 +67,10 @@
import org.egov.demand.web.contract.UserSearchRequest;
import org.egov.demand.web.contract.factory.ResponseFactory;
import org.egov.demand.web.validator.DemandValidatorV1;
import org.egov.mdms.model.MasterDetail;
import org.egov.mdms.model.MdmsCriteria;
import org.egov.mdms.model.MdmsCriteriaReq;
import org.egov.mdms.model.ModuleDetail;
import org.egov.tracer.model.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
Expand All @@ -96,6 +84,8 @@

import lombok.extern.slf4j.Slf4j;

import static org.egov.demand.util.Constants.*;

@Service
@Slf4j
public class DemandService {
Expand Down Expand Up @@ -358,7 +348,7 @@ public List<Demand> getDemands(DemandCriteria demandCriteria, RequestInfo reques
}
}
}

if (!CollectionUtils.isEmpty(demands) && !CollectionUtils.isEmpty(payers))
demands = demandEnrichmentUtil.enrichPayer(demands, payers);

Expand All @@ -373,7 +363,207 @@ public void update(DemandRequest demandRequest, PaymentBackUpdateAudit paymentBa
demandRepository.update(demandRequest, paymentBackUpdateAudit);
}

public AggregatedDemandDetailResponse getAllDemands(DemandCriteria demandCriteria, RequestInfo requestInfo) {

//demandValidatorV1.validateDemandCriteria(demandCriteria, requestInfo);

UserSearchRequest userSearchRequest = null;
List<User> payers = null;
List<Demand> demands = null;

String userUri = applicationProperties.getUserServiceHostName()
.concat(applicationProperties.getUserServiceSearchPath());

/*
* user type is CITIZEN by default because only citizen can have demand or payer can be null
*/
String citizenTenantId = demandCriteria.getTenantId().split("\\.")[0];

/*
* If payer related data is provided first then user search has to be made first followed by demand search
*/

/*
* If no payer related data given then search demand first then enrich payer(user) data
*/
log.info("demandCriteria::"+demandCriteria);
demands = demandRepository.getDemands(demandCriteria);
log.info("demands:"+demands);
if (!demands.isEmpty()) {

Set<String> payerUuids = demands.stream().filter(demand -> null != demand.getPayer())
.map(demand -> demand.getPayer().getUuid()).collect(Collectors.toSet());

if (!CollectionUtils.isEmpty(payerUuids)) {

userSearchRequest = UserSearchRequest.builder().requestInfo(requestInfo).uuid(payerUuids).build();

payers = mapper.convertValue(serviceRequestRepository.fetchResult(userUri, userSearchRequest),
UserResponse.class).getUser();
}
}
log.info("demannds::"+demands);

if (!CollectionUtils.isEmpty(demands) && !CollectionUtils.isEmpty(payers))
demands = demandEnrichmentUtil.enrichPayer(demands, payers);

log.info("demannddddds::"+demands);
List<Map<Long, List<DemandDetail>>> demandDetailsList = new ArrayList<>();

for (Demand demand : demands) {
log.info("Inside demand");
Map<Long, List<DemandDetail>> demandMap = new HashMap<>();
Long taxPeriodFrom = (Long) demand.getTaxPeriodFrom();
List<DemandDetail> demandDetails = demand.getDemandDetails();
List<DemandDetail> filteredDemandDetaillist = demandDetails.stream()
.filter(detail -> {
BigDecimal difference = detail.getTaxAmount().subtract(detail.getCollectionAmount());
return (difference.compareTo(BigDecimal.ZERO)) != 0;
}) // Filter condition
.collect(Collectors.toList());
log.info("Filtered List:"+filteredDemandDetaillist);
if(!filteredDemandDetaillist.isEmpty()) {
demandMap.put(taxPeriodFrom, filteredDemandDetaillist);
demandDetailsList.add(demandMap);
}
}
log.info("demandDetailsList:"+demandDetailsList);
// Sorting the list of maps based on the key in descending order
List<Map<Long, List<DemandDetail>>> sortedDemandDetailsList = demandDetailsList.stream()
.sorted((mapA, mapB) -> {
Long keyA = mapA.keySet().stream().findFirst().orElse(0L);
Long keyB = mapB.keySet().stream().findFirst().orElse(0L);
return keyB.compareTo(keyA); // Descending order
})
.collect(Collectors.toList());

log.info("Sorted map:"+sortedDemandDetailsList);

List<DemandDetail> currentMonthDemandDetailList = new ArrayList<>();
if (!sortedDemandDetailsList.isEmpty()) {
Map<Long, List<DemandDetail>> firstMap = sortedDemandDetailsList.get(0);
firstMap.forEach((key, value) -> {
currentMonthDemandDetailList.addAll(value); // Get all details from the first map
});
}
// Extract RemainingMonthDemandDetailList
List<DemandDetail> remainingMonthDemandDetailList = new ArrayList<>();
if (sortedDemandDetailsList.size() > 1) {
for (int i = 1; i < sortedDemandDetailsList.size(); i++) {
Map<Long, List<DemandDetail>> map = sortedDemandDetailsList.get(i);
map.forEach((key, value) -> {
remainingMonthDemandDetailList.addAll(value); // Collect all details from the other maps
});
}
}
log.info("currentMonthDemandDetailList"+currentMonthDemandDetailList);
log.info("remainingMonthDemandDetailList"+remainingMonthDemandDetailList);
BigDecimal currentmonthBill = BigDecimal.ZERO;
BigDecimal currentMonthPenalty = BigDecimal.ZERO;
BigDecimal currentmonthTotalDue = BigDecimal.ZERO;
BigDecimal advanceAvailable = BigDecimal.ZERO;
BigDecimal advanceAdjusted = BigDecimal.ZERO;
BigDecimal remainingAdvance = BigDecimal.ZERO;
BigDecimal totalAreas = BigDecimal.ZERO;
BigDecimal totalAreasWithPenalty = BigDecimal.ZERO;
BigDecimal netdue = BigDecimal.ZERO;
BigDecimal netDueWithPenalty = BigDecimal.ZERO;
BigDecimal totalApplicablePenalty =BigDecimal.ZERO;

currentmonthBill = currentMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("10101")) // filter by taxHeadCode
.map(dd -> dd.getTaxAmount().subtract(dd.getCollectionAmount())) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("currentMonthDemandDetailList::::"+currentMonthDemandDetailList);
currentMonthPenalty = currentMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_TIME_PENALTY")) // filter by taxHeadCode
.map(dd -> dd.getTaxAmount().subtract(dd.getCollectionAmount())) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("currentMonthDemandDetailListafter::::"+currentMonthDemandDetailList);
log.info("currentMonthPenalty" + currentMonthPenalty);
currentmonthTotalDue = currentmonthBill.add(currentMonthPenalty);
if(currentMonthPenalty.equals(BigDecimal.ZERO)) {
List<MasterDetail> masterDetails = new ArrayList<>();
MasterDetail masterDetail = new MasterDetail("Penalty", "[?(@)]");
masterDetails.add(masterDetail);
ModuleDetail moduleDetail = ModuleDetail.builder().moduleName("ws-services-calculation").masterDetails(masterDetails).build();
List<ModuleDetail> moduleDetails = new ArrayList<>();
moduleDetails.add(moduleDetail);
MdmsCriteria mdmsCriteria = MdmsCriteria.builder().tenantId(demandCriteria.getTenantId())
.moduleDetails(moduleDetails)
.build();
MdmsCriteriaReq mdmsreq = MdmsCriteriaReq.builder().mdmsCriteria(mdmsCriteria).requestInfo(requestInfo).build();
DocumentContext mdmsData = util.getAttributeValues(mdmsreq);
if (!mdmsData.equals(null)) {
List<Map<String, Object>> paymentMasterDataList = mdmsData.read(PENALTY_PATH_CODE);
Map<String, Object> paymentMasterData = paymentMasterDataList.get(0);
Integer rate = (Integer) paymentMasterData.get("rate");
String penaltyType = String.valueOf(paymentMasterData.get("type"));
totalApplicablePenalty = currentmonthBill.multiply(new BigDecimal(rate).divide(new BigDecimal(100)));
totalApplicablePenalty = totalApplicablePenalty.setScale(0, RoundingMode.CEILING);
} else {
log.info("MDMS data is Null Penalty not connfigured");
}
}


//Tax headcode for WScharges,legacypenalty,legacyarea
List<String> taxHeadCodesToFilterWithoutPenalty = Arrays.asList("10102", "10201", "10101");

// Initialize the variable for the sum of taxAmount - collectedAmount for the filtered tax head codes
totalAreas = remainingMonthDemandDetailList.stream()
.filter(dd -> taxHeadCodesToFilterWithoutPenalty.contains(dd.getTaxHeadMasterCode())) // Filter by tax head codes
.map(dd -> dd.getTaxAmount().subtract(dd.getCollectionAmount())) // Calculate taxAmount - collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add); // Sum all results

BigDecimal penaltyInRemainingMonth= remainingMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_TIME_PENALTY")) // filter by taxHeadCode
.map(dd -> dd.getTaxAmount().subtract(dd.getCollectionAmount())) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);

totalAreasWithPenalty = totalAreas.add(penaltyInRemainingMonth);

netdue = currentmonthBill.add(totalAreas);
netDueWithPenalty = currentmonthTotalDue.add(totalAreasWithPenalty);

BigDecimal currentMonthAdvanceAvailable=currentMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_ADVANCE_CARRYFORWARD")) // filter by taxHeadCode
.map(dd -> dd.getTaxAmount()) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal currentMonthAdvanceCollected= currentMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_ADVANCE_CARRYFORWARD")) // filter by taxHeadCode
.map(dd -> dd.getCollectionAmount()) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal remainingMonthAdvanceAvailable = remainingMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_ADVANCE_CARRYFORWARD")) // filter by taxHeadCode
.map(dd -> dd.getTaxAmount()) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal remainingMonthAdvanceCollected= remainingMonthDemandDetailList.stream()
.filter(dd -> dd.getTaxHeadMasterCode().equals("WS_ADVANCE_CARRYFORWARD")) // filter by taxHeadCode
.map(dd -> dd.getCollectionAmount()) // map to the balance between taxAmount and collectedAmount
.reduce(BigDecimal.ZERO, BigDecimal::add);
advanceAvailable = currentMonthAdvanceAvailable.add(remainingMonthAdvanceAvailable);
advanceAdjusted = currentMonthAdvanceCollected.add(remainingMonthAdvanceCollected);
remainingAdvance = advanceAvailable.subtract(advanceAdjusted);

//BigDecimal currentMonthBill
AggregatedDemandDetailResponse aggregatedDemandDetailResponse = AggregatedDemandDetailResponse.builder()
.mapOfDemandDetailList(sortedDemandDetailsList)
.currentmonthBill(currentmonthBill)
.currentMonthPenalty(currentMonthPenalty)
.currentmonthTotalDue(currentmonthTotalDue)
.totalAreas(totalAreas)
.totalAreasWithPenalty(totalAreasWithPenalty)
.netdue(netdue)
.netDueWithPenalty(netDueWithPenalty)
.advanceAdjusted(advanceAdjusted)
.advanceAvailable(advanceAvailable)
.remainingAdvance(remainingAdvance)
.totalApplicablePenalty(totalApplicablePenalty).build();


return aggregatedDemandDetailResponse;
}
/**
* Calls the demand apportion API if any advance amoount is available for that comsumer code
* @param demandRequest The demand request for create
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class Constants {
public static final String TAXPERIOD_PATH_CODE = "$.MdmsRes.BillingService.TaxPeriod";
public static final String TAXHEADMASTER_PATH_CODE = "$.MdmsRes.BillingService.TaxHeadMaster";
public static final String BUSINESSSERVICE_PATH_CODE = "$.MdmsRes.BillingService.BusinessService.*.code";
public static final String PENALTY_PATH_CODE = "$.MdmsRes.ws-services-calculation.Penalty";
public static final String BUSINESSSERVICE_MODULE_PATH = "$.MdmsRes.BillingService.BusinessService";


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@

import org.egov.common.contract.request.RequestInfo;
import org.egov.demand.config.ApplicationProperties;
import org.egov.demand.model.Demand;
import org.egov.demand.model.DemandCriteria;
import org.egov.demand.model.DemandHistory;
import org.egov.demand.model.*;
import org.egov.demand.producer.Producer;
import org.egov.demand.service.DemandService;
import org.egov.demand.util.migration.DemandMigration;
Expand Down Expand Up @@ -162,5 +160,15 @@ public ResponseEntity<?> history(@RequestBody RequestInfoWrapper requestInfoWrap
responseInfo(responseFactory.getResponseInfo(requestInfo, HttpStatus.OK)).build();
return new ResponseEntity<>(response, HttpStatus.OK);
}

@PostMapping("_getAggregateDemandDetails")
public ResponseEntity<?> getAggregatedDemandDetails(@RequestBody RequestInfoWrapper requestInfoWrapper,
@ModelAttribute @Valid DemandCriteria demandCriteria) {

RequestInfo requestInfo = requestInfoWrapper.getRequestInfo();

AggregatedDemandDetailResponse demands = demandService.getAllDemands(demandCriteria, requestInfo);
return new ResponseEntity<>(demands, HttpStatus.OK);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public class SMSProperties {
@Value("${save.sms.entity.enabled}")
private boolean isSaveSmsEnable;

@Value("#{'${sms.error.codes}'.split(',')}")
@Value("#{'${sms.disabled.tenants.list}'.split(',')}")
protected List<String> smsDisabledTenantList;

@Setter(AccessLevel.PROTECTED) private List<Pattern> whitelistPatterns;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.egov.wscalculation.config;

import java.math.BigDecimal;
import java.math.BigInteger;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -249,5 +250,16 @@ public class WSCalculationConfiguration {

@Value("${sms.exclude.tenant}")
private String smsExcludeTenant;


@Value("${penalty.applicable.in.days}")
private Integer penaltyApplicableDays;

@Value("${penalty.start.threshold.time}")
private String penaltyStartThresholdTime;

@Value("${is.penalty.feature.enable}")
private boolean isPenaltyEnabled;

@Value("${egov.update.demand.add.penalty}")
private String updateAddPenaltytopic;
}
Loading