Browse Source

CLDC-3967 Use separate question text for shared vs discounted mscharge from 2025 (#3022)

* use separate question text for shared and discounted mscharge from 2025

* refactor and rename copy variables

* Revert "refactor and rename copy variables"

This reverts commit 2d7eadef5a.

* separate out shared ownership leasehold charge into separate service charge question

* Revert "separate out shared ownership leasehold charge into separate service charge question"

This reverts commit 13a930dcb6.

* separate out shared ownership leasehold charge into separate question but same variable

---------

Co-authored-by: Carolyn <carolyn.barker@softwire.com>
pull/3026/head v0.5.6
carolynbarker 3 weeks ago committed by GitHub
parent
commit
84a0f6711c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      app/models/form/sales/pages/service_charge.rb
  2. 4
      app/models/form/sales/questions/has_leasehold_charges.rb
  3. 27
      app/models/form/sales/questions/has_service_charge.rb
  4. 4
      app/models/form/sales/questions/leasehold_charges.rb
  5. 15
      app/models/form/sales/questions/service_charge.rb
  6. 2
      app/models/form/sales/subsections/shared_ownership_initial_purchase.rb
  7. 19
      config/locales/forms/2025/sales/sale_information.en.yml
  8. 29
      spec/models/form/sales/pages/service_charge_spec.rb
  9. 49
      spec/models/form/sales/questions/has_service_charge_spec.rb
  10. 37
      spec/models/form/sales/questions/service_charge_spec.rb
  11. 2
      spec/models/form/sales/subsections/shared_ownership_initial_purchase_spec.rb

13
app/models/form/sales/pages/service_charge.rb

@ -0,0 +1,13 @@
class Form::Sales::Pages::ServiceCharge < ::Form::Page
def initialize(id, hsh, subsection)
super
@copy_key = "sales.sale_information.servicecharges"
end
def questions
@questions ||= [
Form::Sales::Questions::HasServiceCharge.new(nil, nil, self),
Form::Sales::Questions::ServiceCharge.new(nil, nil, self),
]
end
end

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

@ -2,7 +2,6 @@ class Form::Sales::Questions::HasLeaseholdCharges < ::Form::Question
def initialize(id, hsh, subsection, ownershipsch:)
super(id, hsh, subsection)
@id = "has_mscharge"
@copy_key = "sales.sale_information.leaseholdcharges.has_mscharge"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@conditional_for = {
@ -16,6 +15,7 @@ class Form::Sales::Questions::HasLeaseholdCharges < ::Form::Question
],
}
@ownershipsch = ownershipsch
@copy_key = "sales.sale_information.leaseholdcharges.has_mscharge"
@question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch]
end
@ -26,6 +26,6 @@ class Form::Sales::Questions::HasLeaseholdCharges < ::Form::Question
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {
2024 => { 1 => 99, 2 => 110, 3 => 117 },
2025 => { 1 => 88, 2 => 111 },
2025 => { 2 => 111 },
}.freeze
end

27
app/models/form/sales/questions/has_service_charge.rb

@ -0,0 +1,27 @@
class Form::Sales::Questions::HasServiceCharge < ::Form::Question
def initialize(id, hsh, subsection)
super
@id = "has_mscharge"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@conditional_for = {
"mscharge" => [1],
}
@hidden_in_check_answers = {
"depends_on" => [
{
"has_mscharge" => 1,
},
],
}
@copy_key = "sales.sale_information.servicecharges.has_servicecharge"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end
ANSWER_OPTIONS = {
"1" => { "value" => "Yes" },
"0" => { "value" => "No" },
}.freeze
QUESTION_NUMBER_FROM_YEAR = { 2025 => 88 }.freeze
end

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

@ -2,12 +2,12 @@ class Form::Sales::Questions::LeaseholdCharges < ::Form::Question
def initialize(id, hsh, subsection, ownershipsch:)
super(id, hsh, subsection)
@id = "mscharge"
@copy_key = "sales.sale_information.leaseholdcharges.mscharge"
@type = "numeric"
@min = 1
@step = 0.01
@width = 5
@prefix = "£"
@copy_key = "sales.sale_information.leaseholdcharges.mscharge"
@ownershipsch = ownershipsch
@question_number = QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.fetch(form.start_date.year, QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP.max_by { |k, _v| k }.last)[ownershipsch]
end
@ -15,6 +15,6 @@ class Form::Sales::Questions::LeaseholdCharges < ::Form::Question
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {
2023 => { 1 => 98, 2 => 109, 3 => 117 },
2024 => { 1 => 99, 2 => 110, 3 => 117 },
2025 => { 1 => 88, 2 => 111 },
2025 => { 2 => 111 },
}.freeze
end

15
app/models/form/sales/questions/service_charge.rb

@ -0,0 +1,15 @@
class Form::Sales::Questions::ServiceCharge < ::Form::Question
def initialize(id, hsh, subsection)
super
@id = "mscharge"
@type = "numeric"
@min = 1
@step = 0.01
@width = 5
@prefix = "£"
@copy_key = "sales.sale_information.servicecharges.servicecharge"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end
QUESTION_NUMBER_FROM_YEAR = { 2025 => 88 }.freeze
end

2
app/models/form/sales/subsections/shared_ownership_initial_purchase.rb

@ -37,7 +37,7 @@ class Form::Sales::Subsections::SharedOwnershipInitialPurchase < ::Form::Subsect
Form::Sales::Pages::DepositDiscount.new("deposit_discount_optional", nil, self, optional: true),
Form::Sales::Pages::SharedOwnershipDepositValueCheck.new("shared_ownership_deposit_value_check", nil, self),
Form::Sales::Pages::MonthlyRent.new(nil, nil, self),
Form::Sales::Pages::LeaseholdCharges.new("leasehold_charges_shared_ownership", nil, self, ownershipsch: 1),
Form::Sales::Pages::ServiceCharge.new("service_charge", nil, self),
Form::Sales::Pages::MonthlyChargesValueCheck.new("monthly_charges_shared_ownership_value_check", nil, self),
Form::Sales::Pages::EstateManagementFee.new("estate_management_fee", nil, self),
].compact

19
config/locales/forms/2025/sales/sale_information.en.yml

@ -248,16 +248,29 @@ en:
leaseholdcharges:
page_header: ""
has_mscharge:
check_answer_label: "Property service charges"
check_answer_prompt: "Enter service charges if any"
check_answer_label: "Property leasehold charges"
check_answer_prompt: "Enter leasehold charges if any"
hint_text: "For example, service and management charges"
question_text: "Does the property have any service charges?"
question_text: "Does the property have any monthly leasehold charges?"
mscharge:
check_answer_label: "Monthly leasehold charges"
check_answer_prompt: ""
hint_text: ""
question_text: "Enter the total monthly charge"
servicecharges:
page_header: ""
has_servicecharge:
check_answer_label: "Property service charges"
check_answer_prompt: "Enter service charges if any"
hint_text: "This includes any charges for day-to-day maintenance and repairs, building insurance, and any contributions to a sinking or reserved fund. It does not include estate management fees."
question_text: "Does the property have any service charges?"
servicecharge:
check_answer_label: "Monthly service charges"
check_answer_prompt: ""
hint_text: ""
question_text: "Enter the total monthly charge"
purchase_price:
discounted_ownership:
page_header: "About the price of the property"

29
spec/models/form/sales/pages/service_charge_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::ServiceCharge, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 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[has_mscharge mscharge])
end
it "has the correct id" do
expect(page.id).to eq(nil)
end
it "has the correct description" do
expect(page.description).to be_nil
end
it "has correct depends_on" do
expect(page.depends_on).to be_nil
end
end

49
spec/models/form/sales/questions/has_service_charge_spec.rb

@ -0,0 +1,49 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::HasServiceCharge, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:form) { instance_double(Form, start_date: Time.zone.local(2025, 4, 4)) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, id: "shared_ownership", form:)) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("has_mscharge")
end
it "has the correct type" do
expect(question.type).to eq("radio")
end
it "is not marked as derived" do
expect(question.derived?(nil)).to be false
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"0" => { "value" => "No" },
"1" => { "value" => "Yes" },
})
end
it "has correct conditional for" do
expect(question.conditional_for).to eq({
"mscharge" => [1],
})
end
it "has correct hidden_in_check_answers for" do
expect(question.hidden_in_check_answers).to eq({
"depends_on" => [
{
"has_mscharge" => 1,
},
],
})
end
end

37
spec/models/form/sales/questions/service_charge_spec.rb

@ -0,0 +1,37 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::ServiceCharge, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
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)))) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("mscharge")
end
it "has the correct type" do
expect(question.type).to eq("numeric")
end
it "is not marked as derived" do
expect(question.derived?(nil)).to be false
end
it "has the correct width" do
expect(question.width).to be 5
end
it "has the correct min" do
expect(question.min).to be 1
end
it "has the correct prefix" do
expect(question.prefix).to eq("£")
end
end

2
spec/models/form/sales/subsections/shared_ownership_initial_purchase_spec.rb

@ -46,7 +46,7 @@ RSpec.describe Form::Sales::Subsections::SharedOwnershipInitialPurchase, type: :
deposit_discount_optional
shared_ownership_deposit_value_check
monthly_rent
leasehold_charges_shared_ownership
service_charge
monthly_charges_shared_ownership_value_check
estate_management_fee
],

Loading…
Cancel
Save