The Invoice Manager (/invoices/) is the central place to enter, route, approve, and pay vendor invoices for the association. It complements the Expense Manager (which handles reimbursement of out-of-pocket spending by members and staff): use Expenses when a person paid first and needs to be paid back, and use Invoices when a vendor sent us a bill that the association still owes.
Every vendor invoice moves through a fixed sequence of states (the "workflow"). Each state transition records who acted, when, and any comment they left, so the audit trail is automatic.
This page covers the workflow end-to-end for submitters (anyone entering an invoice), managers (first-step approvers), and finance (second-step approvers and payment processors). The last two sections document the intended organisational routing rules (which approver handles which kind of invoice) and the known gaps between that policy and what the software enforces today.
Access is controlled by Django permissions assigned to your user account (usually via an invitation permission template). Staff and superuser accounts bypass these checks and can perform every action.
| Permission | What it grants |
|---|---|
invoices.can_submit_invoices | Create new invoices and submit them for approval. |
invoices.can_view_all_invoices | See invoices submitted by other users (required for approvers to open the detail page). |
invoices.can_manager_approve_invoices | Perform the first-step (manager) approval or rejection. |
invoices.can_finance_approve_invoices | Perform the second-step (finance) approval or rejection. |
invoices.can_process_invoice_payment | Mark approved invoices as Ready for Payment and as Paid. |
invoices.can_close_invoices | Close paid invoices once they are fully reconciled. |
Important for approvers: the manager and finance approval permissions only enable the approve / reject buttons. To open an invoice submitted by someone else you also need can_view_all_invoices (or staff/superuser status). Without it, the invoice will not appear on your list or open from a direct link. If your approver account cannot see invoices waiting for review, ask an admin to add the view permission.
Submitters can always see and edit their own invoices while they are in Draft or after a rejection.
An invoice always sits in exactly one state. Allowed transitions are:
DRAFT -> SUBMITTED -> MANAGER_APPROVED -> FINANCE_APPROVED -> READY_FOR_PAYMENT -> PAID -> CLOSED
| |
v v
MANAGER_REJECTED FINANCE_REJECTED
| |
v v
DRAFT DRAFT
State guide:
Each transition writes an InvoiceStatusLog entry capturing the user, timestamp, and any comment, and updates the shared WorkflowInstance audit trail. You can review the full history on the invoice detail page.
Creating an invoice
/invoices/ and click New Invoice.If your invoice is rejected
You will see the invoice back at the top of your list with status Manager Rejected or Finance Rejected, plus the rejection comment in the status log. From the invoice detail page:
Tips
Managers are the first-step approvers. Your job is to confirm the invoice is legitimate, correctly classified, and within the budget of the division or function it belongs to.
Finding invoices that need you
There is no per-user "assigned to me" inbox yet (see Gaps section). Today you find work by filtering the invoice list:
/invoices/.What to check before approving
Available actions
A rejected invoice goes to Manager Rejected; the submitter is responsible for returning it to Draft and resubmitting.
Finance is the second-step approver and also drives the payment workflow once an invoice is fully approved.
Finance approval
Payment processing
After finance approval, the invoice sits in Finance Approved. Finance then drives it through the rest of the lifecycle:
The software does not yet enforce who should review which invoice. The rules below are policy: approvers should use them to decide which submitted invoices to pick up, and submitters should use them to set Classification and Division so the right person can find the work.
| Invoice covers | Primary approver (Manager step) | Backup |
|---|---|---|
| Coaches or players in a division (e.g., Jr Mens, Senior) | That division's Commissioner (Jr Commissioner, Senior Commissioner, etc. - Jr Mens has its own commissioner) | VP Admin |
| Fields and equipment | VP Baseball | VP Admin |
| Umpires | VP Baseball | VP Admin |
| Administration (insurance, facilities, general overhead, etc.) | VP Admin | VP Baseball |
| Anything else / ambiguous | VP Admin | Discuss at the next board meeting |
How submitters help routing today: set Classification (Umpire Fees, Equipment, Field Rental, Insurance, etc.) and Division (Jr Mens, Senior, blank for HQ). Approvers filter the invoice list by these two fields to pull their own queue.
How finance step works: Finance approval is performed by whoever holds the can_finance_approve_invoices permission (typically the Treasurer). The finance step is not routed by classification - all approved invoices flow through the same finance reviewer.
The list above is a starting point and is intentionally not exhaustive; new classifications or unusual bills should be raised with the VP Admin so the routing table can be expanded.
The routing policy above is currently manual. The software does not yet know about commissioners or VPs, and several quality-of-life features for approvers are still on the roadmap. This section makes the gaps explicit so users know what to expect today and so future work can be prioritised.
Not enforced in the application:
setup_permission_templates) do not yet ship Invoice Submitter / Manager / Finance bundles - admins must create custom templates or assign permissions manually.can_view_all_invoices is not surfaced in the UI; admins should bundle the two permissions together.Planned follow-up work (tracked as a separate spec) is expected to add:
manager_approved_by and finance_approved_by.If you see other gaps in the workflow as you use the system, please flag them to the VP Admin so they can be added here and into the follow-up spec.
I have the approval permission but the invoice will not open.
You also need invoices.can_view_all_invoices (or staff status) to see invoices submitted by other people. Ask an admin to add the view permission.
I cannot find the invoice that needs my approval.
Go to /invoices/ and set Status = Submitted (for managers) or Status = Manager Approved (for finance). Add Division or Classification filters to narrow down to the bills the routing policy says you own.
I rejected an invoice by mistake.
Tell the submitter. From the rejected state they click Return to Draft, and from Draft they can immediately Submit for Approval again. Add a comment so the audit log explains the round-trip.
Where do the attached supplier PDFs go?
They are stored as InvoiceAttachment records linked to the invoice and displayed on the invoice detail page. Maximum 10 MB per file.
How do I see only my own invoices?
Submitters automatically see only their own invoices on the list page unless they also have the view-all permission, in which case the list shows everything. Filter by Submitter to restrict to your own.
Why is there a finance step on top of the manager step?
The manager step confirms the bill is real and correctly classified for its area. The finance step adds a second check focused on tax, GL coding, duplicate-payment risk, and cash position before the invoice gets queued for actual payment.
What happens after Paid?
A user with can_close_invoices can close the invoice once it has been reconciled (e.g., matched against the bank statement). Closed invoices are read-only and remain in the system for reporting.