[Discussion] Expenses Module For ERPNext

Hello everyone,

As far as I know, ERPNext does not have a specific module for handling and tracking Expenses expect the Expense Claim in the HRM module.

Because of that a plugin called ERPNext Expense Requests / Expense Entry was created but it has not been updated for a long time.

For the same reason and based on that plugin, I thought of recreating the plugin to serve the same purpose but in a more broader way and it will be great if later ERPNext agreed to include it in their release.

So in this post I would like to know the usefulness of such plugin for you and I also would like to discuss every part of it to determine the needs that such plugin must serve and to receive suggestions from you.

Lets Start

1. Expense Entry

This doctype is the heart of the module, it stores the expenses of a company and the expenses entries will be inserted into the Journal Entry doctype.

It can be used to record expenses based on an Expense Request or not and to mark the expenses as advanced if they are.

Each entry will remain as draft until submitted then it will be recorded as a Journal Entry.

Do you think that Expenses module is needed?
  • Yes
  • No

0 voters

If you choose (No) in the previous pool, then there is no need for you to continue.

2. Expense Item

This doctype is similar to Item doctype in ERPNext but for storing expenses (both general and specifics) like Travel and Traveling Ticket.

It also stores the Account that the expense will be recorded against, default expense amount & currency and can specify whether the amount is fixed or changeable on request.

Such doctype exists in Odoo so I thought that it can exist in the Expenses module to add control over the things that the employee can create an Expnse Request for.

Do you think that Expense Item is needed?
  • Yes
  • No

0 voters

3. Expense Request

This doctype stores the requests of single or multiple expenses.

The employee create a request to notify the management of the exepenses that must be made and whether it is project related or not.

Employees can only read/write personal requests and the request created will remain as draft until submitted.

The Expense Approver users will be able to Approve, Reject or Cancel the employees requests and when a request is approved, an Expense Entry is immediately created for this request.

Do you think that Expense Request is needed?
  • Yes, record multiple expenses and treated as one when Approve or Reject
  • Yes, record multiple expenses and treated separately when Approve or Reject
  • Yes and only record a single expense
  • No

0 voters

4. Expense type

This doctype stores types of Expense Item like Travel as parent and Plane Ticket & Hotel Room as children. It is also used to create types total expenses report and chart.

Do you think that Expense Type is needed?
  • Yes
  • No

0 voters

That’s all that I have in mind for the Expenses module and I hope that I was able to explain the idea perfectly.

Your suggestions and comments will be appreciated.

Best regards

Last Update: 02/10/2022


Draft #4

Expense Type

  • Title
    (Required, Unique, Data)
  • Is Disabled
    (Optional, Check, Default: 0)
  • Parent Type
    (Optional, Link, Expense Type)
  • Is Group
    (Optional, Check, Default: 0)
  • Expense Accounts
    (Required if not group else Read Only, Table, Expense Type Account)

Expense Type Account

  • Company
    (Required, Link, Company)
  • Expense Account
    (Required, Link, Account)
  • Expense Currency
    (Read Only, Data, Fetch: Expense account currency)

Expense Item

  • Name
    (Required, Unique, Data)
  • Is Disabled
    (Optional, Check, Default: 0)
  • Expense Type
    (Required, Link, Expense Type)
  • Costs
    (Optional, Table, Expense Item Cost)

Expense Item Cost

  • Company
    (Required, Link, Company)
  • Custom Currency
    (Optional, Check, Default: 0)
  • Expense Currency
    (Read Only, Data, Fetch: Company related expense account currency in Expense Type)
  • Currency
    (Optional if custom currency else Read Only, Link, Currency, Flexible currency if empty and custom currency is checked)
  • Cost
    (Optional, Currency, Default: 0, Flexible cost if "0")

Expense Request

  • Company
    (Required, Link, Company)
  • Mode of Payment
    (Required if company is selected else Read Only, Link, Mode of Payment)
  • Posting Date
    (Required, Date, Default: Today)
  • Required By :information_source:
    (Optional, Date)
  • Default Project :information_source:
    (Optional, Link, Project)
  • Default Cost Center :information_source:
    (Optional, Link, Cost Center)
  • Expenses
    (Required, Table, Expense Request Item)
  • Remark
    (Optional, Small Text)
  • Expense Total :information_source:
    (Read Only, Currency, Default: Expenses total after converted to below currency)
  • Expense Currency :information_source:
    (Read Only, Data, Default: Company cash/bank account currency from Mode of Payment)
  • Reviewer
    (Hidden, Link, User)
  • Status
    (Hidden, Select, Default: Draft)

Expense Request Item

  • Expense
    (Required, Link, Expense Item)
  • Cost
    (Required if flexible expense cost else Read Only, Currency)
  • Quantity
    (Required, Int, Default: 1)
  • Currency
    (Required if flexible expense currency else Read Only, Link, Currency)
  • Total Cost
    (Read Only, Currency)
  • Is Advance :information_source:
    (Optional, Check, Default: 0)
  • Description
    (Optional, Small Text)
  • Project :information_source:
    (Optional, Link, Project, Default project is used if empty)
  • Cost Center :information_source:
    (Optional, Link, Cost Center, Default cost center is used if empty)

Your suggestions are highly appreciated


  • Should the Expense Type have multiple levels (Tree) or only just one level? :ballot_box_with_check:
    Yes, must be of multiple levels (Tree)

  • Should there be a table to add companies and their respective expense account for each type or item? :ballot_box_with_check:
    Yes, for each Expense Type

  • Can the cost of an Expense Item be in a different currency than the company’s expense account? Or it should be the same? :ballot_box_with_check:
    Yes and exchange rates can be automatically fetched or manually added when creating an Expense Entry

  • Should the Expense Request be used for expense claims?

  • Should the Expense Request be linked to a project?

  • Should the Expense Request be linked to a cost center?

  • Can the cost of an Expense Item in the Expense Request be an advance payment like Insurance or Internet Service?

  • Should the Expense Request have a total field to sum all the expenses cost, keeping in mind the expense currency difference?

Please help me make a decision.
Your contribution is much appreciated.

Multiple levels of expense type imo.
For example, for an overnight sales and delivery trip, one may need to give some funds to the employee, in advance, this can be for fuel expenses, hotel allowance, food allowance, emergency funds, etc. But this all can be grouped under trip expenses. And another subgroup for vehicle expenses to include fuel exp, and maintainence exp, another subgroup for employee allowance to include food allowance and living accom. Allowance.
I’m just getting started with this, and have not recorded any expenses yet, as there is nothing straightforward about recording expenses inbuilt.

1 Like

I think each company can have its own expenses managed seperately. I personally have had a bit of a headache trying to enter purchase invoices in a foreign currency, so i’m not banking on the forex functionality at all

1 Like

@Nirmal_Balani Thank you so much for your comments, it really helped me a lot…

1 Like

It can be different in some cases.

1 Like

@Saumyaseelan_Pv Thank you so much for your comment. You have helped a lot…