Expenses

Keep track of your expenses and include them in your invoices

  • Record all your expenses and show them in a table view
    • The data can be searched- and filtered (see screenshots)
  • All (billable) expenses will be automatically included in your invoices
    • Negative amounts allow for complex bookings, budget and invoice adjustments
  • Manage expenses via API
  • Export expenses in: Excel, PDF, HTML
  • Support for custom-fields
  • Include expenses in Kimai export module
  • Import expenses from Kimai 1

Expenses will be assigned to free configurable categories and each category has:

  • name
  • visibility flag
  • default cost
  • color
  • help text (will be shown when creating an expense)
  • description (will be copied into the expense description upon selection)

Each expense has the following fields:

  • a date-time
  • category (see above)
  • user
  • project (and customer)
  • activity (optional)
  • description (free text field)
  • the cost (can be hidden for default user, if you use default cost via category)
  • an amount (see it as multiplier, use 1 if you want to charge the cost only)
  • a billable flag (non-billable expenses will not be added to your invoices)
  • an export flag (to make sure, that each expense will be invoiced only once)

If turned on, Expenses count towards budgets and revenue statistics.

Expense summaries are displayed on the detail pages for customer, project and activity.

Usage

Users with sufficient permissions can access the expense administration screen at /en/expenses/.

During installation, a default Demo category is created to help you get started with adding expenses. You can rename it after completing your first test.

Categories

Expenses are organized into categories. An expense category serves three main purposes:

  • It groups related expenses.
  • It sets default values for calculations.
  • It allows configuration of a price per unit.

When defining costs, you can pre-set how much will be calculated for a single expense item.
For example, if you set 10 as the Cost and the user enters 5 as the Quantity, the total expense will amount to 50.

If you want users to input the actual price themselves, you can set the cost to 1.

Price vs Amount

Each expense consists of two fields:

  • Quantity (visible to all users)
  • Amount (visible only to Admins)

Regular users can view and edit the Quantity field. However, only Admins have permission to directly edit an expense’s Amount.

The usual case is that most categories have a fixed price and your users only enter a quantity. But:

Example

The following example illustrates this process:

One expense category

The category Driving distance is designed to track travel routes between the office and a client location. The cost is set at 0.30 per kilometer.

Now, let’s assume a user creates an expense using the new Driving distance category and enters a quantity of 74, as shown in the screenshot below:

The expense is using the previously created category

In this case, the entered quantity of 74 kilometers is multiplied by the cost of 0.30, resulting in a total amount of 22.20 €.

The expense with costs

Invoices

Expenses are automatically included in your invoices, so it may be helpful to differentiate between expenses and timesheets.

  • The invoice template variable ${entry.type} indicates the type of entry. Its value will be expense. This can be used in tools like Excel with IF formulas or conditional formatting.
  • The variable ${entry.category} contains the expense category name.

Budgets

As initially written:

If turned on, Expenses count towards budgets and revenue statistics.

At System > Settings in the Expenses category you find a setting called If activated: adds expenses to consumed budgets.

Switch it on and all expenses will be deducted from your budgets.

The search supports filtering by the fields:

  • daterange
  • customer
  • project
  • activity
  • expense category
  • user
  • billable
  • exported

The free search term will query the field:

  • description

Additionally, you can filter for custom fields by using a search phrase like location:homeoffice. This would find all entries with the custom field location matching the term homeoffice.

The search terms will be found within the full value, so searching for office would find:

  • I love working in my office
  • Office
  • This office is beautiful
  • Our offices are very noisy

Attention: checkboxes have the values 0 (not checked) and 1 (checked).

You can mix the search term and use multiple meta-field queries:

  • location:homeoffice hello - find all entries matching the search term hello with the custom field location matching the term homeoffice
  • location:homeoffice contract:fulltime - find all entries with the custom field combination: location matching homeoffice and contract matching fulltime
  • expired:0 finds all items whose expired checkbox is off

There are also special operators, which can be used in conjunction with custom fields (since Kimai 1.19.1):

  • The   empty string (e.g. location:) will find all entries whose value in the location field is either empty or not existing
  • The ~ search term (e.g. location:~) will find all entries that are missing the custom field (created before the field was created)
  • The * search term (e.g. location:*) will find all entries that have any value in the location field (basically the opposite of ~)

Permissions

Permission Name Description
view_expense allows access to the expenses screen
edit_expense edit existing expenses
edit_expense_cost edit the cost of a single expense (deactivate this, if you want to provide default costs via the category)
export_expense export expenses
create_expense create new expenses
delete_expense delete existing expenses
manage_expense_category manage expense types
edit_exported_expense allow to edit and delete exported expenses

Pre-defined permissions are assigned to all default user roles.

The following restrictions are in place for accessing other user’s data:

  • can only be seen by users who own the view_other_timesheet
  • users that own the view_expense permission but NOT view_other_timesheet will only see own expenses
  • the visible data for non-admin users (permission view_all_data) is limited by team assignments
Top