Expenses
Claims and approvals
What it is for
Employees file expense claims that move through draft, submitted, approved and paid. Paying needs its own permission and a human approval; receipts are referenced by note, not stored.
What the package does and does not do
Employee expense claims with a draft, submitted, approved and paid flow. Paying is a separate permission and needs a human approval; receipts are referenced by note, not stored. A claim has a number from a yearly series, and an employee sees and edits only their own claims; managers and finance see all.
Module details
- Version:
0.3.0 - Author: SpaceCorps
- Licence: AGPL-3.0-or-later
- Needs core:
^0.2(core 0.2.0 is current) - Maturity: Beta
- Categories: Finance, People
Models
expenses_expense
An amount an employee spent for the business and wants reimbursed
Read group: expenses.user. Write group: expenses.user.
| Field | Kind | Data class | Personal data | Group | Agents see | Description |
|---|---|---|---|---|---|---|
number | sequence | none | no | expenses.user | in clear | Claim number such as EXP-2026-0042, assigned when the claim is created; the series starts again each year |
description | text | none | no | expenses.user | in clear | What the money was spent on |
employee | text | internal | yes | expenses.user | masked | User name of the person claiming the expense; the person who creates the claim unless set otherwise |
spent_on | date | none | no | expenses.user | in clear | Date of the purchase (YYYY-MM-DD) |
category | select (travel, meals, lodging, supplies, software, other) | none | no | expenses.user | in clear | Expense category: travel, meals, lodging, supplies, software, other |
amount | money | financial | yes | expenses.user | withheld | Amount owed to the employee (minor currency units, e.g. cents) |
currency | text | none | no | expenses.user | in clear | ISO 4217 currency code, for example EUR |
receipt_note | longtext | none | no | expenses.user | in clear | Where the receipt is kept and what it shows |
paid_on | date | financial | yes | expenses.finance | withheld | Date the employee was reimbursed (YYYY-MM-DD) |
payment_reference | text | financial | yes | expenses.finance | withheld | Bank transfer reference of the reimbursement |
state | select (draft, submitted, approved, paid, refused) | none | no | expenses.user | in clear | Claim status: draft, submitted, approved, paid, refused |
Workflows
expenses_expense
| Action | Moves | Who may run it | Approval |
|---|---|---|---|
expenses_expense.submit | state: draft → submitted | expenses.user | no |
expenses_expense.approve | state: submitted → approved | expenses.manager | no |
expenses_expense.pay | state: approved → paid | expenses.finance | yes |
expenses_expense.refuse | state: submitted → refused | expenses.manager | no |
Permission groups
Groups used by this app:
expenses.financeexpenses.managerexpenses.user
Approval steps
Steps an agent can only propose:
expenses_expense.pay
What agents can and cannot do
An agent can read, search, create and update records of this app, and run the actions that need no approval, within the permission groups of its token.
It can only propose these steps, and a person must approve them: expenses_expense.pay, expenses_expense.delete.
Personal data is masked as placeholder tokens: expenses_expense.employee.
These fields are withheld from agents entirely: expenses_expense.amount, expenses_expense.paid_on, expenses_expense.payment_reference.
Dependencies
None.
Install
Install it from the Customize app (Marketplace), or from the command line:
obop modules install-from expensesNeeds a database and administrator rights.