Work Flow

  1. Staff create a PO

  2. Staff adds one or more Direct Charges to the PO, using a new type of charge that can be paid against more than once. We’ll call these blanket charges.

    • E.g. "2015 Spanish Language Titles"

    • The amount entered is the anticipated total cost of all items.

    • To encumber taxes and fees that can also be paid against multiple times, add additional blanket charges to the PO for Taxes, etc.

    • A blanket charge is a po_item with a new flag enabled for "can pay more than once".

  3. Staff activates PO to encumber funds.

  4. When a collection of items arrives, staff creates a new invoice for the PO.

    • The invoice will show all charges (including blanket charges) linked to the PO.

    • The amount for each charge is entered in the billed/paid columns for each charge.

  5. Staff saves the invoice

    • Each payment against a blanket charge (po_item) in the invoice is tracked as a new invoice_item, which links back to the original blanket charge (po_item).

      • This is new. Currently, if you invoice a po_item more than once, only the last payment is retained as an invoice_item.

    • The amount applied to each invoice item is subtracted from the encumbrance created by the original (po_item) Direct Charge.

      • This is new. Normally, creating an invoice_item linked to a po_item would result in the encumbered amount for the po_item being set $0.

  6. When the final shipment for a blanket charge arrives, staff mark the charge as complete.

    • This causes any outstanding encumbered amount on the charge to be set to $0.

    • Once a charge is marked complete, it will no longer appear in new invoices created for the same PO.

    • At the UI level, this may just be a button/checkbox next to each blanket charge.

Alternate Approaches

We could mark PO’s as blanket POs instead of individual charges, forcing all charges to be treated as blanket charges. I avoided doing that for 2 reasons:

  1. Additional work would be required to make lineitems on a blanket PO behave as expected and it’s not clear yet whether there’s a use case for that.

  2. Blanket charges can be useful in a non-blanket order context. For Example, consider a PO with 5 lineitems and a single blanket Tax charge, which is encumbered and paid down over time as items for each of the 5 lineitems are received.

Code

  • Add ability to mark charges as blanket

ALTER TABLE acq.invoice_item_type
    ADD COLUMN blanket BOOLEAN NOT NULL DEFAULT FALSE;
  • Modify the invoice code to inspect the po_item.inv_item_type.blanket value.

  • Any payments against a blanket charge results in…

    • the creation of a new invoice_item, linking back to the original po_item.

    • the fund_debit linked to the po_item will have its amount reduced by the invoiced amount. IOW, the amount paid goes up by $X and the amount encumbered goes down by $X.

Dependencies