Skip to main content
Schoolyi
School librarian arranging books and planning cards in a bright library

Browse docs

Operations

Library

Catalog, circulation, reservations, fines, and student self-request.

Operations guide for day and boarding schools.

Last updated August 29, 2026

The library module manages books, active lendings, reservation waitlists, and history at /libraries. Loan period, fine rates, and auto-fulfill settings live in school library configuration (/settings/library). Students browse and request books from /my-library when self-request is enabled.

Set the circulation policy before the first book leaves the desk. Loan period, fine rate, grace days, the per-student loan cap and the reservation hold length are school-wide values read at the moment a loan is created or returned, so editing them later does not re-price loans that are already open. A school that opens on the defaults lends for 14 days, charges 5 rupees for each overdue day with no grace period, caps students at 3 concurrent loans, and holds a reservation for 3 days before it expires.

ScreenPathUse
Library desk/librariesCatalog, issue/reserve, reservations tab, history
Book catalog/booksTitle list and detail (subject-linked textbooks also)
Library settings/settings/libraryLoan days, fines, self-request, notification prefs
Student portal/my-libraryBrowse, request/reserve, view active loans

Tabs on the library desk

  • Desk - search the catalog and issue or place a hold in a single action.
  • Books - catalog rows with category and stock filters.
  • Lendings - everything currently issued or overdue.
  • Reservations - the waitlist, showing queue rank with fulfil and cancel.
  • History - closed lendings, including returned, lost, and damaged outcomes.
  • Analytics - stock and circulation counts served by /api/library/analytics.

Who owns it

TaskWho can do it
Open the desk, catalog, lendings, and analyticsPlatform Admin, staff with staffType Librarian, the Teacher role, and staff whose staffType is Admin, Principal, or VicePrincipal
Issue, reserve, fulfil, return, edit the catalog, change settingsPlatform Admin and Librarian only - other viewers get a 403 on every mutation
Request a title and see own loansStudents, from /my-library

Rules the desk enforces

  • Issue is refused when the book is inactive, when no copy is available, when the borrower account is inactive, or when that borrower already holds an active lending for the same title.
  • A reservation does not take a copy off the shelf. It records a hold whose expiry comes from the reservation hold days setting, and the reservations tab shows queue position.
  • Fulfilling a hold converts it into an issued loan and decrements available copies; cancelling removes the waitlist row and leaves stock untouched.
  • On return, the post-return step looks for the oldest waiting hold. With auto-fulfil on it issues that hold straight away; with auto-fulfil off it notifies the next borrower that a copy is ready to collect.
  • Marking a copy lost reduces total copies and does not add anything back to available stock. Marking it damaged leaves both counts alone and flags the physical copy.
  • Student self-request is refused once the borrower already has as many active loans as maxBooksPerStudent allows. When every copy is out, the request is queued and the reply carries the waitlist position.

Fines and the handoff to fees

  • The overdue fine is whole days late beyond the grace period multiplied by the per-day rate. An on-time or early return costs nothing.
  • A lost book is charged the greater of the accrued overdue amount and the lost replacement value. A damaged book is charged the overdue amount plus the damaged fine.
  • For a student borrower, any fine above zero creates a one-time fee instance under fee type code LIB_FINE with a due date 14 days out. The fee type and its structure are created on first use, so no fee setup is needed in advance.
  • The fee instance carries a bookLendingId marker in its notes, so repeating a return cannot charge the same lending twice.
  • The fine reaches finance as an ordinary pending fee instance for the active academic year. If no academic year is active, no fee instance is written and the fine stays only on the lending record.

Scheduled jobs

  • POST /api/library/cron/reminders promotes issued loans past their due date to OVERDUE, sends a reminder to borrowers inside the reminder window, and sends an overdue alert to everyone past due.
  • POST /api/library/cron/expire-reservations moves holds past their expiry to EXPIRED and releases the reserved copy back to available.
  • Both accept the x-fees-cron-secret header used by the rest of the daily ops cron.

Limits

  • There is no renew action. Extending a loan means returning the copy and issuing it again, which restarts the loan period.
  • The per-student loan cap is applied only to student self-request. A librarian issuing at the desk is not blocked by it.
  • Fines are recorded against the borrower. There is no way to waive a library fine from the library screens - open the fee instance in the fees module instead.

Common questions

Quick answers in plain language.

Does an unpaid library fine stop a student borrowing another book?+

No. The issue path at /libraries checks only that the book is active, that a copy is free, that the borrower account is active, and that the borrower does not already hold the same title. Outstanding LIB_FINE fee instances are never consulted, so the desk must refuse manually.

Why did a book stay overdue after the due date passed?+

Overdue status is set by POST /api/library/cron/reminders, and that job is not in scripts/run-school-cron.sh. Until you schedule it with the x-fees-cron-secret header, lendings stay ISSUED and no due or overdue notices go out.

Where does a library fine appear for a parent?+

When the borrower is a student, a fine above zero creates a one-time fee instance under fee type code LIB_FINE due in 14 days, and the student plus linked parents get a notification pointing at /fees/me. Staff borrowers get the fine on the lending record but no fee instance.

Can a librarian override the calculated fine?+

Yes. An explicit amount on the return form replaces the computed value. Leave it blank to let the policy in /settings/library decide from days late, grace period, and the lost or damaged charge.

Related searches

School leaders and IT teams often search for: book circulation system, and student library self request.