Browse Source

feat: make charges soft validations check soft max range rather than just over soft max

pull/2249/head
natdeanlewissoftwire 2 years ago committed by Kat
parent
commit
91e08b5f45
  1. 38
      app/helpers/charges_helper.rb
  2. 2
      app/models/form/lettings/pages/pscharge_value_check.rb
  3. 2
      app/models/form/lettings/pages/scharge_value_check.rb
  4. 2
      app/models/form/lettings/pages/supcharg_value_check.rb
  5. 38
      app/models/validations/financial_validations.rb
  6. 38
      app/models/validations/soft_validations.rb
  7. 6
      config/forms/2022_2023.json
  8. 6
      spec/models/validations/soft_validations_spec.rb

38
app/helpers/charges_helper.rb

@ -0,0 +1,38 @@
module ChargesHelper
CHARGE_MAXIMA_PER_WEEK = {
scharge: {
private_registered_provider: {
general_needs: 800,
supported_housing: 800,
},
local_authority: {
general_needs: 500,
supported_housing: 500,
},
},
pscharge: {
private_registered_provider: {
general_needs: 700,
supported_housing: 700,
},
local_authority: {
general_needs: 200,
supported_housing: 200,
},
},
supcharg: {
private_registered_provider: {
general_needs: 800,
supported_housing: 800,
},
local_authority: {
general_needs: 200,
supported_housing: 200,
},
},
}.freeze
PROVIDER_TYPE = { 1 => :local_authority, 2 => :private_registered_provider }.freeze
NEEDSTYPE_VALUES = { 2 => :supported_housing, 1 => :general_needs }.freeze
CHARGE_NAMES = { scharge: "service charge", pscharge: "personal service charge", supcharg: "support charge" }.freeze
end

2
app/models/form/lettings/pages/pscharge_value_check.rb

@ -2,7 +2,7 @@ class Form::Lettings::Pages::PschargeValueCheck < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "pscharge_value_check"
@depends_on = [{ "pscharge_over_soft_max?" => true }]
@depends_on = [{ "pscharge_in_soft_max_range?" => true }]
@title_text = {
"translation" => "soft_validations.pscharge.over_soft_max_title",
"arguments" => [{

2
app/models/form/lettings/pages/scharge_value_check.rb

@ -2,7 +2,7 @@ class Form::Lettings::Pages::SchargeValueCheck < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "scharge_value_check"
@depends_on = [{ "scharge_over_soft_max?" => true }]
@depends_on = [{ "scharge_in_soft_max_range?" => true }]
@title_text = {
"translation" => "soft_validations.scharge.over_soft_max_title",
"arguments" => [{

2
app/models/form/lettings/pages/supcharg_value_check.rb

@ -2,7 +2,7 @@ class Form::Lettings::Pages::SupchargValueCheck < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "supcharg_value_check"
@depends_on = [{ "supcharg_over_soft_max?" => true }]
@depends_on = [{ "supcharg_in_soft_max_range?" => true }]
@title_text = {
"translation" => "soft_validations.supcharg.over_soft_max_title",
"arguments" => [{

38
app/models/validations/financial_validations.rb

@ -1,6 +1,7 @@
module Validations::FinancialValidations
include Validations::SharedValidations
include MoneyFormattingHelper
include ChargesHelper
# Validations methods need to be called 'validate_<page_name>' to run on model save
# or 'validate_' to run on submit as well
def validate_outstanding_rent_amount(record)
@ -175,43 +176,6 @@ module Validations::FinancialValidations
private
CHARGE_MAXIMA_PER_WEEK = {
scharge: {
private_registered_provider: {
general_needs: 800,
supported_housing: 800,
},
local_authority: {
general_needs: 500,
supported_housing: 500,
},
},
pscharge: {
private_registered_provider: {
general_needs: 700,
supported_housing: 700,
},
local_authority: {
general_needs: 200,
supported_housing: 200,
},
},
supcharg: {
private_registered_provider: {
general_needs: 800,
supported_housing: 800,
},
local_authority: {
general_needs: 200,
supported_housing: 200,
},
},
}.freeze
PROVIDER_TYPE = { 1 => :local_authority, 2 => :private_registered_provider }.freeze
NEEDSTYPE_VALUES = { 2 => :supported_housing, 1 => :general_needs }.freeze
CHARGE_NAMES = { scharge: "service charge", pscharge: "personal service charge", supcharg: "support charge" }.freeze
def validate_charges(record)
return unless record.owning_organisation

38
app/models/validations/soft_validations.rb

@ -1,4 +1,6 @@
module Validations::SoftValidations
include ChargesHelper
ALLOWED_INCOME_RANGES = {
1 => OpenStruct.new(soft_min: 143, soft_max: 730, hard_min: 90, hard_max: 1230),
2 => OpenStruct.new(soft_min: 67, soft_max: 620, hard_min: 50, hard_max: 950),
@ -97,40 +99,52 @@ module Validations::SoftValidations
net_income_in_soft_max_range? ? "higher" : "lower"
end
def scharge_over_soft_max?
return unless scharge && period && needstype
def scharge_in_soft_max_range?
return unless scharge && period && needstype && owning_organisation
return if weekly_value(scharge).blank?
max = if needstype == 1
soft_max = if needstype == 1
owning_organisation.provider_type == "LA" ? 25 : 35
else
owning_organisation.provider_type == "LA" ? 100 : 200
end
weekly_value(scharge) > max
provider_type = owning_organisation.provider_type_before_type_cast
hard_max = CHARGE_MAXIMA_PER_WEEK.dig(:scharge, PROVIDER_TYPE[provider_type], NEEDSTYPE_VALUES[needstype])
weekly_value(scharge).between?(soft_max, hard_max)
end
def pscharge_over_soft_max?
return unless pscharge && period && needstype
def pscharge_in_soft_max_range?
return unless pscharge && period && needstype && owning_organisation
return if weekly_value(pscharge).blank?
max = if needstype == 1
soft_max = if needstype == 1
owning_organisation.provider_type == "LA" ? 25 : 35
else
owning_organisation.provider_type == "LA" ? 75 : 100
end
weekly_value(pscharge) > max
provider_type = owning_organisation.provider_type_before_type_cast
hard_max = CHARGE_MAXIMA_PER_WEEK.dig(:pscharge, PROVIDER_TYPE[provider_type], NEEDSTYPE_VALUES[needstype])
weekly_value(pscharge).between?(soft_max, hard_max)
end
def supcharg_over_soft_max?
return unless supcharg && period && needstype
def supcharg_in_soft_max_range?
return unless supcharg && period && needstype && owning_organisation
return if weekly_value(supcharg).blank?
max = if needstype == 1
soft_max = if needstype == 1
owning_organisation.provider_type == "LA" ? 25 : 35
else
owning_organisation.provider_type == "LA" ? 75 : 85
end
weekly_value(supcharg) > max
provider_type = owning_organisation.provider_type_before_type_cast
hard_max = CHARGE_MAXIMA_PER_WEEK.dig(:supcharg, PROVIDER_TYPE[provider_type], NEEDSTYPE_VALUES[needstype])
weekly_value(supcharg).between?(soft_max, hard_max)
end
private

6
config/forms/2022_2023.json

@ -8370,7 +8370,7 @@
"scharge_value_check": {
"depends_on": [
{
"scharge_over_soft_max?": true
"scharge_in_soft_max_range?": true
}
],
"title_text": {
@ -8415,7 +8415,7 @@
"pscharge_value_check": {
"depends_on": [
{
"pscharge_over_soft_max?": true
"pscharge_in_soft_max_range?": true
}
],
"title_text": {
@ -8460,7 +8460,7 @@
"supcharg_value_check": {
"depends_on": [
{
"supcharg_over_soft_max?": true
"supcharg_in_soft_max_range?": true
}
],
"title_text": {

6
spec/models/validations/soft_validations_spec.rb

@ -376,7 +376,7 @@ RSpec.describe Validations::SoftValidations do
end
end
describe "scharge_over_soft_max?" do
describe "scharge_in_soft_max_range?" do
context "and organisation is PRP" do
before do
record.owning_organisation.update(provider_type: "PRP")
@ -590,7 +590,7 @@ RSpec.describe Validations::SoftValidations do
end
end
describe "pscharge_over_soft_max?" do
describe "pscharge_in_soft_max_range?" do
context "and organisation is PRP" do
before do
record.owning_organisation.update(provider_type: "PRP")
@ -804,7 +804,7 @@ RSpec.describe Validations::SoftValidations do
end
end
describe "supcharg_over_soft_max?" do
describe "supcharg_in_soft_max_range?" do
context "and organisation is PRP" do
before do
record.owning_organisation.update(provider_type: "PRP")

Loading…
Cancel
Save