diff --git a/app/models/policies/early_career_payments.rb b/app/models/policies/early_career_payments.rb index 9c5f3ffdc3..2248580d05 100644 --- a/app/models/policies/early_career_payments.rb +++ b/app/models/policies/early_career_payments.rb @@ -26,11 +26,11 @@ module EarlyCareerPayments POLICY_END_YEAR = AcademicYear.new(2024).freeze # Used in - # - checking payments with multiple policies: ClaimsPreventingPaymentFinder # - matching claims with multiple policies: MatchingAttributeFinder OTHER_CLAIMABLE_POLICIES = [ LevellingUpPremiumPayments, - StudentLoans + StudentLoans, + FurtherEducationPayments ].freeze ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze diff --git a/app/models/policies/further_education_payments.rb b/app/models/policies/further_education_payments.rb index 60c3695ef2..1c4e3baa35 100644 --- a/app/models/policies/further_education_payments.rb +++ b/app/models/policies/further_education_payments.rb @@ -3,7 +3,14 @@ module FurtherEducationPayments include BasePolicy extend self - OTHER_CLAIMABLE_POLICIES = [] + # Used in + # - matching claims with multiple policies: MatchingAttributeFinder + OTHER_CLAIMABLE_POLICIES = [ + EarlyCareerPayments, + StudentLoans, + LevellingUpPremiumPayments + ] + ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze # Percentage of claims to QA diff --git a/app/models/policies/levelling_up_premium_payments.rb b/app/models/policies/levelling_up_premium_payments.rb index a3f6f8ee1f..827a46e72b 100644 --- a/app/models/policies/levelling_up_premium_payments.rb +++ b/app/models/policies/levelling_up_premium_payments.rb @@ -13,11 +13,11 @@ module LevellingUpPremiumPayments ].freeze # Used in - # - checking payments with multiple policies: ClaimsPreventingPaymentFinder # - matching claims with multiple policies: MatchingAttributeFinder OTHER_CLAIMABLE_POLICIES = [ EarlyCareerPayments, - StudentLoans + StudentLoans, + FurtherEducationPayments ].freeze ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze diff --git a/app/models/policies/student_loans.rb b/app/models/policies/student_loans.rb index 881ef113ce..9edd71f051 100644 --- a/app/models/policies/student_loans.rb +++ b/app/models/policies/student_loans.rb @@ -26,11 +26,11 @@ module StudentLoans ACADEMIC_YEARS_QUALIFIED_TEACHERS_CAN_CLAIM_FOR = 11 # Used in - # - checking payments with multiple policies: ClaimsPreventingPaymentFinder # - matching claims with multiple policies: MatchingAttributeFinder OTHER_CLAIMABLE_POLICIES = [ EarlyCareerPayments, - LevellingUpPremiumPayments + LevellingUpPremiumPayments, + FurtherEducationPayments ] ELIGIBILITY_MATCHING_ATTRIBUTES = [["teacher_reference_number"]].freeze diff --git a/spec/models/claim/matching_attribute_finder_spec.rb b/spec/models/claim/matching_attribute_finder_spec.rb index 494ebbc0fa..9b7a76703f 100644 --- a/spec/models/claim/matching_attribute_finder_spec.rb +++ b/spec/models/claim/matching_attribute_finder_spec.rb @@ -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: "match@example.com" ) } 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: "match@example.com" ) } @@ -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: "match@example.com", + academic_year: AcademicYear.current + ) + end + + let!(:target_claim) do + create( + :claim, + :submitted, + policy: target_policy, + email_address: "match@example.com", + 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(