Browse Source

Merge branch 'main' into CLDC-3687-Copy-changes-lettings-date-validations

pull/2738/head
Manny Dinssa 8 months ago committed by GitHub
parent
commit
901914dbcb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      app/constants/global_constants.rb
  2. 2
      app/helpers/merge_requests_helper.rb
  3. 1
      app/models/form/lettings/pages/lead_tenant_age.rb
  4. 1
      app/models/form/lettings/pages/lead_tenant_ethnic_background_arab.rb
  5. 1
      app/models/form/lettings/pages/lead_tenant_ethnic_background_asian.rb
  6. 1
      app/models/form/lettings/pages/lead_tenant_ethnic_background_black.rb
  7. 1
      app/models/form/lettings/pages/lead_tenant_ethnic_background_mixed.rb
  8. 1
      app/models/form/lettings/pages/lead_tenant_ethnic_background_white.rb
  9. 1
      app/models/form/lettings/pages/lead_tenant_nationality.rb
  10. 24
      app/models/form/lettings/pages/max_rent_value_check.rb
  11. 24
      app/models/form/lettings/pages/min_rent_value_check.rb
  12. 9
      app/models/form/lettings/pages/person_age.rb
  13. 1
      app/models/form/lettings/pages/person_known.rb
  14. 35
      app/models/form/lettings/pages/rent_value_check.rb
  15. 1
      app/models/form/lettings/pages/starter_tenancy_type.rb
  16. 1
      app/models/form/lettings/pages/tenancy_length.rb
  17. 1
      app/models/form/lettings/pages/tenancy_length_affordable_rent.rb
  18. 1
      app/models/form/lettings/pages/tenancy_length_intermediate_rent.rb
  19. 1
      app/models/form/lettings/pages/tenancy_length_periodic.rb
  20. 1
      app/models/form/lettings/pages/tenancy_type.rb
  21. 8
      app/models/form/lettings/questions/age.rb
  22. 3
      app/models/form/lettings/questions/age1.rb
  23. 11
      app/models/form/lettings/questions/age1_known.rb
  24. 4
      app/models/form/lettings/questions/age_known.rb
  25. 2
      app/models/form/lettings/questions/declaration.rb
  26. 3
      app/models/form/lettings/questions/details_known.rb
  27. 4
      app/models/form/lettings/questions/ethnic_arab.rb
  28. 4
      app/models/form/lettings/questions/ethnic_asian.rb
  29. 4
      app/models/form/lettings/questions/ethnic_black.rb
  30. 3
      app/models/form/lettings/questions/ethnic_group.rb
  31. 4
      app/models/form/lettings/questions/ethnic_mixed.rb
  32. 4
      app/models/form/lettings/questions/ethnic_white.rb
  33. 10
      app/models/form/lettings/questions/gender_identity1.rb
  34. 3
      app/models/form/lettings/questions/hhmemb.rb
  35. 3
      app/models/form/lettings/questions/joint.rb
  36. 15
      app/models/form/lettings/questions/max_rent_value_check.rb
  37. 3
      app/models/form/lettings/questions/nationality.rb
  38. 3
      app/models/form/lettings/questions/nationality_all.rb
  39. 4
      app/models/form/lettings/questions/nationality_all_group.rb
  40. 10
      app/models/form/lettings/questions/person_gender_identity.rb
  41. 3
      app/models/form/lettings/questions/person_relationship.rb
  42. 3
      app/models/form/lettings/questions/person_working_situation.rb
  43. 4
      app/models/form/lettings/questions/rent_value_check.rb
  44. 3
      app/models/form/lettings/questions/sheltered.rb
  45. 4
      app/models/form/lettings/questions/starter_tenancy_type.rb
  46. 11
      app/models/form/lettings/questions/startertenancy.rb
  47. 4
      app/models/form/lettings/questions/tenancy_length.rb
  48. 11
      app/models/form/lettings/questions/tenancy_length_affordable_rent.rb
  49. 11
      app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb
  50. 4
      app/models/form/lettings/questions/tenancy_length_periodic.rb
  51. 4
      app/models/form/lettings/questions/tenancy_other.rb
  52. 4
      app/models/form/lettings/questions/tenancy_type.rb
  53. 3
      app/models/form/lettings/questions/working_situation1.rb
  54. 7
      app/models/form/lettings/subsections/household_characteristics.rb
  55. 3
      app/models/form/lettings/subsections/income_and_benefits.rb
  56. 6
      app/models/form/lettings/subsections/property_information.rb
  57. 1
      app/models/form/sales/pages/last_accommodation.rb
  58. 1
      app/models/form/sales/pages/last_accommodation_la.rb
  59. 2
      app/models/form/sales/questions/buyer1_previous_tenure.rb
  60. 3
      app/models/form/sales/questions/buyer2_living_in.rb
  61. 7
      app/models/form/sales/questions/buyers_organisations.rb
  62. 4
      app/models/form/sales/questions/previous_la_known.rb
  63. 3
      app/models/form/sales/questions/previous_postcode.rb
  64. 4
      app/models/form/sales/questions/previous_postcode_known.rb
  65. 3
      app/models/form/sales/questions/previous_tenure_buyer2.rb
  66. 3
      app/models/form/sales/questions/prevloc.rb
  67. 8
      app/models/validations/soft_validations.rb
  68. 4
      app/views/content/accessibility_statement.md
  69. 10
      app/views/organisations/duplicate_schemes.html.erb
  70. 323
      config/locales/forms/2023/lettings/household_characteristics.en.yml
  71. 66
      config/locales/forms/2023/lettings/tenancy_information.en.yml
  72. 50
      config/locales/forms/2023/sales/household_situation.en.yml
  73. 66
      config/locales/forms/2024/lettings/tenancy_information.en.yml
  74. 50
      config/locales/forms/2024/sales/household_situation.en.yml
  75. 322
      config/locales/forms/2024/sales/lettings/household_characteristics.en.yml
  76. 4
      spec/components/data_protection_confirmation_banner_component_spec.rb
  77. 4
      spec/mailers/csv_download_mailer_spec.rb
  78. 33
      spec/models/form/lettings/pages/max_rent_value_check_spec.rb
  79. 42
      spec/models/form/lettings/pages/min_rent_value_check_spec.rb
  80. 27
      spec/models/form/lettings/pages/person_age_spec.rb
  81. 3
      spec/models/form/lettings/questions/age_spec.rb
  82. 32
      spec/models/form/lettings/questions/max_rent_value_check_spec.rb
  83. 32
      spec/models/form/lettings/questions/min_rent_value_check_spec.rb
  84. 2
      spec/models/form/lettings/questions/starter_tenancy_type_spec.rb
  85. 2
      spec/models/form/lettings/questions/tenancy_length_affordable_rent_spec.rb
  86. 2
      spec/models/form/lettings/questions/tenancy_length_intermediate_rent_spec.rb
  87. 2
      spec/models/form/lettings/questions/tenancy_length_periodic_spec.rb
  88. 2
      spec/models/form/lettings/questions/tenancy_length_spec.rb
  89. 2
      spec/models/form/lettings/questions/tenancy_other_spec.rb
  90. 2
      spec/models/form/lettings/questions/tenancy_type_spec.rb
  91. 42
      spec/models/form/lettings/subsections/household_characteristics_spec.rb
  92. 3
      spec/models/form/lettings/subsections/income_and_benefits_spec.rb
  93. 42
      spec/models/form/lettings/subsections/property_information_spec.rb
  94. 2
      spec/requests/organisations_controller_spec.rb
  95. 4
      spec/services/documentation_generator_spec.rb
  96. 6
      spec/services/merge/merge_organisations_service_spec.rb
  97. 2
      spec/views/merge_requests/show.html.erb_spec.rb

2
app/constants/global_constants.rb

@ -1,5 +1,5 @@
module GlobalConstants
HELPDESK_URL = "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11".freeze
HELPDESK_URL = "https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11".freeze
COUNTRIES_ANSWER_OPTIONS = {
"" => "Select an option",

2
app/helpers/merge_requests_helper.rb

@ -9,7 +9,7 @@ module MergeRequestsHelper
def request_details(merge_request)
[
{ label: "Requester", value: display_value_or_placeholder(merge_request.requester&.name) },
{ label: "Helpdesk ticket", value: merge_request.helpdesk_ticket.present? ? link_to("#{merge_request.helpdesk_ticket} (opens in a new tab)", "https://dluhcdigital.atlassian.net/browse/#{merge_request.helpdesk_ticket}", target: "_blank", rel: "noopener noreferrer") : display_value_or_placeholder(nil), action: merge_request_action(merge_request, "helpdesk_ticket") },
{ label: "Helpdesk ticket", value: merge_request.helpdesk_ticket.present? ? link_to("#{merge_request.helpdesk_ticket} (opens in a new tab)", "https://mhclgdigital.atlassian.net/browse/#{merge_request.helpdesk_ticket}", target: "_blank", rel: "noopener noreferrer") : display_value_or_placeholder(nil), action: merge_request_action(merge_request, "helpdesk_ticket") },
{ label: "Status", value: status_tag(merge_request.status) },
]
end

1
app/models/form/lettings/pages/lead_tenant_age.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantAge < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_age"
@copy_key = "lettings.household_characteristics.age1"
@depends_on = [{ "declaration" => 1 }]
end

1
app/models/form/lettings/pages/lead_tenant_ethnic_background_arab.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantEthnicBackgroundArab < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_ethnic_background_arab"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_arab"
@depends_on = [{ "ethnic_group" => 4 }]
end

1
app/models/form/lettings/pages/lead_tenant_ethnic_background_asian.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantEthnicBackgroundAsian < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_ethnic_background_asian"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_asian"
@depends_on = [{ "ethnic_group" => 2 }]
end

1
app/models/form/lettings/pages/lead_tenant_ethnic_background_black.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantEthnicBackgroundBlack < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_ethnic_background_black"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_black"
@depends_on = [{ "ethnic_group" => 3 }]
end

1
app/models/form/lettings/pages/lead_tenant_ethnic_background_mixed.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantEthnicBackgroundMixed < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_ethnic_background_mixed"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_mixed"
@depends_on = [{ "ethnic_group" => 1 }]
end

1
app/models/form/lettings/pages/lead_tenant_ethnic_background_white.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantEthnicBackgroundWhite < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_ethnic_background_white"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_white"
@depends_on = [{ "ethnic_group" => 0 }]
end

1
app/models/form/lettings/pages/lead_tenant_nationality.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::LeadTenantNationality < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "lead_tenant_nationality"
@copy_key = "lettings.household_characteristics.#{form.start_year_after_2024? ? 'nationality_all' : 'national'}"
@depends_on = [{ "declaration" => 1 }]
end

24
app/models/form/lettings/pages/max_rent_value_check.rb

@ -1,24 +0,0 @@
class Form::Lettings::Pages::MaxRentValueCheck < ::Form::Page
def initialize(id, hsh, subsection, check_answers_card_number: nil)
super(id, hsh, subsection)
@depends_on = [{ "rent_in_soft_max_range?" => true }]
@title_text = {
"translation" => "soft_validations.rent.outside_range_title",
"arguments" => [{
"key" => "brent",
"label" => true,
"i18n_template" => "brent",
}],
}
@informative_text = I18n.t("soft_validations.rent.informative_text", higher_or_lower: "higher")
@check_answers_card_number = check_answers_card_number
end
def questions
@questions ||= [Form::Lettings::Questions::MaxRentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
end
def interruption_screen_question_ids
%w[brent period startdate uprn postcode_full la beds rent_type needstype]
end
end

24
app/models/form/lettings/pages/min_rent_value_check.rb

@ -1,24 +0,0 @@
class Form::Lettings::Pages::MinRentValueCheck < ::Form::Page
def initialize(id, hsh, subsection, check_answers_card_number: nil)
super(id, hsh, subsection)
@depends_on = [{ "rent_in_soft_min_range?" => true }]
@title_text = {
"translation" => "soft_validations.rent.outside_range_title",
"arguments" => [{
"key" => "brent",
"label" => true,
"i18n_template" => "brent",
}],
}
@informative_text = I18n.t("soft_validations.rent.informative_text", higher_or_lower: "lower")
@check_answers_card_number = check_answers_card_number
end
def questions
@questions ||= [Form::Lettings::Questions::MinRentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
end
def interruption_screen_question_ids
%w[brent period startdate uprn postcode_full la beds rent_type needstype]
end
end

9
app/models/form/lettings/pages/person_age.rb

@ -1,13 +1,12 @@
class Form::Lettings::Pages::PersonAge < ::Form::Page
def initialize(id, hsh, subsection, person_index:, person_type: "non_child")
def initialize(id, hsh, subsection, person_index:)
super(id, hsh, subsection)
@id = "person_#{person_index}_age_#{person_type}"
@id = "person_#{person_index}_age"
@copy_key = "lettings.household_characteristics.age#{person_index}"
@person_index = person_index
@person_type = person_type
@depends_on = [
{
"details_known_#{person_index}" => 0,
"person_#{person_index}_child_relation?" => (person_type == "child"),
},
]
end
@ -15,7 +14,7 @@ class Form::Lettings::Pages::PersonAge < ::Form::Page
def questions
@questions ||= [
Form::Lettings::Questions::AgeKnown.new(nil, nil, self, person_index: @person_index),
Form::Lettings::Questions::Age.new(nil, nil, self, person_index: @person_index, person_type: @person_type),
Form::Lettings::Questions::Age.new(nil, nil, self, person_index: @person_index),
]
end
end

1
app/models/form/lettings/pages/person_known.rb

@ -2,7 +2,6 @@ class Form::Lettings::Pages::PersonKnown < ::Form::Page
def initialize(id, hsh, subsection, person_index:)
super(id, hsh, subsection)
@id = "person_#{person_index}_known"
@header = "You’ve given us the details for #{person_index - 1} person in the household"
@depends_on = (person_index..8).map { |index| { "hhmemb" => index } }
@person_index = person_index
end

35
app/models/form/lettings/pages/rent_value_check.rb

@ -0,0 +1,35 @@
class Form::Lettings::Pages::RentValueCheck < ::Form::Page
def initialize(id, hsh, subsection, check_answers_card_number: nil)
super(id, hsh, subsection)
@depends_on = [{ "rent_soft_validation_triggered?" => true }]
@title_text = {
"translation" => "soft_validations.rent.outside_range_title",
"arguments" => [
{
"key" => "brent",
"label" => true,
"i18n_template" => "brent",
},
],
}
@informative_text = {
"translation" => "soft_validations.rent.informative_text",
"arguments" => [
{
"key" => "rent_soft_validation_higher_or_lower_text",
"label" => false,
"i18n_template" => "higher_or_lower",
},
],
}
@check_answers_card_number = check_answers_card_number
end
def questions
@questions ||= [Form::Lettings::Questions::RentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
end
def interruption_screen_question_ids
%w[brent period startdate uprn postcode_full la beds rent_type needstype]
end
end

1
app/models/form/lettings/pages/starter_tenancy_type.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::StarterTenancyType < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "starter_tenancy_type"
@copy_key = "lettings.tenancy_information.tenancy.starter_tenancy_type"
@depends_on = [{ "starter_tenancy?" => true }]
end

1
app/models/form/lettings/pages/tenancy_length.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::TenancyLength < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "tenancy_length"
@copy_key = "lettings.tenancy_information.tenancylength.tenancy_length"
@depends_on = [{ "tenancy_type_fixed_term?" => true, "needstype" => 2 }]
end

1
app/models/form/lettings/pages/tenancy_length_affordable_rent.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::TenancyLengthAffordableRent < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "tenancy_length_affordable_rent"
@copy_key = "lettings.tenancy_information.tenancylength.tenancy_length_affordable_rent"
@depends_on = [{ "tenancy_type_fixed_term?" => true, "affordable_or_social_rent?" => true, "needstype" => 1 }]
end

1
app/models/form/lettings/pages/tenancy_length_intermediate_rent.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::TenancyLengthIntermediateRent < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "tenancy_length_intermediate_rent"
@copy_key = "lettings.tenancy_information.tenancylength.tenancy_length_intermediate_rent"
@depends_on = [{ "tenancy_type_fixed_term?" => true, "affordable_or_social_rent?" => false, "needstype" => 1 }]
end

1
app/models/form/lettings/pages/tenancy_length_periodic.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::TenancyLengthPeriodic < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "tenancy_length_periodic"
@copy_key = "lettings.tenancy_information.tenancylength.tenancy_length_periodic"
@depends_on = [{ "tenancy_type_periodic?" => true }]
end

1
app/models/form/lettings/pages/tenancy_type.rb

@ -2,6 +2,7 @@ class Form::Lettings::Pages::TenancyType < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "tenancy_type"
@copy_key = "lettings.tenancy_information.tenancy.tenancy_type"
@depends_on = [{ "starter_tenancy?" => false }]
end

8
app/models/form/lettings/questions/age.rb

@ -1,9 +1,8 @@
class Form::Lettings::Questions::Age < ::Form::Question
def initialize(id, hsh, page, person_index:, person_type:)
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "age#{person_index}"
@check_answer_label = "Person #{person_index}’s age"
@header = "Age"
@copy_key = "lettings.household_characteristics.age#{person_index}.age#{person_index}"
@type = "numeric"
@width = 2
@inferred_check_answers_value = [{ "condition" => { "age#{person_index}_known" => 1 }, "value" => "Not known" }]
@ -13,7 +12,6 @@ class Form::Lettings::Questions::Age < ::Form::Question
@step = 1
@person_index = person_index
@question_number = question_number
@person_type = person_type
@hint_text = hint_text
end
@ -31,8 +29,6 @@ class Form::Lettings::Questions::Age < ::Form::Question
def hint_text
if form.start_year_after_2024?
"Answer 1 for children aged under 1 year old"
elsif @person_type == "child"
"For a child under 1, enter 1"
end
end
end

3
app/models/form/lettings/questions/age1.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::Age1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "age1"
@check_answer_label = "Lead tenant’s age"
@header = "Age"
@copy_key = "lettings.household_characteristics.age1.age1"
@type = "numeric"
@width = 2
@inferred_check_answers_value = [{ "condition" => { "age1_known" => 1 }, "value" => "Not known" }]

11
app/models/form/lettings/questions/age1_known.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::Age1Known < ::Form::Question
def initialize(id, hsh, page)
super
@id = "age1_known"
@check_answer_label = ""
@header = "Do you know the lead tenant’s age?"
@copy_key = "lettings.household_characteristics.age1.age1_known"
@type = "radio"
@check_answers_card_number = 1
@answer_options = ANSWER_OPTIONS
@ -14,13 +13,5 @@ class Form::Lettings::Questions::Age1Known < ::Form::Question
ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze
def hint_text
if form.start_year_after_2024?
"The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same amount of paid work, the lead tenant is whoever is the oldest."
else
"The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
end
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 32, 2024 => 31 }.freeze
end

4
app/models/form/lettings/questions/age_known.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::AgeKnown < ::Form::Question
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "age#{person_index}_known"
@check_answer_label = ""
@header = "Do you know person #{person_index}’s age?"
@copy_key = "lettings.household_characteristics.age#{person_index}.age#{person_index}_known"
@type = "radio"
@check_answers_card_number = person_index
@hint_text = ""
@answer_options = ANSWER_OPTIONS
@conditional_for = { "age#{person_index}" => [0] }
@hidden_in_check_answers = {

2
app/models/form/lettings/questions/declaration.rb

@ -2,8 +2,6 @@ class Form::Lettings::Questions::Declaration < ::Form::Question
def initialize(id, hsh, page)
super
@id = "declaration"
@check_answer_label = "Tenant has seen the privacy notice"
@header = "Declaration"
@type = "checkbox"
@check_answers_card_number = 0 unless form.start_year_after_2024?
@top_guidance_partial = form.start_year_after_2024? ? "privacy_notice_tenant_2024" : "privacy_notice_tenant"

3
app/models/form/lettings/questions/details_known.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::DetailsKnown < ::Form::Question
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "details_known_#{person_index}"
@check_answer_label = "Details known for person #{person_index}"
@header = "Do you know details for person #{person_index}?"
@type = "radio"
@check_answers_card_number = person_index
@hint_text = "You must provide details for everyone in the household if you know them."
@answer_options = ANSWER_OPTIONS
end

4
app/models/form/lettings/questions/ethnic_arab.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::EthnicArab < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Lead tenant’s ethnic background"
@header = "Which of the following best describes the lead tenant’s Arab background?"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_arab"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/ethnic_asian.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::EthnicAsian < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Lead tenant’s ethnic background"
@header = "Which of the following best describes the lead tenant’s Asian or Asian British background?"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_asian"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/ethnic_black.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::EthnicBlack < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Lead tenant’s ethnic background"
@header = "Which of the following best describes the lead tenant’s Black, African, Caribbean or Black British background?"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_black"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

3
app/models/form/lettings/questions/ethnic_group.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::EthnicGroup < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic_group"
@check_answer_label = "Lead tenant’s ethnic group"
@header = "What is the lead tenant’s ethnic group?"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/ethnic_mixed.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::EthnicMixed < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Lead tenant’s ethnic background"
@header = "Which of the following best describes the lead tenant’s Mixed or Multiple ethnic groups background?"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_mixed"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/ethnic_white.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::EthnicWhite < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ethnic"
@check_answer_label = "Lead tenant’s ethnic background"
@header = "Which of the following best describes the lead tenant’s White background?"
@copy_key = "lettings.household_characteristics.ethnic.ethnic_background_white"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

10
app/models/form/lettings/questions/gender_identity1.rb

@ -2,8 +2,6 @@ class Form::Lettings::Questions::GenderIdentity1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "sex1"
@check_answer_label = "Lead tenant’s gender identity"
@header = "Which of these best describes the lead tenant’s gender identity?"
@type = "radio"
@check_answers_card_number = 1
@answer_options = ANSWER_OPTIONS
@ -18,13 +16,5 @@ class Form::Lettings::Questions::GenderIdentity1 < ::Form::Question
"R" => { "value" => "Tenant prefers not to say" },
}.freeze
def hint_text
if form.start_year_after_2024?
"This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
else
"The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
end
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 33, 2024 => 32 }.freeze
end

3
app/models/form/lettings/questions/hhmemb.rb

@ -2,14 +2,11 @@ class Form::Lettings::Questions::Hhmemb < ::Form::Question
def initialize(id, hsh, page)
super
@id = "hhmemb"
@check_answer_label = "Number of household members"
@header = "How many people live in the household for this letting?"
@type = "numeric"
@width = 2
@check_answers_card_number = 0
@max = 8
@min = 1
@hint_text = "You can provide details for a maximum of 8 people."
@step = 1
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

3
app/models/form/lettings/questions/joint.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::Joint < ::Form::Question
def initialize(id, hsh, page)
super
@id = "joint"
@check_answer_label = "Is this a joint tenancy?"
@header = "Is this a joint tenancy?"
@type = "radio"
@check_answers_card_number = 0
@hint_text = form.start_year_after_2024? ? "This is where two or more people are named on the tenancy agreement" : ""
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

15
app/models/form/lettings/questions/max_rent_value_check.rb

@ -1,15 +0,0 @@
class Form::Lettings::Questions::MaxRentValueCheck < ::Form::Question
def initialize(id, hsh, page, check_answers_card_number:)
super(id, hsh, page)
@id = "rent_value_check"
@check_answer_label = "Total rent confirmation"
@header = "Are you sure this is correct?"
@type = "interruption_screen"
@hint_text = I18n.t("soft_validations.rent.hint_text", higher_or_lower: "higher")
@check_answers_card_number = check_answers_card_number
@answer_options = ANSWER_OPTIONS
@hidden_in_check_answers = { "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] }
end
ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze
end

3
app/models/form/lettings/questions/nationality.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::Nationality < ::Form::Question
def initialize(id, hsh, page)
super
@id = "national"
@check_answer_label = "Lead tenant’s nationality"
@header = "What is the nationality of the lead tenant?"
@type = "radio"
@check_answers_card_number = 1
@hint_text = "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

3
app/models/form/lettings/questions/nationality_all.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::NationalityAll < ::Form::Question
def initialize(id, hsh, page)
super
@id = "nationality_all"
@check_answer_label = "Lead tenant’s nationality"
@header = "Enter a nationality"
@copy_key = "lettings.household_characteristics.nationality_all.nationality_all"
@type = "select"
@check_answers_card_number = 1
@answer_options = GlobalConstants::COUNTRIES_ANSWER_OPTIONS

4
app/models/form/lettings/questions/nationality_all_group.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::NationalityAllGroup < ::Form::Question
def initialize(id, hsh, page)
super
@id = "nationality_all_group"
@check_answer_label = "Lead tenant’s nationality"
@header = "What is the nationality of the lead tenant?"
@copy_key = "lettings.household_characteristics.nationality_all.nationality_all_group"
@type = "radio"
@check_answers_card_number = 1
@hint_text = "If the lead tenant is a dual national of the United Kingdom and another country, enter United Kingdom. If they are a dual national of two other countries, the tenant should decide which country to enter."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@conditional_for = { "nationality_all" => [12] }

10
app/models/form/lettings/questions/person_gender_identity.rb

@ -2,8 +2,6 @@ class Form::Lettings::Questions::PersonGenderIdentity < ::Form::Question
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "sex#{person_index}"
@check_answer_label = "Person #{person_index}’s gender identity"
@header = "Which of these best describes person #{person_index}’s gender identity?"
@type = "radio"
@check_answers_card_number = person_index
@answer_options = ANSWER_OPTIONS
@ -19,14 +17,6 @@ class Form::Lettings::Questions::PersonGenderIdentity < ::Form::Question
"R" => { "value" => "Person prefers not to say" },
}.freeze
def hint_text
if form.start_year_after_2024?
"This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
else
""
end
end
def question_number
base_question_number = case form.start_date.year
when 2023

3
app/models/form/lettings/questions/person_relationship.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::PersonRelationship < ::Form::Question
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "relat#{person_index}"
@check_answer_label = "Person #{person_index}’s relationship to the lead tenant"
@header = "What is person #{person_index}’s relationship to the lead tenant?"
@type = "radio"
@check_answers_card_number = person_index
@hint_text = ""
@answer_options = answer_options
@person_index = person_index
@question_number = question_number

3
app/models/form/lettings/questions/person_working_situation.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::PersonWorkingSituation < ::Form::Question
def initialize(id, hsh, page, person_index:)
super(id, hsh, page)
@id = "ecstat#{person_index}"
@check_answer_label = "Person #{person_index}’s working situation"
@header = "Which of these best describes person #{person_index}’s working situation?"
@type = "radio"
@check_answers_card_number = person_index
@hint_text = ""
@person_index = person_index
@question_number = question_number
@answer_options = answer_options

4
app/models/form/lettings/questions/min_rent_value_check.rb → app/models/form/lettings/questions/rent_value_check.rb

@ -1,11 +1,11 @@
class Form::Lettings::Questions::MinRentValueCheck < ::Form::Question
class Form::Lettings::Questions::RentValueCheck < ::Form::Question
def initialize(id, hsh, page, check_answers_card_number:)
super(id, hsh, page)
@id = "rent_value_check"
@check_answer_label = "Total rent confirmation"
@header = "Are you sure this is correct?"
@type = "interruption_screen"
@hint_text = I18n.t("soft_validations.rent.hint_text", higher_or_lower: "lower")
@hint_text = I18n.t("soft_validations.rent.hint_text")
@check_answers_card_number = check_answers_card_number
@answer_options = ANSWER_OPTIONS
@hidden_in_check_answers = { "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] }

3
app/models/form/lettings/questions/sheltered.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::Sheltered < ::Form::Question
def initialize(id, hsh, page)
super
@id = "sheltered"
@check_answer_label = "Is this letting in sheltered accommodation?"
@header = "Is this letting in sheltered accommodation?"
@type = "radio"
@check_answers_card_number = 0
@hint_text = "Sheltered housing and special retirement housing are for tenants with low-level care and support needs. This typically provides some limited support to enable independent living, such as alarm-based assistance or a scheme manager.</br></br>Extra care housing is for tenants with medium to high care and support needs, often with 24 hour access to support staff provided by an agency registered with the Care Quality Commission."
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/starter_tenancy_type.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::StarterTenancyType < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancy"
@check_answer_label = form.start_year_after_2024? ? "Type of main tenancy after the starter or introductory period has ended" : "Type of main tenancy after the starter period has ended"
@header = form.start_year_after_2024? ? "What is the type of tenancy after the starter or introductory period has ended?" : "What is the type of tenancy after the starter period has ended?"
@copy_key = "lettings.tenancy_information.tenancy.#{page.id}.tenancy"
@type = "radio"
@check_answers_card_number = 0
@hint_text = form.start_year_after_2024? ? "" : "This is also known as an ‘introductory period’."
@conditional_for = { "tenancyother" => [3] }
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

11
app/models/form/lettings/questions/startertenancy.rb

@ -2,8 +2,6 @@ class Form::Lettings::Questions::Startertenancy < ::Form::Question
def initialize(id, hsh, page)
super
@id = "startertenancy"
@check_answer_label = "Is this a starter or introductory tenancy?"
@header = "Is this a starter tenancy?"
@type = "radio"
@check_answers_card_number = 0
@answer_options = ANSWER_OPTIONS
@ -12,14 +10,5 @@ class Form::Lettings::Questions::Startertenancy < ::Form::Question
ANSWER_OPTIONS = { "1" => { "value" => "Yes" }, "2" => { "value" => "No" } }.freeze
def hint_text
if form.start_year_after_2024?
"If the tenancy has an ‘introductory period’ answer ‘yes’.<br><br>
You should submit a CORE log at the beginning of the starter tenancy or introductory period, with the best information you have at the time. You do not need to submit a log when a tenant later rolls onto the main tenancy."
else
"This is also known as an ‘introductory period’."
end
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 26 }.freeze
end

4
app/models/form/lettings/questions/tenancy_length.rb

@ -2,14 +2,12 @@ class Form::Lettings::Questions::TenancyLength < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancylength"
@check_answer_label = "Length of fixed-term tenancy"
@header = "What is the length of the fixed-term tenancy to the nearest year?"
@copy_key = "lettings.tenancy_information.tenancylength.#{page.id}"
@type = "numeric"
@width = 2
@check_answers_card_number = 0
@max = 150
@min = 0
@hint_text = "Do not include the starter or introductory period."
@step = 1
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

11
app/models/form/lettings/questions/tenancy_length_affordable_rent.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::TenancyLengthAffordableRent < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancylength"
@check_answer_label = "Length of fixed-term tenancy"
@header = "What is the length of the fixed-term tenancy to the nearest year?"
@copy_key = "lettings.tenancy_information.tenancylength.#{page.id}"
@type = "numeric"
@width = 2
@check_answers_card_number = 0
@ -13,13 +12,5 @@ class Form::Lettings::Questions::TenancyLengthAffordableRent < ::Form::Question
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end
def hint_text
if form.start_year_after_2024?
"Do not include the starter or introductory period.</br>The minimum period is 2 years for social or affordable rent general needs logs. You do not need to submit CORE logs for these types of tenancies if they are shorter than 2 years."
else
"Do not include the starter or introductory period.</br>The minimum period is 2 years for social or affordable rent general needs logs and you do not need a log for shorter tenancies."
end
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 28 }.freeze
end

11
app/models/form/lettings/questions/tenancy_length_intermediate_rent.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::TenancyLengthIntermediateRent < ::Form::Questio
def initialize(id, hsh, page)
super
@id = "tenancylength"
@check_answer_label = "Length of fixed-term tenancy"
@header = "What is the length of the fixed-term tenancy to the nearest year?"
@copy_key = "lettings.tenancy_information.tenancylength.#{page.id}"
@type = "numeric"
@width = 2
@check_answers_card_number = 0
@ -13,13 +12,5 @@ class Form::Lettings::Questions::TenancyLengthIntermediateRent < ::Form::Questio
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end
def hint_text
if form.start_year_after_2024?
"Do not include the starter or introductory period.</br>The minimum period is 1 year for intermediate rent general needs logs. You do not need to submit CORE logs for these types of tenancies if they are shorter than 1 year."
else
"Do not include the starter or introductory period.</br>The minimum period is 1 year for intermediate rent general needs logs and you do not need a log for shorter tenancies."
end
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 28 }.freeze
end

4
app/models/form/lettings/questions/tenancy_length_periodic.rb

@ -2,8 +2,7 @@ class Form::Lettings::Questions::TenancyLengthPeriodic < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancylength"
@check_answer_label = "Length of periodic tenancy"
@header = "What is the length of the periodic tenancy to the nearest year?"
@copy_key = "lettings.tenancy_information.tenancylength.#{page.id}"
@type = "numeric"
@width = 2
@check_answers_card_number = 0
@ -11,7 +10,6 @@ class Form::Lettings::Questions::TenancyLengthPeriodic < ::Form::Question
@min = 0
@step = 1
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
@hint_text = "As this is a periodic tenancy, this question is optional. If you do not have the information available click save and continue"
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 28 }.freeze

4
app/models/form/lettings/questions/tenancy_other.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::TenancyOther < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancyother"
@check_answer_label = ""
@header = "Please state the tenancy type"
@copy_key = "lettings.tenancy_information.tenancy.#{page.id}.tenancyother"
@type = "text"
@check_answers_card_number = 0
@hint_text = ""
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

4
app/models/form/lettings/questions/tenancy_type.rb

@ -2,11 +2,9 @@ class Form::Lettings::Questions::TenancyType < ::Form::Question
def initialize(id, hsh, page)
super
@id = "tenancy"
@check_answer_label = "Type of main tenancy"
@header = "What is the type of tenancy?"
@copy_key = "lettings.tenancy_information.tenancy.#{page.id}.tenancy"
@type = "radio"
@check_answers_card_number = 0
@hint_text = ""
@conditional_for = { "tenancyother" => [3] }
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

3
app/models/form/lettings/questions/working_situation1.rb

@ -2,11 +2,8 @@ class Form::Lettings::Questions::WorkingSituation1 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ecstat1"
@check_answer_label = "Lead tenant’s working situation"
@header = "Which of these best describes the lead tenant’s working situation?"
@type = "radio"
@check_answers_card_number = 1
@hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

7
app/models/form/lettings/subsections/household_characteristics.rb

@ -35,7 +35,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 2),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_2_partner_under_16_value_check", nil, self, person_index: 2) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_2_multiple_partners_value_check", nil, self, person_index: 2) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 2, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 2),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 2),
@ -56,7 +55,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 3),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_3_partner_under_16_value_check", nil, self, person_index: 3) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_3_multiple_partners_value_check", nil, self, person_index: 3) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 3, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 3),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 3),
@ -77,7 +75,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 4),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_4_partner_under_16_value_check", nil, self, person_index: 4) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_4_multiple_partners_value_check", nil, self, person_index: 4) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 4, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 4),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 4),
@ -98,7 +95,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 5),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_5_partner_under_16_value_check", nil, self, person_index: 5) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_5_multiple_partners_value_check", nil, self, person_index: 5) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 5, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 5),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 5),
@ -119,7 +115,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 6),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_6_partner_under_16_value_check", nil, self, person_index: 6) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_6_multiple_partners_value_check", nil, self, person_index: 6) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 6, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 6),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 6),
@ -140,7 +135,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 7),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_7_partner_under_16_value_check", nil, self, person_index: 7) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_7_multiple_partners_value_check", nil, self, person_index: 7) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 7, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 7),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 7),
@ -161,7 +155,6 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonRelationshipToLead.new(nil, nil, self, person_index: 8),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_8_partner_under_16_value_check", nil, self, person_index: 8) if form.start_year_after_2024?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_8_multiple_partners_value_check", nil, self, person_index: 8) if form.start_year_after_2024?),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 8, person_type: "child"),
Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 8),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 8),

3
app/models/form/lettings/subsections/income_and_benefits.rb

@ -24,8 +24,7 @@ class Form::Lettings::Subsections::IncomeAndBenefits < ::Form::Subsection
Form::Lettings::Pages::RentBiWeekly.new(nil, nil, self),
Form::Lettings::Pages::Rent4Weekly.new(nil, nil, self),
Form::Lettings::Pages::RentMonthly.new(nil, nil, self),
Form::Lettings::Pages::MinRentValueCheck.new("brent_min_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::MaxRentValueCheck.new("brent_max_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::RentValueCheck.new("brent_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::SchargeValueCheck.new(nil, nil, self),
Form::Lettings::Pages::PschargeValueCheck.new(nil, nil, self),
Form::Lettings::Pages::SupchargValueCheck.new(nil, nil, self),

6
app/models/form/lettings/subsections/property_information.rb

@ -10,8 +10,7 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection
@pages ||= [
uprn_questions,
Form::Lettings::Pages::PropertyLocalAuthority.new(nil, nil, self),
Form::Lettings::Pages::MinRentValueCheck.new("local_authority_min_rent_value_check", nil, self, check_answers_card_number: nil),
Form::Lettings::Pages::MaxRentValueCheck.new("local_authority_max_rent_value_check", nil, self, check_answers_card_number: nil),
Form::Lettings::Pages::RentValueCheck.new("local_authority_rent_value_check", nil, self, check_answers_card_number: nil),
Form::Lettings::Pages::FirstTimePropertyLetAsSocialHousing.new(nil, nil, self),
Form::Lettings::Pages::PropertyLetType.new(nil, nil, self),
Form::Lettings::Pages::PropertyVacancyReasonNotFirstLet.new(nil, nil, self),
@ -21,8 +20,7 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection
Form::Lettings::Pages::PropertyBuildingType.new(nil, nil, self),
Form::Lettings::Pages::PropertyWheelchairAccessible.new(nil, nil, self),
Form::Lettings::Pages::PropertyNumberOfBedrooms.new(nil, nil, self),
Form::Lettings::Pages::MinRentValueCheck.new("beds_min_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::MaxRentValueCheck.new("beds_max_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::RentValueCheck.new("beds_rent_value_check", nil, self, check_answers_card_number: 0),
Form::Lettings::Pages::VoidDate.new(nil, nil, self),
Form::Lettings::Pages::VoidDateValueCheck.new(nil, nil, self),
Form::Lettings::Pages::PropertyMajorRepairs.new(nil, nil, self),

1
app/models/form/sales/pages/last_accommodation.rb

@ -2,6 +2,7 @@ class Form::Sales::Pages::LastAccommodation < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "last_accommodation"
@copy_key = "sales.household_situation.last_accommodation"
end
def questions

1
app/models/form/sales/pages/last_accommodation_la.rb

@ -2,6 +2,7 @@ class Form::Sales::Pages::LastAccommodationLa < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "last_accommodation_la"
@copy_key = "sales.household_situation.last_accommodation_la"
@depends_on = [{
"is_previous_la_inferred" => false,
}]

2
app/models/form/sales/questions/buyer1_previous_tenure.rb

@ -2,8 +2,6 @@ class Form::Sales::Questions::Buyer1PreviousTenure < ::Form::Question
def initialize(id, hsh, page)
super
@id = "prevten"
@check_answer_label = "Buyer 1’s previous tenure"
@header = "What was buyer 1’s previous tenure?"
@type = "radio"
@answer_options = answer_options
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]

3
app/models/form/sales/questions/buyer2_living_in.rb

@ -2,10 +2,7 @@ class Form::Sales::Questions::Buyer2LivingIn < ::Form::Question
def initialize(id, hsh, page)
super
@id = "buy2living"
@check_answer_label = "Buyer 2 living at the same address"
@header = "At the time of purchase, was buyer 2 living at the same address as buyer 1?"
@type = "radio"
@hint_text = ""
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

7
app/models/form/sales/questions/buyers_organisations.rb

@ -2,10 +2,7 @@ class Form::Sales::Questions::BuyersOrganisations < ::Form::Question
def initialize(id, hsh, page)
super
@id = "buyers_organisations"
@check_answer_label = "Organisations buyers were registered with"
@header = "What organisations were the buyers registered with?"
@type = "checkbox"
@hint_text = "Select all that apply. This question is optional. If no options are applicable, leave the options blank, and select save and continue."
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end
@ -27,9 +24,5 @@ class Form::Sales::Questions::BuyersOrganisations < ::Form::Question
}
end
def unanswered_error_message
"At least one option must be selected of these four"
end
QUESTION_NUMBER_FROM_YEAR = { 2023 => 59, 2024 => 61 }.freeze
end

4
app/models/form/sales/questions/previous_la_known.rb

@ -2,11 +2,9 @@ class Form::Sales::Questions::PreviousLaKnown < ::Form::Question
def initialize(id, hsh, page)
super
@id = "previous_la_known"
@check_answer_label = "Local authority of buyer 1’s last settled accommodation"
@header = "Do you know the local authority of buyer 1’s last settled accommodation?"
@copy_key = "sales.household_situation.last_accommodation_la.previous_la_known"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@hint_text = "This is also known as the household’s 'last settled home'"
@hidden_in_check_answers = {
"depends_on" => [
{

3
app/models/form/sales/questions/previous_postcode.rb

@ -2,8 +2,7 @@ class Form::Sales::Questions::PreviousPostcode < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ppostcode_full"
@check_answer_label = "Postcode of buyer 1’s last settled accommodation"
@header = "Postcode"
@copy_key = "sales.household_situation.last_accommodation.ppostcode_full"
@type = "text"
@width = 5
@inferred_check_answers_value = [{

4
app/models/form/sales/questions/previous_postcode_known.rb

@ -2,14 +2,12 @@ class Form::Sales::Questions::PreviousPostcodeKnown < ::Form::Question
def initialize(id, hsh, page)
super
@id = "ppcodenk"
@check_answer_label = "Buyer 1’s last settled accommodation"
@header = "Do you know the postcode of buyer 1’s last settled accommodation?"
@copy_key = "sales.household_situation.last_accommodation.ppcodenk"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@conditional_for = {
"ppostcode_full" => [0],
}
@hint_text = "This is also known as the household’s 'last settled home'"
@hidden_in_check_answers = {
"depends_on" => [
{

3
app/models/form/sales/questions/previous_tenure_buyer2.rb

@ -2,10 +2,7 @@ class Form::Sales::Questions::PreviousTenureBuyer2 < ::Form::Question
def initialize(id, hsh, page)
super
@id = "prevtenbuy2"
@check_answer_label = "Buyer 2’s previous tenure"
@header = "What was buyer 2’s previous tenure?"
@type = "radio"
@hint_text = ""
@answer_options = ANSWER_OPTIONS
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end

3
app/models/form/sales/questions/prevloc.rb

@ -2,8 +2,7 @@ class Form::Sales::Questions::Prevloc < ::Form::Question
def initialize(id, hsh, page)
super
@id = "prevloc"
@check_answer_label = "Local authority of buyer 1’s last settled accommodation"
@header = "Select a local authority"
@copy_key = "sales.household_situation.last_accommodation_la.prevloc"
@type = "select"
@inferred_check_answers_value = [{
"condition" => {

8
app/models/validations/soft_validations.rb

@ -27,6 +27,14 @@ module Validations::SoftValidations
weekly_net_income.between?(applicable_income_range.hard_min, applicable_income_range.soft_min)
end
def rent_soft_validation_triggered?
rent_in_soft_min_range? || rent_in_soft_max_range?
end
def rent_soft_validation_higher_or_lower_text
rent_in_soft_min_range? ? "lower" : "higher"
end
def rent_in_soft_min_range?
return unless brent && weekly_value(brent) && startdate

4
app/views/content/accessibility_statement.md

@ -32,11 +32,11 @@ If you need information on this website in a different format like accessible PD
We’ll consider your request and get back to you in 2 working days.
You can also [contact us through the helpdesk](https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
You can also [contact us through the helpdesk](https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
### Reporting accessibility problems with this website
We’re always looking to improve the accessibility of this website. If you find any problems not listed on this page or think we’re not meeting accessibility requirements, [contact the helpdesk](https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
We’re always looking to improve the accessibility of this website. If you find any problems not listed on this page or think we’re not meeting accessibility requirements, [contact the helpdesk](https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
### Enforcement procedure

10
app/views/organisations/duplicate_schemes.html.erb

@ -56,6 +56,8 @@
</ul>
<% end %>
<p class="govuk-body">The links below open in a new tab.</p>
<%= govuk_table do |table| %>
<%= table.with_head do |head| %>
<% head.with_row do |row| %>
@ -69,7 +71,7 @@
<ol class="govuk-list govuk-list--number">
<% duplicate_set.each do |scheme| %>
<li>
<%= govuk_link_to scheme.service_name, scheme %>
<%= govuk_link_to scheme.service_name, scheme, target: "#" %>
</li>
<% end %>
</ol>
@ -93,6 +95,8 @@
</ul>
<% end %>
<p class="govuk-body">The links below open in a new tab.</p>
<%= govuk_table do |table| %>
<%= table.with_head do |head| %>
<% head.with_row do |row| %>
@ -107,13 +111,13 @@
<ol class="govuk-list govuk-list--number">
<% duplicate_set[:locations].each do |location| %>
<li>
<%= govuk_link_to location.name, scheme_location_path(location) %>
<%= govuk_link_to location.name, scheme_location_path(location), target: "#" %>
</li>
<% end %>
</ol>
<% end %>
<% row.with_cell do %>
<%= govuk_link_to duplicate_set[:scheme].service_name, duplicate_set[:scheme] %>
<%= govuk_link_to duplicate_set[:scheme].service_name, duplicate_set[:scheme], target: "#" %>
<% end %>
<% end %>
<% end %>

323
config/locales/forms/2023/lettings/household_characteristics.en.yml

@ -0,0 +1,323 @@
en:
forms:
2023:
lettings:
household_characteristics:
declaration:
page_header: "Ministry of Housing, Communities and Local Government privacy notice"
check_answer_label: "Tenant has seen the privacy notice"
hint_text: ""
question_text: "Declaration"
hhmemb:
page_header: ""
check_answer_label: "Number of household members"
hint_text: "You can provide details for a maximum of 8 people."
question_text: "How many people live in the household for this letting?"
age1:
page_header: ""
age1_known:
check_answer_label: ""
hint_text: "The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Do you know the lead tenant’s age?"
age1:
check_answer_label: "Lead tenant’s age"
hint_text: ""
question_text: "Age"
sex1:
page_header: ""
check_answer_label: "Lead tenant’s gender identity"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of these best describes the lead tenant’s gender identity?"
ethnic_group:
page_header: ""
check_answer_label: "Lead tenant’s ethnic group"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "What is the lead tenant’s ethnic group?"
ethnic:
ethnic_background_black:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of the following best describes lead tenant’s Black, African, Caribbean or Black British background?"
ethnic_background_asian:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of the following best describes lead tenant’s Asian or Asian British background?"
ethnic_background_arab:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of the following best describes the lead tenant’s Arab background?"
ethnic_background_mixed:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of the following best describes lead tenant’s Mixed or Multiple ethnic groups background?"
ethnic_background_white:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of the following best describes lead tenant’s White background?"
national:
page_header: ""
check_answer_label: "Lead tenant’s nationality"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "What is the nationality of the lead tenant?"
ecstat1:
page_header: ""
check_answer_label: "Lead tenant’s working situation"
hint_text: "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest."
question_text: "Which of these best describes the lead tenant’s working situation?"
details_known_2:
page_header: "You’ve given us the details for 1 person in the household"
check_answer_label: "Details known for person 2"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 2?"
relat2:
page_header: ""
check_answer_label: "Person 2’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 2’s relationship to the lead tenant?"
age2:
page_header: ""
age2_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 2’s age?"
age2:
check_answer_label: "Person 2’s age"
hint_text: ""
question_text: "Age"
sex2:
page_header: ""
check_answer_label: "Person 2’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 2’s gender identity?"
ecstat2:
page_header: ""
check_answer_label: "Person 2’s working situation"
hint_text: ""
question_text: "Which of these best describes person 2’s working situation?"
details_known_3:
page_header: "You’ve given us the details for 2 people in the household"
check_answer_label: "Details known for person 3"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 3?"
relat3:
page_header: ""
check_answer_label: "Person 3’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 3’s relationship to the lead tenant?"
age3:
page_header: ""
age3_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 3’s age?"
age3:
check_answer_label: "Person 3’s age"
hint_text: ""
question_text: "Age"
sex3:
page_header: ""
check_answer_label: "Person 3’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 3’s gender identity?"
ecstat3:
page_header: ""
check_answer_label: "Person 3’s working situation"
hint_text: ""
question_text: "Which of these best describes person 3’s working situation?"
details_known_4:
page_header: "You’ve given us the details for 3 people in the household"
check_answer_label: "Details known for person 4"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 4?"
relat4:
page_header: ""
check_answer_label: "Person 4’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 4’s relationship to the lead tenant?"
age4:
page_header: ""
age4_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 4’s age?"
age4:
check_answer_label: "Person 4’s age"
hint_text: ""
question_text: "Age"
sex4:
page_header: ""
check_answer_label: "Person 4’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 4’s gender identity?"
ecstat4:
page_header: ""
check_answer_label: "Person 4’s working situation"
hint_text: ""
question_text: "Which of these best describes person 4’s working situation?"
details_known_5:
page_header: "You’ve given us the details for 4 people in the household"
check_answer_label: "Details known for person 5"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 5?"
relat5:
page_header: ""
check_answer_label: "Person 5’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 5’s relationship to the lead tenant?"
age5:
page_header: ""
age5_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 5’s age?"
age5:
check_answer_label: "Person 5’s age"
hint_text: ""
question_text: "Age"
sex5:
page_header: ""
check_answer_label: "Person 5’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 5’s gender identity?"
ecstat5:
page_header: ""
check_answer_label: "Person 5’s working situation"
hint_text: ""
question_text: "Which of these best describes person 5’s working situation?"
details_known_6:
page_header: "You’ve given us the details for 5 people in the household"
check_answer_label: "Details known for person 6"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 6?"
relat6:
page_header: ""
check_answer_label: "Person 6’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 6’s relationship to the lead tenant?"
age6:
page_header: ""
age6_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 6’s age?"
age6:
check_answer_label: "Person 6’s age"
hint_text: ""
question_text: "Age"
sex6:
page_header: ""
check_answer_label: "Person 6’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 6’s gender identity?"
ecstat6:
page_header: ""
check_answer_label: "Person 6’s working situation"
hint_text: ""
question_text: "Which of these best describes person 6’s working situation?"
details_known_7:
page_header: "You’ve given us the details for 6 people in the household"
check_answer_label: "Details known for person 7"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 7?"
relat7:
page_header: ""
check_answer_label: "Person 7’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 7’s relationship to the lead tenant?"
age7:
page_header: ""
age7_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 7’s age?"
age7:
check_answer_label: "Person 7’s age"
hint_text: ""
question_text: "Age"
sex7:
page_header: ""
check_answer_label: "Person 7’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 7’s gender identity?"
ecstat7:
page_header: ""
check_answer_label: "Person 7’s working situation"
hint_text: ""
question_text: "Which of these best describes person 7’s working situation?"
details_known_8:
page_header: "You’ve given us the details for 7 people in the household"
check_answer_label: "Details known for person 8"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 8?"
relat8:
page_header: ""
check_answer_label: "Person 8’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 8’s relationship to the lead tenant?"
age8:
page_header: ""
age8_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 8’s age?"
age8:
check_answer_label: "Person 8’s age"
hint_text: ""
question_text: "Age"
sex8:
page_header: ""
check_answer_label: "Person 8’s gender identity"
hint_text: ""
question_text: "Which of these best describes person 8’s gender identity?"
ecstat8:
page_header: ""
check_answer_label: "Person 8’s working situation"
hint_text: ""
question_text: "Which of these best describes person 8’s working situation?"

66
config/locales/forms/2023/lettings/tenancy_information.en.yml

@ -0,0 +1,66 @@
en:
forms:
2023:
lettings:
tenancy_information:
joint:
page_header: ""
check_answer_label: "Is this a joint tenancy?"
hint_text: ""
question_text: "Is this a joint tenancy?"
startertenancy:
page_header: ""
check_answer_label: "Is this a starter or introductory tenancy?"
hint_text: "This is also known as an ‘introductory period’."
question_text: "Is this a starter tenancy?"
tenancy:
tenancy_type:
page_header: ""
tenancy:
check_answer_label: "Type of main tenancy"
hint_text: ""
question_text: "What is the type of tenancy?"
tenancyother:
check_answer_label: ""
hint_text: ""
question_text: "Please state the tenancy type"
starter_tenancy_type:
page_header: ""
tenancy:
check_answer_label: "Type of main tenancy after the starter period has ended"
hint_text: "This is also known as an ‘introductory period’."
question_text: "What is the type of tenancy after the starter period has ended?"
tenancyother:
check_answer_label: ""
hint_text: ""
question_text: "Please state the tenancy type"
tenancylength:
tenancy_length:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_affordable_rent:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period.</br>The minimum period is 2 years for social or affordable rent general needs logs and you do not need a log for shorter tenancies."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_intermediate_rent:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period.</br>The minimum period is 1 year for intermediate rent general needs logs and you do not need a log for shorter tenancies."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_periodic:
page_header: ""
check_answer_label: "Length of periodic tenancy"
hint_text: "As this is a periodic tenancy, this question is optional. If you do not have the information available click save and continue"
question_text: "What is the length of the periodic tenancy to the nearest year?"
sheltered:
page_header: ""
check_answer_label: "Is this letting in sheltered accommodation?"
hint_text: "Sheltered housing and special retirement housing are for tenants with low-level care and support needs. This typically provides some limited support to enable independent living, such as alarm-based assistance or a scheme manager.</br></br>Extra care housing is for tenants with medium to high care and support needs, often with 24 hour access to support staff provided by an agency registered with the Care Quality Commission."
question_text: "Is this letting in sheltered accommodation?"

50
config/locales/forms/2023/sales/household_situation.en.yml

@ -0,0 +1,50 @@
en:
forms:
2023:
sales:
household_situation:
prevten:
page_header: ""
check_answer_label: "Buyer 1’s previous tenure"
hint_text: ""
question_text: "What was buyer 1’s previous tenure?"
last_accommodation:
page_header: ""
ppcodenk:
check_answer_label: "Buyer 1’s last settled accommodation"
hint_text: "This is also known as the household’s 'last settled home'"
question_text: "Do you know the postcode of buyer 1’s last settled accommodation?"
ppostcode_full:
check_answer_label: "Postcode of buyer 1’s last settled accommodation"
hint_text: ""
question_text: "Postcode"
last_accommodation_la:
page_header: ""
previous_la_known:
check_answer_label: "Local authority of buyer 1’s last settled accommodation"
hint_text: "This is also known as the household’s 'last settled home'"
question_text: "Do you know the local authority of buyer 1’s last settled accommodation?"
prevloc:
check_answer_label: "Local authority of buyer 1’s last settled accommodation"
hint_text: ""
question_text: "Select a local authority"
buyers_organisations:
page_header: ""
check_answer_label: "Organisations buyers were registered with"
hint_text: "Select all that apply. This question is optional. If no options are applicable, leave the options blank, and select save and continue."
question_text: "What organisations were the buyers registered with?"
buy2living:
page_header: ""
check_answer_label: "Buyer 2 living at the same address"
hint_text: ""
header: "At the time of purchase, was buyer 2 living at the same address as buyer 1?"
prevtenbuy2:
page_header: ""
check_answer_label: "Buyer 2’s previous tenure"
hint_text: ""
question_text: "What was buyer 2’s previous tenure?"

66
config/locales/forms/2024/lettings/tenancy_information.en.yml

@ -0,0 +1,66 @@
en:
forms:
2024:
lettings:
tenancy_information:
joint:
page_header: ""
check_answer_label: "Is this a joint tenancy?"
hint_text: "This is where two or more people are named on the tenancy agreement"
question_text: "Is this a joint tenancy?"
startertenancy:
page_header: ""
check_answer_label: "Is this a starter or introductory tenancy?"
hint_text: "If the tenancy has an ‘introductory period’ answer ‘yes’.<br><br>You should submit a CORE log at the beginning of the starter tenancy or introductory period, with the best information you have at the time. You do not need to submit a log when a tenant later rolls onto the main tenancy."
question_text: "Is this a starter tenancy?"
tenancy:
tenancy_type:
page_header: ""
tenancy:
check_answer_label: "Type of main tenancy"
hint_text: ""
question_text: "What is the type of tenancy?"
tenancyother:
check_answer_label: ""
hint_text: ""
question_text: "Please state the tenancy type"
starter_tenancy_type:
page_header: ""
tenancy:
check_answer_label: "Type of main tenancy after the starter or introductory period has ended"
hint_text: ""
question_text: "What is the type of tenancy after the starter or introductory period has ended?"
tenancyother:
check_answer_label: ""
hint_text: ""
question_text: "Please state the tenancy type"
tenancylength:
tenancy_length:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_affordable_rent:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period.</br>The minimum period is 2 years for social or affordable rent general needs logs. You do not need to submit CORE logs for these types of tenancies if they are shorter than 2 years."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_intermediate_rent:
page_header: ""
check_answer_label: "Length of fixed-term tenancy"
hint_text: "Do not include the starter or introductory period.</br>The minimum period is 1 year for intermediate rent general needs logs. You do not need to submit CORE logs for these types of tenancies if they are shorter than 1 year."
question_text: "What is the length of the fixed-term tenancy to the nearest year?"
tenancy_length_periodic:
page_header: ""
check_answer_label: "Length of periodic tenancy"
hint_text: "As this is a periodic tenancy, this question is optional. If you do not have the information available click save and continue"
question_text: "What is the length of the periodic tenancy to the nearest year?"
sheltered:
page_header: ""
check_answer_label: "Is this letting in sheltered accommodation?"
hint_text: "Sheltered housing and special retirement housing are for tenants with low-level care and support needs. This typically provides some limited support to enable independent living, such as alarm-based assistance or a scheme manager.</br></br>Extra care housing is for tenants with medium to high care and support needs, often with 24 hour access to support staff provided by an agency registered with the Care Quality Commission."
question_text: "Is this letting in sheltered accommodation?"

50
config/locales/forms/2024/sales/household_situation.en.yml

@ -0,0 +1,50 @@
en:
forms:
2024:
sales:
household_situation:
prevten:
page_header: ""
check_answer_label: "Buyer 1’s previous tenure"
hint_text: ""
question_text: "What was buyer 1’s previous tenure?"
last_accommodation:
page_header: ""
ppcodenk:
check_answer_label: "Buyer 1’s last settled accommodation"
hint_text: "This is also known as the household’s 'last settled home'"
question_text: "Do you know the postcode of buyer 1’s last settled accommodation?"
ppostcode_full:
check_answer_label: "Postcode of buyer 1’s last settled accommodation"
hint_text: ""
question_text: "Postcode"
last_accommodation_la:
page_header: ""
previous_la_known:
check_answer_label: "Local authority of buyer 1’s last settled accommodation"
hint_text: "This is also known as the household’s 'last settled home'"
question_text: "Do you know the local authority of buyer 1’s last settled accommodation?"
prevloc:
check_answer_label: "Local authority of buyer 1’s last settled accommodation"
hint_text: ""
question_text: "Select a local authority"
buyers_organisations:
page_header: ""
check_answer_label: "Organisations buyers were registered with"
hint_text: "Select all that apply. This question is optional. If no options are applicable, leave the options blank, and select save and continue."
question_text: "What organisations were the buyers registered with?"
buy2living:
page_header: ""
check_answer_label: "Buyer 2 living at the same address"
hint_text: ""
question_text: "At the time of purchase, was buyer 2 living at the same address as buyer 1?"
prevtenbuy2:
page_header: ""
check_answer_label: "Buyer 2’s previous tenure"
hint_text: ""
question_text: "What was buyer 2’s previous tenure?"

322
config/locales/forms/2024/sales/lettings/household_characteristics.en.yml

@ -0,0 +1,322 @@
en:
forms:
2024:
lettings:
household_characteristics:
hhmemb:
page_header: ""
check_answer_label: "Number of household members"
hint_text: "You can provide details for a maximum of 8 people."
question_text: "How many people live in the household for this letting?"
age1:
page_header: ""
age1_known:
check_answer_label: ""
hint_text: "The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same amount of paid work, the lead tenant is whoever is the oldest."
question_text: "Do you know the lead tenant’s age?"
age1:
check_answer_label: "Lead tenant’s age"
hint_text: ""
question_text: "Age"
sex1:
page_header: ""
check_answer_label: "Lead tenant’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes the lead tenant’s gender identity?"
ethnic_group:
page_header: ""
check_answer_label: "Lead tenant’s ethnic group"
hint_text: ""
question_text: "What is the lead tenant’s ethnic group?"
ethnic:
ethnic_background_black:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: ""
question_text: "Which of the following best describes lead tenant’s Black, African, Caribbean or Black British background?"
ethnic_background_asian:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: ""
question_text: "Which of the following best describes lead tenant’s Asian or Asian British background?"
ethnic_background_arab:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: ""
question_text: "Which of the following best describes the lead tenant’s Arab background?"
ethnic_background_mixed:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: ""
question_text: "Which of the following best describes lead tenant’s Mixed or Multiple ethnic groups background?"
ethnic_background_white:
page_header: ""
check_answer_label: "Lead tenant’s ethnic background"
hint_text: ""
question_text: "Which of the following best describes lead tenant’s White background?"
nationality_all:
page_header: ""
nationality_all:
check_answer_label: "Lead tenant’s nationality"
hint_text: ""
question_text: "Enter a nationality"
nationality_all_group:
check_answer_label: "Lead tenant’s nationality"
hint_text: "If the lead tenant is a dual national of the United Kingdom and another country, enter United Kingdom. If they are a dual national of two other countries, the tenant should decide which country to enter."
question_text: "What is the nationality of the lead tenant?"
ecstat1:
page_header: ""
check_answer_label: "Lead tenant’s working situation"
hint_text: ""
question_text: "Which of these best describes the lead tenant’s working situation?"
details_known_2:
page_header: "You’ve given us the details for 1 person in the household"
check_answer_label: "Details known for person 2"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 2?"
relat2:
page_header: ""
check_answer_label: "Person 2’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 2’s relationship to the lead tenant?"
age2:
page_header: ""
age2_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 2’s age?"
age2:
check_answer_label: "Person 2’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex2:
page_header: ""
check_answer_label: "Person 2’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 2’s gender identity?"
ecstat2:
page_header: ""
check_answer_label: "Person 2’s working situation"
hint_text: ""
question_text: "Which of these best describes person 2’s working situation?"
details_known_3:
page_header: "You’ve given us the details for 2 people in the household"
check_answer_label: "Details known for person 3"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 3?"
relat3:
page_header: ""
check_answer_label: "Person 3’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 3’s relationship to the lead tenant?"
age3:
page_header: ""
age3_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 3’s age?"
age3:
check_answer_label: "Person 3’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex3:
page_header: ""
check_answer_label: "Person 3’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 3’s gender identity?"
ecstat3:
page_header: ""
check_answer_label: "Person 3’s working situation"
hint_text: ""
question_text: "Which of these best describes person 3’s working situation?"
details_known_4:
page_header: "You’ve given us the details for 3 people in the household"
check_answer_label: "Details known for person 4"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 4?"
relat4:
page_header: ""
check_answer_label: "Person 4’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 4’s relationship to the lead tenant?"
age4:
page_header: ""
age4_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 4’s age?"
age4:
check_answer_label: "Person 4’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex4:
page_header: ""
check_answer_label: "Person 4’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 4’s gender identity?"
ecstat4:
page_header: ""
check_answer_label: "Person 4’s working situation"
hint_text: ""
question_text: "Which of these best describes person 4’s working situation?"
details_known_5:
page_header: "You’ve given us the details for 4 people in the household"
check_answer_label: "Details known for person 5"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 5?"
relat5:
page_header: ""
check_answer_label: "Person 5’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 5’s relationship to the lead tenant?"
age5:
page_header: ""
age5_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 5’s age?"
age5:
check_answer_label: "Person 5’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex5:
page_header: ""
check_answer_label: "Person 5’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 5’s gender identity?"
ecstat5:
page_header: ""
check_answer_label: "Person 5’s working situation"
hint_text: ""
question_text: "Which of these best describes person 5’s working situation?"
details_known_6:
page_header: "You’ve given us the details for 5 people in the household"
check_answer_label: "Details known for person 6"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 6?"
relat6:
page_header: ""
check_answer_label: "Person 6’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 6’s relationship to the lead tenant?"
age6:
page_header: ""
age6_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 6’s age?"
age6:
check_answer_label: "Person 6’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex6:
page_header: ""
check_answer_label: "Person 6’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 6’s gender identity?"
ecstat6:
page_header: ""
check_answer_label: "Person 6’s working situation"
hint_text: ""
question_text: "Which of these best describes person 6’s working situation?"
details_known_7:
page_header: "You’ve given us the details for 6 people in the household"
check_answer_label: "Details known for person 7"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 7?"
relat7:
page_header: ""
check_answer_label: "Person 7’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 7’s relationship to the lead tenant?"
age7:
page_header: ""
age7_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 7’s age?"
age7:
check_answer_label: "Person 7’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex7:
page_header: ""
check_answer_label: "Person 7’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 7’s gender identity?"
ecstat7:
page_header: ""
check_answer_label: "Person 7’s working situation"
hint_text: ""
question_text: "Which of these best describes person 7’s working situation?"
details_known_8:
page_header: "You’ve given us the details for 7 people in the household"
check_answer_label: "Details known for person 8"
hint_text: "You must provide details for everyone in the household if you know them."
question_text: "Do you know details for person 8?"
relat8:
page_header: ""
check_answer_label: "Person 8’s relationship to the lead tenant"
hint_text: ""
question_text: "What is person 8’s relationship to the lead tenant?"
age8:
page_header: ""
age8_known:
check_answer_label: ""
hint_text: ""
question_text: "Do you know person 8’s age?"
age8:
check_answer_label: "Person 8’s age"
hint_text: "Answer 1 for children aged under 1 year old"
question_text: "Age"
sex8:
page_header: ""
check_answer_label: "Person 8’s gender identity"
hint_text: "This should be however they personally choose to identify from the options below. This may or may not be the same as their biological sex or the sex they were assigned at birth."
question_text: "Which of these best describes person 8’s gender identity?"
ecstat8:
page_header: ""
check_answer_label: "Person 8’s working situation"
hint_text: ""
question_text: "Which of these best describes person 8’s working situation?"

4
spec/components/data_protection_confirmation_banner_component_spec.rb

@ -27,7 +27,7 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
expect(component.display_banner?).to eq(true)
expect(render).to have_link(
"Contact helpdesk to assign a data protection officer",
href: "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11",
href: "https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11",
)
expect(render).to have_selector("p", text: "To create logs your organisation must state a data protection officer. They must sign the Data Sharing Agreement.")
end
@ -131,7 +131,7 @@ RSpec.describe DataProtectionConfirmationBannerComponent, type: :component do
expect(component.display_banner?).to eq(true)
expect(render).to have_link(
"Contact helpdesk to assign a data protection officer",
href: "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11",
href: "https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11",
)
expect(render).to have_selector("p", text: "To create logs your organisation must state a data protection officer. They must sign the Data Sharing Agreement.")
end

4
spec/mailers/csv_download_mailer_spec.rb

@ -42,7 +42,7 @@ RSpec.describe CsvDownloadMailer do
## Missing town or city
The town or city in some logs is missing. This data is required in the new version of CORE.\n",
how_to_fix: "You need to:\n
- download [this spreadsheet for lettings logs](#{link}). This link will expire in one week. To request another link, [contact the CORE helpdesk](https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
- download [this spreadsheet for lettings logs](#{link}). This link will expire in one week. To request another link, [contact the CORE helpdesk](https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
- fill in the missing address data
- check that the existing address data is correct\n",
duration: "20 minutes",
@ -70,7 +70,7 @@ In some of your logs, the UPRN is the same as the purchaser code, but these are
If a log has the correct UPRN, leave the UPRN unchanged. If the UPRN is incorrect, clear the value and provide the full address instead. Alternatively, you can change the UPRN on the CORE system.\n",
how_to_fix: "You need to:\n
- download [this spreadsheet for sales logs](#{link}). This link will expire in one week. To request another link, [contact the CORE helpdesk](https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
- download [this spreadsheet for sales logs](#{link}). This link will expire in one week. To request another link, [contact the CORE helpdesk](https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11).
- check that the address data is correct
- correct any address errors\n",
duration: "20 minutes",

33
spec/models/form/lettings/pages/max_rent_value_check_spec.rb

@ -1,33 +0,0 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::MaxRentValueCheck, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { "max_rent_value_check" }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1))) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[rent_value_check])
end
it "has the correct id" do
expect(page.id).to eq("max_rent_value_check")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "rent_in_soft_max_range?" => true }])
end
it "has the correct title_text" do
expect(page.title_text).to eq({ "arguments" => [{ "i18n_template" => "brent", "key" => "brent", "label" => true }], "translation" => "soft_validations.rent.outside_range_title" })
end
it "has the correct interruption_screen_question_ids" do
expect(page.interruption_screen_question_ids).to eq(%w[brent period startdate uprn postcode_full la beds rent_type needstype])
end
end

42
spec/models/form/lettings/pages/min_rent_value_check_spec.rb

@ -1,42 +0,0 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::MinRentValueCheck, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { "min_rent_value_check" }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1))) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has the correct description" do
expect(page.description).to be nil
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[rent_value_check])
end
it "has the correct id" do
expect(page.id).to eq("min_rent_value_check")
end
it "has correct depends_on" do
expect(page.depends_on).to eq(
[{ "rent_in_soft_min_range?" => true }],
)
end
it "has the correct title_text" do
expect(page.title_text).to eq({
"translation" => "soft_validations.rent.outside_range_title",
"arguments" => [{ "i18n_template" => "brent", "key" => "brent", "label" => true }],
})
end
it "has the correct interruption_screen_question_ids" do
expect(page.interruption_screen_question_ids).to eq(%w[brent period startdate uprn postcode_full la beds rent_type needstype])
end
end

27
spec/models/form/lettings/pages/person_age_spec.rb

@ -1,12 +1,11 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::PersonAge, type: :model do
subject(:page) { described_class.new(nil, page_definition, subsection, person_index:, person_type:) }
subject(:page) { described_class.new(nil, page_definition, subsection, person_index:) }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1), start_year_after_2024?: false)) }
let(:person_index) { 2 }
let(:person_type) { "non_child" }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
@ -21,33 +20,17 @@ RSpec.describe Form::Lettings::Pages::PersonAge, type: :model do
expect(page.questions.map(&:id)).to eq(%w[age2_known age2])
end
context "when child" do
let(:person_type) { "child" }
it "has the correct id" do
expect(page.id).to eq("person_2_age_child")
expect(page.id).to eq("person_2_age")
end
it "has correct depends_on" do
expect(page.depends_on).to eq(
[{ "details_known_2" => 0, "person_2_child_relation?" => true }],
[{ "details_known_2" => 0 }],
)
end
end
context "when not child" do
it "has the correct id" do
expect(page.id).to eq("person_2_age_non_child")
end
it "has correct depends_on" do
expect(page.depends_on).to eq(
[{ "details_known_2" => 0, "person_2_child_relation?" => false }],
)
end
end
end
context "with person 3" do
let(:person_index) { 3 }
@ -56,12 +39,12 @@ RSpec.describe Form::Lettings::Pages::PersonAge, type: :model do
end
it "has the correct id" do
expect(page.id).to eq("person_3_age_non_child")
expect(page.id).to eq("person_3_age")
end
it "has correct depends_on" do
expect(page.depends_on).to eq(
[{ "details_known_3" => 0, "person_3_child_relation?" => false }],
[{ "details_known_3" => 0 }],
)
end
end

3
spec/models/form/lettings/questions/age_spec.rb

@ -1,12 +1,11 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::Age, type: :model do
subject(:question) { described_class.new(nil, question_definition, page, person_index:, person_type:) }
subject(:question) { described_class.new(nil, question_definition, page, person_index:) }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 4), start_year_after_2024?: false))) }
let(:person_index) { 2 }
let(:person_type) { "non_child" }
it "has correct page" do
expect(question.page).to eq(page)

32
spec/models/form/lettings/questions/max_rent_value_check_spec.rb

@ -1,32 +0,0 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::MaxRentValueCheck, type: :model do
subject(:question) { described_class.new(nil, question_definition, page, check_answers_card_number:) }
let(:question_definition) { nil }
let(:check_answers_card_number) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("rent_value_check")
end
it "has the correct type" do
expect(question.type).to eq("interruption_screen")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"0" => { "value" => "Yes" },
"1" => { "value" => "No" },
})
end
it "has the correct hidden_in_check_answers" do
expect(question.hidden_in_check_answers).to eq({ "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] })
end
end

32
spec/models/form/lettings/questions/min_rent_value_check_spec.rb

@ -1,32 +0,0 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::MinRentValueCheck, type: :model do
subject(:question) { described_class.new(nil, question_definition, page, check_answers_card_number:) }
let(:question_definition) { nil }
let(:check_answers_card_number) { nil }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("rent_value_check")
end
it "has the correct type" do
expect(question.type).to eq("interruption_screen")
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"0" => { "value" => "Yes" },
"1" => { "value" => "No" },
})
end
it "has the correct hidden_in_check_answers" do
expect(question.hidden_in_check_answers).to eq({ "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] })
end
end

2
spec/models/form/lettings/questions/starter_tenancy_type_spec.rb

@ -5,7 +5,7 @@ RSpec.describe Form::Lettings::Questions::StarterTenancyType, type: :model do
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:page) { instance_double(Form::Page, id: "starter_tenancy_type") }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form, start_date: Time.zone.local(2023, 4, 1)) }

2
spec/models/form/lettings/questions/tenancy_length_affordable_rent_spec.rb

@ -5,7 +5,7 @@ RSpec.describe Form::Lettings::Questions::TenancyLengthAffordableRent, type: :mo
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:page) { instance_double(Form::Page, id: "affordable_tenancy_length") }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form, start_date: Time.zone.local(2023, 4, 1)) }

2
spec/models/form/lettings/questions/tenancy_length_intermediate_rent_spec.rb

@ -5,7 +5,7 @@ RSpec.describe Form::Lettings::Questions::TenancyLengthIntermediateRent, type: :
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:page) { instance_double(Form::Page, id: "intermediate_tenancy_length") }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form, start_date: Time.zone.local(2023, 4, 1)) }

2
spec/models/form/lettings/questions/tenancy_length_periodic_spec.rb

@ -5,7 +5,7 @@ RSpec.describe Form::Lettings::Questions::TenancyLengthPeriodic, type: :model do
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))), id: "periodic_tenancy_length") }
it "has correct page" do
expect(question.page).to eq(page)

2
spec/models/form/lettings/questions/tenancy_length_spec.rb

@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Form::Lettings::Questions::TenancyLength, type: :model do
subject(:question) { described_class.new(nil, nil, page) }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))), id: "tenancy_length") }
it "has correct page" do
expect(question.page).to eq(page)

2
spec/models/form/lettings/questions/tenancy_other_spec.rb

@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Form::Lettings::Questions::TenancyOther, type: :model do
subject(:question) { described_class.new(nil, nil, page) }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))), id: "tenancy_type") }
it "has correct page" do
expect(question.page).to eq(page)

2
spec/models/form/lettings/questions/tenancy_type_spec.rb

@ -3,7 +3,7 @@ require "rails_helper"
RSpec.describe Form::Lettings::Questions::TenancyType, type: :model do
subject(:question) { described_class.new(nil, nil, page) }
let(:page) { instance_double(Form::Page) }
let(:page) { instance_double(Form::Page, id: "tenancy_type") }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form, start_date: Time.zone.local(2023, 4, 1)) }

42
spec/models/form/lettings/subsections/household_characteristics_spec.rb

@ -49,8 +49,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_lead_tenant_over_retirement_value_check
person_2_known
person_2_relationship_to_lead
person_2_age_child
person_2_age_non_child
person_2_age
no_females_pregnant_household_person_2_age_value_check
females_in_soft_age_range_in_pregnant_household_person_2_age_value_check
age_2_under_retirement_value_check
@ -64,8 +63,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_2_over_retirement_value_check
person_3_known
person_3_relationship_to_lead
person_3_age_child
person_3_age_non_child
person_3_age
no_females_pregnant_household_person_3_age_value_check
females_in_soft_age_range_in_pregnant_household_person_3_age_value_check
age_3_under_retirement_value_check
@ -79,8 +77,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_3_over_retirement_value_check
person_4_known
person_4_relationship_to_lead
person_4_age_child
person_4_age_non_child
person_4_age
no_females_pregnant_household_person_4_age_value_check
females_in_soft_age_range_in_pregnant_household_person_4_age_value_check
age_4_under_retirement_value_check
@ -94,8 +91,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_4_over_retirement_value_check
person_5_known
person_5_relationship_to_lead
person_5_age_child
person_5_age_non_child
person_5_age
no_females_pregnant_household_person_5_age_value_check
females_in_soft_age_range_in_pregnant_household_person_5_age_value_check
age_5_under_retirement_value_check
@ -109,8 +105,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_5_over_retirement_value_check
person_6_known
person_6_relationship_to_lead
person_6_age_child
person_6_age_non_child
person_6_age
no_females_pregnant_household_person_6_age_value_check
females_in_soft_age_range_in_pregnant_household_person_6_age_value_check
age_6_under_retirement_value_check
@ -124,8 +119,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_6_over_retirement_value_check
person_7_known
person_7_relationship_to_lead
person_7_age_child
person_7_age_non_child
person_7_age
no_females_pregnant_household_person_7_age_value_check
females_in_soft_age_range_in_pregnant_household_person_7_age_value_check
age_7_under_retirement_value_check
@ -139,8 +133,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
working_situation_7_over_retirement_value_check
person_8_known
person_8_relationship_to_lead
person_8_age_child
person_8_age_non_child
person_8_age
no_females_pregnant_household_person_8_age_value_check
females_in_soft_age_range_in_pregnant_household_person_8_age_value_check
age_8_under_retirement_value_check
@ -191,8 +184,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_2_relationship_to_lead
relationship_2_partner_under_16_value_check
relationship_2_multiple_partners_value_check
person_2_age_child
person_2_age_non_child
person_2_age
no_females_pregnant_household_person_2_age_value_check
females_in_soft_age_range_in_pregnant_household_person_2_age_value_check
age_2_under_retirement_value_check
@ -209,8 +201,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_3_relationship_to_lead
relationship_3_partner_under_16_value_check
relationship_3_multiple_partners_value_check
person_3_age_child
person_3_age_non_child
person_3_age
no_females_pregnant_household_person_3_age_value_check
females_in_soft_age_range_in_pregnant_household_person_3_age_value_check
age_3_under_retirement_value_check
@ -227,8 +218,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_4_relationship_to_lead
relationship_4_partner_under_16_value_check
relationship_4_multiple_partners_value_check
person_4_age_child
person_4_age_non_child
person_4_age
no_females_pregnant_household_person_4_age_value_check
females_in_soft_age_range_in_pregnant_household_person_4_age_value_check
age_4_under_retirement_value_check
@ -245,8 +235,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_5_relationship_to_lead
relationship_5_partner_under_16_value_check
relationship_5_multiple_partners_value_check
person_5_age_child
person_5_age_non_child
person_5_age
no_females_pregnant_household_person_5_age_value_check
females_in_soft_age_range_in_pregnant_household_person_5_age_value_check
age_5_under_retirement_value_check
@ -263,8 +252,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_6_relationship_to_lead
relationship_6_partner_under_16_value_check
relationship_6_multiple_partners_value_check
person_6_age_child
person_6_age_non_child
person_6_age
no_females_pregnant_household_person_6_age_value_check
females_in_soft_age_range_in_pregnant_household_person_6_age_value_check
age_6_under_retirement_value_check
@ -281,8 +269,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_7_relationship_to_lead
relationship_7_partner_under_16_value_check
relationship_7_multiple_partners_value_check
person_7_age_child
person_7_age_non_child
person_7_age
no_females_pregnant_household_person_7_age_value_check
females_in_soft_age_range_in_pregnant_household_person_7_age_value_check
age_7_under_retirement_value_check
@ -299,8 +286,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_8_relationship_to_lead
relationship_8_partner_under_16_value_check
relationship_8_multiple_partners_value_check
person_8_age_child
person_8_age_non_child
person_8_age
no_females_pregnant_household_person_8_age_value_check
females_in_soft_age_range_in_pregnant_household_person_8_age_value_check
age_8_under_retirement_value_check

3
spec/models/form/lettings/subsections/income_and_benefits_spec.rb

@ -30,8 +30,7 @@ RSpec.describe Form::Lettings::Subsections::IncomeAndBenefits, type: :model do
rent_bi_weekly
rent_4_weekly
rent_monthly
brent_min_rent_value_check
brent_max_rent_value_check
brent_rent_value_check
scharge_value_check
pscharge_value_check
supcharg_value_check

42
spec/models/form/lettings/subsections/property_information_spec.rb

@ -17,36 +17,6 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do
allow(form).to receive(:start_year_after_2024?).and_return(false)
end
context "when 2022" do
let(:start_date) { Time.utc(2022, 2, 8) }
it "has correct pages" do
expect(property_information.pages.compact.map(&:id)).to eq(
%w[
property_postcode
property_local_authority
local_authority_min_rent_value_check
local_authority_max_rent_value_check
first_time_property_let_as_social_housing
property_let_type
property_vacancy_reason_not_first_let
property_vacancy_reason_first_let
property_number_of_times_relet
property_unit_type
property_building_type
property_wheelchair_accessible
property_number_of_bedrooms
beds_min_rent_value_check
beds_max_rent_value_check
void_date
void_date_value_check
property_major_repairs
property_major_repairs_value_check
],
)
end
end
context "when 2023" do
let(:start_date) { Time.utc(2023, 2, 8) }
@ -57,8 +27,7 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do
uprn_confirmation
address
property_local_authority
local_authority_min_rent_value_check
local_authority_max_rent_value_check
local_authority_rent_value_check
first_time_property_let_as_social_housing
property_let_type
property_vacancy_reason_not_first_let
@ -68,8 +37,7 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do
property_building_type
property_wheelchair_accessible
property_number_of_bedrooms
beds_min_rent_value_check
beds_max_rent_value_check
beds_rent_value_check
void_date
void_date_value_check
property_major_repairs
@ -96,8 +64,7 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do
uprn_selection
address
property_local_authority
local_authority_min_rent_value_check
local_authority_max_rent_value_check
local_authority_rent_value_check
first_time_property_let_as_social_housing
property_let_type
property_vacancy_reason_not_first_let
@ -106,8 +73,7 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do
property_building_type
property_wheelchair_accessible
property_number_of_bedrooms
beds_min_rent_value_check
beds_max_rent_value_check
beds_rent_value_check
void_date
void_date_value_check
property_major_repairs

2
spec/requests/organisations_controller_spec.rb

@ -497,7 +497,7 @@ RSpec.describe OrganisationsController, type: :request do
it "displays a link to merge organisations" do
expect(page).to have_content("To report a merge or update your organisation details, ")
expect(page).to have_link("contact the helpdesk", href: "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11")
expect(page).to have_link("contact the helpdesk", href: "https://mhclgdigital.atlassian.net/servicedesk/customer/portal/6/group/11")
end
it "does not display merge history if there is none" do

4
spec/services/documentation_generator_spec.rb

@ -89,7 +89,7 @@ describe DocumentationGenerator do
end
describe ":describe_soft_validations" do
let(:all_validation_methods) { ["rent_in_soft_min_range?"] }
let(:all_validation_methods) { ["rent_soft_validation_triggered?"] }
let(:response) do
{ "choices" => [{ "message" => { "tool_calls" => [{ "function" => { "arguments" =>
"{\n \"description\": \"Validates the format.\",\n \"validation_type\": \"format\",\n \"other_validated_models\": \"User\"}" } }] } }] }
@ -100,7 +100,7 @@ describe DocumentationGenerator do
it "creates new validation documentation records" do
expect { described_class.new.describe_soft_validations(client, all_validation_methods, all_helper_methods, log_type) }.to change(LogValidation, :count)
expect(LogValidation.where(validation_name: "rent_in_soft_min_range?").count).to be_positive
expect(LogValidation.where(validation_name: "rent_soft_validation_triggered?").count).to be_positive
any_validation = LogValidation.first
expect(any_validation.description).to eq("Validates the format.")
expect(any_validation.field).not_to be_empty

6
spec/services/merge/merge_organisations_service_spec.rb

@ -1317,9 +1317,9 @@ RSpec.describe Merge::MergeOrganisationsService do
merging_organisation.reload
expect(new_absorbing_organisation.owned_lettings_logs.count).to eq(2)
expect(new_absorbing_organisation.managed_lettings_logs.count).to eq(1)
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log.id).scheme).to eq(new_absorbing_organisation.owned_schemes.first)
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log.id).location).to eq(new_absorbing_organisation.owned_schemes.first.locations.first)
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log_no_location.id).scheme).to eq(new_absorbing_organisation.owned_schemes.first)
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log.id).scheme).to eq(new_absorbing_organisation.owned_schemes.find_by(service_name: scheme.service_name))
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log.id).location).to eq(new_absorbing_organisation.owned_schemes.find_by(service_name: scheme.service_name).locations.first)
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log_no_location.id).scheme).to eq(new_absorbing_organisation.owned_schemes.find_by(service_name: scheme.service_name))
expect(new_absorbing_organisation.owned_lettings_logs.find(owned_lettings_log_no_location.id).location).to eq(nil)
end

2
spec/views/merge_requests/show.html.erb_spec.rb

@ -30,7 +30,7 @@ RSpec.describe "merge_requests/show.html.erb", type: :view do
it "displays the helpdesk ticket details" do
expect(rendered).to have_selector("dt", text: "Helpdesk ticket")
if merge_request.helpdesk_ticket.present?
expect(rendered).to have_link(merge_request.helpdesk_ticket, href: "https://dluhcdigital.atlassian.net/browse/#{merge_request.helpdesk_ticket}")
expect(rendered).to have_link(merge_request.helpdesk_ticket, href: "https://mhclgdigital.atlassian.net/browse/#{merge_request.helpdesk_ticket}")
else
expect(rendered).to have_selector("dd", text: "You didn't answer this question")
end

Loading…
Cancel
Save