Skip to content

Holds workflow

This is the workflow companion to Holds. That page covers the lifecycle (in the queue, ready to pickup, canceled or expired). This page covers the daily routine: walking the stacks, handing copies over, and clearing the queue.

In a library, holds live under Library level navigation path: Holds. Two pages are errands, each one physical task you work until it is empty, and the third is the table of every hold:

PageWhat’s on itAction to take
screen: To PullHolds with a copy available on the shelfWalk to the shelf, fetch the copy, assign it
screen: To Re-shelveCopies from a canceled or expired hold with no one left in the queueReturn the copy to circulation
screen: All HoldsEvery hold the library has, at whatever stage it is atFind a hold, and hand a ready copy over when the patron arrives

screen: To Pull and screen: To Re-shelve carry a count in the sidebar, because they are work that should reach zero. screen: All Holds doesn’t: holds waiting on the pickup shelf wait on the patron, not on you.

The page lists the holds where Lyra has identified a copy on the shelf you can fetch, a page at a time, with the count of the whole queue beneath it.

Each row shows the call number, the shelf location, the title, the patron, and how long the hold has been waiting. The list is sorted by call number by default so you can walk the stacks in shelf order, picking copies as you go. The pinned button: Location filter narrows it to the field: locations you pick, or, switched to None of, to every location but those, and the toolbar’s button: Download menu exports the list as filtered.

Two ways to clear a row:

  • Scan the copy at the field: scan bar. Lyra assigns whatever barcode you scan to the next matching hold. This is the right move when you’re back at the desk with a stack of copies you’ve pulled — or in the stacks themselves, using button: Scan with the camera under the field on a phone, which shows each assignment inside the camera view as you pull.
  • Select button: Assign on the row. When only one copy is free, that copy is assigned straight away. When several are, it opens a list of them by barcode, call number and location; pick the one you pulled. The row’s menu item: ⋯ menu holds row action: Cancel hold.

Once a copy is assigned, the row leaves screen: To Pull, and on screen: All Holds the hold now reads Ready. Set the copy aside for pickup.

If the copy you scan is still checked out to someone, Lyra doesn’t assign it. Under the field: scan bar you get message: Copy is checked out. with the borrower’s name and the patron it would go to. Usually the book was returned without being checked in: select button: Override and Lyra checks it in, then makes it ready for the next patron in line, in one step. Any staff member can override. This also works for a copy whose hold isn’t on the list yet, because a hold waiting on a checked-out copy doesn’t appear on screen: To Pull.

If the copy is already on the hold shelf for a different patron, Lyra asks before moving it. You get message: Copy is ready for Ada Lovelace. The message goes on to name the patron it would go to. A library manager can select button: Reassign to make it ready for the next patron in line; the patron it was ready for goes back to the front of the queue. Other staff see the message without the button.

If nobody is waiting for the item, you get message: No pending hold for that item. Usually that means re-shelve the copy. If it’s still checked out, the message names the borrower and carries button: Check in, so you can close the loan before it goes back on the shelf. If it’s on the hold shelf for someone, the message tells you to put it back there.

screen: All Holds lists every hold the library has, one row each, whatever stage it is at. It opens on all of them; the pinned button: Stage filter narrows the table to the stages you pick, each shown with its count before you pick it:

  • Waiting for a copy: every hold still in the queue. That includes the holds on screen: To Pull, which are waiting too; they just happen to have a copy free on the shelf.
  • Ready: a copy is assigned and set aside, waiting for the patron.
  • To re-shelve: canceled or expired with the copy still off the shelf, the same rows as screen: To Re-shelve.

The dashboard’s ready count opens this table filtered to Ready, and typing a stage’s name into the global search offers the same filter.

Each row shows the patron, their homeroom and grade, the item, the hold’s status, the copy’s barcode, its location, and when the patron placed the hold (field: Placed). Two more dates are a column each, hidden by default: field: Assigned, when a copy was set aside for the hold, and field: Ended, when it was canceled or expired. A hold fills the dates it has reached, so a waiting hold has only the first. The placement date stays with the hold through every move, including a copy being un-assigned and the hold going back in line. The status is where a ready hold’s pickup deadline sits, and sorting on it puts the holds running out of time first.

When a patron walks up and says “I was notified my hold is ready,” filter to Ready and search their name or scan their card. The row tells you which copy they are there for. You can complete the pickup two ways:

  • From the row. Select row action: Check out on the row. The copy and patron are already on the row, so there’s nothing to look up or scan, Lyra runs the same checkout as the screen: Check Out page, writing the loan record and dissolving the hold in one operation. The row leaves the table by itself.
  • At navigation path: Circulation then Check Out. Pull up the patron and scan the copy. Same result: the loan is written, the hold dissolves, and the row leaves the table.

Either path runs the identical checkout, so if it would violate a policy (the patron has overdue items, the copy is assigned to someone else, and so on) the same message appears, under the hold’s own row, with the manager’s button: Override beside it. A checkout that goes through doesn’t announce itself: the hold leaves the list, and that is the confirmation.

A hold stays ready until either the patron picks it up or the hold expires. On expiry the copy is reassigned to the next patron in the queue, or moves to screen: To Re-shelve if no one is waiting (see Queue ordering and no-shows).

Use the pinned filters: button: Homeroom (including a menu item: No homeroom option), button: Grade (including a menu item: No grade option for patrons without one), and button: Location. Their counts follow the button: Stage filter, so with Ready picked, each homeroom shows how many ready holds it has. Click a filter’s chip to switch it to None of and leave those values out instead. To find one patron’s holds, add button: Patron from button: Filter: it lists everyone with a hold under the current button: Stage filter, and how many they have. To see who is waiting for one title, add button: Item the same way: it lists every title with a hold. Typing in either searches the whole roster or catalog, so a patron or title with no holds shows 0. A Vega count over patrons you mentioned opens here with a button: Patron chip for them, and a count of one title’s holds with an button: Item chip.

A hold’s location is where its copy is. A ready or canceled hold has one copy, so it sits in that copy’s location. A waiting hold sits in every location a free copy of the item is shelved in, since that’s where you’d pull it from. When no copy is free, it sits wherever the item’s copies are shelved, since that’s where one will come back to. A title with copies in two locations counts once under each, so the counts can add up to more than the rows.

Homeroom, grade, location and the three dates are columns as well as filters or facts, so you can read down them and sort by them; turn any of them on or off from the button: Columns dropdown, or drag one by its handle there to move it, and your choices are remembered. The toolbar’s button: Download menu exports the list, and the export reflects whatever filter is applied, so “ready holds for Room 12” is two filters and one click. The menu says how many holds that is before you press it.

Each row offers what its stage allows. A waiting hold with a copy free carries row action: Assign, as on screen: To Pull, and any waiting hold has row action: Cancel hold behind its menu item: ⋯ menu. A canceled or expired hold carries row action: Re-shelve, as on screen: To Re-shelve.

A ready hold carries row action: Check out on the row itself, because it is the action a patron standing at the desk came for. The rest are behind the row’s menu item: ⋯ menu:

  • row action: Send notice. Re-sends the “your hold is ready” notice on demand, useful when a patron says they never got it. The notice fans out to the patron’s own email and any guardian addresses on file, and the send is logged on the hold (see View notice history below). The action is disabled when the patron has no contact info to send to.
  • row action: View notices. Opens the send history for this hold (see View notice history below).
  • row action: Un-assign copy (library manager). Releases the copy from this hold and sends the hold back to screen: To Pull. Use it when a copy was assigned by mistake or needs to go to a different hold. Staff without the library-manager grant don’t see this option.
  • row action: Cancel hold. Cancels the ready hold and routes the assigned copy to the next patron, or to screen: To Re-shelve if no one is waiting (see Canceling a hold). The confirmation names the patron and the item.

Each row is a copy sitting on the hold shelf for a canceled or expired hold with no one left in the queue. (When someone is waiting, Lyra reassigns the copy to them instead and it never reaches this page.) The patron canceled, or the hold expired without pickup, and no other patron needs the copy, so it has to go back to its home location.

Scan the copy at the field: scan bar to clear the row, or select row action: Re-shelve on the row itself. Lyra marks the copy re-shelved, releasing the assignment and closing the task. Then physically move the copy back to its home location. Re-shelving is cart work, so the same button: Scan with the camera option is under this field too. As on screen: To Pull, the pinned button: Location filter narrows the list by field: location, and the toolbar’s button: Download menu exports it.

What the row tracks is the walk to the stacks, not the copy’s availability — the copy is already available while the row is open. Nobody is waiting on it, so Lyra treats it as loanable everywhere: it reads status: Re-shelve rather than status: On hold in the catalog’s copy lists, counts under Available in the copy Status filter, turns up in button: Find a copy at checkout, and the OPAC shows the item as on the shelf. The status: Re-shelve label is the one thing that sets it apart: available, but on the cart rather than in its home location. If a patron asks for it while it’s still on your cart, hand it over.

A screen: To Re-shelve row clears one of two ways: you re-shelve the copy here, or a patron places a fresh hold on that same item before you get to it. In the second case Lyra hands over the already-set-aside copy, the new hold goes straight to Ready and the row disappears, no re-pull and no extra trip to the stacks (see Placing a hold). Until one of those happens, the copy stays on the hold shelf under the now-defunct hold — available, but not yet where the shelf says it is.

Two paths:

  • Patron places it from the OPAC. A signed-in patron selects button: Place hold on the item page. Their hold joins the queue. See OPAC for the patron-side experience.
  • Staff places it on a patron’s behalf. From the patron record, select button: Place hold on the tab: Holds tab and search for the item in the dialog: Place Hold dialog. Or from the item record, select button: Place hold on its tab: Holds tab (or, for a library manager, menu item: Place hold… in its button: Actions menu) to find the patron and place the hold for them. That dialog is titled dialog: Place Hold, and its patron search matches a name or a card barcode, so you can scan the card the patron just handed you.

Either way, the hold enters the queue in the order it was placed. The exception: if a copy for that item is already set aside on screen: To Re-shelve (an earlier hold was canceled or expired and the copy hasn’t been re-shelved yet), Lyra hands that copy to the new hold instead, it skips the wait and goes straight to Ready, and the screen: To Re-shelve row clears. This is the demand-side mirror of the roll-forward that happens when a copy comes free.

Four things stop a hold. The message names which:

  • message: Patron has reached their hold limit. The patron is at the setting: Hold limit from their library default or patron override (see Policies). The count is their active holds in the library: everything they’re waiting on plus anything already ready for pickup. Canceled and expired holds don’t count, and re-placing a hold on an item they already hold never counts against them.
  • message: Patron already has this item checked out. There’s nothing to wait for — they have it. Renew it instead.
  • message: Patron's grade is outside this item's allowed range. The item carries a grade restriction the patron falls outside of.
  • message: Every copy of this item is reference only. Every copy of the item is reference only, so a hold could never be filled.

A library manager sees an button: Override beside any of these and can place the hold anyway; staff without the grant can’t.

From the OPAC a patron sees none of these messages, and can’t override anything themselves. The item page’s button says why instead: button: Hold limit reached at the limit, with a note prompting them to cancel a hold to make room; button: Already checked out when they have it out; and button: Reference only when every copy is reference only. A grade-restricted item never reaches their catalog at all.

Either side can cancel:

  • The patron cancels from their OPAC account.
  • Staff cancels from the row menu on screen: To Pull or screen: All Holds, from the tab: Holds tab of the patron’s record, or from the item or copy record.

Canceling a hold that didn’t have a copy assigned is the end of the story. The hold is simply deleted.

Canceling a hold that did have a copy assigned (the copy was set aside for pickup, or pulled but not yet picked up) hands the copy to whoever’s next. If another patron is waiting in the queue, Lyra reassigns the copy to them on the spot: it stays set aside, the next patron’s hold becomes status: Ready, and they get a notice, there’s nothing for you to do. Only if no one is waiting does the cancellation leave a row on screen: To Re-shelve: the hold is canceled and the patron sees that immediately, and the copy goes back into circulation at once — it is just still on the hold shelf, waiting for somebody to physically re-shelve it.

Either way, canceling doesn’t lock the patron out of the item, the patron (or staff) can place a new hold on it right away. And if the canceled copy is still sitting on screen: To Re-shelve, a new hold for that item claims it on the spot: the hold goes straight to Ready and the screen: To Re-shelve row clears, no re-pull needed. (If the copy has already been re-shelved, the new hold just waits in the queue as usual.)

The hold queue is first-placed, first-served. The patron who placed the hold earliest sits at the front. When a copy comes available, Lyra assigns it to the front-of-queue patron.

If that patron doesn’t pick up within the library’s configured pickup window, Lyra works through this order:

  1. The hold moves to status: Expired.
  2. Lyra reassigns the copy to the next hold in the queue automatically. Because the copy is already set aside for pickup, their hold becomes status: Ready right away and they’re notified, the copy stays put and no one re-pulls it.
  3. If no one is waiting, the copy moves to screen: To Re-shelve instead, to be returned to circulation.

The pickup window is counted in school days, weekends and the holidays on your school calendar don’t count against it. A 5-school-day window that starts on a Monday runs through the following Monday, skipping the weekend in between, so every patron gets the same number of real days to come in no matter when their copy lands ready. Because the deadline always falls on a school day, the expiry notice never tells a patron they missed a day the library was closed. This is automatic for holds: the pickup window is always counted in school days, regardless of whether the library counts loan periods in school days or calendar days (see School days vs. calendar days).

The pickup window is per-library and configured as setting: Pickup window in the dialog: Edit Library Defaults dialog, opened with button: Edit on the card: Defaults card of Library level navigation path: Configure then Policies. The default is conservative; tighten or loosen it based on how often your patrons actually come in.

The first-placed-first-served order is right almost all the time, but occasionally you need to override it, bump a teacher who needs a title for Monday ahead of a student who placed first, or fix a queue after a mistake.

A library manager can reorder a hold queue from the item’s tab: Holds tab.

  1. Open the item.
  2. Go to the tab: Holds tab.
  3. In the card: Queue section, open a hold’s row menu (⋯) and choose menu item: Move up or menu item: Move down. The hold moves one place.

To see what Lyra has already sent for a hold (the original “ready” notice, any re-sends, and who each went to), open the hold’s actions and choose menu item: View notices. The dialog lists one row per recipient and notice flavor, with timestamps. If nothing has been sent yet, it shows an empty state. This is the first place to look when a patron says they never heard about a hold: confirm whether a notice was actually sent before re-sending. For the automated schedule behind these notices, see Notices.

  • Holds (concept) covers the underlying lifecycle and the assignment model.
  • Checkout is where a Ready hold becomes a completed loan.
  • Check-in is where a returned copy gets routed to To Re-shelve or assigned to a new hold.