From b13a78734f411bdd99fba2987a68bef0583c04b5 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Tue, 31 Mar 2026 12:16:30 +0100 Subject: [PATCH 1/8] HDPI-3769:WIP --- .../respondpossessionclaim/Frequency.java | 18 ++++ .../HouseholdCircumstances.java | 94 +++++++++++++++++++ .../HouseholdCircumstancesEntity.java | 84 ++++++++++++++++- .../HouseholdCircumstancesService.java | 71 +++++++++++++- .../V075__add_regular_expenses_columns.sql | 36 +++++++ 5 files changed, 298 insertions(+), 5 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java create mode 100644 src/main/resources/db/migration/V075__add_regular_expenses_columns.sql diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java new file mode 100644 index 0000000000..a66ba04a09 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java @@ -0,0 +1,18 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import uk.gov.hmcts.ccd.sdk.api.HasLabel; + +/** + * Enum representing the frequency of income and expenses. + */ +@AllArgsConstructor +@Getter +public enum Frequency implements HasLabel { + WEEKLY("Weekly"), + MONTHLY("Monthly"); + + private final String label; + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java index 63b5b90d92..45e8833bfc 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java @@ -6,7 +6,11 @@ import lombok.Data; import lombok.NoArgsConstructor; import uk.gov.hmcts.ccd.sdk.api.CCD; +import uk.gov.hmcts.ccd.sdk.type.FieldType; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.annotation.JacksonMoneyGBP; + +import java.math.BigDecimal; @Builder @Data @@ -17,4 +21,94 @@ public class HouseholdCircumstances { @CCD private YesOrNo dependantChildren; + @CCD + private YesOrNo householdBills; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal householdBillsAmount; + + @CCD + private Frequency householdBillsFrequency; + + @CCD + private YesOrNo loanPayments; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal loanPaymentsAmount; + + @CCD + private Frequency loanPaymentsFrequency; + + @CCD + private YesOrNo childSpousalMaintenance; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal childSpousalMaintenanceAmount; + + @CCD + private Frequency childSpousalMaintenanceFrequency; + + @CCD + private YesOrNo mobilePhone; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal mobilePhoneAmount; + + @CCD + private Frequency mobilePhoneFrequency; + + @CCD + private YesOrNo groceryShopping; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal groceryShoppingAmount; + + @CCD + private Frequency groceryShoppingFrequency; + + @CCD + private YesOrNo fuelTransport; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal fuelTransportAmount; + + @CCD + private Frequency fuelTransportFrequency; + + @CCD + private YesOrNo schoolCosts; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal schoolCostsAmount; + + @CCD + private Frequency schoolCostsFrequency; + + @CCD + private YesOrNo clothing; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal clothingAmount; + + @CCD + private Frequency clothingFrequency; + + @CCD + private YesOrNo otherExpenses; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal otherExpensesAmount; + + @CCD + private Frequency otherExpensesFrequency; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java index 59d01f0769..560b774fe6 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java @@ -20,6 +20,7 @@ import org.hibernate.type.SqlTypes; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.Frequency; import java.math.BigDecimal; import java.time.LocalDate; @@ -103,7 +104,88 @@ public class HouseholdCircumstancesEntity { private String regularExpenses; + //Columns to drop private BigDecimal expenseAmount; - private String expenseFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo householdBills; + + private BigDecimal householdBillsAmount; + + @Enumerated(EnumType.STRING) + private Frequency householdBillsFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo loanPayments; + + private BigDecimal loanPaymentsAmount; + + @Enumerated(EnumType.STRING) + private Frequency loanPaymentsFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo childSpousalMaintenance; + + private BigDecimal childSpousalMaintenanceAmount; + + @Enumerated(EnumType.STRING) + private Frequency childSpousalMaintenanceFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo mobilePhone; + + private BigDecimal mobilePhoneAmount; + + @Enumerated(EnumType.STRING) + private Frequency mobilePhoneFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo groceryShopping; + + private BigDecimal groceryShoppingAmount; + + @Enumerated(EnumType.STRING) + private Frequency groceryShoppingFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo fuelTransport; + + private BigDecimal fuelTransportAmount; + + @Enumerated(EnumType.STRING) + private Frequency fuelTransportFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo schoolCosts; + + private BigDecimal schoolCostsAmount; + + @Enumerated(EnumType.STRING) + private Frequency schoolCostsFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo clothing; + + private BigDecimal clothingAmount; + + @Enumerated(EnumType.STRING) + private Frequency clothingFrequency; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo otherExpenses; + + private BigDecimal otherExpensesAmount; + + @Enumerated(EnumType.STRING) + private Frequency otherExpensesFrequency; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index 2c4ec07507..161ad7e77b 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.service.respondpossessionclaim; import org.springframework.stereotype.Service; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity; @@ -13,10 +14,72 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household return null; } - HouseholdCircumstancesEntity householdCircumstancesEntity = HouseholdCircumstancesEntity.builder() - .dependantChildren(circumstances.getDependantChildren()) - .build(); + return HouseholdCircumstancesEntity.builder() + .dependantChildren(circumstances.getDependantChildren()) + + .householdBills(circumstances.getHouseholdBills()) + .householdBillsAmount(YesOrNo.YES.equals(circumstances.getHouseholdBills()) + ? circumstances.getHouseholdBillsAmount() + : null) + .householdBillsFrequency(YesOrNo.YES.equals(circumstances.getHouseholdBills()) + ? circumstances.getHouseholdBillsFrequency() + : null) + .loanPayments(circumstances.getLoanPayments()) + .loanPaymentsAmount(YesOrNo.YES.equals(circumstances.getLoanPayments()) + ? circumstances.getLoanPaymentsAmount() + : null) + .loanPaymentsFrequency(YesOrNo.YES.equals(circumstances.getLoanPayments()) + ? circumstances.getLoanPaymentsFrequency() + : null) + .childSpousalMaintenance(circumstances.getChildSpousalMaintenance()) + .childSpousalMaintenanceAmount(YesOrNo.YES.equals(circumstances.getChildSpousalMaintenance()) + ? circumstances.getChildSpousalMaintenanceAmount() + : null) + .childSpousalMaintenanceFrequency(YesOrNo.YES.equals(circumstances.getChildSpousalMaintenance()) + ? circumstances.getChildSpousalMaintenanceFrequency() + : null) + .mobilePhone(circumstances.getMobilePhone()) + .mobilePhoneAmount(YesOrNo.YES.equals(circumstances.getMobilePhone()) + ? circumstances.getMobilePhoneAmount() + : null) + .mobilePhoneFrequency(YesOrNo.YES.equals(circumstances.getMobilePhone()) + ? circumstances.getMobilePhoneFrequency() + : null) + .groceryShopping(circumstances.getGroceryShopping()) + .groceryShoppingAmount(YesOrNo.YES.equals(circumstances.getGroceryShopping()) + ? circumstances.getGroceryShoppingAmount() + : null) + .groceryShoppingFrequency(YesOrNo.YES.equals(circumstances.getGroceryShopping()) + ? circumstances.getGroceryShoppingFrequency() + : null) + .fuelTransport(circumstances.getFuelTransport()) + .fuelTransportAmount(YesOrNo.YES.equals(circumstances.getFuelTransport()) + ? circumstances.getFuelTransportAmount() + : null) + .fuelTransportFrequency(YesOrNo.YES.equals(circumstances.getFuelTransport()) + ? circumstances.getFuelTransportFrequency() + : null) + .schoolCosts(circumstances.getSchoolCosts()) + .schoolCostsAmount(YesOrNo.YES.equals(circumstances.getSchoolCosts()) + ? circumstances.getSchoolCostsAmount() + : null) + .schoolCostsFrequency(YesOrNo.YES.equals(circumstances.getSchoolCosts()) + ? circumstances.getSchoolCostsFrequency() + : null) + .clothing(circumstances.getClothing()) + .clothingAmount(YesOrNo.YES.equals(circumstances.getClothing()) + ? circumstances.getClothingAmount() + : null) + .clothingFrequency(YesOrNo.YES.equals(circumstances.getClothing()) + ? circumstances.getClothingFrequency() + : null) + .otherExpenses(circumstances.getOtherExpenses()) + .otherExpensesAmount(YesOrNo.YES.equals(circumstances.getOtherExpenses()) + ? circumstances.getOtherExpensesAmount() + : null) + .otherExpensesFrequency(YesOrNo.YES.equals(circumstances.getOtherExpenses()) + ? circumstances.getOtherExpensesFrequency() + : null).build(); - return householdCircumstancesEntity; } } diff --git a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql new file mode 100644 index 0000000000..c012e65bce --- /dev/null +++ b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql @@ -0,0 +1,36 @@ +ALTER TABLE household_circumstances + ADD COLUMN household_bills YES_NO, + ADD COLUMN household_bills_amount DECIMAL(18,2), + ADD COLUMN household_bills_frequency VARCHAR(10), + + ADD COLUMN loan_payments YES_NO, + ADD COLUMN loan_payments_amount DECIMAL(18,2), + ADD COLUMN loan_payments_frequency VARCHAR(10), + + ADD COLUMN child_spousal_maintenance YES_NO, + ADD COLUMN child_spousal_maintenance_amount DECIMAL(18,2), + ADD COLUMN child_spousal_maintenance_frequency VARCHAR(10), + + ADD COLUMN mobile_phone YES_NO, + ADD COLUMN mobile_phone_amount DECIMAL(18,2), + ADD COLUMN mobile_phone_frequency VARCHAR(10), + + ADD COLUMN grocery_shopping YES_NO, + ADD COLUMN grocery_shopping_amount DECIMAL(18,2), + ADD COLUMN grocery_shopping_frequency VARCHAR(10), + + ADD COLUMN fuel_transport YES_NO, + ADD COLUMN fuel_transport_amount DECIMAL(18,2), + ADD COLUMN fuel_transport_frequency VARCHAR(10), + + ADD COLUMN school_costs YES_NO, + ADD COLUMN school_costs_amount DECIMAL(18,2), + ADD COLUMN school_costs_frequency VARCHAR(10), + + ADD COLUMN clothing YES_NO, + ADD COLUMN clothing_amount DECIMAL(18,2), + ADD COLUMN clothing_frequency VARCHAR(10), + + ADD COLUMN other_expenses YES_NO, + ADD COLUMN other_expenses_amount DECIMAL(18,2), + ADD COLUMN other_expenses_frequency VARCHAR(10); From 79761a231c5037e4fa3688a272690426a0f630e4 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Tue, 31 Mar 2026 12:32:07 +0100 Subject: [PATCH 2/8] HDPI-3769:Fixing checkstyle issue --- .../respondpossessionclaim/HouseholdCircumstancesService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index 161ad7e77b..198acfd4e4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -14,7 +14,7 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household return null; } - return HouseholdCircumstancesEntity.builder() + return HouseholdCircumstancesEntity.builder() .dependantChildren(circumstances.getDependantChildren()) .householdBills(circumstances.getHouseholdBills()) From 45fe9908bbd3b6d4ad7e03515199232568028768 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Tue, 31 Mar 2026 14:43:01 +0100 Subject: [PATCH 3/8] HDPI-3769:Adding test coverage --- .../HouseholdCircumstances.java | 6 +- .../HouseholdCircumstancesEntity.java | 6 +- .../HouseholdCircumstancesService.java | 10 +-- .../V075__add_regular_expenses_columns.sql | 6 +- .../HouseholdCircumstancesServiceTest.java | 90 +++++++++++++++++++ 5 files changed, 104 insertions(+), 14 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java index 45e8833bfc..5a0d964406 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java @@ -72,14 +72,14 @@ public class HouseholdCircumstances { private Frequency groceryShoppingFrequency; @CCD - private YesOrNo fuelTransport; + private YesOrNo fuelParkingTransport; @CCD(typeOverride = FieldType.MoneyGBP) @JacksonMoneyGBP - private BigDecimal fuelTransportAmount; + private BigDecimal fuelParkingTransportAmount; @CCD - private Frequency fuelTransportFrequency; + private Frequency fuelParkingTransportFrequency; @CCD private YesOrNo schoolCosts; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java index 560b774fe6..6d708219e9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java @@ -155,12 +155,12 @@ public class HouseholdCircumstancesEntity { @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private YesOrNo fuelTransport; + private YesOrNo fuelParkingTransport; - private BigDecimal fuelTransportAmount; + private BigDecimal fuelParkingTransportAmount; @Enumerated(EnumType.STRING) - private Frequency fuelTransportFrequency; + private Frequency fuelParkingTransportFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index 198acfd4e4..fad116597c 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -52,12 +52,12 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household .groceryShoppingFrequency(YesOrNo.YES.equals(circumstances.getGroceryShopping()) ? circumstances.getGroceryShoppingFrequency() : null) - .fuelTransport(circumstances.getFuelTransport()) - .fuelTransportAmount(YesOrNo.YES.equals(circumstances.getFuelTransport()) - ? circumstances.getFuelTransportAmount() + .fuelParkingTransport(circumstances.getFuelParkingTransport()) + .fuelParkingTransportAmount(YesOrNo.YES.equals(circumstances.getFuelParkingTransport()) + ? circumstances.getFuelParkingTransportAmount() : null) - .fuelTransportFrequency(YesOrNo.YES.equals(circumstances.getFuelTransport()) - ? circumstances.getFuelTransportFrequency() + .fuelParkingTransportFrequency(YesOrNo.YES.equals(circumstances.getFuelParkingTransport()) + ? circumstances.getFuelParkingTransportFrequency() : null) .schoolCosts(circumstances.getSchoolCosts()) .schoolCostsAmount(YesOrNo.YES.equals(circumstances.getSchoolCosts()) diff --git a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql index c012e65bce..6ae0008c88 100644 --- a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql +++ b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql @@ -19,9 +19,9 @@ ALTER TABLE household_circumstances ADD COLUMN grocery_shopping_amount DECIMAL(18,2), ADD COLUMN grocery_shopping_frequency VARCHAR(10), - ADD COLUMN fuel_transport YES_NO, - ADD COLUMN fuel_transport_amount DECIMAL(18,2), - ADD COLUMN fuel_transport_frequency VARCHAR(10), + ADD COLUMN fuel_parking_transport YES_NO, + ADD COLUMN fuel_parking_transport_amount DECIMAL(18,2), + ADD COLUMN fuel_parking_transport_frequency VARCHAR(10), ADD COLUMN school_costs YES_NO, ADD COLUMN school_costs_amount DECIMAL(18,2), diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java index 3fc4c62e6f..ae104e36f2 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java @@ -5,12 +5,16 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.NullSource; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.Frequency; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity; +import java.math.BigDecimal; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; @@ -58,5 +62,91 @@ void shouldReturnNullWhenHouseholdCircumstancesIsNull() { assertThat(entity).isNull(); } + @Test + void shouldMapExpenseAmountsAndFrequenciesWhenAnswerIsYes() { + HouseholdCircumstances householdCircumstances = buildExpenseFields(YesOrNo.YES); + + HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances); + + assertThat(entity.getHouseholdBillsAmount()).isEqualByComparingTo(new BigDecimal("100.00")); + assertThat(entity.getHouseholdBillsFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getLoanPaymentsAmount()).isEqualByComparingTo(new BigDecimal("200.00")); + assertThat(entity.getLoanPaymentsFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getChildSpousalMaintenanceAmount()).isEqualByComparingTo(new BigDecimal("300.00")); + assertThat(entity.getChildSpousalMaintenanceFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getMobilePhoneAmount()).isEqualByComparingTo(new BigDecimal("400.00")); + assertThat(entity.getMobilePhoneFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getGroceryShoppingAmount()).isEqualByComparingTo(new BigDecimal("500.00")); + assertThat(entity.getGroceryShoppingFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getFuelParkingTransportAmount()).isEqualByComparingTo(new BigDecimal("600.00")); + assertThat(entity.getFuelParkingTransportFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getSchoolCostsAmount()).isEqualByComparingTo(new BigDecimal("700.00")); + assertThat(entity.getSchoolCostsFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getClothingAmount()).isEqualByComparingTo(new BigDecimal("800.00")); + assertThat(entity.getClothingFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getOtherExpensesAmount()).isEqualByComparingTo(new BigDecimal("900.00")); + assertThat(entity.getOtherExpensesFrequency()).isEqualTo(Frequency.MONTHLY); + } + + @ParameterizedTest + @NullSource + @EnumSource(value = YesOrNo.class, names = "NO") + void shouldNotMapExpenseAmountsAndFrequenciesWhenAnswerIsNotYes(YesOrNo answer) { + HouseholdCircumstances householdCircumstances = buildExpenseFields(answer); + + HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances); + + assertThat(entity.getHouseholdBillsAmount()).isNull(); + assertThat(entity.getHouseholdBillsFrequency()).isNull(); + assertThat(entity.getLoanPaymentsAmount()).isNull(); + assertThat(entity.getLoanPaymentsFrequency()).isNull(); + assertThat(entity.getChildSpousalMaintenanceAmount()).isNull(); + assertThat(entity.getChildSpousalMaintenanceFrequency()).isNull(); + assertThat(entity.getMobilePhoneAmount()).isNull(); + assertThat(entity.getMobilePhoneFrequency()).isNull(); + assertThat(entity.getGroceryShoppingAmount()).isNull(); + assertThat(entity.getGroceryShoppingFrequency()).isNull(); + assertThat(entity.getFuelParkingTransportAmount()).isNull(); + assertThat(entity.getFuelParkingTransportFrequency()).isNull(); + assertThat(entity.getSchoolCostsAmount()).isNull(); + assertThat(entity.getSchoolCostsFrequency()).isNull(); + assertThat(entity.getClothingAmount()).isNull(); + assertThat(entity.getClothingFrequency()).isNull(); + assertThat(entity.getOtherExpensesAmount()).isNull(); + assertThat(entity.getOtherExpensesFrequency()).isNull(); + } + + private static HouseholdCircumstances buildExpenseFields(YesOrNo answer) { + return HouseholdCircumstances.builder() + .householdBills(answer) + .householdBillsAmount(new BigDecimal("100.00")) + .householdBillsFrequency(Frequency.MONTHLY) + .loanPayments(answer) + .loanPaymentsAmount(new BigDecimal("200.00")) + .loanPaymentsFrequency(Frequency.WEEKLY) + .childSpousalMaintenance(answer) + .childSpousalMaintenanceAmount(new BigDecimal("300.00")) + .childSpousalMaintenanceFrequency(Frequency.MONTHLY) + .mobilePhone(answer) + .mobilePhoneAmount(new BigDecimal("400.00")) + .mobilePhoneFrequency(Frequency.WEEKLY) + .groceryShopping(answer) + .groceryShoppingAmount(new BigDecimal("500.00")) + .groceryShoppingFrequency(Frequency.MONTHLY) + .fuelParkingTransport(answer) + .fuelParkingTransportAmount(new BigDecimal("600.00")) + .fuelParkingTransportFrequency(Frequency.WEEKLY) + .schoolCosts(answer) + .schoolCostsAmount(new BigDecimal("700.00")) + .schoolCostsFrequency(Frequency.MONTHLY) + .clothing(answer) + .clothingAmount(new BigDecimal("800.00")) + .clothingFrequency(Frequency.WEEKLY) + .otherExpenses(answer) + .otherExpensesAmount(new BigDecimal("900.00")) + .otherExpensesFrequency(Frequency.MONTHLY) + .build(); + } + } From 8e005208549e3904f85d0d8771ff35733f51387e Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Wed, 1 Apr 2026 10:56:17 +0100 Subject: [PATCH 4/8] HDPI-3769:Renaming frequency enum --- .../HouseholdCircumstances.java | 18 +-- ...requency.java => RecurrenceFrequency.java} | 4 +- .../HouseholdCircumstancesEntity.java | 20 ++-- .../HouseholdCircumstancesService.java | 104 ++++++------------ .../HouseholdCircumstancesServiceTest.java | 38 +++---- 5 files changed, 76 insertions(+), 108 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/{Frequency.java => RecurrenceFrequency.java} (67%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java index 5a0d964406..3521b11f9b 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java @@ -29,7 +29,7 @@ public class HouseholdCircumstances { private BigDecimal householdBillsAmount; @CCD - private Frequency householdBillsFrequency; + private RecurrenceFrequency householdBillsFrequency; @CCD private YesOrNo loanPayments; @@ -39,7 +39,7 @@ public class HouseholdCircumstances { private BigDecimal loanPaymentsAmount; @CCD - private Frequency loanPaymentsFrequency; + private RecurrenceFrequency loanPaymentsFrequency; @CCD private YesOrNo childSpousalMaintenance; @@ -49,7 +49,7 @@ public class HouseholdCircumstances { private BigDecimal childSpousalMaintenanceAmount; @CCD - private Frequency childSpousalMaintenanceFrequency; + private RecurrenceFrequency childSpousalMaintenanceFrequency; @CCD private YesOrNo mobilePhone; @@ -59,7 +59,7 @@ public class HouseholdCircumstances { private BigDecimal mobilePhoneAmount; @CCD - private Frequency mobilePhoneFrequency; + private RecurrenceFrequency mobilePhoneFrequency; @CCD private YesOrNo groceryShopping; @@ -69,7 +69,7 @@ public class HouseholdCircumstances { private BigDecimal groceryShoppingAmount; @CCD - private Frequency groceryShoppingFrequency; + private RecurrenceFrequency groceryShoppingFrequency; @CCD private YesOrNo fuelParkingTransport; @@ -79,7 +79,7 @@ public class HouseholdCircumstances { private BigDecimal fuelParkingTransportAmount; @CCD - private Frequency fuelParkingTransportFrequency; + private RecurrenceFrequency fuelParkingTransportFrequency; @CCD private YesOrNo schoolCosts; @@ -89,7 +89,7 @@ public class HouseholdCircumstances { private BigDecimal schoolCostsAmount; @CCD - private Frequency schoolCostsFrequency; + private RecurrenceFrequency schoolCostsFrequency; @CCD private YesOrNo clothing; @@ -99,7 +99,7 @@ public class HouseholdCircumstances { private BigDecimal clothingAmount; @CCD - private Frequency clothingFrequency; + private RecurrenceFrequency clothingFrequency; @CCD private YesOrNo otherExpenses; @@ -109,6 +109,6 @@ public class HouseholdCircumstances { private BigDecimal otherExpensesAmount; @CCD - private Frequency otherExpensesFrequency; + private RecurrenceFrequency otherExpensesFrequency; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/RecurrenceFrequency.java similarity index 67% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/RecurrenceFrequency.java index a66ba04a09..1c9c716755 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/Frequency.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/RecurrenceFrequency.java @@ -5,11 +5,11 @@ import uk.gov.hmcts.ccd.sdk.api.HasLabel; /** - * Enum representing the frequency of income and expenses. + * Enum representing the recurrence frequency of income, benefits, and expenses. */ @AllArgsConstructor @Getter -public enum Frequency implements HasLabel { +public enum RecurrenceFrequency implements HasLabel { WEEKLY("Weekly"), MONTHLY("Monthly"); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java index 6d708219e9..0ff5708f36 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java @@ -20,7 +20,7 @@ import org.hibernate.type.SqlTypes; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; -import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.Frequency; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency; import java.math.BigDecimal; import java.time.LocalDate; @@ -115,7 +115,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal householdBillsAmount; @Enumerated(EnumType.STRING) - private Frequency householdBillsFrequency; + private RecurrenceFrequency householdBillsFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -124,7 +124,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal loanPaymentsAmount; @Enumerated(EnumType.STRING) - private Frequency loanPaymentsFrequency; + private RecurrenceFrequency loanPaymentsFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -133,7 +133,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal childSpousalMaintenanceAmount; @Enumerated(EnumType.STRING) - private Frequency childSpousalMaintenanceFrequency; + private RecurrenceFrequency childSpousalMaintenanceFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -142,7 +142,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal mobilePhoneAmount; @Enumerated(EnumType.STRING) - private Frequency mobilePhoneFrequency; + private RecurrenceFrequency mobilePhoneFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -151,7 +151,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal groceryShoppingAmount; @Enumerated(EnumType.STRING) - private Frequency groceryShoppingFrequency; + private RecurrenceFrequency groceryShoppingFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -160,7 +160,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal fuelParkingTransportAmount; @Enumerated(EnumType.STRING) - private Frequency fuelParkingTransportFrequency; + private RecurrenceFrequency fuelParkingTransportFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -169,7 +169,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal schoolCostsAmount; @Enumerated(EnumType.STRING) - private Frequency schoolCostsFrequency; + private RecurrenceFrequency schoolCostsFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -178,7 +178,7 @@ public class HouseholdCircumstancesEntity { private BigDecimal clothingAmount; @Enumerated(EnumType.STRING) - private Frequency clothingFrequency; + private RecurrenceFrequency clothingFrequency; @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) @@ -187,5 +187,5 @@ public class HouseholdCircumstancesEntity { private BigDecimal otherExpensesAmount; @Enumerated(EnumType.STRING) - private Frequency otherExpensesFrequency; + private RecurrenceFrequency otherExpensesFrequency; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index fad116597c..4d7709a1ed 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -8,78 +8,46 @@ @Service public class HouseholdCircumstancesService { - public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(HouseholdCircumstances circumstances) { + public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(HouseholdCircumstances hc) { - if (circumstances == null) { + if (hc == null) { return null; } - return HouseholdCircumstancesEntity.builder() - .dependantChildren(circumstances.getDependantChildren()) - - .householdBills(circumstances.getHouseholdBills()) - .householdBillsAmount(YesOrNo.YES.equals(circumstances.getHouseholdBills()) - ? circumstances.getHouseholdBillsAmount() - : null) - .householdBillsFrequency(YesOrNo.YES.equals(circumstances.getHouseholdBills()) - ? circumstances.getHouseholdBillsFrequency() - : null) - .loanPayments(circumstances.getLoanPayments()) - .loanPaymentsAmount(YesOrNo.YES.equals(circumstances.getLoanPayments()) - ? circumstances.getLoanPaymentsAmount() - : null) - .loanPaymentsFrequency(YesOrNo.YES.equals(circumstances.getLoanPayments()) - ? circumstances.getLoanPaymentsFrequency() - : null) - .childSpousalMaintenance(circumstances.getChildSpousalMaintenance()) - .childSpousalMaintenanceAmount(YesOrNo.YES.equals(circumstances.getChildSpousalMaintenance()) - ? circumstances.getChildSpousalMaintenanceAmount() - : null) - .childSpousalMaintenanceFrequency(YesOrNo.YES.equals(circumstances.getChildSpousalMaintenance()) - ? circumstances.getChildSpousalMaintenanceFrequency() - : null) - .mobilePhone(circumstances.getMobilePhone()) - .mobilePhoneAmount(YesOrNo.YES.equals(circumstances.getMobilePhone()) - ? circumstances.getMobilePhoneAmount() - : null) - .mobilePhoneFrequency(YesOrNo.YES.equals(circumstances.getMobilePhone()) - ? circumstances.getMobilePhoneFrequency() - : null) - .groceryShopping(circumstances.getGroceryShopping()) - .groceryShoppingAmount(YesOrNo.YES.equals(circumstances.getGroceryShopping()) - ? circumstances.getGroceryShoppingAmount() - : null) - .groceryShoppingFrequency(YesOrNo.YES.equals(circumstances.getGroceryShopping()) - ? circumstances.getGroceryShoppingFrequency() - : null) - .fuelParkingTransport(circumstances.getFuelParkingTransport()) - .fuelParkingTransportAmount(YesOrNo.YES.equals(circumstances.getFuelParkingTransport()) - ? circumstances.getFuelParkingTransportAmount() - : null) - .fuelParkingTransportFrequency(YesOrNo.YES.equals(circumstances.getFuelParkingTransport()) - ? circumstances.getFuelParkingTransportFrequency() - : null) - .schoolCosts(circumstances.getSchoolCosts()) - .schoolCostsAmount(YesOrNo.YES.equals(circumstances.getSchoolCosts()) - ? circumstances.getSchoolCostsAmount() - : null) - .schoolCostsFrequency(YesOrNo.YES.equals(circumstances.getSchoolCosts()) - ? circumstances.getSchoolCostsFrequency() - : null) - .clothing(circumstances.getClothing()) - .clothingAmount(YesOrNo.YES.equals(circumstances.getClothing()) - ? circumstances.getClothingAmount() - : null) - .clothingFrequency(YesOrNo.YES.equals(circumstances.getClothing()) - ? circumstances.getClothingFrequency() - : null) - .otherExpenses(circumstances.getOtherExpenses()) - .otherExpensesAmount(YesOrNo.YES.equals(circumstances.getOtherExpenses()) - ? circumstances.getOtherExpensesAmount() - : null) - .otherExpensesFrequency(YesOrNo.YES.equals(circumstances.getOtherExpenses()) - ? circumstances.getOtherExpensesFrequency() - : null).build(); + .dependantChildren(hc.getDependantChildren()) + .householdBills(hc.getHouseholdBills()) + .householdBillsAmount(mapIfYes(hc.getHouseholdBills(), hc.getHouseholdBillsAmount())) + .householdBillsFrequency(mapIfYes(hc.getHouseholdBills(), hc.getHouseholdBillsFrequency())) + .loanPayments(hc.getLoanPayments()) + .loanPaymentsAmount(mapIfYes(hc.getLoanPayments(), hc.getLoanPaymentsAmount())) + .loanPaymentsFrequency(mapIfYes(hc.getLoanPayments(), hc.getLoanPaymentsFrequency())) + .childSpousalMaintenance(hc.getChildSpousalMaintenance()) + .childSpousalMaintenanceAmount(mapIfYes(hc.getChildSpousalMaintenance(), + hc.getChildSpousalMaintenanceAmount())) + .childSpousalMaintenanceFrequency(mapIfYes(hc.getChildSpousalMaintenance(), + hc.getChildSpousalMaintenanceFrequency())) + .mobilePhone(hc.getMobilePhone()) + .mobilePhoneAmount(mapIfYes(hc.getMobilePhone(), hc.getMobilePhoneAmount())) + .mobilePhoneFrequency(mapIfYes(hc.getMobilePhone(), hc.getMobilePhoneFrequency())) + .groceryShopping(hc.getGroceryShopping()) + .groceryShoppingAmount(mapIfYes(hc.getGroceryShopping(), hc.getGroceryShoppingAmount())) + .groceryShoppingFrequency(mapIfYes(hc.getGroceryShopping(), hc.getGroceryShoppingFrequency())) + .fuelParkingTransport(hc.getFuelParkingTransport()) + .fuelParkingTransportAmount(mapIfYes(hc.getFuelParkingTransport(), hc.getFuelParkingTransportAmount())) + .fuelParkingTransportFrequency(mapIfYes(hc.getFuelParkingTransport(),hc.getFuelParkingTransportFrequency())) + .schoolCosts(hc.getSchoolCosts()) + .schoolCostsAmount(mapIfYes(hc.getSchoolCosts(), hc.getSchoolCostsAmount())) + .schoolCostsFrequency(mapIfYes(hc.getSchoolCosts(), hc.getSchoolCostsFrequency())) + .clothing(hc.getClothing()) + .clothingAmount(mapIfYes(hc.getClothing(), hc.getClothingAmount())) + .clothingFrequency(mapIfYes(hc.getClothing(), hc.getClothingFrequency())) + .otherExpenses(hc.getOtherExpenses()) + .otherExpensesAmount(mapIfYes(hc.getOtherExpenses(), hc.getOtherExpensesAmount())) + .otherExpensesFrequency(mapIfYes(hc.getOtherExpenses(), hc.getOtherExpensesFrequency())) + .build(); + } + private T mapIfYes(YesOrNo condition, T value) { + return YesOrNo.YES.equals(condition) ? value : null; } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java index ae104e36f2..2837a26387 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java @@ -10,8 +10,8 @@ import org.junit.jupiter.params.provider.NullSource; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.Frequency; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity; import java.math.BigDecimal; @@ -69,23 +69,23 @@ void shouldMapExpenseAmountsAndFrequenciesWhenAnswerIsYes() { HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances); assertThat(entity.getHouseholdBillsAmount()).isEqualByComparingTo(new BigDecimal("100.00")); - assertThat(entity.getHouseholdBillsFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getHouseholdBillsFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); assertThat(entity.getLoanPaymentsAmount()).isEqualByComparingTo(new BigDecimal("200.00")); - assertThat(entity.getLoanPaymentsFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getLoanPaymentsFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY); assertThat(entity.getChildSpousalMaintenanceAmount()).isEqualByComparingTo(new BigDecimal("300.00")); - assertThat(entity.getChildSpousalMaintenanceFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getChildSpousalMaintenanceFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); assertThat(entity.getMobilePhoneAmount()).isEqualByComparingTo(new BigDecimal("400.00")); - assertThat(entity.getMobilePhoneFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getMobilePhoneFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY); assertThat(entity.getGroceryShoppingAmount()).isEqualByComparingTo(new BigDecimal("500.00")); - assertThat(entity.getGroceryShoppingFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getGroceryShoppingFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); assertThat(entity.getFuelParkingTransportAmount()).isEqualByComparingTo(new BigDecimal("600.00")); - assertThat(entity.getFuelParkingTransportFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getFuelParkingTransportFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY); assertThat(entity.getSchoolCostsAmount()).isEqualByComparingTo(new BigDecimal("700.00")); - assertThat(entity.getSchoolCostsFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getSchoolCostsFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); assertThat(entity.getClothingAmount()).isEqualByComparingTo(new BigDecimal("800.00")); - assertThat(entity.getClothingFrequency()).isEqualTo(Frequency.WEEKLY); + assertThat(entity.getClothingFrequency()).isEqualTo(RecurrenceFrequency.WEEKLY); assertThat(entity.getOtherExpensesAmount()).isEqualByComparingTo(new BigDecimal("900.00")); - assertThat(entity.getOtherExpensesFrequency()).isEqualTo(Frequency.MONTHLY); + assertThat(entity.getOtherExpensesFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); } @ParameterizedTest @@ -120,31 +120,31 @@ private static HouseholdCircumstances buildExpenseFields(YesOrNo answer) { return HouseholdCircumstances.builder() .householdBills(answer) .householdBillsAmount(new BigDecimal("100.00")) - .householdBillsFrequency(Frequency.MONTHLY) + .householdBillsFrequency(RecurrenceFrequency.MONTHLY) .loanPayments(answer) .loanPaymentsAmount(new BigDecimal("200.00")) - .loanPaymentsFrequency(Frequency.WEEKLY) + .loanPaymentsFrequency(RecurrenceFrequency.WEEKLY) .childSpousalMaintenance(answer) .childSpousalMaintenanceAmount(new BigDecimal("300.00")) - .childSpousalMaintenanceFrequency(Frequency.MONTHLY) + .childSpousalMaintenanceFrequency(RecurrenceFrequency.MONTHLY) .mobilePhone(answer) .mobilePhoneAmount(new BigDecimal("400.00")) - .mobilePhoneFrequency(Frequency.WEEKLY) + .mobilePhoneFrequency(RecurrenceFrequency.WEEKLY) .groceryShopping(answer) .groceryShoppingAmount(new BigDecimal("500.00")) - .groceryShoppingFrequency(Frequency.MONTHLY) + .groceryShoppingFrequency(RecurrenceFrequency.MONTHLY) .fuelParkingTransport(answer) .fuelParkingTransportAmount(new BigDecimal("600.00")) - .fuelParkingTransportFrequency(Frequency.WEEKLY) + .fuelParkingTransportFrequency(RecurrenceFrequency.WEEKLY) .schoolCosts(answer) .schoolCostsAmount(new BigDecimal("700.00")) - .schoolCostsFrequency(Frequency.MONTHLY) + .schoolCostsFrequency(RecurrenceFrequency.MONTHLY) .clothing(answer) .clothingAmount(new BigDecimal("800.00")) - .clothingFrequency(Frequency.WEEKLY) + .clothingFrequency(RecurrenceFrequency.WEEKLY) .otherExpenses(answer) .otherExpensesAmount(new BigDecimal("900.00")) - .otherExpensesFrequency(Frequency.MONTHLY) + .otherExpensesFrequency(RecurrenceFrequency.MONTHLY) .build(); } From 98fde95575ea9d617401412145b64b8ff3e63395 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Wed, 1 Apr 2026 16:32:47 +0100 Subject: [PATCH 5/8] HDPI-3769:Dropping old columns --- .../HouseholdCircumstancesEntity.java | 6 ------ .../db/migration/V075__add_regular_expenses_columns.sql | 7 ++++++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java index 0ff5708f36..abd6c85b67 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/respondpossessionclaim/HouseholdCircumstancesEntity.java @@ -102,12 +102,6 @@ public class HouseholdCircumstancesEntity { private String debtContributionFrequency; - private String regularExpenses; - - //Columns to drop - private BigDecimal expenseAmount; - private String expenseFrequency; - @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) private YesOrNo householdBills; diff --git a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql index 6ae0008c88..9f9100ac5a 100644 --- a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql +++ b/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql @@ -33,4 +33,9 @@ ALTER TABLE household_circumstances ADD COLUMN other_expenses YES_NO, ADD COLUMN other_expenses_amount DECIMAL(18,2), - ADD COLUMN other_expenses_frequency VARCHAR(10); + ADD COLUMN other_expenses_frequency VARCHAR(10), + + DROP COLUMN regular_expenses, + DROP COLUMN expense_amount, + DROP COLUMN expense_frequency; + From e2683f8780700a7f0fb6166cff0b512a0f1c20ef Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Thu, 2 Apr 2026 14:28:59 +0100 Subject: [PATCH 6/8] HDPI-3769:Added new domain class for repeated related fields --- .../HouseholdCircumstances.java | 85 ++----------------- .../IncomeExpenseDetails.java | 29 +++++++ .../HouseholdCircumstancesService.java | 74 +++++++++------- .../HouseholdCircumstancesServiceTest.java | 50 +++++------ 4 files changed, 103 insertions(+), 135 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/IncomeExpenseDetails.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java index 3521b11f9b..bfe61a2c07 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/HouseholdCircumstances.java @@ -6,11 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import uk.gov.hmcts.ccd.sdk.api.CCD; -import uk.gov.hmcts.ccd.sdk.type.FieldType; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; -import uk.gov.hmcts.reform.pcs.ccd.annotation.JacksonMoneyGBP; - -import java.math.BigDecimal; @Builder @Data @@ -22,93 +18,30 @@ public class HouseholdCircumstances { private YesOrNo dependantChildren; @CCD - private YesOrNo householdBills; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal householdBillsAmount; - - @CCD - private RecurrenceFrequency householdBillsFrequency; - - @CCD - private YesOrNo loanPayments; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal loanPaymentsAmount; - - @CCD - private RecurrenceFrequency loanPaymentsFrequency; - - @CCD - private YesOrNo childSpousalMaintenance; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal childSpousalMaintenanceAmount; - - @CCD - private RecurrenceFrequency childSpousalMaintenanceFrequency; + private IncomeExpenseDetails householdBills; @CCD - private YesOrNo mobilePhone; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal mobilePhoneAmount; - - @CCD - private RecurrenceFrequency mobilePhoneFrequency; - - @CCD - private YesOrNo groceryShopping; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal groceryShoppingAmount; - - @CCD - private RecurrenceFrequency groceryShoppingFrequency; + private IncomeExpenseDetails loanPayments; @CCD - private YesOrNo fuelParkingTransport; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal fuelParkingTransportAmount; + private IncomeExpenseDetails childSpousalMaintenance; @CCD - private RecurrenceFrequency fuelParkingTransportFrequency; + private IncomeExpenseDetails mobilePhone; @CCD - private YesOrNo schoolCosts; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal schoolCostsAmount; + private IncomeExpenseDetails groceryShopping; @CCD - private RecurrenceFrequency schoolCostsFrequency; + private IncomeExpenseDetails fuelParkingTransport; @CCD - private YesOrNo clothing; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal clothingAmount; + private IncomeExpenseDetails schoolCosts; @CCD - private RecurrenceFrequency clothingFrequency; - - @CCD - private YesOrNo otherExpenses; - - @CCD(typeOverride = FieldType.MoneyGBP) - @JacksonMoneyGBP - private BigDecimal otherExpensesAmount; + private IncomeExpenseDetails clothing; @CCD - private RecurrenceFrequency otherExpensesFrequency; + private IncomeExpenseDetails otherExpenses; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/IncomeExpenseDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/IncomeExpenseDetails.java new file mode 100644 index 0000000000..4d75c71591 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/IncomeExpenseDetails.java @@ -0,0 +1,29 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import uk.gov.hmcts.ccd.sdk.api.CCD; +import uk.gov.hmcts.ccd.sdk.type.FieldType; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.annotation.JacksonMoneyGBP; + +import java.math.BigDecimal; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IncomeExpenseDetails { + + @CCD + private YesOrNo applies; + + @CCD(typeOverride = FieldType.MoneyGBP) + @JacksonMoneyGBP + private BigDecimal amount; + + @CCD + private RecurrenceFrequency frequency; +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index 4d7709a1ed..ebf79b57c1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -15,38 +15,52 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household } return HouseholdCircumstancesEntity.builder() .dependantChildren(hc.getDependantChildren()) - .householdBills(hc.getHouseholdBills()) - .householdBillsAmount(mapIfYes(hc.getHouseholdBills(), hc.getHouseholdBillsAmount())) - .householdBillsFrequency(mapIfYes(hc.getHouseholdBills(), hc.getHouseholdBillsFrequency())) - .loanPayments(hc.getLoanPayments()) - .loanPaymentsAmount(mapIfYes(hc.getLoanPayments(), hc.getLoanPaymentsAmount())) - .loanPaymentsFrequency(mapIfYes(hc.getLoanPayments(), hc.getLoanPaymentsFrequency())) - .childSpousalMaintenance(hc.getChildSpousalMaintenance()) - .childSpousalMaintenanceAmount(mapIfYes(hc.getChildSpousalMaintenance(), - hc.getChildSpousalMaintenanceAmount())) - .childSpousalMaintenanceFrequency(mapIfYes(hc.getChildSpousalMaintenance(), - hc.getChildSpousalMaintenanceFrequency())) - .mobilePhone(hc.getMobilePhone()) - .mobilePhoneAmount(mapIfYes(hc.getMobilePhone(), hc.getMobilePhoneAmount())) - .mobilePhoneFrequency(mapIfYes(hc.getMobilePhone(), hc.getMobilePhoneFrequency())) - .groceryShopping(hc.getGroceryShopping()) - .groceryShoppingAmount(mapIfYes(hc.getGroceryShopping(), hc.getGroceryShoppingAmount())) - .groceryShoppingFrequency(mapIfYes(hc.getGroceryShopping(), hc.getGroceryShoppingFrequency())) - .fuelParkingTransport(hc.getFuelParkingTransport()) - .fuelParkingTransportAmount(mapIfYes(hc.getFuelParkingTransport(), hc.getFuelParkingTransportAmount())) - .fuelParkingTransportFrequency(mapIfYes(hc.getFuelParkingTransport(),hc.getFuelParkingTransportFrequency())) - .schoolCosts(hc.getSchoolCosts()) - .schoolCostsAmount(mapIfYes(hc.getSchoolCosts(), hc.getSchoolCostsAmount())) - .schoolCostsFrequency(mapIfYes(hc.getSchoolCosts(), hc.getSchoolCostsFrequency())) - .clothing(hc.getClothing()) - .clothingAmount(mapIfYes(hc.getClothing(), hc.getClothingAmount())) - .clothingFrequency(mapIfYes(hc.getClothing(), hc.getClothingFrequency())) - .otherExpenses(hc.getOtherExpenses()) - .otherExpensesAmount(mapIfYes(hc.getOtherExpenses(), hc.getOtherExpensesAmount())) - .otherExpensesFrequency(mapIfYes(hc.getOtherExpenses(), hc.getOtherExpensesFrequency())) + + .householdBills(hc.getHouseholdBills().getApplies()) + .householdBillsAmount(mapIfYes(hc.getHouseholdBills().getApplies(), hc.getHouseholdBills().getAmount())) + .householdBillsFrequency(mapIfYes(hc.getHouseholdBills().getApplies(), + hc.getHouseholdBills().getFrequency())) + .loanPayments(hc.getLoanPayments().getApplies()) + .loanPaymentsAmount(mapIfYes(hc.getLoanPayments().getApplies(), hc.getLoanPayments().getAmount())) + .loanPaymentsFrequency(mapIfYes(hc.getLoanPayments().getApplies(), hc.getLoanPayments().getFrequency())) + .childSpousalMaintenance(hc.getChildSpousalMaintenance().getApplies()) + .childSpousalMaintenanceAmount(mapIfYes(hc.getChildSpousalMaintenance().getApplies(), + hc.getChildSpousalMaintenance().getAmount())) + .childSpousalMaintenanceFrequency(mapIfYes(hc.getChildSpousalMaintenance().getApplies(), + hc.getChildSpousalMaintenance().getFrequency())) + .mobilePhone(hc.getMobilePhone().getApplies()) + .mobilePhoneAmount(mapIfYes(hc.getMobilePhone().getApplies(), + hc.getMobilePhone().getAmount())) + .mobilePhoneFrequency(mapIfYes(hc.getMobilePhone().getApplies(), + hc.getMobilePhone().getFrequency())) + .groceryShopping(hc.getGroceryShopping().getApplies()) + .groceryShoppingAmount(mapIfYes(hc.getGroceryShopping().getApplies(), + hc.getGroceryShopping().getAmount())) + .groceryShoppingFrequency(mapIfYes(hc.getGroceryShopping().getApplies(), + hc.getGroceryShopping().getFrequency())) + .fuelParkingTransport(hc.getFuelParkingTransport().getApplies()) + .fuelParkingTransportAmount(mapIfYes(hc.getFuelParkingTransport().getApplies(), + hc.getFuelParkingTransport().getAmount())) + .fuelParkingTransportFrequency(mapIfYes(hc.getFuelParkingTransport().getApplies(), + hc.getFuelParkingTransport().getFrequency())) + .schoolCosts(hc.getSchoolCosts().getApplies()) + .schoolCostsAmount(mapIfYes(hc.getSchoolCosts().getApplies(), + hc.getSchoolCosts().getAmount())) + .schoolCostsFrequency(mapIfYes(hc.getSchoolCosts().getApplies(), + hc.getSchoolCosts().getFrequency())) + .clothing(hc.getClothing().getApplies()) + .clothingAmount(mapIfYes(hc.getClothing().getApplies(), + hc.getClothing().getAmount())) + .clothingFrequency(mapIfYes(hc.getClothing().getApplies(), + hc.getClothing().getFrequency())) + .otherExpenses(hc.getOtherExpenses().getApplies()) + .otherExpensesAmount(mapIfYes(hc.getOtherExpenses().getApplies(), + hc.getOtherExpenses().getAmount())) + .otherExpensesFrequency(mapIfYes(hc.getOtherExpenses().getApplies(), + hc.getOtherExpenses().getFrequency())) + .build(); } - private T mapIfYes(YesOrNo condition, T value) { return YesOrNo.YES.equals(condition) ? value : null; } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java index 2837a26387..b916c120f4 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesServiceTest.java @@ -11,6 +11,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.IncomeExpenseDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity; @@ -66,7 +67,8 @@ void shouldReturnNullWhenHouseholdCircumstancesIsNull() { void shouldMapExpenseAmountsAndFrequenciesWhenAnswerIsYes() { HouseholdCircumstances householdCircumstances = buildExpenseFields(YesOrNo.YES); - HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances); + HouseholdCircumstancesEntity entity = + underTest.createHouseholdCircumstancesEntity(householdCircumstances); assertThat(entity.getHouseholdBillsAmount()).isEqualByComparingTo(new BigDecimal("100.00")); assertThat(entity.getHouseholdBillsFrequency()).isEqualTo(RecurrenceFrequency.MONTHLY); @@ -94,7 +96,8 @@ void shouldMapExpenseAmountsAndFrequenciesWhenAnswerIsYes() { void shouldNotMapExpenseAmountsAndFrequenciesWhenAnswerIsNotYes(YesOrNo answer) { HouseholdCircumstances householdCircumstances = buildExpenseFields(answer); - HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances); + HouseholdCircumstancesEntity entity = + underTest.createHouseholdCircumstancesEntity(householdCircumstances); assertThat(entity.getHouseholdBillsAmount()).isNull(); assertThat(entity.getHouseholdBillsFrequency()).isNull(); @@ -118,35 +121,24 @@ void shouldNotMapExpenseAmountsAndFrequenciesWhenAnswerIsNotYes(YesOrNo answer) private static HouseholdCircumstances buildExpenseFields(YesOrNo answer) { return HouseholdCircumstances.builder() - .householdBills(answer) - .householdBillsAmount(new BigDecimal("100.00")) - .householdBillsFrequency(RecurrenceFrequency.MONTHLY) - .loanPayments(answer) - .loanPaymentsAmount(new BigDecimal("200.00")) - .loanPaymentsFrequency(RecurrenceFrequency.WEEKLY) - .childSpousalMaintenance(answer) - .childSpousalMaintenanceAmount(new BigDecimal("300.00")) - .childSpousalMaintenanceFrequency(RecurrenceFrequency.MONTHLY) - .mobilePhone(answer) - .mobilePhoneAmount(new BigDecimal("400.00")) - .mobilePhoneFrequency(RecurrenceFrequency.WEEKLY) - .groceryShopping(answer) - .groceryShoppingAmount(new BigDecimal("500.00")) - .groceryShoppingFrequency(RecurrenceFrequency.MONTHLY) - .fuelParkingTransport(answer) - .fuelParkingTransportAmount(new BigDecimal("600.00")) - .fuelParkingTransportFrequency(RecurrenceFrequency.WEEKLY) - .schoolCosts(answer) - .schoolCostsAmount(new BigDecimal("700.00")) - .schoolCostsFrequency(RecurrenceFrequency.MONTHLY) - .clothing(answer) - .clothingAmount(new BigDecimal("800.00")) - .clothingFrequency(RecurrenceFrequency.WEEKLY) - .otherExpenses(answer) - .otherExpensesAmount(new BigDecimal("900.00")) - .otherExpensesFrequency(RecurrenceFrequency.MONTHLY) + .householdBills(buildExpense(answer, "100.00", RecurrenceFrequency.MONTHLY)) + .loanPayments(buildExpense(answer, "200.00", RecurrenceFrequency.WEEKLY)) + .childSpousalMaintenance(buildExpense(answer, "300.00", RecurrenceFrequency.MONTHLY)) + .mobilePhone(buildExpense(answer, "400.00", RecurrenceFrequency.WEEKLY)) + .groceryShopping(buildExpense(answer, "500.00", RecurrenceFrequency.MONTHLY)) + .fuelParkingTransport(buildExpense(answer, "600.00", RecurrenceFrequency.WEEKLY)) + .schoolCosts(buildExpense(answer, "700.00", RecurrenceFrequency.MONTHLY)) + .clothing(buildExpense(answer, "800.00", RecurrenceFrequency.WEEKLY)) + .otherExpenses(buildExpense(answer, "900.00", RecurrenceFrequency.MONTHLY)) .build(); } + private static IncomeExpenseDetails buildExpense(YesOrNo applies, String amount, RecurrenceFrequency frequency) { + return IncomeExpenseDetails.builder() + .applies(applies) + .amount(new BigDecimal(amount)) + .frequency(frequency) + .build(); + } } From e1a2a0fd58f6cc77e8a1f9d33931ebdcf23382a4 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Thu, 2 Apr 2026 15:17:15 +0100 Subject: [PATCH 7/8] HDPI-3769:Minor refactoring of service --- .../HouseholdCircumstancesService.java | 86 +++++++++---------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java index ebf79b57c1..a76d3bbda7 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/HouseholdCircumstancesService.java @@ -3,8 +3,12 @@ import org.springframework.stereotype.Service; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.IncomeExpenseDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.RecurrenceFrequency; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity; +import java.math.BigDecimal; + @Service public class HouseholdCircumstancesService { @@ -15,53 +19,45 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household } return HouseholdCircumstancesEntity.builder() .dependantChildren(hc.getDependantChildren()) + .householdBills(getApplies(hc.getHouseholdBills())) + .householdBillsAmount(getAmountIfYes(hc.getHouseholdBills())) + .householdBillsFrequency(getFrequencyIfYes(hc.getHouseholdBills())) + .loanPayments(getApplies(hc.getLoanPayments())) + .loanPaymentsAmount(getAmountIfYes(hc.getLoanPayments())) + .loanPaymentsFrequency(getFrequencyIfYes(hc.getLoanPayments())) + .childSpousalMaintenance(getApplies(hc.getChildSpousalMaintenance())) + .childSpousalMaintenanceAmount(getAmountIfYes(hc.getChildSpousalMaintenance())) + .childSpousalMaintenanceFrequency(getFrequencyIfYes(hc.getChildSpousalMaintenance())) + .mobilePhone(getApplies(hc.getMobilePhone())) + .mobilePhoneAmount(getAmountIfYes(hc.getMobilePhone())) + .mobilePhoneFrequency(getFrequencyIfYes(hc.getMobilePhone())) + .groceryShopping(getApplies(hc.getGroceryShopping())) + .groceryShoppingAmount(getAmountIfYes(hc.getGroceryShopping())) + .groceryShoppingFrequency(getFrequencyIfYes(hc.getGroceryShopping())) + .fuelParkingTransport(getApplies(hc.getFuelParkingTransport())) + .fuelParkingTransportAmount(getAmountIfYes(hc.getFuelParkingTransport())) + .fuelParkingTransportFrequency(getFrequencyIfYes(hc.getFuelParkingTransport())) + .schoolCosts(getApplies(hc.getSchoolCosts())) + .schoolCostsAmount(getAmountIfYes(hc.getSchoolCosts())) + .schoolCostsFrequency(getFrequencyIfYes(hc.getSchoolCosts())) + .clothing(getApplies(hc.getClothing())) + .clothingAmount(getAmountIfYes(hc.getClothing())) + .clothingFrequency(getFrequencyIfYes(hc.getClothing())) + .otherExpenses(getApplies(hc.getOtherExpenses())) + .otherExpensesAmount(getAmountIfYes(hc.getOtherExpenses())) + .otherExpensesFrequency(getFrequencyIfYes(hc.getOtherExpenses())) + .build(); + } - .householdBills(hc.getHouseholdBills().getApplies()) - .householdBillsAmount(mapIfYes(hc.getHouseholdBills().getApplies(), hc.getHouseholdBills().getAmount())) - .householdBillsFrequency(mapIfYes(hc.getHouseholdBills().getApplies(), - hc.getHouseholdBills().getFrequency())) - .loanPayments(hc.getLoanPayments().getApplies()) - .loanPaymentsAmount(mapIfYes(hc.getLoanPayments().getApplies(), hc.getLoanPayments().getAmount())) - .loanPaymentsFrequency(mapIfYes(hc.getLoanPayments().getApplies(), hc.getLoanPayments().getFrequency())) - .childSpousalMaintenance(hc.getChildSpousalMaintenance().getApplies()) - .childSpousalMaintenanceAmount(mapIfYes(hc.getChildSpousalMaintenance().getApplies(), - hc.getChildSpousalMaintenance().getAmount())) - .childSpousalMaintenanceFrequency(mapIfYes(hc.getChildSpousalMaintenance().getApplies(), - hc.getChildSpousalMaintenance().getFrequency())) - .mobilePhone(hc.getMobilePhone().getApplies()) - .mobilePhoneAmount(mapIfYes(hc.getMobilePhone().getApplies(), - hc.getMobilePhone().getAmount())) - .mobilePhoneFrequency(mapIfYes(hc.getMobilePhone().getApplies(), - hc.getMobilePhone().getFrequency())) - .groceryShopping(hc.getGroceryShopping().getApplies()) - .groceryShoppingAmount(mapIfYes(hc.getGroceryShopping().getApplies(), - hc.getGroceryShopping().getAmount())) - .groceryShoppingFrequency(mapIfYes(hc.getGroceryShopping().getApplies(), - hc.getGroceryShopping().getFrequency())) - .fuelParkingTransport(hc.getFuelParkingTransport().getApplies()) - .fuelParkingTransportAmount(mapIfYes(hc.getFuelParkingTransport().getApplies(), - hc.getFuelParkingTransport().getAmount())) - .fuelParkingTransportFrequency(mapIfYes(hc.getFuelParkingTransport().getApplies(), - hc.getFuelParkingTransport().getFrequency())) - .schoolCosts(hc.getSchoolCosts().getApplies()) - .schoolCostsAmount(mapIfYes(hc.getSchoolCosts().getApplies(), - hc.getSchoolCosts().getAmount())) - .schoolCostsFrequency(mapIfYes(hc.getSchoolCosts().getApplies(), - hc.getSchoolCosts().getFrequency())) - .clothing(hc.getClothing().getApplies()) - .clothingAmount(mapIfYes(hc.getClothing().getApplies(), - hc.getClothing().getAmount())) - .clothingFrequency(mapIfYes(hc.getClothing().getApplies(), - hc.getClothing().getFrequency())) - .otherExpenses(hc.getOtherExpenses().getApplies()) - .otherExpensesAmount(mapIfYes(hc.getOtherExpenses().getApplies(), - hc.getOtherExpenses().getAmount())) - .otherExpensesFrequency(mapIfYes(hc.getOtherExpenses().getApplies(), - hc.getOtherExpenses().getFrequency())) + private YesOrNo getApplies(IncomeExpenseDetails details) { + return details != null ? details.getApplies() : null; + } - .build(); + private BigDecimal getAmountIfYes(IncomeExpenseDetails details) { + return details != null && YesOrNo.YES.equals(details.getApplies()) ? details.getAmount() : null; } - private T mapIfYes(YesOrNo condition, T value) { - return YesOrNo.YES.equals(condition) ? value : null; + + private RecurrenceFrequency getFrequencyIfYes(IncomeExpenseDetails details) { + return details != null && YesOrNo.YES.equals(details.getApplies()) ? details.getFrequency() : null; } } From 1f2f447ff0d6a67a8d6c65a031a8df7e8973d102 Mon Sep 17 00:00:00 2001 From: Liban Abdirahman Date: Thu, 2 Apr 2026 15:20:49 +0100 Subject: [PATCH 8/8] HDPI-3769:Updating migration script numbers post merge --- ...d_sizes.sql => V075__alter_statement_of_truth_field_sizes.sql} | 0 ...xpenses_columns.sql => V076__add_regular_expenses_columns.sql} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V073__alter_statement_of_truth_field_sizes.sql => V075__alter_statement_of_truth_field_sizes.sql} (100%) rename src/main/resources/db/migration/{V075__add_regular_expenses_columns.sql => V076__add_regular_expenses_columns.sql} (100%) diff --git a/src/main/resources/db/migration/V073__alter_statement_of_truth_field_sizes.sql b/src/main/resources/db/migration/V075__alter_statement_of_truth_field_sizes.sql similarity index 100% rename from src/main/resources/db/migration/V073__alter_statement_of_truth_field_sizes.sql rename to src/main/resources/db/migration/V075__alter_statement_of_truth_field_sizes.sql diff --git a/src/main/resources/db/migration/V075__add_regular_expenses_columns.sql b/src/main/resources/db/migration/V076__add_regular_expenses_columns.sql similarity index 100% rename from src/main/resources/db/migration/V075__add_regular_expenses_columns.sql rename to src/main/resources/db/migration/V076__add_regular_expenses_columns.sql