Overview¶
This is a Django application that implements the expense reimbursement workflow for the Debian project. Project Members who wish to make expenses on behalf on the project file a request for approval, and then claim their reimbursement through this application.
Request States¶
Requests go through this state life-cycle:
![digraph {
"[New]" [style="filled", fillcolor="/brbg3/3"];
"[New]" -> "Draft" [label="Requester creates"];
"Draft" -> "Pending Approval" [label="Requester proposes"];
"Pending Approval" -> "Approved" [label="Approver approves", color="/accent3/1"];
"Pending Approval" -> "Deleted" [label="Approver rejects", color="/accent3/1"];
"Pending Approval" -> "Draft" [label="Approver requests more information", color="/accent3/1"];
"Approved" -> "Draft" [label="Requestor needs budget increase"];
"Approved" -> "Pending Payment" [label="Requester submits receipts"];
"Pending Payment" -> "Paid" [label="Payer reimburses requester", color="/accent3/2"];
"Deleted" [style="filled", fillcolor="/brbg3/1"];
"Paid" [style="filled", fillcolor="/brbg3/1"];
}](_images/graphviz-2f14fa2fadbfa46851041af76d467daf1b1df038.png)
Components¶
The main application is a Django website. Some image-handling work is done in a separate “image wrangler” service, for isolation.
The image wrangler service runs runs a http service. It can generate thumbnails of images.