Compound interest to simple interest
diff --git a/api/src/main/java/io/mifos/individuallending/api/v1/domain/product/ChargeProportionalDesignator.java b/api/src/main/java/io/mifos/individuallending/api/v1/domain/product/ChargeProportionalDesignator.java
index 17903fa..e5d0716 100644
--- a/api/src/main/java/io/mifos/individuallending/api/v1/domain/product/ChargeProportionalDesignator.java
+++ b/api/src/main/java/io/mifos/individuallending/api/v1/domain/product/ChargeProportionalDesignator.java
@@ -25,7 +25,7 @@
   NOT_PROPORTIONAL("{notproportional}", 0),
   MAXIMUM_BALANCE_DESIGNATOR("{maximumbalance}", 1),
   RUNNING_BALANCE_DESIGNATOR("{runningbalance}", 2),
-  PRINCIPAL_AND_INTEREST_DESIGNATOR("{principalandinterest}", 3),
+  PRINCIPAL_DESIGNATOR("{principal}", 3),
   REQUESTED_DISBURSEMENT_DESIGNATOR("{requesteddisbursement}", 4),
   TO_ACCOUNT_DESIGNATOR("{toAccount}", 5),
   FROM_ACCOUNT_DESIGNATOR("{fromAccount}", 6),
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java b/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
index 1222029..976d1d3 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestAccountingInteractionInLoanWorkflow.java
@@ -210,7 +210,7 @@
       final BigDecimal customerLoanInterest = payment.getBalanceAdjustments().remove(AccountDesignators.CUSTOMER_LOAN_INTEREST);
       Assert.assertEquals("week " + week, interestAccrual.negate(), customerLoanInterest);
       Assert.assertEquals("week " + week, interestAccruedBeforePayment, customerLoanInterest);
-      //Assert.assertEquals("week " + week, plannedPayments.get(week+1).getPayment(), payment);
+      Assert.assertEquals("week " + week, plannedPayments.get(week+1).getPayment(), payment);
       week++;
     }
 
@@ -535,7 +535,6 @@
         .divide(Fixture.ACCRUAL_PERIODS, 8, BigDecimal.ROUND_HALF_EVEN);
 
     final BigDecimal calculatedInterest = expectedCurrentPrincipal
-        .add(interestAccrued)
         .multiply(dailyInterestRate)
         .setScale(MINOR_CURRENCY_UNIT_DIGITS, BigDecimal.ROUND_HALF_EVEN);
 
diff --git a/service/src/main/java/io/mifos/individuallending/internal/service/ChargeDefinitionService.java b/service/src/main/java/io/mifos/individuallending/internal/service/ChargeDefinitionService.java
index 653496d..a72682f 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/service/ChargeDefinitionService.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/service/ChargeDefinitionService.java
@@ -72,7 +72,7 @@
     return ret.stream();
   }
 
-  public static Stream<ChargeDefinition> individualLoanChargesDerivedFromConfiguration() {
+  static Stream<ChargeDefinition> individualLoanChargesDerivedFromConfiguration() {
     final List<ChargeDefinition> ret = new ArrayList<>();
 
     final ChargeDefinition disbursePayment = new ChargeDefinition();
@@ -106,7 +106,7 @@
     interestCharge.setForCycleSizeUnit(ChronoUnit.YEARS);
     interestCharge.setAccrueAction(Action.APPLY_INTEREST.name());
     interestCharge.setAccrualAccountDesignator(AccountDesignators.INTEREST_ACCRUAL);
-    interestCharge.setProportionalTo(ChargeProportionalDesignator.PRINCIPAL_AND_INTEREST_DESIGNATOR.getValue());
+    interestCharge.setProportionalTo(ChargeProportionalDesignator.PRINCIPAL_DESIGNATOR.getValue());
     interestCharge.setChargeMethod(ChargeDefinition.ChargeMethod.INTEREST);
     interestCharge.setReadOnly(true);
 
diff --git a/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/CostComponentService.java b/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/CostComponentService.java
index 2009a45..fd62325 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/CostComponentService.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/CostComponentService.java
@@ -134,10 +134,8 @@
         final BigDecimal customerLoanRunningBalance = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_GROUP);
         return customerLoanRunningBalance.subtract(paymentBuilder.getBalanceAdjustment(AccountDesignators.CUSTOMER_LOAN_GROUP));
       }
-      case PRINCIPAL_AND_INTEREST_DESIGNATOR: {
-        final BigDecimal customerLoanPrincipal = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_PRINCIPAL);
-        final BigDecimal customerLoanInterest = runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_INTEREST);
-        return customerLoanInterest.add(customerLoanPrincipal);
+      case PRINCIPAL_DESIGNATOR: {
+        return runningBalances.getBalance(AccountDesignators.CUSTOMER_LOAN_PRINCIPAL);
       }
       case CONTRACTUAL_REPAYMENT_DESIGNATOR:
         return contractualRepayment;
diff --git a/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/PeriodChargeCalculator.java b/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/PeriodChargeCalculator.java
index 0ced324..5c57218 100644
--- a/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/PeriodChargeCalculator.java
+++ b/service/src/main/java/io/mifos/individuallending/internal/service/costcomponent/PeriodChargeCalculator.java
@@ -41,9 +41,19 @@
       final List<ScheduledCharge> scheduledCharges,
       final int precision) {
     return scheduledCharges.stream()
-            .filter(PeriodChargeCalculator::accruedInterestCharge)
-            .collect(Collectors.groupingBy(scheduledCharge -> scheduledCharge.getScheduledAction().getRepaymentPeriod(),
-                    Collectors.mapping(x -> chargeAmountPerPeriod(x, interest, precision), RateCollectors.compound(precision))));
+        .filter(PeriodChargeCalculator::accruedInterestCharge)
+        .collect(Collectors.groupingBy(scheduledCharge -> scheduledCharge.getScheduledAction().getRepaymentPeriod(),
+            Collectors.mapping(x -> chargeAmountPerPeriod(x, interest, precision), Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
+  }
+
+  static Map<Period, BigDecimal> getPeriodAccrualCompoundedInterestRate(
+      final BigDecimal interest,
+      final List<ScheduledCharge> scheduledCharges,
+      final int precision) {
+    return scheduledCharges.stream()
+        .filter(PeriodChargeCalculator::accruedInterestCharge)
+        .collect(Collectors.groupingBy(scheduledCharge -> scheduledCharge.getScheduledAction().getRepaymentPeriod(),
+            Collectors.mapping(x -> chargeAmountPerPeriod(x, interest, precision), RateCollectors.compound(precision))));
   }
 
   private static boolean accruedInterestCharge(final ScheduledCharge scheduledCharge)