From d0be6b9d9e34868fad3b4ef73db32616f08cb01f Mon Sep 17 00:00:00 2001 From: Antoine Dupuis Date: Fri, 17 Oct 2025 09:54:01 +0000 Subject: [PATCH 1/2] [IMP] Taxes: improve tax configuration doc task-5094417 We improve the following sections of the Taxes page: - Tax computations: At the moment, the section for the `Percentage of Price tax included` tax computation doesn't distinguish itself enough from the 'Included in Price' option which people usually want. We also improve the examples. - Included in Price - Affects base of subsequent taxes - Base affected by preceding taxes: this option was not documented, so we add a section for it. X-original-commit: f5965547b7ba724ff14298c4ebc6f900e8743b40 --- .../applications/finance/accounting/taxes.rst | 251 ++++++++++++++---- 1 file changed, 198 insertions(+), 53 deletions(-) diff --git a/content/applications/finance/accounting/taxes.rst b/content/applications/finance/accounting/taxes.rst index 94b2fb70a3..eb7e4bd50d 100644 --- a/content/applications/finance/accounting/taxes.rst +++ b/content/applications/finance/accounting/taxes.rst @@ -72,23 +72,42 @@ The **tax name** is displayed for backend users in the :guilabel:`Taxes` field i Tax computation ~~~~~~~~~~~~~~~ -- **Group of Taxes** +The :guilabel:`Tax Computation` field determines how the tax amount is computed from the sales +price. The following options are available: + +- :ref:`Group of Taxes `: 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:`Python Code `: 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 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 `. +.. 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 + `. -- **Fixed** +.. _taxes/computation/fixed: - The tax has a fixed amount in the default currency. The amount remains the same, regardless of the - sales price. +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 *fixed* tax. We then have: + A product has a sales price of $1000, and we apply a $10 :guilabel:`Fixed` tax. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | @@ -97,47 +116,137 @@ Tax computation | 1,000 | 1,000 | 10 | 1,010.00 | +-------------+-------------+----------+----------+ -- **Percentage of price** +.. _taxes/computation/percentage-of-price: - The *sales price* is the taxable basis: the tax amount is computed by multiplying the sales price - by the tax percentage. +Percentage of price +******************* -.. example:: - A product has a sales price of $1000, and we apply a *10% of Price* tax. We then have: +The tax rate is a percentage of the **tax-excluded** subtotal. - +-------------+-------------+----------+----------+ - | Product | Price | Tax | Total | - | sales price | without tax | | | - +=============+=============+==========+==========+ - | 1,000 | 1,000 | 100 | 1,100.00 | - +-------------+-------------+----------+----------+ +The exact tax computation depends on the :ref:`Included in Price ` field, +which determines whether the sales price should be treated as tax-excluded or tax-included: + +.. tabs:: + .. tab:: Tax-excluded + + If :guilabel:`Included in Price` is disabled, 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 not :guilabel:`Included in Price`. 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 enabled, 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:`Included in Price`. 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 the + :ref:`Included in Price ` option. + +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 sales price should be treated as tax-excluded or tax-included: -- **Percentage of Price Tax Included** +.. tabs:: + .. tab:: Tax-excluded + If :guilabel:`Included in Price` is disabled, the computation is :math:`\text{tax amount} + = \text{sales price} \times \frac{\text{tax rate}}{1 - \text{tax rate}}`. - The **total** is the taxable basis: the tax amount is a percentage of the total. + .. example:: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price + Tax Included` tax that is not :guilabel:`Included in Price`. 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 enabled, 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:`Included in Price`. + 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: + +Python code +*********** + +.. 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:`Python Code` tax. + +A tax defined as :guilabel:`Python Code` consists of two snippets of Python code that are executed +in a local environment that can access the unit price, quantity, product, and partner. +:guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines +whether the tax is applied. Enter a formula for each field at the bottom of the +:guilabel:`Definition` tab. .. example:: - A product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax. We then - have: + A product has a sales price of $1000, and we apply a :guilabel:`Python Code` tax with the + following configuration: + + - :guilabel:`Python Code`: `result = price_unit * 0.10` and + - :guilabel:`Applicable Code`: `result = True`. + + We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | | sales price | without tax | | | +=============+=============+==========+==========+ - | 1,000 | 1,000 | 111.11 | 1,111.11 | + | 1,000 | 1,000 | 100 | 1,100.00 | +-------------+-------------+----------+----------+ -- **Python code** - - 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. - -.. example:: - :guilabel:`Python Code`: `result = price_unit * 0.10` - :guilabel:`Applicable Code`: `result = true` - .. _taxes/active: Active @@ -296,29 +405,27 @@ invoice line. Included in price ~~~~~~~~~~~~~~~~~ -With this option activated, the total (including the tax) equals the **sales price**. +With this option activated, the tax will treat the sales price on which it is applied as a total +including the tax amount. The tax computation will split the sales price into a base amount and a +tax amount. This makes it suitable for B2C sales in most countries where prices are quoted +tax-inclusive. `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: + A product has a sales price of $1000, and we apply a 10% :guilabel:`Percentage of Price` tax + with :guilabel:`Included in Price`. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | | sales price | without tax | | | +=============+=============+==========+==========+ - | 1,000 | 900.10 | 90.9 | 1,000.00 | + | 1,000 | 909.09 | 90.91 | 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.`. + For a guide on configuring tax-excluded and tax-included prices for B2B and B2C customers, + see :doc:`taxes/B2B_B2C`. .. image:: taxes/toggle-button.png @@ -327,11 +434,36 @@ With this option activated, the total (including the tax) equals the **sales pri Affect base of subsequent taxes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -With this option, the total tax-included becomes the taxable basis for the other taxes applied to -the same product. - -You can configure a new :ref:`group of taxes ` to include this tax or add it -directly to a product line. +If this setting is enabled, any subsequent tax applied on the same product line that has +:ref:`taxes/base-affected` will be based on a modified sales price. The exact behavior depends on +whether the tax with :guilabel:`Affect base of subsequent taxes` is :ref:`taxes/included-in-price` +or not. + +.. tabs:: + .. tab:: Tax-excluded + If :guilabel:`Included in Price` is disabled, subsequent taxes with :guilabel:`Base affected + by preceding taxes` 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 with :guilabel:`Affect base of subsequent taxes`. Any subsequent tax with + :guilabel:`Base affected by preceding taxes` will be based on a modified sales price of + $1100. + + .. tab:: Tax-included + If :guilabel:`Included in Price` is enabled, subsequent taxes with :guilabel:`Base affected + by preceding taxes` 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 $1100, and we apply a 10% :guilabel:`Percentage of Price` + tax with :guilabel:`Included in Price` and :guilabel:`Affect base of subsequent taxes`. + Any subsequent tax with :guilabel:`Base affected by preceding taxes` will be based on a + modified sales price of $1000. + +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. .. image:: taxes/subsequent-line.png :alt: The eco-tax is taken into the basis of the 21% VAT tax @@ -347,6 +479,19 @@ directly to a product line. .. image:: taxes/list-sequence.png :alt: The taxes' sequence in Odoo determines which tax is applied first +.. _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 ` always behave as if this setting is + enabled. + Extra taxes =========== @@ -360,7 +505,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:: From f07a9680cd038abb4e7fffcea8a10abf2da93fcb Mon Sep 17 00:00:00 2001 From: Antoine Dupuis Date: Fri, 31 Oct 2025 10:12:42 +0000 Subject: [PATCH 2/2] [IMP] Taxes: changes specific to 18.0 - changes for Python taxes - changes to the `Included in Price` setting X-original-commit: 0bf24399433877c11cec88d4ffe7ea461953763f --- .../applications/finance/accounting/taxes.rst | 112 +++++++++++------- .../accounting/taxes/toggle-button.png | Bin 8061 -> 0 bytes 2 files changed, 66 insertions(+), 46 deletions(-) delete mode 100644 content/applications/finance/accounting/taxes/toggle-button.png diff --git a/content/applications/finance/accounting/taxes.rst b/content/applications/finance/accounting/taxes.rst index eb7e4bd50d..09140b30e7 100644 --- a/content/applications/finance/accounting/taxes.rst +++ b/content/applications/finance/accounting/taxes.rst @@ -81,7 +81,7 @@ price. The following options are available: tax-excluded sales price - :ref:`Percentage of Price Tax Included `: a percentage of the tax-included total -- :ref:`Python Code `: a custom user-defined formula +- :ref:`Custom Formula `: a custom user-defined formula .. _taxes/computation/group-of-taxes: @@ -129,12 +129,12 @@ which determines whether the sales price should be treated as tax-excluded or ta .. tabs:: .. tab:: Tax-excluded - If :guilabel:`Included in Price` is disabled, the computation is :math:`\text{tax amount} - = \text{sales price} \times \text{tax rate}`. + 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 not :guilabel:`Included in Price`. We then have: + tax that is :guilabel:`Tax Excluded`. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | @@ -145,12 +145,13 @@ which determines whether the sales price should be treated as tax-excluded or ta .. tab:: Tax-included - If :guilabel:`Included in Price` is enabled, the computation is :math:`\text{tax amount} = - \text{sales price} \times \frac{\text{tax rate}}{1 + \text{tax rate}}`. + 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:`Included in Price`. We then have: + tax that is :guilabel:`Tax Included`. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | @@ -168,8 +169,8 @@ Percentage of price tax included 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 the - :ref:`Included in Price ` option. + :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. @@ -178,12 +179,13 @@ which determines whether the sales price should be treated as tax-excluded or ta .. tabs:: .. tab:: Tax-excluded - If :guilabel:`Included in Price` is disabled, the computation is :math:`\text{tax amount} - = \text{sales price} \times \frac{\text{tax rate}}{1 - \text{tax rate}}`. + 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 not :guilabel:`Included in Price`. We then have: + Tax Included` tax that is :guilabel:`Tax Excluded`. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | @@ -197,12 +199,12 @@ which determines whether the sales price should be treated as tax-excluded or ta .. tab:: Tax-included - If :guilabel:`Included in Price` is enabled, the computation is :math:`\text{tax amount} = - \text{sales price} \times \text{tax rate}`. + 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:`Included in Price`. + :guilabel:`Percentage of Price Tax Included` tax that is :guilabel:`Tax Included`. We then have: +-------------+-------------+----------+----------+ @@ -217,26 +219,37 @@ which determines whether the sales price should be treated as tax-excluded or ta .. _taxes/computation/python-code: -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:`Python Code` tax. + over defining a :guilabel:`Custom Formula` tax. -A tax defined as :guilabel:`Python Code` consists of two snippets of Python code that are executed -in a local environment that can access the unit price, quantity, product, and partner. -:guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines -whether the tax is applied. Enter a formula for each field at the bottom of the -:guilabel:`Definition` tab. +.. note:: + To use :guilabel:`Custom Formula` taxes, :ref:`install ` the :guilabel:`Define + Taxes as Python Code` (`account_python_tax`) module. -.. example:: - A product has a sales price of $1000, and we apply a :guilabel:`Python Code` tax with the - following configuration: +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 - - :guilabel:`Python Code`: `result = price_unit * 0.10` and - - :guilabel:`Applicable Code`: `result = True`. +- 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: @@ -244,7 +257,7 @@ whether the tax is applied. Enter a formula for each field at the bottom of the | Product | Price | Tax | Total | | sales price | without tax | | | +=============+=============+==========+==========+ - | 1,000 | 1,000 | 100 | 1,100.00 | + | 1,000 | 1,000 | 150 | 1,150.00 | +-------------+-------------+----------+----------+ .. _taxes/active: @@ -405,16 +418,25 @@ invoice line. Included in price ~~~~~~~~~~~~~~~~~ -With this option activated, the tax will treat the sales price on which it is applied as a total -including the tax amount. The tax computation will split the sales price into a base amount and a -tax amount. This makes it suitable for B2C sales in most countries where prices are quoted -tax-inclusive. +.. 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. + +When set to :guilabel:`Default`, the company-wide default will be used. + +When set to :guilabel:`Tax Excluded`, the tax will always treat the sales price on which it is +applied as a price excluding the tax amount. -`Total = Sales Price = Computed Tax-Excluded price + Tax` +When set to :guilabel:`Tax Included`, the tax will always treat the sales price on which it is +applied as a total including the tax amount. The tax computation will split the sales price into a +base amount and a 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`. We then have: + with :guilabel:`Included in Price` set to :guilabel:`Tax Included`. We then have: +-------------+-------------+----------+----------+ | Product | Price | Tax | Total | @@ -427,8 +449,6 @@ tax-inclusive. For a guide on configuring tax-excluded and tax-included prices for B2B and B2C customers, see :doc:`taxes/B2B_B2C`. - .. image:: taxes/toggle-button.png - .. _taxes/base-subsequent: Affect base of subsequent taxes @@ -436,14 +456,14 @@ Affect base of subsequent taxes If this setting is enabled, any subsequent tax applied on the same product line that has :ref:`taxes/base-affected` will be based on a modified sales price. The exact behavior depends on -whether the tax with :guilabel:`Affect base of subsequent taxes` is :ref:`taxes/included-in-price` -or not. +the :ref:`Included in Price ` setting of the tax with :guilabel:`Affect +base of subsequent taxes`. .. tabs:: .. tab:: Tax-excluded - If :guilabel:`Included in Price` is disabled, subsequent taxes with :guilabel:`Base affected - by preceding taxes` will be based on a modified sales price equal to the original sales price - plus the tax amount. + If :guilabel:`Included in Price` is set to :guilabel:`Tax Excluded`, subsequent taxes with + :guilabel:`Base affected by preceding taxes` 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` @@ -452,13 +472,13 @@ or not. $1100. .. tab:: Tax-included - If :guilabel:`Included in Price` is enabled, subsequent taxes with :guilabel:`Base affected - by preceding taxes` will be based on a modified sales price equal to the original sales price - minus the tax amount. + If :guilabel:`Included in Price` is set to :guilabel:`Tax Included`, subsequent taxes with + :guilabel:`Base affected by preceding taxes` 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 $1100, and we apply a 10% :guilabel:`Percentage of Price` - tax with :guilabel:`Included in Price` and :guilabel:`Affect base of subsequent taxes`. + tax that has :guilabel:`Tax Included` and :guilabel:`Affect base of subsequent taxes`. Any subsequent tax with :guilabel:`Base affected by preceding taxes` will be based on a modified sales price of $1000. 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 525446dae58737d09538d2908a631569d4e2d5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8061 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 BiR%CW