Adjusted validation of loss provisiong configuration.  Steps are no longer
forced to 100%, but they should now be unique by daysLate.
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/validation/CheckValidLossProvisionList.java b/api/src/main/java/io/mifos/portfolio/api/v1/validation/CheckValidLossProvisionList.java
index 3085033..adf9988 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/validation/CheckValidLossProvisionList.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/validation/CheckValidLossProvisionList.java
@@ -19,8 +19,9 @@
 
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
-import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author Myrle Krantz
@@ -35,10 +36,11 @@
   public boolean isValid(
       final List<LossProvisionStep> value,
       final ConstraintValidatorContext context) {
-    final BigDecimal sum = value.stream()
-        .map(LossProvisionStep::getPercentProvision)
-        .map(x -> x.setScale(2, BigDecimal.ROUND_HALF_EVEN))
-        .reduce(BigDecimal.ZERO, BigDecimal::add);
-    return sum.compareTo(BigDecimal.valueOf(100_00, 2)) == 0;
+    if (value == null) return false;
+    final Map<Integer, Long> configurationsPerDay = value.stream()
+        .collect(Collectors.groupingBy(LossProvisionStep::getDaysLate, Collectors.counting()));
+    final boolean moreThanOneConfigurationForAtLeastOneDay = configurationsPerDay.values().stream()
+        .anyMatch(x -> x > 1);
+    return !moreThanOneConfigurationForAtLeastOneDay;
   }
 }
\ No newline at end of file
diff --git a/api/src/test/java/io/mifos/individuallending/api/v1/domain/product/LossProvisionConfigurationTest.java b/api/src/test/java/io/mifos/individuallending/api/v1/domain/product/LossProvisionConfigurationTest.java
index ba6e24b..5139310 100644
--- a/api/src/test/java/io/mifos/individuallending/api/v1/domain/product/LossProvisionConfigurationTest.java
+++ b/api/src/test/java/io/mifos/individuallending/api/v1/domain/product/LossProvisionConfigurationTest.java
@@ -36,7 +36,7 @@
     final LossProvisionConfiguration ret = new LossProvisionConfiguration();
     final List<LossProvisionStep> lossProvisionSteps = new ArrayList<>();
     lossProvisionSteps.add(new LossProvisionStep(0, BigDecimal.ONE));
-    lossProvisionSteps.add(new LossProvisionStep(1, BigDecimal.valueOf(9)));
+    lossProvisionSteps.add(new LossProvisionStep(1, BigDecimal.valueOf(10)));
     lossProvisionSteps.add(new LossProvisionStep(10, BigDecimal.valueOf(20)));
     lossProvisionSteps.add(new LossProvisionStep(50, BigDecimal.valueOf(70)));
     ret.setLossProvisionSteps(lossProvisionSteps);
@@ -50,15 +50,12 @@
     ret.add(new ValidationTestCase<LossProvisionConfiguration>("valid"));
     ret.add(new ValidationTestCase<LossProvisionConfiguration>("emptyList")
         .adjustment(x -> x.setLossProvisionSteps(Collections.emptyList()))
-        .valid(false));
+        .valid(true));
     ret.add(new ValidationTestCase<LossProvisionConfiguration>("nullList")
-        .adjustment(x -> x.setLossProvisionSteps(Collections.emptyList()))
+        .adjustment(x -> x.setLossProvisionSteps(null))
         .valid(false));
-    ret.add(new ValidationTestCase<LossProvisionConfiguration>("sumTooSmall")
-        .adjustment(x -> x.getLossProvisionSteps().get(0).setPercentProvision(BigDecimal.valueOf(0.1)))
-        .valid(false));
-    ret.add(new ValidationTestCase<LossProvisionConfiguration>("sumTooLarge")
-        .adjustment(x -> x.getLossProvisionSteps().get(3).setPercentProvision(BigDecimal.valueOf(71)))
+    ret.add(new ValidationTestCase<LossProvisionConfiguration>("moreThanOneValuesForOneDay")
+        .adjustment(x -> x.getLossProvisionSteps().add(new LossProvisionStep(0, BigDecimal.valueOf(0.1))))
         .valid(false));
 
     return ret;