-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[IMP] accounting: new version of cash discount
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
Showing
8 changed files
with
166 additions
and
55 deletions.
There are no files selected for viewing
221 changes: 166 additions & 55 deletions
221
...pplications/finance/accounting/receivables/customer_invoices/cash_discounts.rst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 removed
BIN
-29.2 KB
...ce/accounting/receivables/customer_invoices/cash_discounts/cash_discounts01.png
Binary file not shown.
Binary file removed
BIN
-26.4 KB
...ce/accounting/receivables/customer_invoices/cash_discounts/cash_discounts02.png
Binary file not shown.
Binary file removed
BIN
-34 KB
...ce/accounting/receivables/customer_invoices/cash_discounts/cash_discounts03.png
Binary file not shown.
Binary file removed
BIN
-23.7 KB
...ce/accounting/receivables/customer_invoices/cash_discounts/cash_discounts04.png
Binary file not shown.
Binary file added
BIN
+18.3 KB
...counting/receivables/customer_invoices/cash_discounts/invoice-journal-entry.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+15.2 KB
...nance/accounting/receivables/customer_invoices/cash_discounts/invoice-print.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+13.3 KB
...nance/accounting/receivables/customer_invoices/cash_discounts/payment-terms.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.