diff --git a/content/applications/finance/accounting/taxes.rst b/content/applications/finance/accounting/taxes.rst index 94b2fb70a3..0a9f36d18c 100644 --- a/content/applications/finance/accounting/taxes.rst +++ b/content/applications/finance/accounting/taxes.rst @@ -4,167 +4,227 @@ Taxes ===== -There are numerous types of **taxes**, and their application varies greatly, depending mostly on -your company's localization. To make sure they are recorded with accuracy, Odoo's tax engine -supports all kinds of uses and computations. +Tax regulations generally require companies to compute tax amounts on sales, keep a record of +accumulated tax debit and credit, and periodically file this information in tax returns. -.. _taxes/default: +Overview +======== -Default taxes -============= +In general, managing taxes in Odoo involves the following steps: -**Default taxes** define which taxes are automatically selected when creating a new product. They -are also used to prefill the :guilabel:`Taxes` field when adding a new line on an invoice in -:ref:`Accounting Firms ` mode. +1. Taxes are added on individual lines of documents created via the Sales, Purchase, Accounting, and + Point of Sale apps. +2. Odoo automatically computes tax amounts on the documents. +3. On accounting documents, Odoo generates journal items to keep track of tax debit and tax credit. +4. The total base, tax debit, and tax credit for a period can be viewed in the tax return report + and used to file a tax return. -.. image:: taxes/default-configuration.png - :alt: Odoo fills out the Tax field automatically according to the Default Taxes +Taxes on sales and purchases +---------------------------- -To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings`, -scroll down to the :guilabel:`Taxes` section, select the appropriate default sales and purchase -taxes in the :guilabel:`Default Taxes` field, and click on :guilabel:`Save`. +Most sales and purchase documents have a :guilabel:`Taxes` field where taxes can be applied to +individual lines. This includes :doc:`invoices ` and :doc:`vendor bills +` in the Accounting app, :doc:`sales quotations <../../sales/sales/sales_quotations>` +in the Sales app, and :doc:`purchase orders <../../inventory_and_mrp/purchase/manage_deals/rfq>` in +the Purchase app. -.. image:: taxes/default-taxes.png - :alt: Define which taxes to use by default on Odoo +.. image:: taxes/invoice-tax.png + :alt: Adding a 21% tax on an invoice line. .. note:: - **Default taxes** are automatically set up according to the country selected at the creation of - your database, or when you set up a :ref:`fiscal localization package - ` for your company. + When adding a product to a sale or purchase line, the taxes :ref:`assigned to the product + ` are automatically applied to the line. -.. _taxes/list_activation: + In the :doc:`Point of Sale <../../sales/point_of_sale>` app, the taxes :ref:`assigned to the + products ` are applied directly to the order and cannot be changed except by a + :doc:`fiscal position `. + +Automatic computation of tax amounts +------------------------------------ + +Applying a tax to a sale or purchase line allows Odoo to automatically compute the tax amount based +on the sale or purchase line's subtotal and the tax's configuration. The details of the computation +are explained in the :doc:`Tax Computation ` page. + +.. image:: taxes/invoice-tax-amount.png + :alt: Odoo automatically computes a tax amount for the 21% tax. + +Automatic generation of tax journal items +----------------------------------------- + +Upon applying a tax on an :doc:`invoice ` or :doc:`vendor bill `, a +tax payable journal item is automatically generated with the tax amount. This keeps track of the tax +debit or credit associated with the transaction. + +Furthermore, the tax amount is added to the amount due on the receivable or payable journal item. + +Finally, :ref:`Tax Grids ` are added both to the automatically created tax +payable journal item and to the invoice line on which the tax is applied. These tags are used to +retrieve the journal items corresponding to the tax's base and tax amount in the :doc:`Tax Return +` report. + +.. image:: taxes/invoice-tax-items.png + :alt: Odoo automatically generates a tax payable journal item for the 21% tax. + +.. note:: + If :doc:`Cash Basis ` is enabled, upon reconciling the invoice or vendor bill + with the payment, an additional journal entry is created to represent the creation of the tax + debit or credit at that point in time. + +Filing tax returns +------------------ + +The :doc:`Tax Return ` report aggregates the base and tax amounts from +invoices and vendor bills over a given period and presents it in a format tailored to the +:doc:`fiscal localization <../fiscal_localizations>`. -Activate taxes from the list view -================================= +The amounts presented in the tax return report can be used to complete tax declarations that need to +be periodically submitted to the government. In most cases, there is a one-to-one correspondence +between the lines of the tax return and the official tax declaration, allowing amounts to simply be +copied from one to the other. -As part of your :ref:`fiscal localization package `, most of your -country's sales taxes are already preconfigured on your database. However, only a few taxes are -activated by default. To activate taxes relevant to your business, go to :menuselection:`Accounting ---> Configuration --> Taxes` and enable the toggle button under the :guilabel:`Active` column. +.. image:: taxes/tax-return-base.png + :alt: The base section of the tax return report for Belgium. -.. image:: taxes/list.png - :alt: Activate pre-configured taxes in Odoo Accounting +.. image:: taxes/tax-return-tax.png + :alt: The tax section of the tax return report for Belgium. .. _taxes/configuration: -Configuration -============= +Basic tax configuration +======================= -To edit or create a **tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open -a tax or click on :guilabel:`New`. +Follow these basic steps to set up taxes: -.. image:: taxes/edit.png - :alt: Edition of a tax in Odoo Accounting +1. Enable any relevant :ref:`company-wide options ` +2. Activate any needed :ref:`pre-configured taxes ` +3. Assign taxes on your :ref:`products ` -Basic options -------------- +.. _taxes/configuration/company: -.. _taxes/name: +Company-wide options +-------------------- -Tax name -~~~~~~~~ +To access these configuration options, go to :menuselection:`Accounting --> Configuration +--> Settings` and scroll down to :guilabel:`Taxes`. -The **tax name** is displayed for backend users in the :guilabel:`Taxes` field in -:doc:`sales orders <../../sales/sales>`, :doc:`invoices `, product forms, etc. +.. _taxes/default: -.. _taxes/computation: +Default taxes +~~~~~~~~~~~~~ -Tax computation -~~~~~~~~~~~~~~~ +The default :guilabel:`Sales Tax` and :guilabel:`Purchase Tax` are automatically set on products +when creating new products. -- **Group of Taxes** +If :ref:`Accounting Firms ` mode is enabled, the default sales tax is +automatically set on new invoice lines, and the default purchase tax is automatically set on new +vendor bill lines. - The tax is a combination of multiple sub-taxes. You can add as many taxes as you want, in the - order you want them to be applied. +<<<<<<< b7027b4b6937e78863d73e02699badd870f25622 +To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings`, +scroll down to the :guilabel:`Taxes` section, select the appropriate default sales and purchase +taxes in the :guilabel:`Default Taxes` field, and click on :guilabel:`Save`. +||||||| bcf73b2a1937b648ad0f3e0a140c062b5bb3835b +To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings +--> Taxes --> Default Taxes`, select the appropriate taxes for your default sales tax and purchase +tax, and click on :guilabel:`Save`. +======= +:guilabel:`Prices` can be changed to :guilabel:`Tax Included` to treat all taxes as :ref:`tax +included ` by default. This would be appropriate if all of a company's +pricing is done tax-included. If only some of a company's pricing is tax-included, individual taxes +can be set as :guilabel:`Tax Included`. +>>>>>>> 64e8e5bdc4c057f480414f31a70c281cac92dd7c + +EU intra-community distance selling +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Activate this option if you are based in the EU and sell to consumers in other EU countries to apply +local VAT rates. - .. important:: - Make sure that the tax sequence is correct, as the order in which they are may impact the - taxes' amounts computation, especially if one of the taxes :ref:`affects the base of the - subsequent ones `. +.. seealso:: + :doc:`EU intra-community distance selling` -- **Fixed** +Cash basis +~~~~~~~~~~ - The tax has a fixed amount in the default currency. The amount remains the same, regardless of the - sales price. +Activate this option if taxes must be accounted for on a cash rather than accruals basis. Some +countries mandate cash basis accounting; in that case, this option will be activated by default by +the :doc:`fiscal localization package <../fiscal_localizations>`. -.. example:: - A product has a sales price of $1000, and we apply a $10 *fixed* tax. We then have: +.. seealso:: + :doc:`Cash basis ` - +-------------+-------------+----------+----------+ - | Product | Price | Tax | Total | - | sales price | without tax | | | - +=============+=============+==========+==========+ - | 1,000 | 1,000 | 10 | 1,010.00 | - +-------------+-------------+----------+----------+ +.. _taxes/list_activation: -- **Percentage of price** +Activate pre-configured taxes +----------------------------- - The *sales price* is the taxable basis: the tax amount is computed by multiplying the sales price - by the tax percentage. +The list of taxes can be accessed by going to :menuselection:`Accounting --> Configuration --> +Taxes`. -.. example:: - A product has a sales price of $1000, and we apply a *10% of Price* tax. We then have: +Generally, inactive taxes are created for most sales tax rates by the :doc:`fiscal localization +<../fiscal_localizations>` package, but only the main tax rate is active by default. To activate an +inactive tax, click the toggle in the :guilabel:`Active` column. - +-------------+-------------+----------+----------+ - | Product | Price | Tax | Total | - | sales price | without tax | | | - +=============+=============+==========+==========+ - | 1,000 | 1,000 | 100 | 1,100.00 | - +-------------+-------------+----------+----------+ +.. _taxes/product: -- **Percentage of Price Tax Included** +Assign taxes on products +------------------------ - The **total** is the taxable basis: the tax amount is a percentage of the total. +To configure the taxes used for each product, go to :menuselection:`Accounting --> Customers --> +Products`, select the product to configure, and fill the :guilabel:`Sales Taxes` and +:guilabel:`Purchase Taxes` fields. These taxes are automatically applied when adding the product to +an invoice, vendor bill, sales order, purchase order, or point of sale order. -.. example:: - A product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax. We then - have: +.. tip:: + Use the :ref:`Default Taxes ` company-wide setting to automatically fill these + fields on new products. - +-------------+-------------+----------+----------+ - | Product | Price | Tax | Total | - | sales price | without tax | | | - +=============+=============+==========+==========+ - | 1,000 | 1,000 | 111.11 | 1,111.11 | - +-------------+-------------+----------+----------+ +.. _taxes/configuration/advanced: -- **Python code** +Advanced tax configuration +========================== - A tax defined as **Python code** consists of two snippets of Python code that are executed in a - local environment containing data such as the unit price, product or partner. - :guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines if - the tax is to be applied. The formula is found at the bottom of the :guilabel:`Definition` tab. +The following aspects of a tax can be customized: -.. example:: - :guilabel:`Python Code`: `result = price_unit * 0.10` - :guilabel:`Applicable Code`: `result = true` +- How the tax :ref:`appears in the backend ` +- How the tax :ref:`appears to customers ` +- The details of the :doc:`tax computation ` +- How tax payable journal items are :ref:`created ` +- :doc:`Fiscal positions ` (how to replace a tax by another tax under + certain conditions) -.. _taxes/active: +To open a tax's configuration, go to :menuselection:`Accounting --> Configuration --> Taxes`, then +click the tax name. -Active -~~~~~~ +.. _taxes/configuration/back-end: -Only **active** taxes can be added to new documents. +Configure backend appearance and availability +--------------------------------------------- -.. important:: - It is not possible to delete taxes that have already been used. Instead, you can deactivate them - to prevent future use. +The following options determine how a tax is displayed to users in the Odoo back-end. -.. note:: - This field can be modified from the :ref:`list view `. +.. _taxes/name: + +Tax name +~~~~~~~~ + +The :guilabel:`Tax Name` appears for backend users in the :guilabel:`Taxes` field in :doc:`sales +orders <../../sales/sales>`, :doc:`invoices `, product forms, etc. .. _taxes/scope: Tax type ~~~~~~~~ -The :guilabel:`Tax Type` determines the tax application, which also restricts where it is displayed. +The :guilabel:`Tax Type` determines where the tax is available to be selected. - **Sales**: Customer invoices, product customer taxes, etc. - **Purchase**: Vendor bills, product vendor taxes, etc. - **None** .. tip:: - You can use :guilabel:`None` for taxes that you want to include in a :ref:`Group of Taxes + Use :guilabel:`None` for taxes that you want to include in a :ref:`Group of Taxes ` but that you do not want to list along with other sales or purchase taxes. Tax scope @@ -173,6 +233,7 @@ Tax scope The :guilabel:`Tax Scope` restricts the use of taxes to a type of product, either **goods** or **services**. +<<<<<<< b7027b4b6937e78863d73e02699badd870f25622 .. _taxes/tax-mapping: Tax mapping @@ -214,138 +275,83 @@ default product tax. Tax mapping only works with :ref:`taxes/active` taxes. .. _taxes/definition-tab: +||||||| bcf73b2a1937b648ad0f3e0a140c062b5bb3835b +.. _taxes/definition-tab: +======= +Description +~~~~~~~~~~~ +>>>>>>> 64e8e5bdc4c057f480414f31a70c281cac92dd7c -Definition tab --------------- - -Allocate with precision the amount of the taxable basis or percentages of the computed tax to -multiple accounts and tax grids. - -.. image:: taxes/definition.png - :alt: Allocate tax amounts to the right accounts and tax grids - -- **Based On**: - - - :guilabel:`Base`: the price on the invoice line - - :guilabel:`% of tax`: a percentage of the computed tax. - -- **Account**: if defined, an additional journal item is recorded. -- **Tax Grids**: used to generate :doc:`tax reports ` - automatically, according to your country's regulations. +The :guilabel:`Description` can be edited for the purpose of internal documentation. -.. _taxes/advanced-tab: +.. _taxes/configuration/customer: -Advanced options tab --------------------- +Configure how the tax appears to customers +------------------------------------------ .. _taxes/label-invoices: Label on invoices ~~~~~~~~~~~~~~~~~ -The tax label is displayed on each invoice line in the :guilabel:`Taxes` column. This is visible to -*front-end* users on exported invoices, in customer portals, etc. +The :guilabel:`Label on Invoices` appears on invoice lines in invoice PDFs and on the customer +portal. -.. image:: taxes/invoice-label.png - :alt: The label on invoices is displayed on each invoice line +.. image:: taxes/invoice-portal-tax.png + :alt: The Label on Invoice shows on the invoice line when viewed in the customer portal. .. _taxes/tax-group: Tax group ~~~~~~~~~ -Select which **tax group** the tax belongs to. The tax group name is the displayed above the -**total** line on exported invoices and in customer portals. - -Tax groups include different iterations of the same tax. This can be useful when you must record -the same tax differently according to :doc:`fiscal positions `. - -.. example:: - - .. image:: taxes/invoice-tax-group.png - :alt: The Tax Group name is different from the Label on Invoices +The :guilabel:`Tax Group` is shown in the totals section of the invoice, in invoice PDFs and on the +customer portal. Multiple taxes that belong to the same tax group are aggregated together into a +single tax amount. - In the example above, the :guilabel:`0% EU S` tax for intra-community customers in Europe records - the amount on specific accounts and tax grids. However, it remains a 0% tax to the customer. This - is why the label indicates :guilabel:`0% EU S`, and the tax group name above the - :guilabel:`Total` line indicates :guilabel:`VAT 0%`. +.. image:: taxes/invoice-portal-total.png + :alt: The Tax Group shows in the totals section when viewed in the customer portal. -.. important:: - Taxes have three different labels, each one having a specific use. Refer to the following table - to see where they are displayed. - - +------------------+-------------------------+-------------------------+ - | :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group | - | ` | ` | ` | - +==================+=========================+=========================+ - | Backend | :guilabel:`Taxes` column| Above the | - | | on exported invoices | :guilabel:`Total` line | - | | | on exported invoices | - +------------------+-------------------------+-------------------------+ - -.. _taxes/analytic-cost: - -Include in analytic cost -~~~~~~~~~~~~~~~~~~~~~~~~ - -With this option activated, the tax amount is assigned to the same **analytic account** as the -invoice line. - -.. _taxes/included-in-price: - -Included in price -~~~~~~~~~~~~~~~~~ - -With this option activated, the total (including the tax) equals the **sales price**. - -`Total = Sales Price = Computed Tax-Excluded price + Tax` - -.. example:: - A product has a sales price of $1000, and we apply a *10% of Price* tax, which is *included in - the price*. We then have: - - +-------------+-------------+----------+----------+ - | Product | Price | Tax | Total | - | sales price | without tax | | | - +=============+=============+==========+==========+ - | 1,000 | 900.10 | 90.9 | 1,000.00 | - +-------------+-------------+----------+----------+ - -.. note:: - If you need to define prices accurately, both tax-included and tax-excluded, please refer to the - following documentation: :doc:`taxes/B2B_B2C`. - -.. note:: - By default, only the :guilabel:`Tax excluded` column is displayed on invoices. To display the - :guilabel:`Tax included` column, click the **dropdown toggle** button and check - :guilabel:`Tax incl.`. +.. _taxes/definition-tab: - .. image:: taxes/toggle-button.png +Configure how tax journal items are created +------------------------------------------- -.. _taxes/base-subsequent: +The :guilabel:`Distribution for Invoices` and :guilabel:`Distribution for Refunds` sections control +the generation of tax payable journal items in invoices and credit notes, respectively. They also +determine which :ref:`tax grids ` are set on invoice lines when this tax is +applied. -Affect base of subsequent taxes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Each of these sections should contain one :guilabel:`Base` line, one or more :guilabel:`% of tax` +lines amounting to 100% (e.g. one 100% line, or two 50% lines), and optionally, one or more +:guilabel:`% of tax` lines amounting to -100.00%. -With this option, the total tax-included becomes the taxable basis for the other taxes applied to -the same product. +The :guilabel:`Base` line can have one or more :guilabel:`Tax Grids` set, which are added to the +invoice line on which the tax is applied. -You can configure a new :ref:`group of taxes ` to include this tax or add it -directly to a product line. +The :guilabel:`% of tax` lines control the creation of tax payable journal items. The tax amount is +distributed according to the percentages on these lines, and each line is then used as a template to +create a tax payable journal item with the same :guilabel:`Account` and :guilabel:`Tax Grids`. If +the :guilabel:`Account` is not specified, it defaults to the account of the original invoice line on +which the tax is applied. -.. image:: taxes/subsequent-line.png - :alt: The eco-tax is taken into the basis of the 21% VAT tax +Typical cases include: -.. warning:: - The order in which you add the taxes on a product line has no effect on how amounts are computed. - If you add taxes directly on a product line, only the tax sequence determines the order in which - they are applied. +- one :guilabel:`100% of tax` line: this is the most common case where the tax amount should appear + on a single tax payable journal item. +- one :guilabel:`100% of tax` and one :guilabel:`-100% of tax` line: this is appropriate if the tax + simultaneously generates both a tax debit and a tax credit which cancel each other out (e.g. EU + intra-community reverse-charge VAT). +- one :guilabel:`50% of tax` line that specifies a tax payable account and another + :guilabel:`50% of tax` line that does not specify an account: this is appropriate for partially + deductible purchase VAT, where part of the tax must be considered an expense rather than a tax + credit asset that can offset tax liability. - To reorder the sequence, go to :menuselection:`Accounting --> Configuration --> Taxes`, and drag - and drop the lines with the handles next to the tax names. +.. image:: taxes/distribution-invoices.png + :alt: The Distribution for Invoices of a 21% VAT tax. - .. image:: taxes/list-sequence.png - :alt: The taxes' sequence in Odoo determines which tax is applied first +.. image:: taxes/distribution-refunds.png + :alt: The Distribution for Refunds of a 21% VAT tax. Extra taxes =========== @@ -360,7 +366,7 @@ imposed by governments. These extra taxes can be **luxury** taxes, **environment To compute an extra tax in Odoo, :ref:`create a tax `, enter a tax name, select a :ref:`Tax Computation `, set an :guilabel:`Amount`, and in the -:guilabel:`Advanced Options` tab, check :guilabel:`Affect Base of Subsequent Taxes`. Then, drag and +:guilabel:`Advanced Options` tab, enable :guilabel:`Affect Base of Subsequent Taxes`. Then, drag and drop the taxes in the :ref:`order they should be computed `. .. example:: @@ -374,6 +380,7 @@ drop the taxes in the :ref:`order they should be computed `: a combination of several other taxes +- :ref:`Fixed `: a fixed amount +- :ref:`Percentage of Price `: a percentage of the + tax-excluded sales price +- :ref:`Percentage of Price Tax Included `: a + percentage of the tax-included total +- :ref:`Custom Formula `: a custom, user-defined formula + +.. _taxes/computation/group-of-taxes: + +Group of taxes +~~~~~~~~~~~~~~ + +The tax is a combination of multiple sub-taxes. You can add as many taxes as you want, in the order +you want them to be applied. + +.. important:: + Make sure the tax sequence is correct, as the display order determines the application order and + may affect tax computation, particularly if a tax :ref:`affects the base of subsequent taxes + `. + +.. _taxes/computation/fixed: + +Fixed +~~~~~ + +The tax has a fixed amount in the default currency. The amount remains the same per unit, +regardless of the sales price. + +The computation is :math:`\text{tax amount} = \text{fixed tax amount} \times \text{quantity}`. + +.. example:: + A product has a sales price of $1000, and we apply a $10 :guilabel:`Fixed` tax. We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 1,000 | 10 | 1,010.00 | + +-------------+-------------+----------+----------+ + +.. _taxes/computation/percentage-of-price: + +Percentage of price +~~~~~~~~~~~~~~~~~~~ + +The tax rate is a percentage of the **tax-excluded** subtotal. + +The exact tax computation depends on the :ref:`Included in Price ` field, +which determines whether the tax amount is included in the sales price. + +.. tabs:: + .. tab:: Tax-excluded + + If :guilabel:`Included in Price` is :guilabel:`Tax Excluded`, the computation is + :math:`\text{tax amount} = \text{sales price} \times \text{tax rate}`. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax that is :guilabel:`Tax Excluded`. We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 1,000 | 100 | 1,100.00 | + +-------------+-------------+----------+----------+ + + .. tab:: Tax-included + + If :guilabel:`Included in Price` is :guilabel:`Tax Included`, the computation is + :math:`\text{tax amount} = \text{sales price} \times \frac{\text{tax rate}}{1 + + \text{tax rate}}`. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax that is :guilabel:`Tax Included`. We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 909.09 | 90.91 | 1,000.00 | + +-------------+-------------+----------+----------+ + +.. _taxes/computation/percentage-of-price-tax-included: + +Percentage of price tax included +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. important:: + This tax computation is rarely used and only useful in countries (e.g., Brazil, Bolivia) that + quote tax rates as a percentage of the tax-included total. + For the more common need to compute tax amounts from a tax-included price, use the + :ref:`Percentage of Price ` tax computation with + :ref:`Included in Price ` set to :guilabel:`Tax Included`. + +The tax rate is a percentage of the **tax-included** total. + +The exact tax computation depends on the :ref:`Included in Price ` field, +which determines whether the tax amount is included in the sales price. + +.. tabs:: + .. tab:: Tax-excluded + If :guilabel:`Included in Price` is set to :guilabel:`Tax Excluded`, the computation is + :math:`\text{tax amount} = \text{sales price} \times \frac{\text{tax rate}}{1 - + \text{tax rate}}`. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price + Tax Included` tax that is :guilabel:`Tax Excluded`. We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 1,000 | 111.11 | 1,111.11 | + +-------------+-------------+----------+----------+ + + Note that the real tax rate in terms of the tax-excluded price is + :math:`\frac{111.11}{1000} = 11.111\%`. + + .. tab:: Tax-included + + If :guilabel:`Included in Price` is set to :guilabel:`Tax Included`, the computation is + :math:`\text{tax amount} = \text{sales price} \times \text{tax rate}`. + + .. example:: + A product has a sales price of $1000, and we apply a 10% + :guilabel:`Percentage of Price Tax Included` tax that is :guilabel:`Tax Included`. + We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 900 | 100 | 1,000.00 | + +-------------+-------------+----------+----------+ + + Note that the real tax rate in terms of the tax-excluded price is + :math:`\frac{100}{900} = 11.111\%`. + +.. _taxes/computation/python-code: + +Custom formula +~~~~~~~~~~~~~~ + +.. important:: + If a tax can be expressed as a multiple of the quantity of the product to which it applies, it + can be defined as a :ref:`Fixed ` tax. Doing so is strongly recommended + over defining a :guilabel:`Custom Formula` tax. + +.. note:: + To use :guilabel:`Custom Formula` taxes, :ref:`install ` the :guilabel:`Define + Taxes as Python Code` (`account_python_tax`) module. + +For a :guilabel:`Custom Formula` tax, the tax amount is computed according to a Python expression +defined in the :guilabel:`Formula` field. The Python expression may contain the following tokens: + +- any of the following variables: + + - `price_unit`: the unit price of the product + - `base`: the taxable basis on which the tax is applied - may differ from the `price_unit` if + other taxes are applied first + - `quantity`: the quantity of the product + - `product`: the product record - product fields can also be accessed + +- integers and floating-point numbers + +- the following permitted tokens: `(`, `)`, `+`, `-`, `*`, `/`, `,`, `<`, `>`, `<=`, `>=`, `and`, + `or`, `None`, `min`, and `max` + +.. example:: + A product has a sales price of $1000, and we apply a :guilabel:`Custom Formula` tax with a + :guilabel:`Formula` of `min(base, 500) * 0.10 + max(base - 500, 0) * 0.20` + + We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 1,000 | 150 | 1,150.00 | + +-------------+-------------+----------+----------+ + +.. _taxes/included-in-price: + +Included in price +----------------- + +.. tip:: + To set a company-wide default for this setting, go to :menuselection:`Accounting --> + Configuration --> Settings`, find the :guilabel:`Taxes` section, and set the :guilabel:`Prices` + setting to :guilabel:`Tax Excluded` or :guilabel:`Tax Included`. This setting cannot be changed + once invoices have been created. + +:guilabel:`Default` indicates that the tax follows the company-wide default. + +:guilabel:`Tax Excluded` indicates that the tax amount is not included in the sales price. The tax +computation will therefore compute a tax amount on top of the sales price. + +:guilabel:`Tax Included` indicates that the tax amount is included in the sales price. The tax +computation will therefore split the sales price into a tax-excluded base and the tax amount. This +makes it suitable for B2C sales in most countries, where prices are quoted tax-inclusive. + +.. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` tax + with :guilabel:`Included in Price` set to :guilabel:`Tax Included`. We then have: + + +-------------+-------------+----------+----------+ + | Product | Price | Tax | Total | + | sales price | without tax | | | + +=============+=============+==========+==========+ + | 1,000 | 909.09 | 90.91 | 1,000.00 | + +-------------+-------------+----------+----------+ + +.. note:: + For a guide on configuring tax-excluded and tax-included prices for B2B and B2C customers, + see :doc:`B2B_B2C`. + +.. _taxes/base-subsequent: + +Affect base of subsequent taxes +------------------------------- + +This setting controls how multiple taxes on a product line affect each other. + +If this setting is enabled, this tax's tax amount is included in the base of any subsequent tax +applied on the same product line that has its :ref:`taxes/base-affected` setting enabled. As such, +the subsequent tax's base is the sum of the tax-excluded base and this tax's tax amount. + +.. tabs:: + .. tab:: Tax-excluded + If :guilabel:`Affect base of subsequent taxes` is enabled and :guilabel:`Included in Price` is + set to :guilabel:`Tax Excluded`, subsequent taxes with the :guilabel:`Base affected by + preceding taxes` setting enabled will be based on a modified sales price equal to the original + sales price plus the tax amount. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax where the :guilabel:`Included in Price` setting is set to :guilabel:`Tax Excluded` and + the :guilabel:`Affect base of subsequent taxes` setting is enabled. Any subsequent tax with + its :guilabel:`Base affected by preceding taxes` will be based on a modified sales price of + $1100. + + .. tab:: Tax-included + If :guilabel:`Affect base of subsequent taxes` is enabled and :guilabel:`Included in Price` is + set to :guilabel:`Tax Included`, subsequent taxes with the :guilabel:`Base affected by + preceding taxes` setting enabled will be based on the original sales price. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax where the :guilabel:`Included in Price` setting is set to :guilabel:`Tax Included` and + the :guilabel:`Affect base of subsequent taxes` setting is enabled. Any subsequent tax with + its :guilabel:`Base affected by preceding taxes` will be based on the original sales price + of $1000. + +If this setting is disabled, the tax amount will not be included in the base of any subsequent tax +applied on the same product line. + +.. tabs:: + .. tab:: Tax-excluded + If :guilabel:`Affect base of subsequent taxes` is disabled and :guilabel:`Included in Price` + is set to :guilabel:`Tax Excluded`, subsequent taxes with the :guilabel:`Base affected by + preceding taxes` setting enabled will be based on the original sales price. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax where the :guilabel:`Included in Price` setting is set to :guilabel:`Tax Excluded` and + the :guilabel:`Affect base of subsequent taxes` setting is enabled. Any subsequent tax with + its :guilabel:`Base affected by preceding taxes` will be based on the original sales price + of $1000. + + .. tab:: Tax-included + If :guilabel:`Affect base of subsequent taxes` is disabled and :guilabel:`Included in Price` + is set to :guilabel:`Tax Included`, subsequent taxes with the :guilabel:`Base affected by + preceding taxes` setting enabled will be based on a modified sales price equal to the original + sales price minus the tax amount. + + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` + tax where the :guilabel:`Included in Price` setting is set to :guilabel:`Tax Included` and + the :guilabel:`Affect base of subsequent taxes` setting is enabled. Any subsequent tax with + its :guilabel:`Base affected by preceding taxes` will be based on a modified sales price of + $909.09. + +This setting is considered any time multiple taxes are applied to the same product line, whether +via a :ref:`group of taxes ` or multiple taxes added directly to a product line. + +.. note:: + The order in which taxes are applied depends only on the order in which they appear in the + :guilabel:`Taxes` list, not on the order in which they are added to a product line. + + To modify the order, go to :menuselection:`Accounting --> Configuration --> Taxes`, and drag and + drop taxes using the handles to the left of the tax names. + + .. image:: tax_computation/list-sequence.png + :alt: The order of appearance of taxes in the Taxes list determines which tax is applied first + + Regardless of the order in the :guilabel:`Taxes` list, :guilabel:`Tax Excluded` taxes do not + affect the base of subsequent :guilabel:`Tax Included` taxes (see the note in + :ref:`taxes/base-affected`). + +.. example:: + In the following example: + + - the Ecotax is a :guilabel:`Fixed` tax of €0.90 per unit, with the :guilabel:`Affect base of + subsequent taxes` setting enabled. + - The 21% VAT tax is a 21% :guilabel:`Percentage of Price` tax with the :guilabel:`Base affected + by preceding taxes` setting enabled. + - In the :guilabel:`Taxes` list, the 21% VAT tax comes after the Ecotax, as shown in the + configuration above. + + When applying both taxes to a product line, the Ecotax amount is added to the basis of the 21% + VAT tax. + + .. image:: tax_computation/subsequent-line.png + :alt: The Ecotax is added to the basis of the 21% VAT tax + +.. _taxes/base-affected: + +Base affected by preceding taxes +-------------------------------- + +This setting, which is only visible in :doc:`developer mode <../../../general/developer_mode>`, +determines whether any previous tax that :ref:`affects the base of subsequent taxes +` will modify the sales price that this tax is based on. + +.. note:: + Taxes with :ref:`Included in Price ` set to :guilabel:`Tax Included` do + not have this setting. Such taxes are never affected by previous :guilabel:`Tax Excluded` taxes, + except if they have the :guilabel:`Fixed` :ref:`tax computation ` type. diff --git a/content/applications/finance/accounting/taxes/list-sequence.png b/content/applications/finance/accounting/taxes/tax_computation/list-sequence.png similarity index 100% rename from content/applications/finance/accounting/taxes/list-sequence.png rename to content/applications/finance/accounting/taxes/tax_computation/list-sequence.png diff --git a/content/applications/finance/accounting/taxes/subsequent-line.png b/content/applications/finance/accounting/taxes/tax_computation/subsequent-line.png similarity index 100% rename from content/applications/finance/accounting/taxes/subsequent-line.png rename to content/applications/finance/accounting/taxes/tax_computation/subsequent-line.png diff --git a/content/applications/finance/accounting/taxes/toggle-button.png b/content/applications/finance/accounting/taxes/toggle-button.png deleted file mode 100644 index 525446dae5..0000000000 Binary files a/content/applications/finance/accounting/taxes/toggle-button.png and /dev/null differ