Skip to content

Commit

Permalink
Match across all policies
Browse files Browse the repository at this point in the history
Requirement is to check for matching claims across all policies, except
for IRP, which should only flag matches with other IRP policies.

At the minute the only attribute we use on eligibility when checking for
matches is TRN, which is present in all the eligibilities we compare, if
however we start checking other attributes the db will throw an error as
the column may not be present on all eligibilities, hence having to
update the "matching_claims - blank trn" test.
  • Loading branch information
rjlynch committed Sep 30, 2024
1 parent 30ac038 commit d21b0c6
Show file tree
Hide file tree
Showing 5 changed files with 218 additions and 13 deletions.
3 changes: 2 additions & 1 deletion app/models/policies/early_career_payments.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ module EarlyCareerPayments
# - matching claims with multiple policies: MatchingAttributeFinder
OTHER_CLAIMABLE_POLICIES = [
LevellingUpPremiumPayments,
StudentLoans
StudentLoans,
FurtherEducationPayments
].freeze

ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze
Expand Down
10 changes: 9 additions & 1 deletion app/models/policies/further_education_payments.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@ module FurtherEducationPayments
include BasePolicy
extend self

OTHER_CLAIMABLE_POLICIES = []
# Used in
# - checking payments with multiple policies: ClaimsPreventingPaymentFinder
# - matching claims with multiple policies: MatchingAttributeFinder
OTHER_CLAIMABLE_POLICIES = [
EarlyCareerPayments,
StudentLoans,
LevellingUpPremiumPayments
]

ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze

# Percentage of claims to QA
Expand Down
3 changes: 2 additions & 1 deletion app/models/policies/levelling_up_premium_payments.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ module LevellingUpPremiumPayments
# - matching claims with multiple policies: MatchingAttributeFinder
OTHER_CLAIMABLE_POLICIES = [
EarlyCareerPayments,
StudentLoans
StudentLoans,
FurtherEducationPayments
].freeze

ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze
Expand Down
3 changes: 2 additions & 1 deletion app/models/policies/student_loans.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ module StudentLoans
# - matching claims with multiple policies: MatchingAttributeFinder
OTHER_CLAIMABLE_POLICIES = [
EarlyCareerPayments,
LevellingUpPremiumPayments
LevellingUpPremiumPayments,
FurtherEducationPayments
]

ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze
Expand Down
212 changes: 203 additions & 9 deletions spec/models/claim/matching_attribute_finder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -277,31 +277,29 @@
it { is_expected.to eq [other_claim] }
end

describe "matching_claims - blank trn, another field group with same contract type, blank provision_search" do
before do
stub_const("Policies::FurtherEducationPayments::ELIGIBILITY_MATCHING_ATTRIBUTES", [["teacher_reference_number"], ["provision_search", "contract_type"]])
end

describe "matching_claims - blank trn, matching email addresses" do
let(:policy) { Policies::FurtherEducationPayments }

let!(:source_claim) {
eligibility = create(:further_education_payments_eligibility, :eligible, contract_type: "permanent", provision_search: nil)
eligibility = create(:further_education_payments_eligibility, :eligible)
create(
:claim,
:submitted,
policy: policy,
eligibility: eligibility
eligibility: eligibility,
email_address: "[email protected]"
)
}

let!(:other_claim) {
eligibility = create(:further_education_payments_eligibility, :eligible, contract_type: "permanent", provision_search: nil)
eligibility = create(:further_education_payments_eligibility, :eligible)
create(
:claim,
:submitted,
policy: policy,
eligibility: eligibility,
surname: Faker::Name.last_name
surname: Faker::Name.last_name,
email_address: "[email protected]"
)
}

Expand All @@ -310,6 +308,202 @@
it { is_expected.to eq [other_claim] }
end

describe "matching claims across policies" do
subject(:matching_claims) do
Claim::MatchingAttributeFinder.new(source_claim).matching_claims
end

let(:source_claim) do
create(
:claim,
:submitted,
policy: source_policy,
email_address: "[email protected]",
academic_year: AcademicYear.current
)
end

let!(:target_claim) do
create(
:claim,
:submitted,
policy: target_policy,
email_address: "[email protected]",
academic_year: AcademicYear.current
)
end

context "with an ECP claim" do
let(:source_policy) { Policies::EarlyCareerPayments }

context "when compared with ECP" do
let(:target_policy) { Policies::EarlyCareerPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with LUP" do
let(:target_policy) { Policies::LevellingUpPremiumPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with TSLR" do
let(:target_policy) { Policies::StudentLoans }

it { is_expected.to include(target_claim) }
end

context "when compared with FE" do
let(:target_policy) { Policies::FurtherEducationPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with IRP" do
let(:target_policy) { Policies::InternationalRelocationPayments }

it { is_expected.not_to include(target_claim) }
end
end

context "with an LUP claim" do
let(:source_policy) { Policies::LevellingUpPremiumPayments }

context "when compared with ECP" do
let(:target_policy) { Policies::EarlyCareerPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with LUP" do
let(:target_policy) { Policies::LevellingUpPremiumPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with TSLR" do
let(:target_policy) { Policies::StudentLoans }

it { is_expected.to include(target_claim) }
end

context "when compared with FE" do
let(:target_policy) { Policies::FurtherEducationPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with IRP" do
let(:target_policy) { Policies::InternationalRelocationPayments }

it { is_expected.not_to include(target_claim) }
end
end

context "with a TSLR claim" do
let(:source_policy) { Policies::StudentLoans }

context "when compared with ECP" do
let(:target_policy) { Policies::EarlyCareerPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with LUP" do
let(:target_policy) { Policies::LevellingUpPremiumPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with TSLR" do
let(:target_policy) { Policies::StudentLoans }

it { is_expected.to include(target_claim) }
end

context "when compared with FE" do
let(:target_policy) { Policies::FurtherEducationPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with IRP" do
let(:target_policy) { Policies::InternationalRelocationPayments }

it { is_expected.not_to include(target_claim) }
end
end

context "with an FE claim" do
let(:source_policy) { Policies::FurtherEducationPayments }

context "when compared with ECP" do
let(:target_policy) { Policies::EarlyCareerPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with LUP" do
let(:target_policy) { Policies::LevellingUpPremiumPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with TSLR" do
let(:target_policy) { Policies::StudentLoans }

it { is_expected.to include(target_claim) }
end

context "when compared with FE" do
let(:target_policy) { Policies::FurtherEducationPayments }

it { is_expected.to include(target_claim) }
end

context "when compared with IRP" do
let(:target_policy) { Policies::InternationalRelocationPayments }

it { is_expected.not_to include(target_claim) }
end
end

context "with an IRP claim" do
let(:source_policy) { Policies::InternationalRelocationPayments }

context "when compared with ECP" do
let(:target_policy) { Policies::EarlyCareerPayments }

it { is_expected.not_to include(target_claim) }
end

context "when compared with LUP" do
let(:target_policy) { Policies::LevellingUpPremiumPayments }

it { is_expected.not_to include(target_claim) }
end

context "when compared with TSLR" do
let(:target_policy) { Policies::StudentLoans }

it { is_expected.not_to include(target_claim) }
end

context "when compared with FE" do
let(:target_policy) { Policies::FurtherEducationPayments }

it { is_expected.not_to include(target_claim) }
end

context "when compared with IRP" do
let(:target_policy) { Policies::InternationalRelocationPayments }

it { is_expected.to include(target_claim) }
end
end
end

describe "#matching_attributes" do
it "returns the attributes that match" do
source_claim = create(
Expand Down

0 comments on commit d21b0c6

Please sign in to comment.