Evergreen Billing Enhancements

The following enhancements to Evergreen billing are developed under contract to MassLNC.

Support for Conditional Negative Balances

There are a couple of scenarios that cause Evergreen to automatically apply a negative balance to a patron's records.

Evergreen provides a library setting to void a lost item's billing when that item is returned. The policy at many libraries is to void this lost item billing, but only if the lost bill has not yet been paid. If those libraries enable the current setting, when a patron returns a lost item that has already been paid, a negative balance is applied to the patron record. Staff then need to go to Local Administration > Patrons with Negative Balances to view a list of patrons with a negative balance, retrieve each of these patrons, and manually clear the negative balance on their records.

Those libraries that do provide refunds often will only refund the lost payment if the item is returned within x many days of being paid. A setting similar to the "Void lost max interval" setting would be useful for these libraries.

Negative balances can also accrue in situations where a patron partially pays for an overdue fine while the item is still checked out.

  1. An item checked out to the patron is overdue and starts accruing fines.
  2. The patron visits the library and is told he owes $1.00 in the fines that have accrued. He pays the fines at that visit even though the item has not been checked back in.
  3. The overdue fines keep accruing, adding another $2.00 in fines to his record.
  4. The patron reports that he did return the item on time. A check of the shelves confirms that the item had been previously checked in.
  5. Using the "amnesty mode" option, staff checks the item in.
  6. "Amnesty mode" is set to void fines. It voids the total overdue fines applied to the item, $3.00, creating a negative balance on the patron record.

Because a library's policy for refunding bills for lost/long overdue items may be different from its policy for refunding overdue fines, there should be two distinct library settings covering negative balances for both these scenarios.

Use Cases

The No Refund Public Library (NRPL) has enabled the library setting to void a lost item's billing when it is returned, but has also enabled the setting for No Negative Balances for Lost/Long Overdue Bills. Lucy Lostbook reports to library staff that she has lost a book, and a $25 lost fee is applied to her record. Lucy only has $10 in her wallet and pays just a portion of her lost fee, leaving a balance of $15. Lucy finds here book a week letter and returns it to the library. The remaining $15 of the lost fee is voided, leaving a zero balance on her record.

The Refund Public Library (RPL) will refund a patron's lost fee payment if the item is returned within 30 days of payment. The library enables the setting to void a lost item's billing when it is returned and also sets a max interval of 30 days for the refund. Lucy Lostbook reports to library staff that she has lost two books, each of which cost $20, on March 1. She pays $40 for both lost fees on April 1. On April 29, she finds one of the lost books and returns it to the library, generating a $20 refund on her record. She finds the second lost book on May 1, but the system does not provide her with a refund because more than 30 days have passed since she paid the lost fee.

The No Overdue Refund Public Library (NORPL) has a policy to refund payments for lost items as long as the item is returned within 30 days of payments. However, because overdue fines are immediately sent to the town, it cannot refund payments for overdue fines. The library is able to set the No Negative Balances for Lost/Long Overdue Bills setting to false and the No Negative Balances for Overdue Fines setting to true to support both of these policies.

Implementation

To implement this enhancement, six new settings will be added to the “Finances” category of the organizational unit setting types. Three settings will specify whether or not a library allows negative balances (refunds) on bills. There will be 1 such setting for overdue fines, 1 for lost item fees, and 1 that will serve as a default setting if an organization's policy is consistent across both fine types. The other three settings will allow a library that does allow refunds to set a maximum interval after which no negative balance is applied. As with the settings prohibiting refunds, there will be 1 setting each for overdues, lost fees, and a default setting. These new settings are listed in the table below:

Setting Value Description
bill.prohibit_negative_balance_default True or False When set to true, negative balances are not permitted on bills for overdues or lost materials.
bill.prohibit_negative_balance_on_overdues True or False When set to true, negative balances are not permitted on bills for overdues.
bill.prohibit_negative_balance_on_lost True or False When set to true, negative balances are not permitted on bills for lost materials.
bill.negative_balance_interval_default Interval Provides a time interval after which no negative balances are permitted on overdues or lost materials.
bill.negative_balance_interval_on_overdues Interval Provides a time interval after which no negative balances are permitted on overdues.
bill.negative_balance_interval_on_lost Interval Provides a time interval after which no negative balances are permitted on lost materials.

In the case where multiple settings from the above are activated, the more specific setting will take precedence. For example, if a library has set both the default and a setting for lost materials and a bill for lost materials is being handled, then the setting for lost materials will be used. Similarly, the settings that prohibit negative balances will take precedence over the interval settings for negative balances, so if both are set, then no negative balance is allowed.

The setting for the organization owning the copy will be used to determine what policy applies at the time of the event. This check will be aware of the hierarchy so that the setting need only be entered once when it applies to an entire consortium or system, and need not be set for each branch or sublibrary, etc.

"Void" Payment Type

In addition to the above settings and code changes, I believe that a new payment type will need to be added to handle voiding of bills. This new payment type will replace the current void logic that simply flags bills as voided.

This new payment type is needed because the current way that Evergreen voids bills requires that all voids happen in the same increments as the bills themselves. This prevents voiding of a partial bill or a bill that has had a partial payment applied.

For instance, let's assume that a patron owes two dollars for a late DVD. If the fine rate is one dollar per day, this patron has two bills for that circulation of one dollar each. If the patron has paid $1.50 of the fine, and our code is going to void the rest, then under the current method of voiding bills, we can't void just fifty cents on this transaction. We would have to void a whole dollar, because it would be one of the two bills that would be voided. This would give the patron the a credit of fifty cents on their account regardless of what our settings intend to happen. The only option under the current method would be not to void the bill and thus leave the patron owing the fifty cents, which is also not what we want to happen.

In order to void the remaining balance on these partially paid bills, we will need to implement voids as a new payment type. This would allow the code to apply a payment of fifty cents to this patron's bill that will zero out the remaining balance owed.

These new void payments would be exposed in the staff client as well, so that when staff manually void bills these payments will be used instead of flagging bills as voided. In addition, staff will be able to void fifty cents on a one dollar bill if for some reason they feel it appropriate. Staff voiding of billing amounts works just as it does for the automatic voids.

For more information on the motivation of adding the void payment, see: https://bugs.launchpad.net/evergreen/+bug/1009049.

For information on this enhancement in general see also: https://bugs.launchpad.net/evergreen/+bug/1198465.

Furthermore, code fixes made in this branch http://git.evergreen-ils.org/?p=working/Evergreen.git;a=shortlog;h=refs/heads/user/dyrcona/lp965656_xact_close_logic as explained in this Lauchpad bug https://bugs.launchpad.net/evergreen/+bug/965656 would be very helpful in completing the implementation of this feature.

Support for Lost & Paid Status

The system should provide support for a Lost & Paid status.

A Lost & Paid status should be applied to an item once the borrower has fully paid for the item. This status should be applied in the following situations:

Once a lost or long overdue item has been paid, it should be removed from the Items Out screen of the patron's record, unless the Leave transaction open when lost balance equals zero library setting has been enabled.

Use Cases

Staff require an easier way to differentiate between lost and lost & paid copies in order to enable various work flows heretofore unknown.

Implementation

To fulfill the requirements of this enhancement both a Lost and Paid item status and circulation stop fines reason will be added. These statuses will be applied to the circulation and copy when either a lost or long overdue copy has been paid for by the patron. This will also remove the copy from the patron's list of items out, unless the Leave transaction open when lost balance equals zero organizational unit setting applies. The use of the new Lost and Paid statuses will be made optional via an organizational unit setting. If the setting is True, then the new statuses will be used. The settings used will be those of the copy owning library and will be made aware of the hierarchy.

In addition to the above, all places in the code that handle the processing of lost or long overdue copies and transactions will be modified to also handle lost and paid copies and transactions in a reasonable manner.

The implementation of this enhancement will build upon the development work that Equinox Software has already done for adding a long overdue status and stop fines reason as outlined here: http://yeti.esilibrary.com/dev/pub/techspecs/long-overdue.html. This Launchpad bug is added by reference: https://bugs.launchpad.net/evergreen/+bug/1169193.

A Launchpad bug has been created for this development: https://bugs.launchpad.net/evergreen/+bug/1198475.

Void Lost Fees for Claims Returned Items

If an item is set as Claims Returned after it had previously been set to Lost, the lost fee should be voided.

The voiding of this lost fee should adhere to the "no negative balances" library settings in determining whether a refund should be issued.

If the claimed returned date is after the due date and the restore overdues on lost checkin setting is enabled, then overdue fines will be automatically added to the patron record as they are when a lost item is checked in.

Items that have been marked Claims Returned should not automatically be set to Long Overdue or Lost at a later time and should not incur a future billing on the user's record.

Implementation

Two new organizational unit settings will be added to allow the voiding of lost fees on claims returned copies and circulations. The first of these will control the voiding of the lost fee itself when true. The second will also void the lost processing fee that is optionally charged by some Evergreen sites. Both settings will take a true or false value. When set to true the corresponding fees will be voided on a patron's account. When false or not set, the void behavior will remain unchanged. The setting for the copy owning library will be used, and the checks will be aware of the hierarchy, thus moving from a branch, to a system, the consortial level. The voiding of bills will be done with the void billing Evergreen function, and therefore should take into account any settings for negative balances and so on automatically. In addition, all trigger code that automatically sets copies and circulations to a lost or long overdue status will be modified so that claims returned circulations and copies will not enter that status.

For reference see: https://bugs.launchpad.net/evergreen/+bug/980296.

Allow Renewal on Lost, Long Overdue and Claims Returned Items

The system should provide a permission allowing a user to renew a Lost, Long Overdue or Claims Returned Item.

When a lost item is renewed, the status of the item should revert to Checked Out and should be an active checkout on the patron record. The system should void any lost item billings. If voiding the lost item billing needs to be a setting, it should be distinct from the setting to void lost item billing when an item is returned. The system should adhere to the following library settings to determine if lost billings should be voided and overdue fines restored:

When a Claims Returned item is renewed, the status of the item should revert to Checked Out (if it had been changed during the Claims Returned process) and should be an active checkout on the patron record. Any overdue fines that were voided when the item was marked Claims Returned should be restored.

When a long overdue item is renewed, the status of the item should revert to Checked Out and should be an active checkout on the patron record. The system should void any long overdue item billings. If voiding the long overdue item billing needs to be a setting, it should be distinct from the setting to void lost item billing when an item is returned. The system shoulde adhere to the below settings or to any new settings introduced to Evergreen to manage the return of Long Overdue items:

In addition to a new permission to allow a staff person to renew a lost, long overdue, or claims returned circulation, the development will take into account the already existing circ.lost_immediately_available organizational unit setting to determine if the renewal should proceed.

See https://bugs.launchpad.net/evergreen/+bug/638509 for additional information.