Reporting

# Reporting

Odoo includes generic and dynamic reports available for all countries, regardless of the localization package installed:
- Balance Sheet
- Profit and Loss
- Executive Summary
- General Ledger
- Aged Receivable
- Aged Payable
- Cash Flow Statement
- Tax Report
To expand the lines of a report and view its details, click the ( right arrow ) on the left. Then click the ( down arrow )
to the right of the account, journal entry, payment, invoice, etc. to Annotate and view
the details.
To export reports in PDF or XLSX format, click PDF at the top or click the ( down arrow ) icon next to the PDF button and
select XLSX .
To compare values across periods, click the Comparison menu and select the periods you
want to compare.

## Balance Sheet

The Balance Sheet shows a snapshot of your organizationâs assets, liabilities, and
equity at a particular date.

## Profit and Loss

The Profit and Loss report (or Income Statement ) shows your companyâs net income by
deducting expenses from revenue for the reporting period.

## Executive Summary

The Executive Summary provides an overview of all the important figures for overseeing
your companyâs performance.
It includes the following items:
- Performance : Gross profit margin : The contribution of all sales your business makes minus any direct costs needed to
make those sales (labor, materials, etc.). Net profit margin : The contribution of all sales made by your business minus any direct costs needed to
make those sales and fixed overheads your company has (electricity, rent, taxes
to be paid as a result of those sales, etc.). Return on investment (per annum) : The ratio of the net profit to the amount of assets the company used to make those profits.
- Gross profit margin : The contribution of all sales your business makes minus any direct costs needed to
make those sales (labor, materials, etc.).
The contribution of all sales your business makes minus any direct costs needed to
make those sales (labor, materials, etc.).
- Net profit margin : The contribution of all sales made by your business minus any direct costs needed to
make those sales and fixed overheads your company has (electricity, rent, taxes
to be paid as a result of those sales, etc.).
The contribution of all sales made by your business minus any direct costs needed to
make those sales and fixed overheads your company has (electricity, rent, taxes
to be paid as a result of those sales, etc.).
- Return on investment (per annum) : The ratio of the net profit to the amount of assets the company used to make those profits.
The ratio of the net profit to the amount of assets the company used to make those profits.
- Position : Average debtors days : The average number of days it takes your customers to (fully) pay you across all your
customer invoices. Average creditors days : The average number of days it takes you to (fully) pay your suppliers across all your bills. Short-term cash forecast : How much cash is expected in or out of your business in the next month, i.e., the balance of
your Sales account for the month minus the balance of your Purchases account for
the month. Current assets to liabilities : Also referred to as the current ratio , this is the ratio of current assets ( assets
that could be turned into cash within a year ) to the current liabilities ( liabilities
that will be due in the next year ). It is typically used to measure a companyâs ability to
service its debt.
- Average debtors days : The average number of days it takes your customers to (fully) pay you across all your
customer invoices.
The average number of days it takes your customers to (fully) pay you across all your
customer invoices.
- Average creditors days : The average number of days it takes you to (fully) pay your suppliers across all your bills.
The average number of days it takes you to (fully) pay your suppliers across all your bills.
- Short-term cash forecast : How much cash is expected in or out of your business in the next month, i.e., the balance of
your Sales account for the month minus the balance of your Purchases account for
the month.
How much cash is expected in or out of your business in the next month, i.e., the balance of
your Sales account for the month minus the balance of your Purchases account for
the month.
- Current assets to liabilities : Also referred to as the current ratio , this is the ratio of current assets ( assets
that could be turned into cash within a year ) to the current liabilities ( liabilities
that will be due in the next year ). It is typically used to measure a companyâs ability to
service its debt.
Also referred to as the current ratio , this is the ratio of current assets ( assets
that could be turned into cash within a year ) to the current liabilities ( liabilities
that will be due in the next year ). It is typically used to measure a companyâs ability to
service its debt.

## General Ledger

The General Ledger report shows all transactions from all accounts for a selected date
range. The initial summary report shows the totals for each account. To expand an account and view
its details, click the ( right arrow ) on the left.
This report is useful for reviewing each transaction that occurred during a specific period.

## Aged Receivable

The Aged Receivable report shows the sales invoices awaiting payment during a selected
month and several months prior.

## Aged Payable

The Aged Payable report displays information on individual bills, credit notes, and
overpayments you owe and how long these have gone unpaid.

## Cash Flow Statement

The Cash Flow Statement shows how changes in balance sheet accounts and income affect
cash and cash equivalents and breaks the analysis down to operating, investing, and financing
activities.

## Tax Report

The Tax Report shows the NET and TAX amounts for all the
taxes grouped by type ( Sales / Purchases ).

Balance Sheet
Profit and Loss
Executive Summary
General Ledger
Aged Receivable
Aged Payable
Cash Flow Statement
Tax Report


Analytic accounting

# Analytic accounting

Analytic accounting helps track costs and revenues and analyze a projectâs or serviceâs
profitability. When creating journal entries, costs can be distributed across one or more analytic accounts.
To activate this feature, go to Accounting â£ Configuration â£ Settings and
enable Analytic Accounting in the Analytics section.

## Analytic accounts

Analytic accounts give an overview of costs and revenue.
To access analytic accounts, go to Accounting â£ Configuration â£ Analytic
Accounts . To create a new analytic account, click New and fill in the following
information:
- Analytic Account : Assign the name of the analytic account.
Analytic Account : Assign the name of the analytic account.
- Customer : Select the customer linked to the project, if applicable.
Customer : Select the customer linked to the project, if applicable.
- Reference : Include a reference to make the account easier to find if needed.
Reference : Include a reference to make the account easier to find if needed.
- Plan : Link the Analytic Account to an analytic plan .
Plan : Link the Analytic Account to an analytic plan .
- Company : In a multi-company environment, select the company using the analytic account. To make the analytic account
accessible to all companies, leave the field empty.
Company : In a multi-company environment, select the company using the analytic account. To make the analytic account
accessible to all companies, leave the field empty.
- Currency : Update the currency of the analytic account if needed.
Currency : Update the currency of the analytic account if needed.
Then, the budget information can be filled in.

## Analytic plans

Analytic plans group analytic accounts ,
allowing the company to analyze its accounting, such as tracking costs and revenues by project or
department.
To access analytic plans, go to Accounting â£ Configuration â£ Analytic Plans .
Click New to create a new plan, add a name, and fill in the following information:
- Parent : Link the plan to another analytic plan if a hierarchy between plans must be
built.
Parent : Link the plan to another analytic plan if a hierarchy between plans must be
built.
- Default Applicability : Define how the plan is applied when creating a new journal
entry: Optional : Adding the analytic plan is not mandatory. Mandatory : The entry cannot be confirmed if no analytic account is selected. Unavailable : The plan is not available.
Default Applicability : Define how the plan is applied when creating a new journal
entry:
- Optional : Adding the analytic plan is not mandatory.
Optional : Adding the analytic plan is not mandatory.
- Mandatory : The entry cannot be confirmed if no analytic account is selected.
Mandatory : The entry cannot be confirmed if no analytic account is selected.
- Unavailable : The plan is not available.
Unavailable : The plan is not available.
- Color : Set a color for the tag related to this specific plan.
Color : Set a color for the tag related to this specific plan.
To fine-tune a planâs applicability, create a new line in the Applicability tab and set
the following fields:
- Domain : Choose the accounting documents to which the plan applies.
Domain : Choose the accounting documents to which the plan applies.
- Financial Accounts Prefixes : Enter the prefix(es) of the account(s) to which the plan
applies.
Financial Accounts Prefixes : Enter the prefix(es) of the account(s) to which the plan
applies.
- Product Category : Choose the product category to which the plan applies.
Product Category : Choose the product category to which the plan applies.
- Applicability : Define how the plan is applied when creating a new journal entry. The
applicability set here always overrides the default applicability.
Applicability : Define how the plan is applied when creating a new journal entry. The
applicability set here always overrides the default applicability.
- Company : In a multi-company environment, select the company using the plan. To make the analytic plan accessible to all
companies, leave the field empty.
Company : In a multi-company environment, select the company using the plan. To make the analytic plan accessible to all
companies, leave the field empty.
Two smart buttons are available:
- Subplans : To have a more complex analytic structure. Click the smart button, then
click New to add a subplan. This creates a parent-child relationship between the two
plans, and the Parent field of the subplan is automatically populated with the
original plan.
Subplans : To have a more complex analytic structure. Click the smart button, then
click New to add a subplan. This creates a parent-child relationship between the two
plans, and the Parent field of the subplan is automatically populated with the
original plan.
- Analytic Accounts : To access the analytic accounts linked to the plan.
Analytic Accounts : To access the analytic accounts linked to the plan.
Each analytic plan must have at least one analytic account.

## Analytic distribution

The distribution of costs in one or more analytic accounts can be set in each invoice/bill or en masse .
The analytic distribution is prefilled based on the applicability and the analytic
distribution models .

### Analytic distribution on invoices or bills

To add analytic distribution, click the Analytic Distribution column when creating an invoice or bill .
The Analytic Distribution field is mandatory only if the analytic plan has been set as Mandatory in either
the Default Applicability field on an analytic plan or the Applicability field on an analytic plan line.
In the Analytic window, select the desired Analytic Accounts in the
different Analytic Plans displayed in columns. Then, split the costs between the
accounts by modifying the percentage.

### Analytic distribution en masse

To mass-edit analytic accounts in several entries simultaneously, go to Accounting
â£ Accounting â£ Journal items , and select the ones that need to be updated. Click the Analytic Distribution column and add the required distribution in the Analytic column, then click the (cross) and Confirm . The analytic distribution is then added to the selected journal items.

### Analytic distribution models

Analytic distribution models automatically apply a specific distribution based on defined criteria.
To create a new analytic distribution model, go to Accounting â£ Configuration â£
Analytic Distribution Models , click New , and set the conditions the model has to meet
to apply automatically:
- All specified conditions of an analytic distribution model must be met for the model to be
applied. To apply an analytic distribution model based on individual conditions, create
separate analytic distribution models for each condition.
All specified conditions of an analytic distribution model must be met for the model to be
applied. To apply an analytic distribution model based on individual conditions, create
separate analytic distribution models for each condition.
- Analytic distribution models can be combined and sequenced, allowing distribution across
multiple models if linked to different analytic plans . To adjust the order,
drag and drop the models using the (draggable) icon.
Analytic distribution models can be combined and sequenced, allowing distribution across
multiple models if linked to different analytic plans . To adjust the order,
drag and drop the models using the (draggable) icon.
- Accounts Prefixes : Apply the distribution model only to journal items involving
accounts that begin with specific prefixes.
Accounts Prefixes : Apply the distribution model only to journal items involving
accounts that begin with specific prefixes.
- Partner : Apply the distribution model only to journal items involving a specific
partner.
Partner : Apply the distribution model only to journal items involving a specific
partner.
- Product : Apply the distribution model only to journal items involving a specific
product.
Product : Apply the distribution model only to journal items involving a specific
product.
- Company : In a multi-company environment, apply the distribution model only to journal items involving a specific company. To
apply it across all companies, leave the field empty.
Company : In a multi-company environment, apply the distribution model only to journal items involving a specific company. To
apply it across all companies, leave the field empty.
- Analytic Distribution : Analytic distribution that will be applied when the above
conditions are met.
Analytic Distribution : Analytic distribution that will be applied when the above
conditions are met.
Any time a journal item is posted to the Utilities (601000) account, it should be
automatically distributed in the Departments analytic plan as follows:
- 60% to the Manufacturing analytic account
60% to the Manufacturing analytic account
- 30% to the Marketing analytic account
30% to the Marketing analytic account
- 10% to the Admin analytic account
10% to the Admin analytic account
To automate this distribution, the Accounts Prefix can be set to 601 , as Utilities (601000) is the only account in the chart of accounts that begins with 601 .
`601`
`601`
If additional accounts such as Electricity (601100) or Gas (601200) are
available in the chart of accounts, the distribution will also apply to both since they share the
same prefix.
To define more criteria, use the (adjust settings) icon to
reveal more columns or click View on an individual analytic distribution model.
- Partner Category : Apply this distribution model only to journal items involving a
partner in a specific category.
Partner Category : Apply this distribution model only to journal items involving a
partner in a specific category.
- Product Category : Apply this distribution model to journal items involving a product
in a specific category.
Product Category : Apply this distribution model to journal items involving a product
in a specific category.
Alternatively, it is possible to create an analytic distribution model from the Analytic window by clicking New Model :
- either when creating an invoice/bill and filling in the analytic distribution ;
either when creating an invoice/bill and filling in the analytic distribution ;
- or when mass-editing analytic accounts in several entries simultaneously.
or when mass-editing analytic accounts in several entries simultaneously.


Budgets

# Budgets

Analytic budgets track specific activities and projects
using analytic accounts, helping businesses make informed decisions about specific departments,
projects, or other groups of transactions. In contrast, financial budgets are tied to the general ledger accounts that appear on the profit
and loss and focus on the companyâs overall economic position.

## Analytic budgets

Analytic budgets allow for allocating and tracking income and expenses in detail, breaking down
costs and revenues by specific projects, departments, or groups of transactions. Analytic budgets
can be applied across various departments or projects to measure profitability and performance. Odoo
manages analytic budgets using analytic accounting .
To activate the option for creating analytic budgets, go to Accounting â£
Configuration â£ Settings , and enable Budget Management in the Analytics section.
Odoo structures budgets using plans and accounts , which must be configured before creating a budget.

### Set an analytic budget

To create a new budget, go to Accounting â£ Accounting â£ Analytic Budgets and
click New . Make sure the following fields are appropriately completed: Budget
Name , Period , and Budget Type .
Click Add a line in the Budget Lines tab to structure the budget with the analytic plans and accounts previously created. While the analytic
plans correspond to the column names, select the analytic accounts to define the budget
lines and set the amounts for each in the Budgeted column. Once all the budget lines are
settled, click Open . If changes need to be made once the budgetâs status is Open , there are two options:
- Reset to Draft : To overwrite the data, then reopen the budget.
Reset to Draft : To overwrite the data, then reopen the budget.
- Revise : A new budget will be created. Once it is Open , a Rev reference is added to the Budget Name . The original budget is then Revised .
Revise : A new budget will be created. Once it is Open , a Rev reference is added to the Budget Name . The original budget is then Revised .

### Check an analytic budget

Once the budget is Open , two additional columns are available: Committed and Achieved . These columnsâ amounts are automatically calculated based on the related analytic distribution of journal
items. When the analytic distribution of a journal item within the budgetâs period is updated, the budgetâs columns for the analytic
account(s) selected in the distribution are automatically updated. The Achieved amount
reflects the current result according to the items of confirmed journal entries for the associated analytic account . In contrast, the Committed amount displays the full value of the Achieved amount, plus any
confirmed purchase orders that have not yet been billed.
- When a line in a request for quotation or purchase order includes an analytic distribution, a Budget smart button appears, providing a link to the budget report for more details.
When a line in a request for quotation or purchase order includes an analytic distribution, a Budget smart button appears, providing a link to the budget report for more details.
- For Open budgets, if a request for quotation or a purchase order is created using
the associated analytic distribution and exceeds the allocated budget amount, the corresponding
purchase order line is highlighted in red.
For Open budgets, if a request for quotation or a purchase order is created using
the associated analytic distribution and exceeds the allocated budget amount, the corresponding
purchase order line is highlighted in red.
To reveal the Theoretical amount or percentage, use the ( adjust settings ) icon in the Budget Lines â header. The Theoretical amount represents the amount of money that could theoretically have been
spent or should have been received based on the current date relative to the start/end dates. Click Details to open a filtered view of the budget report related to that specific budget line.
Deleting a budget is only allowed in the Draft and Cancelled stages.
To view the budget lines of one or multiple budgets directly from the Budgets list view,
select the budget(s) and click Budget Lines .

### Generate periodic budgets

To create periodic budgets (monthly, quarterly, and yearly) for the selected Analytic
Plans , click Generate . A new budget is created for each Period between the
start and end dates:
- If a single analytic plan is selected, each budget includes a line for each account in that
analytic plan.
If a single analytic plan is selected, each budget includes a line for each account in that
analytic plan.
- If multiple analytic plans are selected, each budget includes a line for each account/analytic
plan combination.
If multiple analytic plans are selected, each budget includes a line for each account/analytic
plan combination.
To generate periodic budgets, follow these steps:
- In the Budgets list view, click Generate .
In the Budgets list view, click Generate .
- In the Generate Budget window, set the dates and select the Period and
the Analytic Plans .
In the Generate Budget window, set the dates and select the Period and
the Analytic Plans .
- Click Split to create the periodic budgets.
Click Split to create the periodic budgets.
- Click Budgets in the top-left corner to return to the Budgets list view.
Click Budgets in the top-left corner to return to the Budgets list view.
- One by one, click on the different periodic budgets with the Draft status to open
them and set the amounts in the Budgeted column for each analytic account linked to
the chosen analytic plans.
One by one, click on the different periodic budgets with the Draft status to open
them and set the amounts in the Budgeted column for each analytic account linked to
the chosen analytic plans.
- Click Open for each periodic budget.
Click Open for each periodic budget.

### Reporting

To perform various reporting actions, go to Accounting â£ Reporting â£
Budget Report , then:
- Track, analyze, and compare budget data.
Track, analyze, and compare budget data.
- Filter and group data using the ( plus-square ) or (minus-square) icon.
Filter and group data using the ( plus-square ) or (minus-square) icon.
- Drill down into the report to see more details on the actual amounts and transactions.
Drill down into the report to see more details on the actual amounts and transactions.
- Export the data for further analysis or reporting needs.
Export the data for further analysis or reporting needs.

## Financial budgets

Financial budgets are structured around specific income and expense accounts and transactions for
official financial reporting and compliance purposes.
Financial budgets are available on the Profit and Loss report.

### Set a financial budget

To create a new financial budget, follow these steps:
- Go to Accounting â£ Reporting â£ Profit and Loss to open the Profit and Loss report.
Go to Accounting â£ Reporting â£ Profit and Loss to open the Profit and Loss report.
- Click the (calendar) button to use the date selector and choose a
period.
Click the (calendar) button to use the date selector and choose a
period.
- Click the Budget button and name the budget. A new column
labeled with the budget name will appear next to the Balance column.
Click the Budget button and name the budget. A new column
labeled with the budget name will appear next to the Balance column.
- Assign amounts to each account requiring analysis.
Assign amounts to each account requiring analysis.
- A new % column will appear to the right of the new budget column, indicating the
current status.
A new % column will appear to the right of the new budget column, indicating the
current status.
Different financial budgets can be created using these steps for comparison purposes.
The date selector enables the division of periods and navigation between periods, automatically
updating the amounts accordingly.

Analytic budgets
Set an analytic budget
Check an analytic budget
Generate periodic budgets
Reporting
Financial budgets
Set a financial budget


Custom reports

# Custom reports

Odoo comes with a powerful and easy-to-use reporting framework. The engine allows you to create new
reports, such as tax reports, balance sheets, and income statements with specific groupings and
layouts.
Activate the developer mode to access the accounting report
configuration.
To create a new report, go to Accounting â£ Configuration â£ Accounting Reports .
From here, create either a root report or a variant .
- Consider saving modified reports as report variants to keep their root reports intact.
Consider saving modified reports as report variants to keep their root reports intact.
- To access an existing reportâs management interface from the report itself, click on the (gears) icon.
To access an existing reportâs management interface from the report itself, click on the (gears) icon.

## Root reports

Root reports can be regarded as generic, neutral accounting reports. They serve as models on which
local accounting versions are built. If a report has no root report, it is considered to be a root
report itself.
A tax report for Belgium and the US would both use the same generic version as a base and adapt
it for their domestic regulations.
Creating a menu item is required to access a new root report. To do so, open the reportâs
configuration, click Action , Create Menu Item , and refresh the page. The
report is now available under Accounting â£ Reporting .
Cases that require creating a new root report are rare, such as when a countryâs tax authorities
require a new and specific type of report.

## Variants

Variants are country-specific versions of root reports and, therefore, always refer to a root
report. To create a variant, select a generic (root) report in the Root Report field
when creating a new report.
When a root report is opened from the Accounting appâs Reporting menu, all of its
variants are displayed in the report variant selector in the top right corner of the view.
VAT Report (BE) is a variant of the root Generic Tax report .

## Lines

After creating a report (either root or variant), the next step is to fill it with lines. To create
a new line, click on Add a line . To modify an existing line, click on the line itself
and edit the popup. All lines require a Name and can have an optional Code which allows using the lineâs value in formulas.

## Expressions

Each line can contain one or multiple expressions . Expressions can be seen as sub-variables needed by a report line. To create an expression, click on Add a line within a lineâs
popup.
When creating an expression, you must enter a Label used to refer to that expression.
The label must be unique among the expressions of each report line. Both the Computation
Engine and the Formula fields must also be completed. The computation engine defines how the formula(s) and subformula(s) are interpreted. It is possible to mix
expressions using different computation engines under the same line if needed.
Depending on the engine, subformulas may also be required.

### Odoo Domain computation engine

When using the Odoo Domain computation engine, a formula is interpreted as an Odoo
domain targeting account.move.line objects.
`account.move.line`
The subformula allows you to define how the move lines matching the domain are used to compute the
value of the expression:
`sum`
The result is the sum of all the balances of the matched move lines.
`sum_if_pos`
The result is the sum of all the balances of the matched move lines if this amount is positive.
Otherwise, it is 0 .
`0`
`sum_if_neg`
The result is the sum of all the balances of the matched move lines if this amount is negative.
Otherwise, it is 0 .
`0`
`count_rows`
The result is the number of sub-lines of this expression. If the parent line has a group-by value, this will correspond to the number of distinct
grouping keys in the matched move lines. Otherwise, it will be the number of matched move lines.
To reverse the sign of the result, put a - sign at the beginning of the subformula.
`-`

### Tax Tags computation engine

When using the Tax Tags computation engine, the contents of the Formula field are matched to tax tags. If such tags do not exist when creating the expression, they will be
created.
When evaluating the expression, the expression computation can roughly be expressed as: (amount of
the move lines with + tag) - (amount of the move lines with - tag) .
`+`
`-`
`-`
If the Formula is set to tag_name , the engine matches tax tags +tag_name and -tag_name , creating them if necessary. To exemplify further: two tags are matched by the
formula. If the formula is A , it will require (and create, if needed) tags +A and -A .
`tag_name`
`+tag_name`
`-tag_name`
`A`
`+A`
`-A`

### Aggregate Other Formulas computation engine

The Aggregate Other Formulas computation engine performs arithmetic operations on the
amounts obtained from other expressions. Formulas here are composed of references to expressions
separated by one of the four basic arithmetic operators (addition + , subtraction - , division / , and multiplication * ). To refer to an expression, type in its parent lineâs code followed
by a period . and the expressionâs label (ex. code.label ).
`+`
`-`
`/`
`*`
`.`
Subformulas can be one of the following:
`if_above(CUR(amount))`
The value of the arithmetic expression will be returned only if it is greater than the provided
bound. Otherwise, the result will be 0 .
`0`
`if_below(CUR(amount))`
The value of the arithmetic expression will be returned only if it is lower than the provided
bound. Otherwise, the result will be 0 .
`0`
`if_between(CUR1(amount1),CUR2(amount2))`
The value of the arithmetic expression will be returned only if it is strictly between the
provided bounds. Otherwise, it will be brought back to the closest bound.
`if_other_expr_above(LINE_CODE.EXPRESSION_LABEL,CUR(amount))`
The value of the arithmetic expression will be returned only if the value of the expression
denoted by the provided line code and expression label is greater than the provided bound.
Otherwise, the result will be 0 .
`0`
`if_other_expr_below(LINE_CODE.EXPRESSION_LABEL,CUR(amount))`
The value of the arithmetic expression will be returned only if the value of the expression
denoted by the provided line code and expression label is lower than the provided bound.
Otherwise, the result will be 0 .
`0`
CUR is the currency code in capital letters, and amount is the amount of the bound expressed in
that currency.
`CUR`
`amount`
You can also use the cross_report subformula to match an expression found in another report.
`cross_report`

### Prefix of Account Codes computation engine

The Prefix of Account Codes computation engine is used to match amounts made on accounts
using the prefixes of these accountsâ codes as variables in an arithmetic expression.
`21`
`21+10-5`
`21`
`10`
`5`
It is also possible to ignore a selection of sub-prefixes.
`21+10\(101,102)-5\(57)`
`101`
`102`
`57`
You can apply âsub-filteringâ on credits and debits using the C and D suffixes. In this
case, an account will only be considered if its prefix matches, and if the total balance of the
move lines made on this account is credit/debit .
`C`
`D`
Account 210001 has a balance of -42 and account 210002 has a balance of 25. The formula 21D only matches the account 210002 , and hence returns 25. 210001 is not matched, as its
balance is credit .
`210001`
`210002`
`21D`
`210002`
`210001`
Prefix exclusions can be mixed with the C and D suffixes.
`C`
`D`
`21D+10\(101,102)C-5\(57)`
`21`
`D`
`10`
`C`
`101`
`102`
`5`
`57`
To match the letter C or D in a prefix and not use it as a suffix, use an empty exclusion () .
`C`
`D`
`()`
`21D\()`
`21D`
In addition to using code prefixes to include accounts, you can also match them with account
tags . This is especially useful, for example, if your country lacks a standardized chart of
accounts, where the same prefix might be used for different purposes across companies.
`tag(25)`
If the tag you reference is defined in a data file, an XMLID can be used instead of the ID.
`tag(my_module.my_tag)`
You can also use arithmetic expressions with tags, possibly combining them with prefix selections.
`tag(my_module.my_tag)+tag(42)+10`
`10`
C and D suffixes can be used in the same way with tags.
`C`
`D`
`tag(my_module.my_tag)C`
Prefix exclusion also works with tags.
`tag(my_module.my_tag)\(10)`
`10`

### External Value computation engine

The External Value computation engine is used to refer to manual and carryover
values . Those values are not stored using account.move.line , but with account.report.external.value . Each of these objects directly points to the expression it impacts,
so very little needs to be done about their selection here.
`account.move.line`
`account.report.external.value`
Formulas can be one of the following:
`sum`
If the result must be the sum of all the external values in the period.
`most_recent`
If the result must be the value of the latest external value in the period.
In addition, subformulas can be used in two ways:
`rounding=X`
Replacing X with a number instructs to round the amount to X decimals.
`X`
`editable`
Indicates this expression can be edited manually, triggering the display of an icon in the
report, allowing the user to perform this action.
Manual values are created at the date_to currently selected in the report.
`date_to`
Both subformulas can be mixed by separating them with a ; .
`;`
`editable;rounding=2`

### Custom Python Function computation engine

The Custom Python Function computation engine is a means for developers to introduce
custom computation of expressions on a case-by-case basis. The Formula is the name of a python function to call, and the Subformula is a key to fetch in the dictionary returned by this function. Use this computation engine only if making a custom
module.

## Columns

Reports can have an indefinite number of columns to display. Each column gets its values from
the expressions declared on the lines . The field expression_label of the column
gives the label of the expressions whose value is displayed. If a line has no expression in that
field, then nothing is displayed for it in this column. If multiple columns are required, you must
use different expression labels.
When using the period comparison feature found under the Options tab of an
accounting report, all columns are repeated in and for each period.

## Line grouping

Non-standard grouping is possible by adding or using existing fields on the Journal Item model,
provided that the fields are related and non-stored.
Grouping lines requires the report to have explicit report lines that can be edited. The deferred
reports, for example, do not support grouping lines as they use dynamic lines that are generated.

### Create a new field on journal item

To create a non-stored, related field in the Journal Item model, first go to Accounting â£ Journal Items , and click the (bug) icon,
then click Fields . Click New to create a new field, and complete the
following fields:
- Field Name : a technical name for the field
Field Name : a technical name for the field
- Field Label : the label to be displayed for the field
Field Label : the label to be displayed for the field
- Field Type : the type of field that this related field should point to
Field Type : the type of field that this related field should point to
- Stored : Leave this field unchecked as only non-stored fields can be used to group
lines.
Stored : Leave this field unchecked as only non-stored fields can be used to group
lines.
- Related Model : If the field type is one2many , many2many , or many2one , select the model of the original field to group by.
Related Model : If the field type is one2many , many2many , or many2one , select the model of the original field to group by.
- Related Field Definition : the technical path to the field you want to group by Example To group by the sales team of the commercial partner, set the related field definition to move_id.team_id .
Related Field Definition : the technical path to the field you want to group by
To group by the sales team of the commercial partner, set the related field definition to move_id.team_id .
`move_id.team_id`

### Group lines

To group lines, go to the Lines tab of the desired report, click
on the line you want to group, and edit the Group by field. Enter the technical name
( Field Name ) of the field to use as the grouping key.
To find a list of all the modelâs fields and their technical names, go to Accounting â£ Journal Items , and click the (bug) icon, then click Fields . The technical name of each field is listed in the Field Name column.
Consolidation via grouping by account code


Data inalterability check report

# Data inalterability check report

Tax authorities in some countries require companies to prove their posted accounting entries are
unaltered , meaning that once an entry has been secured, it can no longer be changed.
To do so, Odoo creates a unique fingerprint for each secured entry thanks to the SHA-256 algorithm .
This fingerprint is called a hash. The hash is generated by taking an entryâs essential data
(the values of the name , date , journal_id , company_id , debit , credit , account_id , and partner_id fields), concatenating it, and inputting it to the SHA-256 hash function, which then
outputs a fixed size (256-bit) string of characters. The hash function is deterministic ( the
same input always creates the same output ): any minor modification to the original data would
completely change the resulting hash. Consequently, the SHA-256 algorithm is often used, among
others, for data integrity verification purposes.
`name`
`date`
`journal_id`
`company_id`
`debit`
`credit`
`account_id`
`partner_id`
In addition, the previous entryâs hash is always added to the next entry to form a hash chain .
This is used to ensure a new entry is not added afterward between two secured entries, as doing so
would break the hash chain.
Hashes generated by the SHA-256 algorithm are theoretically not unique, as there is a finite
number of possible values. However, this number is exceptionally high: 2Â²âµâ, which is a lot
bigger than the number of atoms in the known universe. This is why hashes are considered unique
in practice.

## Inalterability features

Inalterability features can be enabled by activating the secure posted entries with hash option on any journal or using the secure entries wizard .
- Two indicators are added to the journal entryâs form view.
They show whether the entry is secured or not. A or ( lock icon ) next to the Posted state. A Secured checkbox in the Other info tab.
Two indicators are added to the journal entryâs form view.
They show whether the entry is secured or not.
- A or ( lock icon ) next to the Posted state.
A or ( lock icon ) next to the Posted state.
- A Secured checkbox in the Other info tab.
A Secured checkbox in the Other info tab.
- A Not Secured filter is available on journal entries and journal itemsâ list views.
It can be used to find posted journal entries that are not secured yet.
A Not Secured filter is available on journal entries and journal itemsâ list views.
It can be used to find posted journal entries that are not secured yet.
- The option to open the secure entries wizard is displayed in the Accounting menu.
The option to open the secure entries wizard is displayed in the Accounting menu.

## Secure posted entries with hash

To activate the hashing function on a specific journal, go to Accounting â£
Configuration â£ Journals . Open a sales, purchase, or miscellaneous journal, go to the Advanced Settings tab, and enable Secure Posted Entries with Hash .
Journals for which the feature is activated are called ârestrictedâ.
To compute the hash of an entry, Odoo retrieves the predecessor entries of the chain (i.e., the
entries with the same sequence prefix) and hashes them in a continuous way from the last hashed
entry to the new entry to hash.
Once you post an entry in a restricted journal, you cannot disable the feature anymore, nor edit
any secured entry.

## Secure entries wizard

You can also use the Secure Entries Wizard to secure all journal entries,
in all journals, up to a specific date.
The wizard operates independently of the journal settings and journal types.
To open it, activate the developer mode , go to Accounting
â£ Accounting , and click on Secure Entries . If the inalterability features are activated, it is also visible outside the debug
mode.
To secure entries, select a date up to which all entries should be secured and press Secure Entries .
After securing the entries, you can no longer edit them.
It can happen that entries that are past the selected date are secured.
This is possible since the hash chain corresponds to the sequence prefix,
ordered by sequence number.

## Report download

To download the data inalterability check report, go to Accounting â£ Configuration
â£ Settings â£ Reporting and click on Download the Data Inalterability Check Report .
The reportâs first section is an overview of all journal sequence prefixes containing hashed entries.
In the Restricted column, you can see whether or not a journal has the secure
posted entries with hash option (V) activated or not (X). The Check column tells you whether all entries are correctly hashed.
The second section gives a more detailed result of the data consistency check for each hashed
journal sequence prefix. You can view the first hashed entry and its corresponding hash,
as well as the last hashed entry and its corresponding hash.

Inalterability features
Secure posted entries with hash
Secure entries wizard
Report download


Intrastat

# Intrastat

Intrastat is the data collection and statistics production system for goods traded among EU member
states. It collects data on:
- Commercial transactions of goods for use, consumption, investment, or resale with ownership
transfer;
Commercial transactions of goods for use, consumption, investment, or resale with ownership
transfer;
- Goods movements without transfer of ownership (e.g., stock relocations or moves of goods
before or after outsourced production or processing, and after maintenance or repair);
Goods movements without transfer of ownership (e.g., stock relocations or moves of goods
before or after outsourced production or processing, and after maintenance or repair);
- Returns of goods.
Although the Intrastat system continues to be used, the term Intrastat is not used in the latest
legislation , referring instead to intra-Union trade in goods statistics .
Eurostat Statistics Explained - Glossary: Intrastat

## General configuration

Enable the Intrastat report by going to Accounting â£ Configuration â£ Settings .
Under the Customer Invoices section, tick Intrastat and then Save .

### Default transaction codes: invoice and refund

You can set a default transaction code for all newly created
invoice and refund transactions. Under Accounting â£ Configuration â£ Settings ,
select a Default invoice transaction code and/or a Default refund transaction
code and then Save . The code will be set automatically on all respective invoice lines.

### Region code

The region code is only used by Belgian companies . Under Accounting â£
Configuration â£ Settings , select the Company Intrastat Region where the company is
located and then Save .
If your warehouses are located in more than one region, you can define the region code at the
level of each warehouse instead. To do so, go to Inventory â£ Configuration â£
Warehouses , select a warehouse, set its Intrastat region , and then Save .

## Product configuration

All products must be properly configured to be included in the Intrastat report.

### Commodity code

Commodity codes are internationally recognized reference numbers used to classify goods depending on
their nature . Intrastat uses the Combined Nomenclature .
To add a commodity code, go to Accounting â£ Customers â£ Products and select a
product. Under the Accounting tab, set the productâs Commodity Code .
National Bank of Belgium - Intrastat commodity codes

### Quantity: weight and supplementary unit

Depending on the nature of the goods, it is necessary to specify either the productâs weight in
kilos (without packaging) or the productâs supplementary unit, such as square meter ( m2 ), number
of items ( p/st ), liter ( l ), or gram ( g ).
`m2`
`p/st`
`l`
`g`
To add a productâs weight or supplementary unit, go to Accounting â£ Customers â£
Products and select a product. Under the Accounting tab, depending on the commodity
code set, either fill in the product Weight or its Supplementary Units .

### Country of origin

To add the productâs country of origin, go to Accounting â£ Customers â£ Products and select a product. Under the Accounting tab, set the Country of Origin .

## Invoices and bills configuration

Once products are properly configured, several settings must be configured on the invoices and bills
you create.

### Transaction code

Transaction codes are used to identify a transactionâs nature. Default transaction codes can be set for invoice and refund transactions.
To set a transaction code on an invoice line, create an invoice or a bill, click the columns
selection button, tick Intrastat , and use the newly-added Intrastat column
to select a transaction code.
National Bank of Belgium - Intrastat: Nature of transactions from January 2022

### Partner country

The partner country represents the vendorâs country for bills and the customerâs country for
invoices. It is automatically filled in using the country set in the contactâs Country field.
To edit the partner country manually, create an invoice or a bill, click the Other Info tab, and select the Intrastat Country .

### Transport code

The transport code identifies the presumed mode of transport used to send the goods (arrival or
dispatch).
To add the transport code, create an invoice or a bill, go to the Other info tab,
and select the Intrastat Transport Mode .

### Value of the goods

The value of a good is the untaxed Subtotal ( Price multiplied by Quantity ) of an invoice line.

## Partner configuration

Two fields from the partnerâs contact form are used with Intrastat: VAT and Country . The country can be manually set on the
invoice or bill.

## Generate the Intrastat report

Generate the report by going to Accounting â£ Reporting â£ Audit Reports:
Intrastat Report . It is automatically computed based on the default configuration and the information found on the products , invoices and bills , and partners .
Export the report as a PDF, XLSX, or XML file to post it to your legal administration.
Each report line refers to a single invoice line and contains the following information:
- Invoice or bill reference number;
Invoice or bill reference number;
- System, which is a code automatically generated depending on whether the document is an invoice
(dispatch) or a bill (arrival);
System, which is a code automatically generated depending on whether the document is an invoice
(dispatch) or a bill (arrival);
- Country , which is the vendorâs country for arrivals and the
customerâs country for dispatches;
Country , which is the vendorâs country for arrivals and the
customerâs country for dispatches;
- Transaction Code ;
- (If your company is located in Belgium) Region Code ;
(If your company is located in Belgium) Region Code ;
- Commodity Code ;
- Origin Country ;
- Partner VAT ;
- Transport Code ;
- Incoterm Code ;
- Weight ;
- Supplementary Units ; and
Supplementary Units ; and
- Value , which is always expressed in euros even if the original invoice or
bill used another currency.
Value , which is always expressed in euros even if the original invoice or
bill used another currency.


Silverfin integration

# Silverfin integration

Silverfin is a third-party service provider that offers a cloud
platform for accountants.
Odoo and Silverfin provide an integration to automate the synchronization of data.

## Configuration

To configure this integration, you need to input the following data into your Silverfin account:
- userâs email address
userâs email address
- Odoo API key
- URL of the Odoo database
URL of the Odoo database
- name of your Odoo database
name of your Odoo database

### Odoo API key

You can create Odoo external API keys either for a single database (hosting: Odoo Online, On-premise, and Odoo.sh) or for all databases managed by a single user (hosting: Odoo Online).
- These API keys are personal and provide full access to your user account. Store it securely.
These API keys are personal and provide full access to your user account. Store it securely.
- You can copy the API key only at its creation. It is not possible to retrieve it later.
You can copy the API key only at its creation. It is not possible to retrieve it later.
- If you need it again, create a new API key (and delete the old one).
If you need it again, create a new API key (and delete the old one).

#### Per database

To add an API key to a single database, connect to the database, enable the developer
mode , click on the user menu, and then My Profile / Preferences . Under the Account Security tab, click on New API
Key , confirm your password, give a descriptive name to your new key, and copy the API key.

#### For all databases (fiduciaries)

To add an API key to all databases managed by a single user at the same time (the easiest
method for fiduciaries) , navigate to Odooâs website and sign in with
your administrator account. Next, open your account security settings in developer mode , click on New API Key , confirm your
password, give a descriptive name to your new key, and copy the new API key.
Open the database manager to view all databases that will
be linked to the single API key.


Tax carryover

# Tax carryover

When performing tax reports, the tax carryover feature allows carrying amounts from one period
to another without creating new entries.
It has been created to meet the legal requirements of specific locations, where amounts must be
transferred from period to period (for example, because the total of the line is negative).
The feature is activated by default in countries where it is required, such as Belgium, France, and
Italy. There is no specific configuration required.
Letâs take an example of a Belgian company that created a credit note of 100 for one of their
customers. The due tax is 21%.
In this case, as per local regulation, grid 81 of the tax report may contain a negative amount. But
it must be declared to the government as zero, and the negative amount should be carried over to the
next period.
If we go to Accounting app â£ Reporting â£ Tax Report , a pop-up on line 81
explains that the amount will be carried over in the next period.
At the time of the tax closing period, the tax report shows that the amount was carried over from
the previous period. It also indicates the amount that will be carried over to this line in the next
period based on the existing transactions and the carryover from the previous period.


Tax return (VAT declaration)

# Tax return (VAT declaration)

Companies with a registered VAT number must submit a tax return on
a monthly or quarterly basis, depending on their turnover and the registration regulation. A tax
return - or VAT return - gives the tax authorities information about the taxable transactions made
by the company. The output tax is charged on the number of goods and services sold by a
business, while the input tax is the tax added to the price when goods or services are
purchased. Based on these values, the company can calculate the tax amount they have to pay or be
refunded.
You can find additional information about VAT and its mechanism on this page from the European
Commission: âWhat is VAT?â .
Different contacts sharing the same VAT ID may result in an incorrect VAT report. If your
contacts are related (e.g., related partners, divisions within the same company, etc.), consider
using parent-type and children-type contacts .

## Prerequisites

### Tax Return Periodicity

The configuration of the Tax Return Periodicity allows Odoo to compute your tax return correctly
and also to send you a reminder to never miss a tax return deadline.
To do so, go to Accounting â£ Configuration â£ Settings . Under the Tax Return Periodicity , you can set:
- Periodicity : define here whether you submit your tax return on a monthly or quarterly
basis;
Periodicity : define here whether you submit your tax return on a monthly or quarterly
basis;
- Reminder : define when Odoo should remind you to submit your tax return;
Reminder : define when Odoo should remind you to submit your tax return;
- Journal : select the journal in which to record the tax return.
Journal : select the journal in which to record the tax return.
This is usually configured during the appâs initial set up .

### Tax Grids

Odoo generates tax reports based on the Tax Grids settings that are configured on your
taxes. Therefore, it is crucial to make sure that all recorded transactions use the right taxes.
You can see the Tax Grids by opening the Journal Items tab of any
invoice and bill.
To configure your tax grids, go to Accounting â£ Configuration â£ Taxes ,
and open the tax you want to modify. There, you can edit your tax settings, along with the tax
grids that are used to record invoices or refunds.
Taxes and reports are usually already pre-configured in Odoo: a fiscal localization package is installed according to the country you select at the creation
of your database.

## Close a tax period

### Tax lock date

Any new transaction whose accounting date prior to the Lock Tax Return date has its tax
values moved to the next open tax period. This is useful to make sure that no change can be made to
a report once its period is closed.
Therefore, we recommend locking your tax date before working on your Closing Journal Entry .
This way, other users cannot modify or add transactions that would have an impact on the Closing Journal Entry , which can help you avoid some tax declaration errors.
To check the current Lock Tax Return date, or to edit it, go to Accounting â£ Accounting â£ Lock Dates .

### Tax return

Once all the transactions involving taxes have been posted for the period you want to report, open
the Tax Return report by going to Accounting â£ Reporting â£ Tax
Return . Select the period you want to declare using the date filter to have an overview of the tax
return. Then, click Closing Entry to create a tax closing journal entry. Odoo
automatically proposes the details of the journal entry. Make any necessary changes and click Post .
From the report, click PDF to download a PDF of the tax return. Alternatively, click the ( gear ) icon, then click Download Excel to download an XLSX of
the tax return. To save the report to the Documents app, click the ( gear )
icon, then click Copy to Documents . Select the format to Export to , the Documents Name , the Folder to store it in, and add any Tags .
The report includes all the values to report to the tax authorities, along with the amount to be
paid or refunded.
If you forgot to lock your tax date before clicking on Closing Journal Entry , then
Odoo automatically locks your fiscal period on the same date as the accounting date of your
entry. This safety mechanism can prevent some fiscal errors, but it is advised to lock your tax
date manually before, as described above.
- Once the tax report for a period has been generated but not yet posted, additional invoices or
bills from that same period can still be posted and included in the closing entry. To do so,
click Refresh in the Proposition of tax closing
journal entry , or click Closing Entry again from the tax report.
Once the tax report for a period has been generated but not yet posted, additional invoices or
bills from that same period can still be posted and included in the closing entry. To do so,
click Refresh in the Proposition of tax closing
journal entry , or click Closing Entry again from the tax report.
- After the tax report has been posted for a period, Odoo locks the period and prevents the
creation of new journal entries involving VAT. Any corrections to customer invoices or vendor
bills must then be recorded in the following period.
After the tax report has been posted for a period, Odoo locks the period and prevents the
creation of new journal entries involving VAT. Any corrections to customer invoices or vendor
bills must then be recorded in the following period.
- Get started
- Fiscal localizations

Prerequisites
Tax Return Periodicity
Tax Grids
Close a tax period
Tax lock date
Tax return


Year-end closing

# Year-end closing

Year-end closing is vital for maintaining financial accuracy, complying with regulations, making
informed decisions, and ensuring transparency in reporting.

## Fiscal years

By default, the fiscal year is set to last 12 months and ends on December 31st. However, its
duration and end date can vary due to cultural, administrative, and economic considerations.
To modify these values, go to Accounting â£ Configuration â£ Settings . Under the Fiscal Periods section, change the Last Day field if necessary.
If the period lasts more than or less than 12 months, enable Fiscal Years and Save . Go back to the Fiscal Periods section and click Fiscal Years . Then, click New , give it a Name and both a Start Date and End Date .
Once the set fiscal period is over, Odoo automatically reverts to the default periodicity,
considering the value specified in the Last Day field.

## Year-end checklist

### Before closure

Before closing a fiscal year, ensure that everything is accurate and up-to-date:
- Make sure all bank accounts are fully reconciled up to year-end,
and confirm that the ending book balances match the bank statement balances.
Make sure all bank accounts are fully reconciled up to year-end,
and confirm that the ending book balances match the bank statement balances.
- Verify that all customer invoices have been created and
confirmed and that there are no draft invoices.
Verify that all customer invoices have been created and
confirmed and that there are no draft invoices.
- Confirm that all vendor bills have been created and confirmed.
Confirm that all vendor bills have been created and confirmed.
- Ensure the accuracy of all expenses and validate them.
Ensure the accuracy of all expenses and validate them.
- Check that all received payments have been encoded and confirmed.
Check that all received payments have been encoded and confirmed.
- Close all suspense accounts .
Close all suspense accounts .
- Book all depreciation and deferred revenue entries.
Book all depreciation and deferred revenue entries.

### Closing a fiscal year

Then, to close the fiscal year:
- Run a tax report , and verify that all tax information is
correct.
Run a tax report , and verify that all tax information is
correct.
- Reconcile all accounts on the balance sheet : Update the bank balances in Odoo according to the actual balances found on the bank statements. Reconcile all transactions in the cash and bank accounts by running the aged receivables and aged payables reports. Audit all accounts, fully understanding all transactions and their nature, including loans and fixed assets . Optionally, match payments to validate any open
vendor bills and customer invoices with their payments. While this step is optional, it could
assist the year-end closing process if all outstanding payments and invoices are reconciled,
potentially finding errors or mistakes in the system.
Reconcile all accounts on the balance sheet :
- Update the bank balances in Odoo according to the actual balances found on the bank statements.
Update the bank balances in Odoo according to the actual balances found on the bank statements.
- Reconcile all transactions in the cash and bank accounts by running the aged receivables and aged payables reports.
Reconcile all transactions in the cash and bank accounts by running the aged receivables and aged payables reports.
- Audit all accounts, fully understanding all transactions and their nature, including loans and fixed assets .
Audit all accounts, fully understanding all transactions and their nature, including loans and fixed assets .
- Optionally, match payments to validate any open
vendor bills and customer invoices with their payments. While this step is optional, it could
assist the year-end closing process if all outstanding payments and invoices are reconciled,
potentially finding errors or mistakes in the system.
Optionally, match payments to validate any open
vendor bills and customer invoices with their payments. While this step is optional, it could
assist the year-end closing process if all outstanding payments and invoices are reconciled,
potentially finding errors or mistakes in the system.
Next, the accountant likely verifies balance sheet items and book entries for:
- year-end manual adjustments,
year-end manual adjustments,
- work in progress,
- depreciation journal entries,
depreciation journal entries,
- loans,
- tax adjustments,
During the year-end audit, the accountant may print paper copies of all balance sheet items (e.g.,
loans, bank accounts, prepayments, sales tax statements) to compare them against the balances
recorded in Odoo.
As part of this process, setting a Lock Everything date to
the last day (inclusive) of the preceding fiscal year is good practice. This ensures that journal
entries with an accounting date on or before the lock date cannot be created or modified during
the audit. Users with administrator access rights can still create and edit entries if an
exception is configured.

#### Lock everything date

Setting a lock date prevents modifications to any posted journal entries with an accounting date on
or before the lock date. It also prevents posting new entries with an accounting date on or before
the lock date. In such cases, the system automatically sets the accounting date to the day after the
lock date.
To set a Lock Everything date, go to Accounting â£ Accounting â£ Lock
Dates . In the Lock Journal Entries window, set the Lock Everything date and Save .
Users with Administrator access rights to the Accounting app can create exceptions.
To do so:
- After setting the Lock Everything date, reopen the Lock Journal
Entries window and remove the Lock Everything date.
After setting the Lock Everything date, reopen the Lock Journal
Entries window and remove the Lock Everything date.
- In the Exception banner, choose if this exception should be set for me (the current user) or for everyone and how long it should last.
In the Exception banner, choose if this exception should be set for me (the current user) or for everyone and how long it should last.
- A Reason for this exception can be added.
A Reason for this exception can be added.
- All of this information is logged in the chatter of the company record .
All of this information is logged in the chatter of the company record .
To remove the Lock Everything date after it has been saved, configure the exception
to apply for everyone and set the duration to forever .

#### Current yearâs earnings

Odoo uses a unique account type called current yearâs earnings to display the difference
between the income and expense accounts.
The chart of accounts can only contain one account of this type. By default, it is a 999999
account named Undistributed Profits/Losses .
To allocate the current yearâs earnings, create a new miscellaneous entry with a date set to the end
of the fiscal year to book them to any equity account.
Then, verify whether the current yearâs earnings on the balance sheet correctly show a zero
balance. If so, a Hard Lock date can be set to the last day of the fiscal year in Accounting â£ Accounting â£ Lock Dates .
The Hard Lock date field is irreversible and is intended to ensure data
inalterability required to comply with accounting regulations in certain countries. If such
compliance is not applicable, setting this field may not be necessary. However, if required, the
date should only be set once it is confirmed to be correct, as it cannot be changed or
overridden , regardless of access rights.

Fiscal years
Year-end checklist
Before closure
Closing a fiscal year


Taxes

# Taxes

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.

## Overview

In general, managing taxes in Odoo involves the following steps:
- Taxes are added on individual lines of documents created via the Sales, Purchase, Accounting, and
Point of Sale apps.
Taxes are added on individual lines of documents created via the Sales, Purchase, Accounting, and
Point of Sale apps.
- Odoo automatically computes tax amounts on the documents.
Odoo automatically computes tax amounts on the documents.
- On accounting documents, Odoo generates journal items to keep track of tax debit and tax credit.
On accounting documents, Odoo generates journal items to keep track of tax debit and tax credit.
- 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.
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.

### Taxes on sales and purchases

Most sales and purchase documents have a Taxes field where taxes can be applied to
individual lines. This includes invoices and vendor bills in the Accounting app, sales quotations in the Sales app, and purchase orders in
the Purchase app.
When adding a product to a sale or purchase line, the taxes assigned to the product are automatically applied to the line.
In the Point of Sale app, the taxes assigned to the
products are applied directly to the order and cannot be changed except by a 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 Tax computation documentation .

### Automatic generation of tax journal items

Upon applying a tax on an invoice or 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, 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 Tax Return report.
If 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 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 fiscal localization .
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.

## Basic tax configuration

Follow these basic steps to set up taxes:
- Enable any relevant company-wide options .
Enable any relevant company-wide options .
- Activate any needed pre-configured taxes .
Activate any needed pre-configured taxes .
- Assign taxes on your products .
Assign taxes on your products .

### Company-wide options

To access these configuration options, go to Accounting â£ Configuration
â£ Settings and scroll down to Taxes .

#### Default taxes

The default Sales Tax and Purchase Tax are automatically set on products
when creating new products.
If 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.
Prices can be changed to Tax Included to treat all taxes as 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 Tax Included .

#### 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.
EU intra-community distance selling

#### Cash basis

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 fiscal localization package .

### Activate pre-configured taxes

The list of taxes can be accessed by going to Accounting â£ Configuration â£
Taxes .
Generally, inactive taxes are created for most sales tax rates by the fiscal localization package, but only the main tax rate is active by default. To activate an
inactive tax, click the toggle in the Active column.

### Assign taxes on products

To configure the taxes used for each product, go to Accounting â£ Customers â£
Products , select the product to configure, and fill the Sales Taxes and 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.
Use the Default Taxes company-wide setting to automatically fill these
fields on new products.

## Advanced tax configuration

The following aspects of a tax can be customized:
- How the tax appears in the backend
How the tax appears in the backend
- How the tax appears to customers
How the tax appears to customers
- The details of the tax computation
The details of the tax computation
- How tax payable journal items are created
How tax payable journal items are created
- Fiscal positions (how to replace a tax by another tax under
certain conditions)
Fiscal positions (how to replace a tax by another tax under
certain conditions)
To open a taxâs configuration, go to Accounting â£ Configuration â£ Taxes , then
click the tax name.

### Configure backend appearance and availability

The following options determine how a tax is displayed to users in the Odoo back-end.

#### Tax name

The Tax Name appears for backend users in the Taxes field in sales
orders , invoices , product forms, etc.

#### Tax type

The Tax Type determines where the tax is available to be selected.
- Sales : Customer invoices, product customer taxes, etc.
Sales : Customer invoices, product customer taxes, etc.
- Purchase : Vendor bills, product vendor taxes, etc.
Purchase : Vendor bills, product vendor taxes, etc.
Use None for taxes that you want to include in a Group of Taxes but that you do not want to list along with other sales or purchase taxes.

#### Tax scope

The Tax Scope restricts the use of taxes to a type of product, either goods or services .

#### Description

The Description can be edited for the purpose of internal documentation.

### Configure how the tax appears to customers

#### Label on invoices

The Label on Invoices appears on invoice lines in invoice PDFs and on the customer
portal.

#### Tax group

The 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.

### Configure how tax journal items are created

The Distribution for Invoices and Distribution for Refunds sections control
the generation of tax payable journal items in invoices and credit notes, respectively. They also
determine which tax grids are set on invoice lines when this tax is
applied.
Each of these sections should contain one Base line, one or more % of tax lines amounting to 100% (e.g. one 100% line, or two 50% lines), and optionally, one or more % of tax lines amounting to -100.00%.
The Base line can have one or more Tax Grids set, which are added to the
invoice line on which the tax is applied.
The % 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 Account and Tax Grids . If
the Account is not specified, it defaults to the account of the original invoice line on
which the tax is applied.
Typical cases include:
- one 100% of tax line: this is the most common case where the tax amount should appear
on a single tax payable journal item.
one 100% of tax line: this is the most common case where the tax amount should appear
on a single tax payable journal item.
- one 100% of tax and one -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 100% of tax and one -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 50% of tax line that specifies a tax payable account and another 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.
one 50% of tax line that specifies a tax payable account and another 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.

## Extra taxes

âExtra taxesâ is a broad term referring to additional taxes beyond the standard or basic taxes
imposed by governments. These extra taxes can be luxury taxes, environmental taxes, import or export duties taxes, etc.
The method to compute these taxes varies across different countries. We recommend consulting your
countryâs regulations to understand how to calculate them for your business.
To compute an extra tax in Odoo, create a tax , enter a tax name, select
a Tax Computation , set an Amount , and in the Advanced Options tab, enable Affect Base of Subsequent Taxes . Then, drag and
drop the taxes in the order they should be computed .
- In Belgium, the formula to compute an environmental tax is: (product price + environmental tax) x sales tax . Therefore, our environmental tax has to come before the sales tax in the
computation sequence.
In Belgium, the formula to compute an environmental tax is: (product price + environmental tax) x sales tax . Therefore, our environmental tax has to come before the sales tax in the
computation sequence.
`(productprice+environmentaltax)xsalestax`
- In our case, we created a 5% environmental tax (Ecotax) and put it before the Belgian base
tax of 21%.
In our case, we created a 5% environmental tax (Ecotax) and put it before the Belgian base
tax of 21%.
- Tax computation
- Fiscal positions (tax and account mapping)
Fiscal positions (tax and account mapping)
- B2B (tax excluded) and B2C (tax included) pricing
B2B (tax excluded) and B2C (tax included) pricing
- Tax return (VAT declaration)
Tax return (VAT declaration)


# B2B (tax excluded) and B2C (tax included) pricing

When working with consumers, prices are usually expressed with taxes included in the price (e.g., in
most eCommerce). But, when you work in a B2B environment, companies usually negotiate prices with
taxes excluded.
Odoo manages both use cases easily, as long as you register your prices on the product with taxes
excluded or included, but not both together. If you manage all your prices with tax included (or
excluded) only, you can still easily do sales order with a price having taxes excluded (or included)
: thatâs easy.
This documentation is only for the specific use case where you need to have two references for the
price (tax included or excluded), for the same product. The reason of the complexity is that there
is not a symmetrical relationship with prices included and prices excluded, as shown in this use
case, in Belgium with a tax of 21%:
- Your eCommerce has a product at 10â¬ (taxes included)
Your eCommerce has a product at 10â¬ (taxes included)
- This would do 8.26â¬ (taxes excluded) and a tax of 1.74â¬
This would do 8.26â¬ (taxes excluded) and a tax of 1.74â¬
But for the same use case, if you register the price without taxes on the product form (8.26â¬), you
get a price with tax included at 9.99â¬, because:
- 8.26â¬ * 1.21 = 9.99â¬
8.26â¬ * 1.21 = 9.99â¬
So, depending on how you register your prices on the product form, you will have different results
for the price including taxes and the price excluding taxes:
- Taxes Excluded: 8.26â¬ & 10.00â¬
Taxes Excluded: 8.26â¬ & 10.00â¬
- Taxes Included: 8.26â¬ & 9.99â¬
Taxes Included: 8.26â¬ & 9.99â¬
If you buy 100 pieces at 10â¬ taxes included, it gets even more tricky. You will get: 1000â¬
(taxes included) = 826.45â¬ (price) + 173.55â¬ (taxes) Which is very different from a price per
piece at 8.26â¬ tax excluded.
This documentation explains how to handle the very specific use case where you need to handle the
two prices (tax excluded and included) on the product form within the same company.
In terms of finance, you have no more revenues selling your product at 10â¬ instead of 9.99â¬ (for a
21% tax), because your revenue will be exactly the same at 9.99â¬, only the tax is 0.01â¬ higher.
So, if you run an eCommerce in Belgium, make your customer a favor and set your price at 9.99â¬
instead of 10â¬. Please note that this does not apply to 20â¬ or 30â¬, or other tax rates, or a
quantity >1. You will also make you a favor since you can manage everything tax excluded, which is
less error prone and easier for your salespeople.

## Configuration

### Introduction

The best way to avoid this complexity is to choose only one way of managing your prices and stick to
it: price without taxes or price with taxes included. Define which one is the default stored on the
product form (on the default tax related to the product), and let Odoo compute the other one
automatically, based on the pricelist and fiscal position. Negotiate your contracts with customers
accordingly. This perfectly works out-of-the-box and you have no specific configuration to do.
If you can not do that and if you really negotiate some prices with tax excluded and, for other
customers, others prices with tax included, you must:
- always store the default price tax excluded on the product form, and apply a tax (price
excluded on the product form)
always store the default price tax excluded on the product form, and apply a tax (price
excluded on the product form)
- create a pricelist with prices in tax included , for specific customers
create a pricelist with prices in tax included , for specific customers
- create a fiscal position that switches the tax excluded to a tax included
create a fiscal position that switches the tax excluded to a tax included
- assign both the pricelist and the fiscal position to customers who want to benefit to this
pricelist and fiscal position
assign both the pricelist and the fiscal position to customers who want to benefit to this
pricelist and fiscal position
For the purpose of this documentation, we will use the above use case:
- your product default sale price is 8.26â¬ tax excluded
your product default sale price is 8.26â¬ tax excluded
- but we want to sell it at 10â¬, tax included, in our shops or eCommerce website
but we want to sell it at 10â¬, tax included, in our shops or eCommerce website

### Setting your products

Your company must be configured with tax excluded by default. This is usually the default
configuration, but you can check your Default Sale Tax from the menu Configuration â£ Settings of the Accounting application.
Once done, you can create a B2C pricelist. You can activate the pricelist feature per customer
from the menu: Configuration â£ Settings of the Sale application. Choose the
option different prices per customer segment .
Once done, create a B2C pricelist from the menu Configuration â£ Pricelists . Itâs
also good to rename the default pricelist into B2B to avoid confusion.
Then, create a product at 8.26â¬, with a tax of 21% (defined as tax not included in price) and set a
price on this product for B2C customers at 10â¬, from the Sales â£ Products menu of
the Sales application:

### Setting the B2C fiscal position

From the accounting application, create a B2C fiscal position from this menu: Configuration â£ Fiscal Positions . This fiscal position should map the VAT 21%
(tax excluded of price) with a VAT 21% (tax included in price)

## Test by creating a quotation

Create a quotation from the Sale application, using the Sales â£ Quotations menu.
You should have the following result: 8.26â¬ + 1.73â¬ = 9.99â¬.
Then, create a quotation but change the pricelist to B2C and the fiscal position to B2C on the
quotation, before adding your product. You should have the expected result, which is a total price
of 10â¬ for the customer: 8.26â¬ + 1.74â¬ = 10.00â¬.
This is the expected behavior for a customer of your shop.

## Avoid changing every sale order

If you negotiate a contract with a customer, whether you negotiate tax included or tax excluded, you
can set the pricelist and the fiscal position on the customer form so that it will be applied
automatically at every sale of this customer.
The pricelist is in the Sales & Purchases tab of the customer form, and the fiscal position is
in the accounting tab.
Note that this is error prone: if you set a fiscal position with tax included in prices but use a
pricelist that is not included, you might have wrong prices calculated for you. Thatâs why we
usually recommend companies to only work with one price reference.

Configuration
Introduction
Setting your products
Setting the B2C fiscal position
Test by creating a quotation
Avoid changing every sale order


AvaTax integration

# AvaTax integration

Avalaraâs AvaTax is a cloud-based tax software. Integrating AvaTax with Odoo provides real-time
and region-specific tax calculations when users sell, purchase, and invoice items in Odoo. AvaTax tax calculation is supported with every United Nations charted country, including inter-border
transactions.
AvaTax is only available for integration with databases/companies that have locations in the
United States, Canada, and Brazil. This means the fiscal position/country of a database can only
be set to the United States, Canada, or Brazil. For more information, reference this
documentation: Fiscal country .
AvaTax accounts for location-based tax rates for each state, county, and city. It improves
remittance accuracy by paying close attention to laws, rules, jurisdiction boundaries, and special
circumstances (like, tax holidays, and product exemptions). Companies who integrate with AvaTax can maintain control of tax-calculations in-house with this simple API integration.
Some limitations exist in Odoo while using AvaTax for tax calculation:
- AvaTax uses the company address by default. To use the warehouse address, enable Allow
Ship Later in the POS app settings.
AvaTax uses the company address by default. To use the warehouse address, enable Allow
Ship Later in the POS app settings.
- Excise tax is not supported. This includes tobacco/vape taxes, fuel taxes, and other
specific industries.
Excise tax is not supported. This includes tobacco/vape taxes, fuel taxes, and other
specific industries.
Avalaraâs support documents: About AvaTax

## Set up on AvaTax

To use AvaTax , an account with Avalara is required for the setup. If one has not been set up yet,
connect with Avalara to purchase a license: Avalara: Letâs Talk .
Upon account setup, take note of the AvaTax Account ID . This will be needed in the Odoo setup . In Odoo, this number is the API
ID .
Then, create a basic company profile .

### Create basic company profile

Collect essential business details for the next step: locations where tax is collected,
products/services sold (and their sales locations), and customer tax exemptions, if applicable.
Follow the Avalara documentation for creating a basic company profile:
- Add company information .
Add company information .
- Tell us where the company collects and pays tax .
Tell us where the company collects and pays tax .
- Verify jurisdictions and activate the company .
Verify jurisdictions and activate the company .
- Add other company locations for location-based filing .
Add other company locations for location-based filing .
- Add a marketplace to the company profile .
Add a marketplace to the company profile .

### Connect to AvaTax

After creating the basic company profile in Avalara, connect to AvaTax . This step links Odoo and AvaTax bidirectionally.
Navigate to either Avalaraâs sandbox or production environment. This will depend on which type of Avalara account the
company would like to integrate.
Sandbox vs production environments in Avalara .
Log in to create the License Key . Go to Settings â£ License and API
Keys . Click Generate License Key .
A warning appears stating: If your business app is connected to Avalara solutions, the connection will be broken until you update the app with the new license key. This action cannot be undone.
`IfyourbusinessappisconnectedtoAvalarasolutions,theconnectionwillbebrokenuntilyouupdatetheappwiththenewlicensekey.Thisactioncannotbeundone.`
Generating a new license key breaks the connection with existing business apps using the AvaTax integration. Make sure to update these apps with the new license key.
If this will be the first API integration being made
with AvaTax and Odoo, then click Generate license key .
If this is an additional license key, ensure the previous connection can be broken. There is only one license key associated with each of the Avalara sandbox and production accounts.
Copy this key to a safe place. It is strongly encouraged to back up the license key for
future reference. This key cannot be retrieved after leaving this screen.

## Odoo configuration

Before using AvaTax , there are some additional configurations in Odoo to ensure tax calculations
are made accurately.
Verify that the Odoo database contains necessary data. The country initially set up in the database
determines the fiscal position, and aids AvaTax in calculating accurate tax rates.

### Fiscal country

To set the Fiscal Country , navigate to Accounting app â£ Configuration
â£ Settings .
Under the Taxes section, set the Fiscal Country feature to United
States , Canada , or Brazil . Then, click Save .

### Company settings

All companies operating under the Odoo database should have a full and complete address listed in
the settings. Navigate to the Settings app , and under the Companies section, ensure there is only one company operating the Odoo database. Click Update Info to open a separate page to update company details.
If there are multiple companies operating in the database, click Manage Companies to
load a list of companies to select from. Update company information by clicking into the specific
company.
Database administrators should ensure that the Streetâ¦ , Street2â¦ , City , State , ZIP , and Country are all updated for
the companies.
This ensures accurate tax calculations and smooth end-of-year accounting operations.
- Companies
- Get started

### Module installation

Next, ensure that the Odoo AvaTax module is installed. To do so, navigate to the Apps application . In the Searchâ¦ bar, type in avatax , and press Enter . The following results populate:
`avatax`
`account_avatax`
Default AvaTax module. This module adds the base AvaTax features for tax calculation.
Avatax for geo localization
account_avatax_geolocalize
`account_avatax_geolocalize`
This module includes the features required for integration of AvaTax into geo-localization
in Odoo.
`account_avatax_sale`
Includes the information needed for tax calculation on sales orders in Odoo.
`account_avatax_stock`
Includes tax calculation in Odoo Inventory.
`sale_amazon_avatax`
Includes tax calculation features between the Amazon Connector and Odoo.
`l10n_br_avatax`
Includes information for tax calculation in the Brazil localization.
Avatax Brazil for Services
l10n_br_avatax_services
`l10n_br_avatax_services`
This module includes the required features for tax calculation for services in the Brazil
localization.
Avatax Brazil Sale for Services
l10n_br_edi_sale_services
`l10n_br_edi_sale_services`
This module includes the required features for tax calculation for the sale of services in
the Brazil localization. This includes electronic data interchange (EDI).
Test SOs for the Brazilian AvaTax
l10n_br_test_avatax_sale
`l10n_br_test_avatax_sale`
This module includes the required features for test sales orders in the Brazil localization.
Click the Install button on the module labeled, Avatax : account_avatax .
Doing so installs the following modules:
`account_avatax`
- Avatax : account_avatax
Avatax : account_avatax
`account_avatax`
- Avatax for SO : account_avatax_sale
Avatax for SO : account_avatax_sale
`account_avatax_sale`
- Avatax for Inventory : account_avatax_stock
Avatax for Inventory : account_avatax_stock
`account_avatax_stock`
Should AvaTax be needed for geo-localization, or with the Amazon Connector , then install those
modules individually by clicking on Install on Avatax for geo localization and Amazon/Avatax Bridge , respectively.
For localization specific AvaTax instructions, view the following fiscal localization documentation:
- Brazil
- United States

### Odoo AvaTax settings

To integrate the AvaTax API with Odoo, go to Accounting app â£ Configuration â£ Settings section. The AvaTax fields in the Taxes section is where the AvaTax configurations are made, and the
credentials are entered in.
First, tick the checkbox to the left of the AvaTax settings, to activate AvaTax on the
database. This is a quick, convenient way to activate and deactivate AvaTax tax calculation on the
Odoo database.

#### Prerequisites

First, select the Environment in which the company wishes to use AvaTax in. It can
either be Sandbox or Production .
For help determining which AvaTax environment to use (either Production or Sandbox ), visit: Sandbox vs Production environments .

#### Credentials

Now, the credentials can be entered in. The AvaTax Account ID should be entered in the API ID field, and the License Key should be entered in the API
Key field.
The Account ID can be found by logging into the AvaTax portal ( sandbox or production ). In the
upper-right corner, click on the initials of the user and Account . The Account ID is listed first.
To access the License Key see this documentation: Connect to AvaTax .
For the Company Code field, enter the Avalara company code for the company being
configured. Avalara interprets this as DEFAULT , if it is not set. The Company Code can
be accessed in the Avalara management portal.
`DEFAULT`
First, log into the AvaTax portal ( sandbox or production ). Then, navigate to Settings â£ Manage Companies .
The Company Code value is located in the row of the Company in the Company Code column.

#### Transaction options

There are two transactional settings in the Odoo AvaTax settings that can be configured: Use UPC and Commit Transactions .
If the checkbox next to Use UPC is ticked, the transactions will use Universal Product
Codes (UPC), instead of custom defined codes in Avalara. Consult a certified public accountant (CPA)
for specific guidance.
Should the Commit Transactions checkbox be ticked, then, the transactions in the Odoo
database will be committed for reporting in AvaTax .

#### Address validation

The Address Validation feature ensures that the most up-to-date address by postal standards is set
on a contact in Odoo. This is important to provide accurate tax calculations for customers.
The Address Validation feature only works with partners/customers in North America.
Additionally, tick the checkbox next to the Address validation field.
For accurate tax calculations, it is best practice to enter a complete address for the contacts
saved in the database. However, AvaTax can still function by implementing a best effort attempt
using only the Country , State , and Zip code . These are the
three minimum required fields.
Save the settings to implement the configuration.
Manually Validate the address by navigating to the Contacts app , and
selecting a contact. Now that the AvaTax module has been configured on the database, a Validate button appears directly below the Address .
Click Validate , and a pop-up window appears with a Validated Address and Original Address listed. If the Validated Address is the correct mailing
address for tax purposes, click Save Validated .
All previously-entered addresses for contacts in the Odoo database will need to be validated
using the manually validate process outlined above. Addresses are not automatically validated if
they were entered previously. This only occurs upon tax calculation.

#### Test connection

After entering all the above information into the AvaTax setup on Odoo, click Test
connection . This ensures the API ID and API KEY are correct, and a
connection is made between Odoo and the AvaTax application programming interface (API).

#### Sync parameters

Upon finishing the configuration and settings of the AvaTax section, click the Sync
Parameters button. This action synchronizes the exemption codes from AvaTax .

### Fiscal position

Next, navigate to Accounting app â£ Configuration â£ Accounting: Fiscal
Positions . A Fiscal Position is listed named, Automatic Tax Mapping
(AvaTax) . Click it to open AvaTaxâs fiscal position configuration page.
Here, ensure that the Use AvaTax API checkbox is ticked.
Optionally, tick the checkbox next to the field labeled: Detect Automatically . Should
this option be ticked, then, Odoo will automatically apply this Fiscal Position for
transactions in Odoo.
Enabling Detect Automatically also makes specific parameters, such as VAT
required , Foreign Tax ID , Country Group , Country , Federal States , or Zip Range appear. Filling these parameters filters the Fiscal Position usage. Leaving them blank ensures all calculations are made using this Fiscal Position .
Should the Detect Automatically checkbox not be ticked, each customer will need to
have the Fiscal Position set on their Sales and Purchase tab of the
contact record. To do so, navigate to Sales app â£ Order â£ Customers , or Contacts app â£ Contacts . Then, select a customer or contact to set the fiscal
position on.
Navigate to the Sales and Purchase tab, and down to the section labeled, Fiscal Position . Set the Fiscal Position field to the fiscal position
for the customer.
Fiscal positions (tax and account mapping)

#### AvaTax accounts

Upon selecting the checkbox option for Use AvaTax API a new AvaTax tab
appears. Click into this tab to reveal two different settings.
The first setting is the AvaTax Invoice Account , while the second is, AvaTax
Refund Account . Ensure both accounts are set for smooth end-of-year record keeping. Consult a
certified public accountant (CPA) for specific guidance on setting both accounts.
Click Save to implement the changes.

### Tax mapping

The AvaTax integration is available on sale orders and invoices with the included AvaTax fiscal
position.
Additionally, there is a Tax Mapping tab and Account Mapping tab in the Automatic Tax Mapping (AvaTax) fiscal position, where mapping for products can also
be configured. To access Fiscal Positions navigate to Accounting app
â£ Configuration â£ Accounting: Fiscal Positions .

#### Product category mapping

Before using the integration, specify an Avatax Category on the product categories.
Navigate to Inventory app â£ Configuration â£ Product Categories . Select the
product category to add the AvaTax Category to. In the AvaTax Category field, select a category from the drop-down menu, or Search Moreâ¦ to open the complete
list of options.

#### Product mapping

AvaTax Categories may be set on individual products, as well. To set the Avatax
Category navigate to Inventory app â£ Products â£ Products . Select the product
to add the Avatax Category to. Under the General Information tab, on the
far-right, is a selector field labeled: Avatax Category . Finally, click the drop-down
menu, and select a category, or Search Moreâ¦ to find one that is not listed.
If both the product, and its category, have an AvaTax Category set, the productâs AvaTax Category takes precedence.
Mapping an AvaTax Category on either the Product or Product Category should be
completed for every Product or Product Category , depending on the route that is chosen.
- Fiscal positions (tax and account mapping)
Fiscal positions (tax and account mapping)
- AvaTax use
- Avalara (Avatax) portal
Avalara (Avatax) portal
- US Tax Compliance: Avatax elearning video
US Tax Compliance: Avatax elearning video

Set up on AvaTax
Create basic company profile
Connect to AvaTax
Odoo configuration
Fiscal country
Company settings
Module installation
Odoo AvaTax settings
Fiscal position
Tax mapping