From b072167ebb47d3a62d873d8eeef69c51119703b4 Mon Sep 17 00:00:00 2001
From: Aleisha Amohia <aleishaamohia@hotmail.com>
Date: Tue, 23 May 2023 03:32:59 +0000
Subject: [PATCH] Bug 26611: Make authority record matching use required match
 checks

This patch fixes record matching for authorities to correctly apply required match checks.

To test:

1) Create a record matching rule:

Threshold: 100
Record type: Authority record

Match point 1
Search index: subject-topical
Score: 100
Tag: 150
Subfields: a

Match check 1
Both source and target record check fields:
Tag: 040
Subfields: a

This rule says we want to match on the topical term heading, then confirm the match with 040$a.

2) Create two topical term authority records

Authority 1:
150$a: Test
040$a: A

Authority 2:
150$a: Test
040$a: B

3) Export authority 2 and save

4) Go to Cataloging -> Stage records for import

5) Upload your downloaded authority 2 file. Change the record type to Authority. Choose your new record matching rule.

6) Stage for import.

7) Confirm that with the record matching rule applied, both authorities 1 and 2 show as possible matches, even though only authority 2 has a matching 040$a.

8) Apply the patch and restart services

9) Change the matching rule to "Do not look for matching records" and apply. This is to essentially refresh the page.

10) Change the matching rule to your new matching rule and apply. Confirm only the matching authority 2 shows and is selected.

Sponsored-by: Waikato Institute of Technology
---
 C4/Matcher.pm | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/C4/Matcher.pm b/C4/Matcher.pm
index 7322c14417e..fbfcc1cb404 100644
--- a/C4/Matcher.pm
+++ b/C4/Matcher.pm
@@ -700,8 +700,9 @@ sub get_matches {
 
             foreach my $result (@$authresults) {
                 my $id = $result->{authid};
+                my $target_record = Koha::Authorities->find( $id )->record;
                 $matches->{$id}->{score} += $matchpoint->{'score'};
-                $matches->{$id}->{record} = $id;
+                $matches->{$id}->{record} = $target_record;
             }
         }
     }
@@ -729,6 +730,15 @@ sub get_matches {
         }
     } elsif ($self->{'record_type'} eq 'authority') {
         require C4::AuthoritiesMarc;
+        # get rid of any that don't meet the required checks
+        $matches = {
+            map {
+                _passes_required_checks( $source_record, $matches->{$_}->{'record'}, $self->{'required_checks'} )
+                  ? ( $_ => $matches->{$_} )
+                  : ()
+            } keys %$matches
+        };
+
         foreach my $id (keys %$matches) {
             push @results, {
                 record_id => $id,
-- 
2.30.2