added insuranceSum calculation missing breed, age factors and yearly premium
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
package com.pfefferminzia.petinsurance;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import com.pfefferminzia.petinsurance.animals.Dog;
|
||||||
|
import com.pfefferminzia.petinsurance.calculations.Calculations;
|
||||||
|
import com.pfefferminzia.petinsurance.tariffs.Tariff;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Dog dog = new Dog(LocalDate.of(2020, 4, 14), "Husky");
|
||||||
|
Calculations calc = new Calculations();
|
||||||
|
System.out.println(calc.calculateInsuranceSum(dog, Tariff.OPTIMAL, LocalDate.of(2026, 1, 2)));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.animals;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public sealed interface Animal permits Dog, Cat, SmallAnimal {
|
||||||
|
|
||||||
|
LocalDate birthday();
|
||||||
|
BigDecimal getBaseInsuranceSum();
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.animals;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public final record Cat(LocalDate birthday) implements Animal {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getBaseInsuranceSum() {
|
||||||
|
return BigDecimal.valueOf(2000.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.animals;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public final record Dog(LocalDate birthday, String breed) implements Animal {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getBaseInsuranceSum() {
|
||||||
|
return BigDecimal.valueOf(2500.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.animals;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public final record SmallAnimal(LocalDate birthday) implements Animal {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getBaseInsuranceSum() {
|
||||||
|
return BigDecimal.valueOf(1000.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.calculations;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import com.pfefferminzia.petinsurance.animals.Animal;
|
||||||
|
import com.pfefferminzia.petinsurance.tariffs.Tariff;
|
||||||
|
|
||||||
|
public class Calculations {
|
||||||
|
|
||||||
|
public BigDecimal calculateInsuranceSum(Animal animal, Tariff tariff,
|
||||||
|
LocalDate insuranceStartDate) {
|
||||||
|
|
||||||
|
TariffValidator validator = new TariffValidator(insuranceStartDate);
|
||||||
|
validator.checkTariffAvailability(tariff);
|
||||||
|
|
||||||
|
BigDecimal insuranceBaseSum = animal.getBaseInsuranceSum();
|
||||||
|
return insuranceBaseSum.multiply(tariff.getRate());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.calculations;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import com.pfefferminzia.petinsurance.exception.TariffNotAvailableException;
|
||||||
|
import com.pfefferminzia.petinsurance.tariffs.Tariff;
|
||||||
|
|
||||||
|
public class TariffValidator {
|
||||||
|
private LocalDate insuranceStartDate;
|
||||||
|
|
||||||
|
public TariffValidator(LocalDate insuranceStartDate) {
|
||||||
|
this.insuranceStartDate = insuranceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean checkTariffAvailability(Tariff tariff) {
|
||||||
|
if (insuranceStartDate.isBefore(LocalDate.of(2026, 7, 1)) && tariff == Tariff.PREMIUM) {
|
||||||
|
throw new TariffNotAvailableException(
|
||||||
|
"Die Premium Tarifvariante ist nicht vor dem 1. Juli 2026 verfügbar.");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.exception;
|
||||||
|
|
||||||
|
public class TariffNotAvailableException extends RuntimeException {
|
||||||
|
|
||||||
|
public TariffNotAvailableException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.pfefferminzia.petinsurance.tariffs;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
public enum Tariff {
|
||||||
|
KOMPAKT(BigDecimal.ONE), OPTIMAL(BigDecimal.valueOf(1.2)), PREMIUM(BigDecimal.valueOf(1.4));
|
||||||
|
|
||||||
|
private final BigDecimal rate;
|
||||||
|
|
||||||
|
private Tariff(BigDecimal rate) {
|
||||||
|
this.rate = rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getRate() {
|
||||||
|
return rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user