[ Open Admin Main | Fee Design 1 | Fee Design 2 | OA Docs ]

Fees System Design # 3

Updated: July 8, 2007 - dropped several fields in journal and dropped entire invoice number concept.
Updated: May 3, 2007 - changed table structure slightly to support partial payment better.

The design goals are simplicity and flexibility. It is all too easy to create something too complex to maintain, etc. To that end, I have dropped several fields that were really unnecessary, given other logical contraints. The whole idea of invoicing wasn't really necessary since it is more of a hold over from paper based accounting. Each charge transaction can stand on its own as the smallest atomic unit of a transaction. Invoice numbers would just get in the way.

Similarly for the concept of partial payments. The concept of "received on account" would still be necessary even if we had partial payments. We can handle the same problems of partial payments using the roa (received on account) idea and it is consistent with normal accounting principles.

The fees subsystem workflow is:
  1. Charge transactions are created for various charges to students. This transaction adds a record to the fees journal (fees_jrl) and fills in the id, studnum (student number), transaction date (trans_date), transaction type (trans_type is chg), and information about the charge (name, description, subtotal, and the shortnames and values for up to 4 taxes, and then a total for these values).

    The paid (paid_id) field remain NULL.

  2. The invoicing process is simply a reporting process. This is no separate aggregation stage, any more. Invoices will normally be run and mailed. The parent site should also allow viewing of outstanding charges, etc.

  3. The payment process will then generate a new transaction record in the fees journal (fees_jrl). It will only fill in limited fields and leave the rest NULL. The fields added are id (auto), student number (studnum), date of payment (trans_date), and a transaction type (trans_type) = pay. The name field will be 'Payment' (or alternate language equivalent). The total field will store the amount of the payment. The description field may list id's of the transaction paid.

    The other fields will remain NULL in the record (subtotal, all tax fields, and paid_id field).

    All charge transaction records that are paid completely will have their paid_id field filled in with the id of the payment transaction that does this.

    There will be no "partial payments"

Operations