Bug 41383

Summary: SIP2 server does not search patrons by unique patron attributes (alternate IDs unusable in SIP2)
Product: Koha Reporter: Saiful Amin <saiful>
Component: SIP2Assignee: Saiful Amin <saiful>
Status: Needs Signoff --- QA Contact: Testopia <testopia>
Severity: enhancement    
Priority: P5 - low    
Version: Main   
Hardware: All   
OS: All   
GIT URL: Initiative type: ---
Sponsorship status: --- Comma delimited list of Sponsors:
Crowdfunding goal: 0 Patch complexity: ---
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:
Attachments: Bug 41383: Allow patron identification by custom unique attributes in find_by_identifier

Description Saiful Amin 2025-12-05 06:28:50 UTC
Even when a patron attribute is marked as "Unique identifier," the SIP2 server cannot find patrons using that attribute value. SIP2 lookup is hard-coded to cardnumber/userid and does not consider extended attributes, even when it is unique.

Actual Result:
SIP2 returns "|AFInvalid cardnumber" when the SIP client sends a value stored in a unique patron attribute.

Expected Result:
SIP2 should be able to search by any patron attribute marked as a unique identifier.

Impact:
- Self-check machines using HID/NFC values fail
- Access control systems relying on alternate IDs cannot authenticate patrons

I plan to submit a patch that will allow unique extended patron attributes to be used in SIP2 requests.
Comment 1 Saiful Amin 2025-12-08 19:20:36 UTC
Created attachment 190311 [details] [review]
Bug 41383: Allow patron identification by custom unique attributes in find_by_identifier

Currently, Koha::Patrons->find_by_identifier only searches for patrons by userid and cardnumber.

This patch extends this method to also search by unique borrower attributes (where unique_id=1).
This enhancement allows modules like SIP2 to identify patrons using alternative unique identifiers
defined in the system.

Test Plan:
1. Apply the patch.
2. Run the tests:
   prove t/db_dependent/Koha/Patrons.t
   - Verify that all tests pass, including the new cases for unique attribute lookup.
3. Functional Verification:
   - Define a new patron attribute type with 'unique_id' set to 1.
   - Assign a value to a patron for this attribute.
   - Use a tool (like the SIP2 emulator) that utilizes Koha::Patrons->find_by_identifier
     to search for the patron using this attribute value. e.g.,
     perl misc/sip_cli_emulator.pl -su term1 -sp term1 -l CPL --host localhost --patron altid123 -m patron_information
   - Verify the patron is found.
   - Try with a non-unique attribute (unique_id=0) and verify the patron is NOT found.