FINERACT-2316: Localize interest rate chart slab validation

- Add localized validation messages for overlap and gap errors in interest rate chart slabs
- Use DataValidatorBuilder with resource/parameter context for clean error codes
- Add unit tests for validation error codes and arguments
- Add German translations for validation messages
This commit is contained in:
Siddharthan P S
2025-12-03 09:44:09 +01:00
committed by Adam Saghy
parent 270901b9a2
commit 3d3b2dad6f
4 changed files with 132 additions and 10 deletions
@@ -137,17 +137,21 @@ public class InterestRateChart extends AbstractPersistableCustom<Long> {
if (iSlabs.slabFields().isValidChart(isPrimaryGroupingByAmount)
&& nextSlabs.slabFields().isValidChart(isPrimaryGroupingByAmount)) {
if (iSlabs.slabFields().isRateChartOverlapping(nextSlabs.slabFields(), isPrimaryGroupingByAmount)) {
baseDataValidator.failWithCodeNoParameterAddedToErrorCode("chart.slabs.range.overlapping",
iSlabs.slabFields().fromPeriod(), iSlabs.slabFields().toPeriod(), nextSlabs.slabFields().fromPeriod(),
nextSlabs.slabFields().toPeriod(), iSlabs.slabFields().getAmountRangeFrom(),
iSlabs.slabFields().getAmountRangeTo(), nextSlabs.slabFields().getAmountRangeFrom(),
nextSlabs.slabFields().getAmountRangeTo());
// Use DataValidatorBuilder with resource/parameter context for clean error codes
DataValidatorBuilder v = new DataValidatorBuilder(baseDataValidator.getDataValidationErrors())
.resource("savings.interestRateChart").parameter("slabs");
v.failWithCode("overlap", iSlabs.slabFields().fromPeriod(), iSlabs.slabFields().toPeriod(),
nextSlabs.slabFields().fromPeriod(), nextSlabs.slabFields().toPeriod(),
iSlabs.slabFields().getAmountRangeFrom(), iSlabs.slabFields().getAmountRangeTo(),
nextSlabs.slabFields().getAmountRangeFrom(), nextSlabs.slabFields().getAmountRangeTo());
} else if (iSlabs.slabFields().isRateChartHasGap(nextSlabs.slabFields(), isPrimaryGroupingByAmount)) {
baseDataValidator.failWithCodeNoParameterAddedToErrorCode("chart.slabs.range.has.gap",
iSlabs.slabFields().fromPeriod(), iSlabs.slabFields().toPeriod(), nextSlabs.slabFields().fromPeriod(),
nextSlabs.slabFields().toPeriod(), iSlabs.slabFields().getAmountRangeFrom(),
iSlabs.slabFields().getAmountRangeTo(), nextSlabs.slabFields().getAmountRangeFrom(),
nextSlabs.slabFields().getAmountRangeTo());
// Use DataValidatorBuilder with resource/parameter context for clean error codes
DataValidatorBuilder v = new DataValidatorBuilder(baseDataValidator.getDataValidationErrors())
.resource("savings.interestRateChart").parameter("slabs");
v.failWithCode("gap", iSlabs.slabFields().fromPeriod(), iSlabs.slabFields().toPeriod(),
nextSlabs.slabFields().fromPeriod(), nextSlabs.slabFields().toPeriod(),
iSlabs.slabFields().getAmountRangeFrom(), iSlabs.slabFields().getAmountRangeTo(),
nextSlabs.slabFields().getAmountRangeFrom(), nextSlabs.slabFields().getAmountRangeTo());
}
if (isPrimaryGroupingByAmount) {
if (!iSlabs.slabFields().isAmountSame(nextSlabs.slabFields())) {