Koha How-To

Set items to quarantine status upon return

UPDATE, 5/14/20: Some of our partner libraries have elected to use an alternate process for quarantine that uses shelving location instead of a not for loan status. I've updated this entry to explain both methods.

In our town hall about dealing with COVID-19 closures, several partners mentioned that their libraries are quarantining returned items for several days before they're allowed to go out again. We've established two different ways to do so. The first method uses a not for loan status. The second method uses a shelving location. Each method has strengths and weaknesses.

Method 1: Not For Loan

This method automatically applies a not for loan status of "Quarantine" to all items that get checked in.

  • Pros: The not for loan status clearly marks this item as unavailable in the catalog and can block holds from being placed and filled.
  • Cons: The not for loan status cannot be cleared automatically after a given amount of time.

First, we need to create a new Not For Loan value of "Quarantine" (or whatever else you'd like to call it). To do so, go to Administration, then Authorized Values. Find and click the category NOT_LOAN, then click the button for New Authorized Value for NOT_LOAN.

If you want to be able to place holds on items while they're set to your Quarantine status, make your authorized value a negative number. Use a positive number if you don't want to allow holds. Until you're upgraded to 19.11, items with a negative not for loan value will trigger holds at checkin, so stall will need to click "Ignore" to prevent the hold from capturing. If you use an automated checkin system or don't want to have to click "Ignore" on holds, use a positive not for loan value.

Now that our Quarantine status exists, there are a couple things we can do with it. First, we can tell Koha to set every item we check in to Quarantine. To do that, we'll use the system preference UpdateNotForLoanStatusOnCheckin. We want to tell it that whenever we check in an item no Not For Loan status to set it to the value we used for our new Quarantine status.

Next, we may want to hide those items from the public catalog. This part is definitely optional, but I can imagine patrons not being excited to see books marked as "Quarantine" in the catalog. If you don't want to hide these items, you could alternatively set a nicer-sounding label for the OPAC in your authorized value setup. Just put the wording you prefer in the Description (OPAC) field. If you're hiding the items, use the OPACHiddenItems system preference. Tell it the field we want to limit on (notforloan) and the value we want to hide (the number you used for your Quarantine status)

If you don't hide these items from the OPAC, this is how the status will show:

At this point, every item you check in will get set to Quarantine and hidden from the OPAC. The next step is getting the quarantine status cleared after a set number of days. The consensus in our town hall seemed to be 4 days, but you can use whatever timeframe you like. We can't fully automate this part, but we can make it easy. A report can list all the items checked in 4 or more days ago that are set to Quarantine:

SELECT itemnumber, barcode, title, returndate, notforloan

FROM old_issues left join items using (itemnumber) left join biblio using (biblionumber)

WHERE date(old_issues.returndate) <= date_sub(curdate(),interval 4 day) and items.notforloan=-5

GROUP BY itemnumber

Do you see the Batch Modify button at the top of the itemnumber column in the report? Use that to send all of these items to Item Batch Modification, where you can clear the Quarantine status. Then the items are ready to go!

Alternatively, you could set your UpdateNotForLoanStatusOnCheckin to automatically remove Quarantine status when the item is checked in a second time. Following the example status code used above, this would mean adding "-5: 0" to the system preference. This makes Quarantine status easy to remove, but requires staff to be careful not to check the item in early.

Method 2: Shelving Location

This method uses shelving location and the shelving cart functionality to mark items as quarantined when they are checked in.

  • Pros: Quarantine status is automatically removed after a specified time period.
  • Cons: Items will show as "available" in the catalog and will not block holds from being placed or filled.

The automation here relies on the existing Cart to Shelf process in Koha, which is designed to set every returned item to a shelving location of CART when returned and then change it back to its regular shelving location later. You may already have a location of CART in your system or you may need to create one. Either way, we want to make sure the description for CART says "Quarantine." This gets set in your authorized values, similar to the not for loan status described above.

Next, we need to tell Koha to set items to our CART location on checkin. This uses the system preference UpdateItemLocationOnCheckin. This is a lot like the UpdateNotForLoanStatusOnCheckin system preference we saw above. We need to tell it which shelving locations to change to CART at checkin. In this case, we're going to tell it everything should go to CART, which means entering "_ALL_: CART" in the system preference.

At this point, everything we check in will go to shelving location CART, which we've set to display the description "Quarantine." As with the not for loan status described above, we could hide these items from the OPAC using the system preference OPACHiddenItems. To do so, you'd enter "location: [CART]" in the system preference. If you don't hide them, this is how they'll show:

Note that Koha shows this item as available, despite the shelving location. This will allow holds to be placed on it, will trigger holds at checkin, and will show in the Holds to Pull and Holds Queue lists.

The last bit of setup here is to get this shelving location to change automatically. For that, we'll use the Cart-to-Shelf cron (which we discussed in detail here). We have all the staff-side pieces in place already, so you just need to let us know how long you want items to stay in Quarantine so we can set your cronjob accordingly.

Read more by Andrew Fuerste-Henry