Skip to content

Commit

Permalink
[IMP] accounting: new version of cash discount
Browse files Browse the repository at this point in the history
task-2834752

closes #3691

X-original-commit: 5fd3092
Signed-off-by: Antoine Vandevenne (anv) <[email protected]>
Signed-off-by: Castillo Jonathan (jcs) <[email protected]>
  • Loading branch information
jcs-odoo committed Feb 28, 2023
1 parent 8c0dbd5 commit 4d1d880
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 55 deletions.
Original file line number Diff line number Diff line change
@@ -1,68 +1,179 @@
====================
Offer cash discounts
====================

Cash discounts are incentives you can offer to customers to motivate
them to pay within a specific time frame. For instance, you offer a 2%
discount if the customer pays you within the first 5 days of the
invoice, when it is due in 30 days. This approach can greatly improve
your average collection period.

Set up a cash discount
======================

To set up a cash discount, go to :menuselection:`Accounting -->
Configuration --> Management --> Payment Terms` and click on
*Create*. Add a *Percent* type of term with a corresponding value
(e.g. 98% of the total price for a 2% discount) and the number of days
during which the offer is valid. You can also change the default balance
term if needed.

.. image:: cash_discounts/cash_discounts01.png
:align: center

Start offering the cash discount
================================
Cash discounts and tax reduction
================================

**Cash discounts** are reductions in the amount a customer must pay for goods or services offered as
an incentive for paying their invoice promptly. These discounts are typically a percentage of the
total invoice amount and are applied if the customer pays within a specified time. Cash discounts
can help the company maintain a steady cash flow.

.. example::
You issue a €100 invoice on the 1st of January. The full payment is due within 30 days, and you
also offer a 2% discount if your customer pays you within seven days.

The customer can pay €98 up to the 8th of January. After that date, they would have to pay €100
by the 31st of January.

A :ref:`tax reduction <cash-discounts/tax-reductions>` can also be applied depending on the country
or region.

.. _cash-discounts/configuration:

Configuration
=============

To grant cash discounts to customers, you must first set up the :ref:`type of tax reduction
<cash-discounts/tax-reductions>`, verify the :ref:`gain and loss accounts
<cash-discounts/gain-loss-accounts>`, and configure new :ref:`payment terms
<cash-discounts/payment-terms>`.

.. _cash-discounts/tax-reductions:

Tax reductions
--------------

Depending on the country or region, the base amount used to compute the tax can vary, which can lead
to a **tax reduction**.

To configure how the tax reduction is applied, go to :menuselection:`Accounting --> Configuration
--> Settings`, and in the :guilabel:`Taxes` section, in the :guilabel:`Cash Discount Tax Reduction`
feature, select one of the three following options:

Always (upon invoice)
The tax is always reduced. The base amount used to compute the tax is the discounted amount,
whether the customer benefits from the discount or not.

On early payment
The tax is reduced only if the customer pays early. The base amount used to compute the tax is the
same as the sale: if the customer benefits from the reduction, then the tax is reduced. This means
that, depending on the customer, the tax amount can vary after the invoice is issued.

Never
The tax is never reduced. The base amount used to compute the tax is the full amount, whether the
customer benefits from the discount or not.

.. example::

You issue a €100 invoice (tax-excluded) on the 1st of January, with a 21% tax rate. The full
payment is due within 30 days, and you also offer a 2% discount if your customer pays you within
seven days.

.. tabs::

.. tab:: Always (upon invoice)

.. list-table::
:header-rows: 1

* - Due date
- Total amount due
- Computation
* - 8th of January
- €118.58
- (€98 + (21% of €98))
* - 31st of January
- €120.58
- (€100 + (21% of €98))

.. tab:: On early payment

.. list-table::
:header-rows: 1

* - Due date
- Total amount due
- Computation
* - 8th of January
- €118.58
- (€98 + (21% of €98))
* - 31st of January
- €121.00
- (€100 + (21% of €100))

.. tab:: Never

.. list-table::
:header-rows: 1

* - Due date
- Total amount due
- Computation
* - 8th of January
- €119.00
- (€98 + (21% of €100))
* - 31st of January
- €121.00
- (€100 + (21% of €100))

.. note::
- :ref:`Tax grids <tax-returns/tax-grids>`, which are used for the tax report, are correctly
computed according to the :ref:`type of tax reduction <cash-discounts/tax-reductions>` you
configured.
- The **type of cash discount tax reduction** may be correctly pre-configured, depending on your
:ref:`fiscal localization package <fiscal_localizations/packages>`.

.. _cash-discounts/gain-loss-accounts:

Cash discount gain/loss accounts
--------------------------------

With a cash discount, the amount you earn depends on whether the customer benefits from the cash
discount or not. This inevitably leads to gains and losses, which are recorded on default accounts.

To modify these accounts, go to :menuselection:`Accounting --> Configuration --> Settings`, and in
the :guilabel:`Default Accounts` section, select the accounts you want to use for the
:guilabel:`Cash Discount Gain account` and :guilabel:`Cash Discount Loss account`.

.. _cash-discounts/payment-terms:

Payment terms
-------------

Cash discounts are defined on :doc:`payment terms <payment_terms>`. Configure them to your liking by
going to :menuselection:`Accounting --> Configuration --> Payment Terms`, and make sure to fill out
the fields :guilabel:`Discount %` and :guilabel:`Discount Days`.

.. image:: cash_discounts/payment-terms.png
:align: center
:alt: Configuration of payment terms named "2/7 Net 30". The field "Description on Invoices"
reads: "Payment terms: 30 Days, 2% Early Payment Discount under 7 days".

.. seealso::
:doc:`payment_terms`

Now, you can create a customer invoice and select the cash discount
payment term you added. Once the invoice is validated, Odoo will
automatically split the account receivables part of the journal entry
into two installments having different due dates. Since the discounted
price is already calculated, your payment controls will be simplified.
.. _cash-discounts/customer-invoice:

.. image:: cash_discounts/cash_discounts02.png
:align: center
Apply a cash discount to a customer invoice
===========================================

Grant the cash discount
=======================
Apply a cash discount to a customer invoice by selecting the :ref:`payment terms you created
<cash-discounts/payment-terms>`. Odoo automatically computes the correct amounts, tax amounts, due
dates, and accounting records.

The customer fulfilled the payment terms and therefore benefits from the
cash discount. When you process the bank statement, match the payment
with the related journal entry. Then, select the remaining cash discount
and click on *Create Write-off* to reconcile it.
Under the :guilabel:`Journal Items` tab, you can display the discount details by clicking on the
"toggle" button and adding the :guilabel:`Discount Date` and :guilabel:`Discount Amount` columns.

.. image:: cash_discounts/cash_discounts03.png
:align: center
.. image:: cash_discounts/invoice-journal-entry.png
:align: center
:alt: An invoice of €100.00 with "2/7 Net 30" selected as payment terms. The "Journal Items" tab
is open, and the "Discount Date" and "Discount Amount" columns are displayed.

.. tip::
You can also create a dedicated reconciliation model to make
the process easier. In this case, you should add a tax to the model
based on the taxes applied to your invoices. This means that if you
handle multiple tax rates, you need to create several reconciliation
models. Note that depending on your localisation, you might already have
a Cash Discount model available by default.
The discount amount and due date are also displayed on the generated invoice sent to the customer.

Register the full payment
=========================
.. image:: cash_discounts/invoice-print.png
:align: center
:alt: An invoice of €100.00 with the following text added to the terms and conditions: "30 Days,
2% Early Payment Discount under 7 days. 118.58 € due if paid before 01/08/2023."

In this case, the customer has not fulfilled the payment term and cannot
benefit from the cash discount. When you process the bank statement,
match the payment with the two related journal entries.
Payment reconciliation
----------------------

.. image:: cash_discounts/cash_discounts04.png
:align: center
When you record a payment or reconcile your bank statements, Odoo takes the customer payment's date
into account to define if they can benefit from the cash discount or not.

.. note::
If your customer pays the discount amount *after* the discount date, you can always decide
whether to mark the invoice as fully paid with a write-off or as partially paid.

.. seealso::
* :doc:`../../receivables/customer_invoices/payment_terms`
* :doc:`../../bank/reconciliation/reconciliation_models`
:doc:`../customer_payments/recording`
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 4d1d880

Please sign in to comment.