From da865ce86d1e16613110b6a93c05e96ac61105a5 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Fri, 20 Feb 2026 14:47:53 +0000 Subject: [PATCH] CLDC-4143: Update gender-related validations (#3183) * CLDC-4143: Update gender retirement validations rename functions as the new wording is more related to those that identify as male and any other option * CLDC-4143: Add 2026 tests * CLDC-4143: Update legacy json files causes issues with some old tests * CLDC-4143: Add error mappings for gender fields * CLDC-4143: Add new gender age retirement soft validation replaces the many check pages from previous years with a single one shows if either of the previous ones would show has agreed wording on ticket * fixup! CLDC-4143: Update gender retirement validations improve gender comment wording * CLDC-4143: Update non males validation name reference to 'soft validation' we found confusing * fixup! CLDC-4143: Add new gender age retirement soft validation update subsection specs --- ...pregnant_household_lead_age_value_check.rb | 2 +- ...gnant_household_lead_hhmemb_value_check.rb | 2 +- ..._in_pregnant_household_lead_value_check.rb | 2 +- ...egnant_household_person_age_value_check.rb | 2 +- ...n_pregnant_household_person_value_check.rb | 2 +- ...range_in_pregnant_household_value_check.rb | 2 +- ...hold_member_likely_to_be_pregnant_check.rb | 24 ++ .../subsections/household_characteristics.rb | 25 +- .../lettings/subsections/household_needs.rb | 5 +- app/models/validations/soft_validations.rb | 91 +++-- .../lettings/year2026/row_parser.rb | 16 + config/forms/2021_2022.json | 36 +- config/forms/2022_2023.json | 36 +- .../2026/lettings/soft_validations.en.yml | 4 +- ...t_household_person_age_value_check_spec.rb | 4 +- ...gnant_household_person_value_check_spec.rb | 4 +- .../household_characteristics_spec.rb | 51 +-- .../subsections/household_needs_spec.rb | 3 +- .../validations/soft_validations_spec.rb | 330 ++++++++++++++---- .../lettings/year2026/row_parser_spec.rb | 14 +- 20 files changed, 454 insertions(+), 201 deletions(-) create mode 100644 app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb index 5b06d6a28..24f836d04 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValu super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_age_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb index 3e961b283..c786afe56 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembV super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb index af568b039..bb3670c74 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCh super @id = "females_in_soft_age_range_in_pregnant_household_lead_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb index ddc8789f9..cfd035ac3 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb @@ -5,7 +5,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeVa @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, "age#{person_index}_known" => 0, }, ] diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb index 099bea5d9..de1fb5fc9 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb @@ -6,7 +6,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValue @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, "details_known_#{person_index}" => 0, }, ] diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb index 3822ec940..66603753e 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck super @id = "females_in_soft_age_range_in_pregnant_household_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_not_in_pregnancy_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], diff --git a/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb new file mode 100644 index 000000000..cefb98ceb --- /dev/null +++ b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb @@ -0,0 +1,24 @@ +class Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck < ::Form::Page + def initialize(id, hsh, subsection, person_index: 0) + super(id, hsh, subsection) + @copy_key = "lettings.soft_validations.pregnancy_value_check.no_household_member_likely_to_be_pregnant_check" + @depends_on = [{ "no_household_member_likely_to_be_pregnant?" => true }] + @title_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", + "arguments" => [], + } + @informative_text = { + "translation" => "forms.#{form.start_date.year}.#{@copy_key}.informative_text", + "arguments" => [], + } + @person_index = person_index + end + + def questions + @questions ||= [Form::Lettings::Questions::PregnancyValueCheck.new(nil, nil, self, person_index: @person_index)] + end + + def interruption_screen_question_ids + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + end +end diff --git a/app/models/form/lettings/subsections/household_characteristics.rb b/app/models/form/lettings/subsections/household_characteristics.rb index d528e3772..ab8e639bc 100644 --- a/app/models/form/lettings/subsections/household_characteristics.rb +++ b/app/models/form/lettings/subsections/household_characteristics.rb @@ -10,18 +10,21 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection @pages ||= [ (Form::Lettings::Pages::Declaration.new(nil, nil, self) unless form.start_year_2024_or_later?), Form::Lettings::Pages::HouseholdMembers.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_hhmemb_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantAge.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_age_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantUnderRetirementValueCheck.new("age_lead_tenant_under_retirement_value_check", nil, self), Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("age_lead_tenant_over_retirement_value_check", nil, self), (Form::Lettings::Pages::LeadTenantSexRegisteredAtBirth.new(nil, nil, self) if form.start_year_2026_or_later?), (Form::Lettings::Pages::LeadTenantGenderSameAsSex.new(nil, nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantGenderIdentity.new(nil, nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_check", nil, self, person_index: 1) if form.start_year_2026_or_later?), Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("gender_lead_tenant_over_retirement_value_check", nil, self), Form::Lettings::Pages::LeadTenantEthnicGroup.new(nil, nil, self), Form::Lettings::Pages::LeadTenantEthnicBackgroundArab.new(nil, nil, self), @@ -52,16 +55,18 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection (Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?), (Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_#{person_index}_multiple_partners_value_check", nil, self, person_index:) if form.start_year_2024_or_later?), (Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), - Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_age_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?), Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_#{person_index}_under_retirement_value_check", nil, self, person_index:), Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_#{person_index}_over_retirement_value_check", nil, self, person_index:), (Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?), (Form::Lettings::Pages::PersonSexRegisteredAtBirth.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?), (Form::Lettings::Pages::PersonGenderSameAsSex.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?), Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index:), - Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?), Form::Lettings::Pages::PersonOverRetirementValueCheck.new("gender_#{person_index}_over_retirement_value_check", nil, self, person_index:), Form::Lettings::Pages::PersonWorkingSituation.new(nil, nil, self, person_index:), Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("working_situation_#{person_index}_under_retirement_value_check", nil, self, person_index:), diff --git a/app/models/form/lettings/subsections/household_needs.rb b/app/models/form/lettings/subsections/household_needs.rb index e0502386b..4f6414d18 100644 --- a/app/models/form/lettings/subsections/household_needs.rb +++ b/app/models/form/lettings/subsections/household_needs.rb @@ -12,8 +12,9 @@ class Form::Lettings::Subsections::HouseholdNeeds < ::Form::Subsection Form::Lettings::Pages::ArmedForcesServing.new(nil, nil, self), Form::Lettings::Pages::ArmedForcesInjured.new(nil, nil, self), Form::Lettings::Pages::Pregnant.new("pregnant", nil, self), - Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self), - Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self), + (Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?), + (Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_check", nil, self) if form.start_year_2026_or_later?), Form::Lettings::Pages::AccessNeedsExist.new("access_needs_exist", nil, self), Form::Lettings::Pages::TypeOfAccessNeeds.new(nil, nil, self), Form::Lettings::Pages::HealthConditions.new("health_conditions", nil, self), diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 35436dc32..662aa9af6 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -75,30 +75,16 @@ module Validations::SoftValidations end end - def all_male_tenants_in_a_pregnant_household? - all_male_tenants_in_the_household? && all_tenants_gender_information_completed? && preg_occ == 1 - end - - def female_in_pregnant_household_in_soft_validation_range? - all_tenants_age_and_gender_information_completed? && females_in_the_household? && !females_in_age_range(16, 50) && preg_occ == 1 + def no_household_member_likely_to_be_pregnant? + all_male_tenants_in_a_pregnant_household? || non_males_in_pregnant_household_not_in_pregnancy_range? end - def all_tenants_age_and_gender_information_completed? - return false if hhmemb.present? && hhmemb > 8 - - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? - end + def all_male_tenants_in_a_pregnant_household? + all_tenants_gender_information_completed? && all_male_tenants_in_the_household? && preg_occ == 1 end - def all_tenants_gender_information_completed? - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && details_known_or_lead_tenant?(n) - end + def non_males_in_pregnant_household_not_in_pregnancy_range? + all_tenants_age_and_gender_information_completed? && non_males_in_the_household? && !any_non_male_in_expected_pregnancy_age_range(16, 50) && preg_occ == 1 end TWO_YEARS_IN_DAYS = 730 @@ -221,25 +207,54 @@ module Validations::SoftValidations private + def all_tenants_age_and_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + return false unless all_tenants_gender_information_completed? + + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + public_send("age#{n}").present? && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? + end + end + + def all_tenants_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + tenant_gender_information_completed?(n) + end + end + + def tenant_gender_information_completed?(tenant_number) + if form.start_year_2026_or_later? + public_send("sexrab#{tenant_number}").present? && public_send("gender_same_as_sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + else + public_send("sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + end + end + def details_known_or_lead_tenant?(tenant_number) return true if tenant_number == 1 public_send("details_known_#{tenant_number}").zero? end - def females_in_age_range(min, max) + def any_non_male_in_expected_pregnancy_age_range(min, max) person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" && public_send("age#{n}").present? && public_send("age#{n}").between?(min, max) + person_in_expected_pregnancy_age_range(n, min, max) && person_is_non_male(n) end end - def females_in_the_household? + def non_males_in_the_household? person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" || public_send("sex#{n}").nil? + person_is_non_male(n) end end @@ -249,10 +264,36 @@ private person_count = hhmemb || 8 (1..person_count).all? do |n| - public_send("sex#{n}") == "M" + person_is_male(n) + end + end + + def person_is_male(person_number) + if form.start_year_2026_or_later? + sexrab = public_send("sexrab#{person_number}") + gender_same_as_sex = public_send("gender_same_as_sex#{person_number}") + + sexrab == "M" && gender_same_as_sex == 1 + else + public_send("sex#{person_number}") == "M" end end + def person_is_non_male(person_number) + if form.start_year_2026_or_later? + !person_is_male(person_number) + else + # the "non-male" wording was introduced in the 26/27 collection year, before that this behavior was limited to female gender only + public_send("sex#{person_number}") == "F" + end + end + + def person_in_expected_pregnancy_age_range(person_number, min, max) + age = public_send("age#{person_number}") + + age.between?(min, max) + end + def tenant_is_retired?(economic_status) economic_status == 5 end diff --git a/app/services/bulk_upload/lettings/year2026/row_parser.rb b/app/services/bulk_upload/lettings/year2026/row_parser.rb index 80f31e0f7..5930f75fd 100644 --- a/app/services/bulk_upload/lettings/year2026/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2026/row_parser.rb @@ -1263,6 +1263,22 @@ private sexrab6: %i[field_135], sexrab7: %i[field_136], sexrab8: %i[field_137], + gender_same_as_sex1: %i[field_138], + gender_same_as_sex2: %i[field_140], + gender_same_as_sex3: %i[field_142], + gender_same_as_sex4: %i[field_144], + gender_same_as_sex5: %i[field_146], + gender_same_as_sex6: %i[field_148], + gender_same_as_sex7: %i[field_150], + gender_same_as_sex8: %i[field_152], + gender_description1: %i[field_139], + gender_description2: %i[field_141], + gender_description3: %i[field_143], + gender_description4: %i[field_145], + gender_description5: %i[field_147], + gender_description6: %i[field_149], + gender_description7: %i[field_151], + gender_description8: %i[field_153], }.compact end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index ac615b0e2..9ed728cda 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -1213,7 +1213,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -1355,7 +1355,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -1476,7 +1476,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -2135,7 +2135,7 @@ "females_in_soft_age_range_in_pregnant_household_person_2_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age2_known": 0 } ], @@ -2258,7 +2258,7 @@ "females_in_soft_age_range_in_pregnant_household_person_2_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_2": 0 } ], @@ -2670,7 +2670,7 @@ "females_in_soft_age_range_in_pregnant_household_person_3_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age3_known": 0 } ], @@ -2793,7 +2793,7 @@ "females_in_soft_age_range_in_pregnant_household_person_3_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_3": 0 } ], @@ -3202,7 +3202,7 @@ "females_in_soft_age_range_in_pregnant_household_person_4_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age4_known": 0 } ], @@ -3325,7 +3325,7 @@ "females_in_soft_age_range_in_pregnant_household_person_4_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_4": 0 } ], @@ -3731,7 +3731,7 @@ "females_in_soft_age_range_in_pregnant_household_person_5_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age5_known": 0 } ], @@ -3854,7 +3854,7 @@ "females_in_soft_age_range_in_pregnant_household_person_5_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_5": 0 } ], @@ -4257,7 +4257,7 @@ "females_in_soft_age_range_in_pregnant_household_person_6_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age6_known": 0 } ], @@ -4380,7 +4380,7 @@ "females_in_soft_age_range_in_pregnant_household_person_6_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_6": 0 } ], @@ -4780,7 +4780,7 @@ "females_in_soft_age_range_in_pregnant_household_person_7_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age7_known": 0 } ], @@ -4903,7 +4903,7 @@ "females_in_soft_age_range_in_pregnant_household_person_7_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_7": 0 } ], @@ -5300,7 +5300,7 @@ "females_in_soft_age_range_in_pregnant_household_person_8_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age8_known": 0 } ], @@ -5423,7 +5423,7 @@ "females_in_soft_age_range_in_pregnant_household_person_8_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_8": 0 } ], @@ -5837,7 +5837,7 @@ "females_in_soft_age_range_in_pregnant_household_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { diff --git a/config/forms/2022_2023.json b/config/forms/2022_2023.json index 7d6f44b20..0fa982dd4 100644 --- a/config/forms/2022_2023.json +++ b/config/forms/2022_2023.json @@ -1254,7 +1254,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -1426,7 +1426,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -1577,7 +1577,7 @@ "females_in_soft_age_range_in_pregnant_household_lead_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { @@ -2218,7 +2218,7 @@ "females_in_soft_age_range_in_pregnant_household_person_2_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age2_known": 0 } ], @@ -2371,7 +2371,7 @@ "females_in_soft_age_range_in_pregnant_household_person_2_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_2": 0 } ], @@ -2801,7 +2801,7 @@ "females_in_soft_age_range_in_pregnant_household_person_3_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age3_known": 0 } ], @@ -2954,7 +2954,7 @@ "females_in_soft_age_range_in_pregnant_household_person_3_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_3": 0 } ], @@ -3381,7 +3381,7 @@ "females_in_soft_age_range_in_pregnant_household_person_4_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age4_known": 0 } ], @@ -3534,7 +3534,7 @@ "females_in_soft_age_range_in_pregnant_household_person_4_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_4": 0 } ], @@ -3958,7 +3958,7 @@ "females_in_soft_age_range_in_pregnant_household_person_5_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age5_known": 0 } ], @@ -4111,7 +4111,7 @@ "females_in_soft_age_range_in_pregnant_household_person_5_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_5": 0 } ], @@ -4532,7 +4532,7 @@ "females_in_soft_age_range_in_pregnant_household_person_6_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age6_known": 0 } ], @@ -4685,7 +4685,7 @@ "females_in_soft_age_range_in_pregnant_household_person_6_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_6": 0 } ], @@ -5103,7 +5103,7 @@ "females_in_soft_age_range_in_pregnant_household_person_7_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age7_known": 0 } ], @@ -5256,7 +5256,7 @@ "females_in_soft_age_range_in_pregnant_household_person_7_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_7": 0 } ], @@ -5671,7 +5671,7 @@ "females_in_soft_age_range_in_pregnant_household_person_8_age_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "age8_known": 0 } ], @@ -5824,7 +5824,7 @@ "females_in_soft_age_range_in_pregnant_household_person_8_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true, + "non_males_in_pregnant_household_not_in_pregnancy_range?": true, "details_known_8": 0 } ], @@ -6259,7 +6259,7 @@ "females_in_soft_age_range_in_pregnant_household_value_check": { "depends_on": [ { - "female_in_pregnant_household_in_soft_validation_range?": true + "non_males_in_pregnant_household_not_in_pregnancy_range?": true } ], "title_text": { diff --git a/config/locales/forms/2026/lettings/soft_validations.en.yml b/config/locales/forms/2026/lettings/soft_validations.en.yml index 5a1d7d1a3..74e7af46f 100644 --- a/config/locales/forms/2026/lettings/soft_validations.en.yml +++ b/config/locales/forms/2026/lettings/soft_validations.en.yml @@ -12,14 +12,14 @@ en: question_text: "Are you sure this is correct?" title_text: "You told us somebody in the household is pregnant." informative_text: "You also told us that all the tenants living at the property are male." - females_in_soft_age_range_in_pregnant_household_value_check: + no_household_member_likely_to_be_pregnant_check: page_header: "" check_answer_label: "Pregnancy confirmation" check_answer_prompt: "Confirm pregnancy status" hint_text: "" question_text: "Are you sure this is correct?" title_text: "You told us somebody in the household is pregnant." - informative_text: "You also told us that any female tenants living at the property are in the following age ranges:" + informative_text: "Your answers for the age, sex and gender of each household member suggest there is no household member who is likely to be pregnant." no_retirement_value_check: page_header: "" diff --git a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb index 865fc6fd2..7432b0bda 100644 --- a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb +++ b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb @@ -29,7 +29,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "age2_known" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, }, ], ) @@ -62,7 +62,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "age3_known" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, }, ], ) diff --git a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb index 8ce2e5451..96570ee09 100644 --- a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb +++ b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb @@ -29,7 +29,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "details_known_2" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, }, ], ) @@ -62,7 +62,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "details_known_3" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_not_in_pregnancy_range?" => true, }, ], ) diff --git a/spec/models/form/lettings/subsections/household_characteristics_spec.rb b/spec/models/form/lettings/subsections/household_characteristics_spec.rb index 11df2b8d7..c33d271c5 100644 --- a/spec/models/form/lettings/subsections/household_characteristics_spec.rb +++ b/spec/models/form/lettings/subsections/household_characteristics_spec.rb @@ -339,18 +339,15 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod expect(household_characteristics.pages.map(&:id)).to eq( %w[ household_members - no_females_pregnant_household_lead_hhmemb_value_check - females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check + no_household_member_likely_to_be_pregnant_hhmemb_check lead_tenant_age - no_females_pregnant_household_lead_age_value_check - females_in_soft_age_range_in_pregnant_household_lead_age_value_check + no_household_member_likely_to_be_pregnant_lead_age_check age_lead_tenant_under_retirement_value_check age_lead_tenant_over_retirement_value_check lead_tenant_sex_registered_at_birth lead_tenant_gender_same_as_sex lead_tenant_gender_identity - no_females_pregnant_household_lead_value_check - females_in_soft_age_range_in_pregnant_household_lead_value_check + no_household_member_likely_to_be_pregnant_lead_check gender_lead_tenant_over_retirement_value_check lead_tenant_ethnic_group lead_tenant_ethnic_background_arab @@ -367,15 +364,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_2_age person_2_lead_partner relationship_2_multiple_partners_value_check - no_females_pregnant_household_person_2_age_value_check - females_in_soft_age_range_in_pregnant_household_person_2_age_value_check + no_household_member_likely_to_be_pregnant_person_age_2_check age_2_under_retirement_value_check age_2_over_retirement_value_check person_2_sex_registered_at_birth person_2_gender_same_as_sex person_2_gender_identity - no_females_pregnant_household_person_2_value_check - females_in_soft_age_range_in_pregnant_household_person_2_value_check + no_household_member_likely_to_be_pregnant_person_2_check gender_2_over_retirement_value_check person_2_working_situation working_situation_2_under_retirement_value_check @@ -385,15 +380,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_3_age person_3_lead_partner relationship_3_multiple_partners_value_check - no_females_pregnant_household_person_3_age_value_check - females_in_soft_age_range_in_pregnant_household_person_3_age_value_check + no_household_member_likely_to_be_pregnant_person_age_3_check age_3_under_retirement_value_check age_3_over_retirement_value_check person_3_sex_registered_at_birth person_3_gender_same_as_sex person_3_gender_identity - no_females_pregnant_household_person_3_value_check - females_in_soft_age_range_in_pregnant_household_person_3_value_check + no_household_member_likely_to_be_pregnant_person_3_check gender_3_over_retirement_value_check person_3_working_situation working_situation_3_under_retirement_value_check @@ -403,15 +396,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_4_age person_4_lead_partner relationship_4_multiple_partners_value_check - no_females_pregnant_household_person_4_age_value_check - females_in_soft_age_range_in_pregnant_household_person_4_age_value_check + no_household_member_likely_to_be_pregnant_person_age_4_check age_4_under_retirement_value_check age_4_over_retirement_value_check person_4_sex_registered_at_birth person_4_gender_same_as_sex person_4_gender_identity - no_females_pregnant_household_person_4_value_check - females_in_soft_age_range_in_pregnant_household_person_4_value_check + no_household_member_likely_to_be_pregnant_person_4_check gender_4_over_retirement_value_check person_4_working_situation working_situation_4_under_retirement_value_check @@ -421,15 +412,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_5_age person_5_lead_partner relationship_5_multiple_partners_value_check - no_females_pregnant_household_person_5_age_value_check - females_in_soft_age_range_in_pregnant_household_person_5_age_value_check + no_household_member_likely_to_be_pregnant_person_age_5_check age_5_under_retirement_value_check age_5_over_retirement_value_check person_5_sex_registered_at_birth person_5_gender_same_as_sex person_5_gender_identity - no_females_pregnant_household_person_5_value_check - females_in_soft_age_range_in_pregnant_household_person_5_value_check + no_household_member_likely_to_be_pregnant_person_5_check gender_5_over_retirement_value_check person_5_working_situation working_situation_5_under_retirement_value_check @@ -439,15 +428,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_6_age person_6_lead_partner relationship_6_multiple_partners_value_check - no_females_pregnant_household_person_6_age_value_check - females_in_soft_age_range_in_pregnant_household_person_6_age_value_check + no_household_member_likely_to_be_pregnant_person_age_6_check age_6_under_retirement_value_check age_6_over_retirement_value_check person_6_sex_registered_at_birth person_6_gender_same_as_sex person_6_gender_identity - no_females_pregnant_household_person_6_value_check - females_in_soft_age_range_in_pregnant_household_person_6_value_check + no_household_member_likely_to_be_pregnant_person_6_check gender_6_over_retirement_value_check person_6_working_situation working_situation_6_under_retirement_value_check @@ -457,15 +444,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_7_age person_7_lead_partner relationship_7_multiple_partners_value_check - no_females_pregnant_household_person_7_age_value_check - females_in_soft_age_range_in_pregnant_household_person_7_age_value_check + no_household_member_likely_to_be_pregnant_person_age_7_check age_7_under_retirement_value_check age_7_over_retirement_value_check person_7_sex_registered_at_birth person_7_gender_same_as_sex person_7_gender_identity - no_females_pregnant_household_person_7_value_check - females_in_soft_age_range_in_pregnant_household_person_7_value_check + no_household_member_likely_to_be_pregnant_person_7_check gender_7_over_retirement_value_check person_7_working_situation working_situation_7_under_retirement_value_check @@ -475,15 +460,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_8_age person_8_lead_partner relationship_8_multiple_partners_value_check - no_females_pregnant_household_person_8_age_value_check - females_in_soft_age_range_in_pregnant_household_person_8_age_value_check + no_household_member_likely_to_be_pregnant_person_age_8_check age_8_under_retirement_value_check age_8_over_retirement_value_check person_8_sex_registered_at_birth person_8_gender_same_as_sex person_8_gender_identity - no_females_pregnant_household_person_8_value_check - females_in_soft_age_range_in_pregnant_household_person_8_value_check + no_household_member_likely_to_be_pregnant_person_8_check gender_8_over_retirement_value_check person_8_working_situation working_situation_8_under_retirement_value_check diff --git a/spec/models/form/lettings/subsections/household_needs_spec.rb b/spec/models/form/lettings/subsections/household_needs_spec.rb index 7c3a2a505..01423f8dd 100644 --- a/spec/models/form/lettings/subsections/household_needs_spec.rb +++ b/spec/models/form/lettings/subsections/household_needs_spec.rb @@ -53,8 +53,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdNeeds, type: :model do armed_forces_serving armed_forces_injured pregnant - no_females_pregnant_household_value_check - females_in_soft_age_range_in_pregnant_household_value_check + no_household_member_likely_to_be_pregnant_check access_needs_exist type_of_access_needs health_conditions diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index 6c39824c5..02b383acf 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -1,8 +1,11 @@ require "rails_helper" RSpec.describe Validations::SoftValidations do - let(:organisation) { FactoryBot.build(:organisation, provider_type: "PRP", id: 123) } - let(:record) { FactoryBot.build(:lettings_log, owning_organisation: organisation) } + include CollectionTimeHelper + + let(:organisation) { build(:organisation, provider_type: "PRP", id: 123) } + let(:start_year) { current_collection_start_year } + let(:record) { build(:lettings_log, owning_organisation: organisation, startdate: collection_start_date_for_year(start_year)) } describe "rent min max validations" do before do @@ -153,98 +156,275 @@ RSpec.describe Validations::SoftValidations do end describe "pregnancy soft validations" do - context "when all tenants are male" do - it "shows the interruption screen" do - record.age1 = 43 - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when 2025" do + let(:start_year) { 2025 } + + context "when all tenants are male" do + it "shows the interruption screen" do + record.age1 = 43 + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when there all tenants are male and age of tenants is unknown" do - it "shows the interruption screen" do - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when there all tenants are male and age of tenants is unknown" do + it "shows the interruption screen" do + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when all tenants are male and household members are over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "M") - record.send("age#{n}=", 30) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when all tenants are male and household members are over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "M") + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - end - context "when female tenants are under 16" do - it "shows the interruption screen" do - record.age2 = 14 - record.sex2 = "F" - record.preg_occ = 1 - record.hhmemb = 2 - record.details_known_2 = 0 - record.age2_known = 0 - record.age1 = 18 - record.sex1 = "M" - record.age1_known = 0 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are under 16" do + it "shows the interruption screen" do + record.age2 = 14 + record.sex2 = "F" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end end - end - context "when female tenants are over 50" do - it "shows the interruption screen" do - record.age1 = 54 - record.sex1 = "F" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are over 50" do + it "shows the interruption screen" do + record.age1 = 54 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end + end + + context "when non-binary tenants are under 16" do + it "does not show the interruption screen" do + record.age2 = 14 + record.sex2 = "X" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when non-binary tenants are over 50" do + it "does not show the interruption screen" do + record.age1 = 54 + record.sex1 = "X" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when female tenants are outside of soft validation ranges" do + it "does not show the interruption screen" do + record.age1 = 44 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when the information about the tenants is not given" do + it "does not show the interruption screen" do + record.preg_occ = 1 + record.hhmemb = 2 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when number of household members is over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "F") + record.send("age#{n}=", 50) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end end end - context "when female tenants are outside of soft validation ranges" do - it "does not show the interruption screen" do - record.age1 = 44 - record.sex1 = "F" + context "when 2026" do + let(:start_year) { 2026 } + + before do + record.age1 = 43 + record.age1_known = 0 record.preg_occ = 1 record.hhmemb = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false end - end - context "when the information about the tenants is not given" do - it "does not show the interruption screen" do - record.preg_occ = 1 - record.hhmemb = 2 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false + context "when all tenants are male" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when number of household members is over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "F") - record.send("age#{n}=", 50) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when there all tenants are male and age of tenants is unknown" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + record.age1_known = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end + end + + context "when all tenants are male and household members are over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "M") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + end + end + + context "when female tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end + end + + context "when female tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end + end + + context "when non binary tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end + end + + context "when non binary tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be true + end + end + + context "when female tenants are outside of soft validation ranges" do + before do + record.age1 = 30 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when the information about the tenants is not given" do + before do + record.age1 = nil + record.age1_known = nil + record.sexrab1 = nil + record.gender_same_as_sex1 = nil + record.preg_occ = 1 + record.hhmemb = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false + end + end + + context "when number of household members is over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "F") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_not_in_pregnancy_range?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false end end end diff --git a/spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb index 68768d7d9..23c0d3c57 100644 --- a/spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb @@ -2084,18 +2084,22 @@ RSpec.describe BulkUpload::Lettings::Year2026::RowParser do end context "when a soft validation is triggered that relates both to fields that are and are not routed to" do - let(:attributes) { setup_section_params.merge({ field_78: "1", field_43: "M", field_49: "M", field_53: "M" }) } + let(:attributes) { setup_section_params.merge({ field_78: "1", field_130: "M", field_131: "M", field_132: "M", field_138: 1, field_140: 1, field_142: 1 }) } it "adds errors to fields that are routed to" do parser.valid? - expect(parser.errors.where(:field_49, category: :soft_validation)).to be_present - expect(parser.errors.where(:field_53, category: :soft_validation)).to be_present + expect(parser.errors.where(:field_130, category: :soft_validation)).to be_present + expect(parser.errors.where(:field_138, category: :soft_validation)).to be_present + expect(parser.errors.where(:field_131, category: :soft_validation)).to be_present + expect(parser.errors.where(:field_140, category: :soft_validation)).to be_present end it "does not add errors to fields that are not routed to" do parser.valid? - expect(parser.errors.where(:field_57, category: :soft_validation)).not_to be_present - expect(parser.errors.where(:field_61, category: :soft_validation)).not_to be_present + expect(parser.errors.where(:field_133, category: :soft_validation)).not_to be_present + expect(parser.errors.where(:field_144, category: :soft_validation)).not_to be_present + expect(parser.errors.where(:field_134, category: :soft_validation)).not_to be_present + expect(parser.errors.where(:field_146, category: :soft_validation)).not_to be_present end end