Technical solution. For use at location (aka. reading room circulation)
Introduction
The Epic UXPROD-1835 describes the defined work for Reading Room Circulation Functionality.
The purpose of this feature is to create a modified workflow that enables patrons to use certain items within the library. These items are typically stored in closed stacks or are restricted in the Integrated Library System (ILS). Patrons can request these items, which are then delivered to a designated staff area for in-house use (reading room circulation functionality).
Other purposed workflows include special collections, and in-house use only Inter-library Loan items.
Work on Spike / POC is captured in: UXPROD-5095
Requirements
Allow patrons to place requests at service points, and via discovery layers
Allow for materials from closed stacks or restricted collections to be delivered to a service point
Provide all related notices - Canceled, available, expired.
Allow for the circulation of materials to patrons
During check-out, the loaned item is flagged as being in use in the reading room.
When the item is returned with the intent of using it again within the loan period, the loaned item is flagged as being held.
During final check-in, when the patron does not intend to use it again, the loaned item is flagged as being returned (neither held or in-use)
Allow staff members to change the loan policy of an item from a standard home loan to/from a reading room loan.
Provide metrics that can be reported on and searched upon in the UI; Circulation log, Requests app, Lists app, and LPD/MetaDB.
In scope
Work defined by the RA-SIG working group on Reading Room Circulation Functionality. Work developed by the Klemming development team for Sunflower and Trillium will have as primary focus Reading Room Workflow as needed for National Library of Sweden in order to go live Q1 2026.
Not in Scope
Items without barcodes or items not in FOLIO; New feature request to be worked on later.
Delivery to areas other than service points.
Restrict circulation to specific service points; New feature to be worked on later.
Preconditions and background
About 75 % of the loans at the National Library of Sweden are reading room loans.
The reading room loans are items that cannot be taken out of the building, they are checked out (loaned) for use inside the National Library of Sweden. The reading room loans can be viewed either in the Main Reading Room or in the Special Reading Room for rare books. Both reading rooms have circulation desks and waiting shelves (which are out of reach for patrons and this is where the items are placed before they are loaned).
The reading room loans can be returned completely, i.e. checked in and sent back to the closed stacks (to loan the item again a new request from the closed stacks is needed). Alternatively the loans can be stored temporarily for further reading the same or another day, i.e. kept on the waiting shelf and marked in the Integrated Library System (ILS) as such (to read the item no request from the closed stacks is needed).
The actual location of items can be tracked in the ILS throughout the period the patron has them on loan. It is also possible in the ILS to see the time period the items have been on either the waiting shelf or in the Reading Room, and when the patron loaned/received a message about the item for the first time and the return date due for the loan.
The loan period for most items are 30 days (with automatic renewal) but patron must use the item at least every 7 days to keep it on shelf. When material has been on the shelf for more than 7 days without being used it is checked in by staff and returned to stacks.
Proposed solution/technical design
The proposed solution aims to minimize the changes to existing logic and to not complicate existing procedures more than strictly necessary.
The existing check-in and check-out procedures cannot be easily extended to also serve as requests to take an item on/off the reading room hold shelf in between each use, not without a lot of exceptions in the code for this kind of loan. This would add a considerable amount of complexity to the existing check-in and check-out code, which is already not trivial.
Two new APIs to switch the item’s reading room status
It is proposed to implement two new, small APIs that flag the loan as being on hold or in-use in between the initial check-out and the final check-in. The API should write those status changes to the loan history and to the circulation log as well.
The suggested paths for the new APIs would be /circulation/hold-by-barcode-for-use-at-location (check in to shelf) and /circulation/pickup-by-barcode-for-use-at-location (check out from shelf). Parameters for pick-up would be user barcode and item barcode. Parameters for hold would be item barcode only.
The only changes to existing APIs would be a change to the current check-out process to mark the loan in-use on first check-out, and a change to the check-in process to mark the loan as finally returned on the last check-in, if it is a loan ruled by a reading room loan policy, that is.
It could be debated whether the held/in-use status is best understood as a status of the item or of the loan. The proposed solution is to put the status on the loan. The reading room status thus becomes a sub-status of the overall loan status (which is OPEN or CLOSED).
Additionally, status changes should be timestamped on the loan. This is for librarians to keep track of how long an item has been on the shelf (or in use), primarily to apply rules for hold-shelf expiration times in-between uses if desired.
Schema changes
Reading room loans can be defined as such in the loan policy by setting a new boolean property. The suggested name is “forUseAtLocation”, which is intentionally unspecific to allow for other types of in-house-use-only loans, for example loans of equipment like tablets etc. The boolean property should default to false (= regular home loan). The loan policy can also define a property for hold-shelf expiration in-between uses, “holdShelfExpiryPeriodForUseAtLocation”. The service point will already have a holdShelfExpiryPeriod which would be in effect for the first check-out according to already existing logic. The new expiry period setting could be applied with a different length for the expiry periods in-between uses.
When an item is ruled by a for-use-at-location loan policy, the loan would be flagged as “forUseAtLocation” on the initial check-out; this flag would be a boolean property on the loan object. Presumably only loans with that flag could subsequently be taken on/off the reading room hold shelf, a check to be enforced by a validation in the new APIs.
New properties in loan policy:
"forUseAtLocation": {
"type": "boolean",
"description": "Indicates that loaned items must be used in the library, i.e. in a reading room"
},
"holdShelfExpiryPeriodForUseAtLocation" :{
"type": "object",
"$ref": "time-period.json",
"description": "expiration period for items on the hold shelf for use at the location"
}New properties in loan
"forUseAtLocation": {
"description": "Status of loan/item that is to be used in the library, i.e. in a reading room",
"type": "object",
"properties": {
"status": {
"description": "Indicates if the item is currently used by or being held for the patron",
"type": "string",
"enum": [
"In use",
"Held",
"Returned"
]
},
"statusDate": {
"description": "Date and time the status was registered",
"type": "string",
"format": "date-time"
}
}
}
All suggested schema changes are non-breaking.
New event types in the circulation log
With the suggested changes there will be two new action types for events sent to the circulation log; the suggested labels are shown here, among select other, existing action types:
"enum": [
"Age to lost",
...
"Changed due date",
...
"Checked in",
"Checked out",
...
"Held for use at location",
"Picked up for use at location",
Modules involved by this design
The additional properties in loan and loan policy would be implemented in
mod-circulation-storage.The action types in the circulation log are defined in
mod-audit.Processing changes would be implemented in
mod-circulation.