DCB-1528 Same library borrowing
References
Feature implementation summary
Assumptions
Same server requests are filtered out before reaching this stage
Out of Scope
Creation of new status for own library requests
Same server combinations (pickup, supplier, borrower)
Per library configutation
LMS exception support, eg, FOLIO, Alma
Changes to Admin to indicate non-virtual patron
Exclude same library, different pickup resolution
DCB-1528: Allow patrons to request items from their libraryDraft
Prevent same library borrowing for pickup anywhere
Given same library borrowing is enabled
And item is resolved to same library as patron home (supplier == borrower)
And pickup location does not belong to patron’s library (pickup != borrower)
Then exclude items belonging to the patron’s library from being selected to resolve the request
Refactor workflow determination
Move workflow determination from supplying agency service to resolution service.
Remove setting of active workflow from supplying agency service
Set workflow in resolution service
When determining workflow, add check to set workflow to RET-LOCAL if
item is resolved to same library as patron AND
pickup location belongs to patron’s library
Verification
RET-LOCAL (success)
Given same library borrowing is enabled
And item is resolved to same library as patron home (supplier == borrower)
And pickup location does belong to patron’s library (pickup == borrower)
Then apply RET-LOCAL workflow to request
NOTE this will only set workflow, not yet change subsequent request handling behaviour
RET-STD
Given item is resolved to a different library to the patron home (supplier != borrower)
When pickup location belongs to patron’s library (pickup == borrower)
Then apply RET-STD workflow to request
RET-PUA
Given item is resolved to a different library to the patron home (supplier != borrower)
When pickup location does not belong to patron’s library (pickup != borrower)
Then apply RET-PUA workflow to request
NOTE this will only set workflow, not yet change subsequent request handling behaviour
NOTE pickup and supplying libraries may be the same, so there may only be two, rather than three libraries involved in a Pickup Anywhere scenario
Route to own library request workflow
Create new transition: PlaceRequestAtOwnLibraryStateTransition
After resolution, trigger either:
PlaceRequestAtSupplyingAgencyStateTransition - when workflow is not RET-LOCAL
PlaceRequestAtOwnLibraryStateTransition - when workflow is RET-LOCAL
Apply own library workflow behaviour
Implement PlaceRequestAtOwnLibraryStateTransition to handle placing request:
Do not check for or create virtual patron
Place singular hold in the local system (that DCB treats as a supplier request)
against verified patron (rather than a virtual patron)
setting pickup location to patron defined location (rather than a defined ILL location)
and using other parameters as normally used for a supplier request
Set request status to
REQUEST_PLACED_AT_SUPPLYING_AGENCY
During HandleSupplierRequestConfirmed, if workflow is RET-LOCAL, apply
HANDED_OFF_AS_LOCAL
terminating status to DCB request prevent further tracking after request isCONFIRMED
Unknown
When is the RET-PUA workflow set by DCB?
Where does Pickup Anywhere locations behaviour fit in?
Can we use the existing Polaris API?
What do we need to inject to the own library request from the DCB supplier request (eg, pickup location)?
Polaris: use the borrower defined pickup location rather than ILL location?
Sierra: ?
What API should we use for FOLIO?
If edge-dcb, which role?
May need to extend HostLMSClient interface to have method for placing request at same library
Changes to Workflow (Transition to) for Own Library Requests
SUBMITTED_TO_DCB: no difference (before we know this is a local request)
PATRON_VERIFIED: no difference (before we know this is a local request)
RESOLVED: no difference (before we know this is a local request)
Set workflow to RET-LOCAL if own library request
REQUEST_PLACED_AT_SUPPLYING_AGENCY (PlaceRequestAtSupplyingAgencyStateTransition):
Only trigger when workflow is not RET-LOCAL
If workflow is RET-LOCAL, trigger (new) local request transition (PlaceRequestAtOwnLibraryStateTransition)
Bypass check for existing virtual patron
Do not create virtual patron
Place request against real patron
CONFIRMED:
If RET-LOCAL, then auto-transition to HANDED_OFF_AS_LOCAL (terminating state)
Otherwise REQUEST_PLACED_AT_BORROWING_AGENCY (by triggering PlaceRequestAtBorrowingAgencyStateTransition)
Scenarios
Pickup Anywhere
Pickup !== Borrower !== Supplier (all different libraries and servers)
Local
Borrower === Supplier === Pickup (all same library)
Borrower == Supplier == Pickup (all same server, different libraries) (assuming pickup locations are unique in server)
Consortial (Standard)
Pickup == Borrower != Supplier (all different libraries and servers)
Gaps
2 servers, 3 different libraries
Pickup != Borrower, Pickup == Supplier (pickup from supplier)
Operated as a Community Resource by the Open Library Foundation