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