Upgrade

# Upgrade

An upgrade involves moving a database from an older version to a newer supported version (e.g., from
Odoo 16.0 to Odoo 18.0). Regular upgrades are crucial as each version offers new features, bug
fixes, and security patches. Using a supported version is
strongly recommended. Each major version is supported for three years.
Depending on the hosting type and Odoo version used, a database upgrade can be mandatory .
- If a database is on a major version (e.g., 16.0, 17.0, 18.0), an upgrade is mandatory
every two years.
If a database is on a major version (e.g., 16.0, 17.0, 18.0), an upgrade is mandatory
every two years.
- If a database is on a minor version (e.g., 17.1, 17.2, 17.4), an upgrade is mandatory
a few weeks after the next version is released. Minor versions are usually released every
two months.
If a database is on a minor version (e.g., 17.1, 17.2, 17.4), an upgrade is mandatory
a few weeks after the next version is released. Minor versions are usually released every
two months.
After the initial three years of support, you will have another two years to complete the
upgrade. You will be notified when an upgrade is required.
You can stay on the same version indefinitely, even if it is not recommended. Note that the
smaller the version gap, the easier the upgrade should be.
You will receive a notification in your database a few weeks before a mandatory upgrade will be
automatically carried out. You are in control of the process as long as the deadline is not
reached.
Concretely, Odooâs Upgrade Team performs a silent test upgrade of every database that should be
upgraded. If the test is successful and lasts less than 20 minutes, you can directly trigger the
upgrade from the database. If the test fails, you can test an upgrade using the database manager .
When you are invited to upgrade, it is strongly recommended to request an upgraded test
database first and spend time testing it.
An automatic upgrade to the next version will be triggered if no action is taken before the
specified due date.
An upgrade does not cover:
- Downgrading to a previous version of Odoo
Downgrading to a previous version of Odoo
- Switching editions (e.g., from Community to
Enterprise)
Switching editions (e.g., from Community to
Enterprise)
- Changing hosting type (e.g., from on-premise to Odoo Online)
Changing hosting type (e.g., from on-premise to Odoo Online)
- Migrating from another ERP to Odoo
Migrating from another ERP to Odoo
If your database contains custom modules, it cannot be upgraded until a version of your custom
modules is available for the target version of Odoo. For customers maintaining their own custom
modules, we recommend to parallelize the process by requesting an upgraded database while also upgrading the source code of your custom
modules .

## Upgrading in a nutshell

- Request an upgraded test database (see obtaining an upgraded test database ).
Request an upgraded test database (see obtaining an upgraded test database ).
- If applicable, upgrade the source code of your custom module to be compatible with the new
version of Odoo (see Upgrade a customized database ).
If applicable, upgrade the source code of your custom module to be compatible with the new
version of Odoo (see Upgrade a customized database ).
- Thoroughly test the upgraded database (see testing the new version of the database ).
Thoroughly test the upgraded database (see testing the new version of the database ).
- Report any issue encountered during the testing to Odoo by going to the Support page and
selecting âAn issue related to my future upgrade (I am testing an upgrade)â .
Report any issue encountered during the testing to Odoo by going to the Support page and
selecting âAn issue related to my future upgrade (I am testing an upgrade)â .
- Once all issues are resolved and you are confident that the upgraded database can be used as
your main database without any issues, plan the upgrade of your production database.
Once all issues are resolved and you are confident that the upgraded database can be used as
your main database without any issues, plan the upgrade of your production database.
- Request the upgrade for the production database, rendering it unavailable for the time it takes
to complete the process (see upgrading the production database ).
Request the upgrade for the production database, rendering it unavailable for the time it takes
to complete the process (see upgrading the production database ).
- Report any issue encountered during the upgrade to Odoo by going to the Support page and
selecting âAn issue related to my upgrade (production)â .
Report any issue encountered during the upgrade to Odoo by going to the Support page and
selecting âAn issue related to my upgrade (production)â .

## Obtaining an upgraded test database

The Upgrade page is the main platform for requesting an upgraded
database. However, depending on the hosting type, you can upgrade from the command line
(on-premise), the Odoo Online database manager , or your Odoo.sh project .
The Upgrade platform follows the same Privacy Policy as the
other Odoo.com services. Visit the General Data Protection Regulation page to learn more about how Odoo handles your data and privacy.
To upgrade an Odoo Online database:
- Open the database manager .
Open the database manager .
- Select the database and click Manage .
Select the database and click Manage .
- Click Upgrade in the Database section.
Click Upgrade in the Database section.
- In the popup: Select the version of Odoo you want to upgrade to, usually the latest version. Enter the Email to notify , which will receive a link to the upgraded
database. Select the Purpose of the upgrade, which is automatically set to Test for your first upgrade request. Click Upgrade .
- Select the version of Odoo you want to upgrade to, usually the latest version.
Select the version of Odoo you want to upgrade to, usually the latest version.
- Enter the Email to notify , which will receive a link to the upgraded
database.
Enter the Email to notify , which will receive a link to the upgraded
database.
- Select the Purpose of the upgrade, which is automatically set to Test for your first upgrade request.
Select the Purpose of the upgrade, which is automatically set to Test for your first upgrade request.
- Click Upgrade .
In the database manager, the Connect button will be replaced by an unclickable Upgradingâ¦ button until completion. Once the process is successful, an email
containing a link to the upgraded test database is sent to the address provided. The test
database can also be accessed from the database manager by clicking the ( caret down ) button before the database name to display the test database, then
clicking Connect .
Odoo.sh is integrated with the upgrade platform to simplify the upgrade process.
The latest production daily automatic backup is then sent to the Upgrade platform.
Once the upgrade platform is done upgrading the backup and uploading it on the branch, it is
put in a special mode : each time a commit is pushed on the branch, a restore
operation of the upgraded backup and an update of all the custom modules occur. This
allows you to test your custom modules on a pristine copy of the upgraded database. The log
file of the upgrade process can be found in your newly upgraded staging build by going to ~/logs/upgrade.log .
`~/logs/upgrade.log`
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. If there are none, the
âupdate on commitâ mode is skipped, the upgraded database is built as soon as it is
transferred from the upgrade platform, and the upgrade mode is exited.
Check out the Upgrade a customized database page for more information.
The standard upgrade process can be initiated by entering the following command line on the
machine where the database is hosted:
This command has some requirements on the environment it runs in:
- Some external commands that must be provided by the operating system, normally found in
any Linux distribution (including WSL). An error will be displayed if one or several of
them are missing.
Some external commands that must be provided by the operating system, normally found in
any Linux distribution (including WSL). An error will be displayed if one or several of
them are missing.
- The system user that executes the command needs to be configured with access to the
database. Please refer to the PostgreSQL documentation of the client environment or the client password
file for this requirement.
The system user that executes the command needs to be configured with access to the
database. Please refer to the PostgreSQL documentation of the client environment or the client password
file for this requirement.
- The script needs to be able to reach one or multiple servers of the upgrade platform
both on TCP port 443 and to any random TCP port in the range between 32768 and 60999.
This can be in conflict with your restrictive firewall and may need an exception added
to the firewall configuration.
The script needs to be able to reach one or multiple servers of the upgrade platform
both on TCP port 443 and to any random TCP port in the range between 32768 and 60999.
This can be in conflict with your restrictive firewall and may need an exception added
to the firewall configuration.
The following command can be used to display the general help and the main commands:
An upgraded test database can also be requested via the Upgrade page .
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. Check out the Upgrade a customized database page for more information.
- For security reasons, only the person who submitted the upgrade request can download it.
For security reasons, only the person who submitted the upgrade request can download it.
- For storage reasons, the databaseâs copy is submitted without a filestore to the upgrade
server. Therefore, the upgraded database does not contain the production filestore.
For storage reasons, the databaseâs copy is submitted without a filestore to the upgrade
server. Therefore, the upgraded database does not contain the production filestore.
- Before restoring the upgraded database, its filestore must be merged with the production
filestore to be able to perform tests in the same conditions as it would be in the new
version.
Before restoring the upgraded database, its filestore must be merged with the production
filestore to be able to perform tests in the same conditions as it would be in the new
version.
- The upgraded database contains: A dump.sql file containing the upgraded database A filestore folder containing files extracted from in-database records into
attachments (if there are any) and new standard Odoo files from the targeted Odoo
version (e.g., new images, icons, payment providerâs logos, etc.).
This is the folder that should be merged with the production filestore
in order to get the full upgraded filestore.
The upgraded database contains:
- A dump.sql file containing the upgraded database
A dump.sql file containing the upgraded database
`dump.sql`
- A filestore folder containing files extracted from in-database records into
attachments (if there are any) and new standard Odoo files from the targeted Odoo
version (e.g., new images, icons, payment providerâs logos, etc.).
This is the folder that should be merged with the production filestore
in order to get the full upgraded filestore.
A filestore folder containing files extracted from in-database records into
attachments (if there are any) and new standard Odoo files from the targeted Odoo
version (e.g., new images, icons, payment providerâs logos, etc.).
This is the folder that should be merged with the production filestore
in order to get the full upgraded filestore.
`filestore`
You can request multiple test databases if you wish to test an upgrade more than once.
When an upgrade request is completed, an upgrade report is attached to the successful upgrade
email, and it becomes available in the Discuss app for users who are part of the âAdministration
/ Settingsâ group. This report provides important information about the changes introduced by
the new version.

## Testing the new version of the database

It is essential to test the upgraded test database to ensure that you are not stuck in your
day-to-day activities by a change in views, behavior, or an error message once the upgrade goes
live.
Test databases are neutralized, and some features are disabled to prevent them from impacting the
production database:
- Scheduled actions are disabled.
Scheduled actions are disabled.
- Outgoing mail servers are disabled by archiving the existing ones and adding a fake one.
Outgoing mail servers are disabled by archiving the existing ones and adding a fake one.
- Payment providers and delivery carriers are reset to the test environment.
Payment providers and delivery carriers are reset to the test environment.
- Bank synchronization is disabled. Should you want to test the synchronization, contact your
bank synchronization provider to get sandbox credentials.
Bank synchronization is disabled. Should you want to test the synchronization, contact your
bank synchronization provider to get sandbox credentials.
Testing as many of your business flows as possible is strongly recommended to ensure they are
working correctly and to get more familiar with the new version.
- Are there views that are deactivated in your test database but active in your production
database?
Are there views that are deactivated in your test database but active in your production
database?
- Are your usual views still displayed correctly?
Are your usual views still displayed correctly?
- Are your reports (invoice, sales order, etc.) correctly generated?
Are your reports (invoice, sales order, etc.) correctly generated?
- Are your website pages working correctly?
Are your website pages working correctly?
- Are you able to create and modify records? (sales orders, invoices, purchases, users, contacts,
companies, etc.)
Are you able to create and modify records? (sales orders, invoices, purchases, users, contacts,
companies, etc.)
- Are there any issues with your mail templates?
Are there any issues with your mail templates?
- Are there any issues with saved translations?
Are there any issues with saved translations?
- Are your search filters still present?
Are your search filters still present?
- Can you export your data?
Can you export your data?
- Checking a random product in your product catalog and comparing its test and production data to
verify everything is the same (product category, selling price, cost price, vendor, accounts,
routes, etc.).
Checking a random product in your product catalog and comparing its test and production data to
verify everything is the same (product category, selling price, cost price, vendor, accounts,
routes, etc.).
- Buying this product (Purchase app).
Buying this product (Purchase app).
- Confirming the reception of this product (Inventory app).
Confirming the reception of this product (Inventory app).
- Checking if the route to receive this product is the same in your production database
(Inventory app).
Checking if the route to receive this product is the same in your production database
(Inventory app).
- Selling this product (Sales app) to a random customer.
Selling this product (Sales app) to a random customer.
- Opening your customer database (Contacts app), selecting a customer (or company), and checking
its data.
Opening your customer database (Contacts app), selecting a customer (or company), and checking
its data.
- Shipping this product (Inventory app).
Shipping this product (Inventory app).
- Checking if the route to ship this product is the same as in your production database
(Inventory app).
Checking if the route to ship this product is the same as in your production database
(Inventory app).
- Validating a customer invoice (Invoicing or Accounting app).
Validating a customer invoice (Invoicing or Accounting app).
- Crediting the invoice (issuing a credit note) and checking if it behaves as in your production
database.
Crediting the invoice (issuing a credit note) and checking if it behaves as in your production
database.
- Checking your reportsâ results (Accounting app).
Checking your reportsâ results (Accounting app).
- Randomly checking your taxes, currencies, bank accounts, and fiscal year (Accounting app).
Randomly checking your taxes, currencies, bank accounts, and fiscal year (Accounting app).
- Making an online order (Website apps) from the product selection in your shop until the
checkout process and checking if everything behaves as in your production database.
Making an online order (Website apps) from the product selection in your shop until the
checkout process and checking if everything behaves as in your production database.
This list is not exhaustive. Extend the example to your other apps based on your use of Odoo.
If you face an issue while testing your upgraded test database, you can request the assistance of
Odoo by going to the Support page and selecting âAn issue related to my future upgrade (I am
testing an upgrade)â . In any case, it is essential to
report any problem encountered during the testing to fix it before upgrading your production
database.
You might encounter significant differences with standard views, features, fields, and models during
testing. Those changes cannot be reverted on a case-by-case basis. However, if a change introduced
by a new version breaks a customization, it is the responsibility of the maintainer of your custom
module to make it compatible with the new version of Odoo.
Do not forget to test:
- Integrations with external software (EDI, APIs, etc.)
Integrations with external software (EDI, APIs, etc.)
- Workflows between different apps (online sales with eCommerce, converting a lead all the way to
a sales order, delivery of products, etc.)
Workflows between different apps (online sales with eCommerce, converting a lead all the way to
a sales order, delivery of products, etc.)
- Data exports
- Automated actions
- Server actions in the action menu on form views, as well as by selecting multiple records on
list views
Server actions in the action menu on form views, as well as by selecting multiple records on
list views

## Upgrading the production database

Once the tests are completed and you are confident that the upgraded
database can be used as your main database without any issues, it is time to plan the go-live day.
Your production database will be unavailable during its upgrade. Therefore, we recommend planning
the upgrade at a time when the use of the database is minimal.
As the standard upgrade scripts and your database are constantly evolving, it is also recommended
to frequently request another upgraded test database to ensure that the upgrade process is still
successful, especially if it takes a long time to finish. Fully rehearsing the upgrade process the
day before upgrading the production database is also recommended.
Going into production without first testing may lead to:
- Users failing to adjust to the changes and new features
Users failing to adjust to the changes and new features
- Business interruptions (e.g., no longer having the possibility to validate an action)
Business interruptions (e.g., no longer having the possibility to validate an action)
- Poor customer experience (e.g., an eCommerce website that does not work correctly)
Poor customer experience (e.g., an eCommerce website that does not work correctly)
The process of upgrading a production database is similar to upgrading a test database, but with a
few exceptions.
The process is similar to obtaining an upgraded test database , except for the purpose option, which must be set to Production instead of Test .
Once the upgrade is requested, the database will be unavailable until the upgrade is
finished. Once the process is completed, it is impossible to revert to the previous
version.
The process is similar to obtaining an upgraded test database on
the Production branch.
The process is triggered as soon as a new commit is made on the branch. This
allows the upgrade process to be synchronized with the deployment of the custom modulesâ
upgraded source code.
If there are no custom modules, the upgrade process is triggered immediately.
The database is unavailable throughout the process. If anything goes wrong, the platform
automatically reverts the upgrade, as it would be for a regular update. In case of success,
a backup of the database before the upgrade is created.
The update of your custom modules must be successful to complete the entire upgrade process.
Make sure the status of your staging upgrade is successful before trying it in
production. More information on how to upgrade your custom modules can be found on Upgrade a customized database .
The command to upgrade a database to production is similar to the one of upgrading a test
database except for the argument test , which must be replaced by production :
`test`
`production`
An upgraded production database can also be requested via the Upgrade page .
Once the database is uploaded, any modification to your production database will not be
present on your upgraded database. This is why we recommend not using it during the upgrade
process.
When requesting an upgraded database for production purposes, the copy is submitted without
a filestore. Therefore, the upgraded database filestore must be merged with the production
filestore before deploying the new version.
In case of an issue with your production database, you can request the assistance of Odoo by going
to the Support page and selecting âAn issue related to my upgrade (production)â .

## Service-level agreement (SLA)

With Odoo Enterprise, upgrading a database to the most recent version of Odoo is free , including
any support required to rectify potential discrepancies in the upgraded database.
Information about the upgrade services included in the Enterprise Licence is available in the Odoo Enterprise Subscription Agreement . However, this section clarifies what
upgrade services you can expect.

### Upgrade services covered by the SLA

Databases hosted on Odooâs cloud platforms (Odoo Online and Odoo.sh) or self-hosted (On-Premise) can
benefit from upgrade services at all times for:
- the upgrade of all standard applications ;
the upgrade of all standard applications ;
- the upgrade of all customizations created with the Studio app , as long as Studio is still
installed and the respective subscription is still active; and
the upgrade of all customizations created with the Studio app , as long as Studio is still
installed and the respective subscription is still active; and
- the upgrade of all developments and customizations covered by a maintenance of customizations
subscription .
the upgrade of all developments and customizations covered by a maintenance of customizations
subscription .
Upgrade services are limited to the technical conversion and adaptation of a database (standard
modules and data) to make it compatible with the version targeted by the upgrade.

### Upgrade services not covered by the SLA

The following upgrade-related services are not included:
- the cleaning of pre-existing data and configurations while upgrading;
the cleaning of pre-existing data and configurations while upgrading;
- the upgrade of additional modules not covered by a maintenance contract that are created
in-house or by third parties, including Odoo partners; and
the upgrade of additional modules not covered by a maintenance contract that are created
in-house or by third parties, including Odoo partners; and
- training on using the upgraded versionâs features and workflows.
training on using the upgraded versionâs features and workflows.
- Odoo.sh documentation
Odoo.sh documentation
- Supported Odoo versions
Supported Odoo versions

Upgrading in a nutshell
Obtaining an upgraded test database
Testing the new version of the database
Upgrading the production database
Service-level agreement (SLA)
Upgrade services covered by the SLA
Upgrade services not covered by the SLA


Accounting and Invoicing

# Accounting and Invoicing

Odoo Invoicing is a standalone app designed to create invoices, send them to customers, and manage
payments. It also handles flows involving vendor bills. On the other hand, the Accounting app is a
comprehensive accounting solution that allows the same actions and includes additional features such
as standard financial reports, bank reconciliation, budgets, asset management, and more.
Odoo Tutorials: Accounting

#### Get started

Basic concepts of accounting and initial setup of your accounting

#### Taxes

Taxes, fiscal positions, and integrations

#### Customer invoices

Customer invoices, payment terms, and electronic invoicing

#### Vendor bills

Vendor bills, assets, and invoice digitization (OCR)

#### Payments

Invoices and bills payments (online, checks, batches) and follow-up on invoices

#### Bank and cash accounts

Bank synchronization, reconciliation, and cash registers

#### Reporting

Reporting, declarations, and analytic accounting

## Double-entry bookkeeping

Odoo automatically creates all the underlying journal entries for all accounting transactions (e.g.,
customer invoices, vendor bills, point-of-sales orders, expenses, inventory valuations, etc.).
Odoo uses the double-entry bookkeeping system, whereby every entry needs a corresponding and
opposite counterpart in a different account, with one account debited and the other credited.
It ensures that all transactions are recorded accurately and consistently and that the accounts
always balance.
Accounting Cheat Sheet

## Accrual and cash basis

Both accrual and cash basis accounting are supported in Odoo. This allows reporting income and
expense either when the transaction occurs (accrual basis) or when the payment is made or received
(cash basis).

## Multi-company

Multiple companies can be managed within the same
database. Each company has its own chart of accounts , but accounts can be shared , which is useful when viewing consolidation reports. Users can view
records and reports from multiple companies simultaneously but can only work on a single companyâs
accounting at a time.
- Multi-company
- Inter-company transactions
Inter-company transactions

## Multi-currency environment

A multi-currency environment with an automated
exchange rate to ease international transactions is available in Odoo. Every transaction is recorded
in the companyâs default currency; for transactions occurring in another currency, Odoo stores both
the value in the companyâs currency and the transactionsâ currency value. Odoo generates currency
gains and losses after reconciling the journal items.
Manage a bank in a foreign currency

## Branches

Parent companies and their branches can be managed within a single database, operating under shared
accounting and reporting rules, including the following:
- The parent companyâs chart of accounts , main currency , and taxes apply to all branches.
The parent companyâs chart of accounts , main currency , and taxes apply to all branches.
- Branches can manage their own dedicated journals and related records.
Branches can manage their own dedicated journals and related records.
- The parent company manages a common fiscal period , so its lock and closing dates apply across all branches. However,
branches may set earlier lock dates if needed.
The parent company manages a common fiscal period , so its lock and closing dates apply across all branches. However,
branches may set earlier lock dates if needed.
- The parent company can access all reports , invoices , bills , etc., from its branches,
while each branch can only view its own data.
The parent company can access all reports , invoices , bills , etc., from its branches,
while each branch can only view its own data.
The Fiscal localization package is set on the parent company.
Adding a branch to a company enables multi-company functions .
For more information, refer to Odooâs pricing page or
contact your Odoo account manager.

### Reporting

The parent company consolidates accounting operations from all branches, providing a centralized
view of financial reports , such as profit and loss or balance sheets.

### VAT

Each company and branch must be configured with its own legal information, including a VAT number
when applicable. Depending on the structure, branches may share the parent companyâs VAT number or
have their own, resulting in a common or separate VAT return .
This flexible setup allows users to generate individual reports and tax returns for each entity if
needed.

## International standards

Odoo Accounting supports over 100 countries and provides standardized features and mechanisms
applicable across all regions. Country-specific modules are included to comply with local accounting
regulations. Fiscal localizations handle regional requirements, such
as charts of accounts, taxes, or any other legal obligations.

## Accounts receivable and payable

By default, one account is designated for accounts receivable entries and another for accounts
payable entries. As transactions are linked to contacts , it is possible to run a report per
customer, vendor, or supplier.
The Partner Ledger report displays the balance of customers and suppliers. To access it, go to Accounting â£ Reporting â£ Partner Ledger .

## Reporting

The following financial reports are available and updated in
real-time:
Unrealized currency gains/losses
Depreciation schedule
Create and customize reports with Odooâs report engine.

### Tax return

In the Tax return , Odoo computes all accounting transactions for the
specific tax period and uses these totals to calculate the tax obligation.
Depending on the countryâs localization, an XML version of the tax report can be generated to be
uploaded to the VAT platform of the relevant taxation authority.

## Bank synchronization

The bank synchronization system directly connects with banking institutions to automatically
import all transactions into the database. It gives an overview of the cash flow without logging
into an online banking system or waiting for paper bank statements.

## Inventory valuation

Both periodic (manual) and perpetual (automated) inventory valuations are supported in Odoo. The
available methods are Standard Price, Average Cost (AVCO), and First In First Out (FIFO).
Automatic inventory valuation

## Retained earnings

Retained earnings are the portion of income retained by a business. Odoo calculates current year
earnings in real-time, so no year-end journal or rollover is required. The profit
and loss balance is automatically reported on the balance sheet report.
Accounting Cheat Sheet

## Fiduciaries

The Accounting Firms mode can be activated by going to Accounting â£
Configuration â£ Settings . When enabled:
- The documentâs sequence becomes editable on all documents;
The documentâs sequence becomes editable on all documents;
- The Total (tax incl.) field appears to speed up and control the encoding by automating
line creation with the right account and tax;
The Total (tax incl.) field appears to speed up and control the encoding by automating
line creation with the right account and tax;
- Invoice Date and Bill Date are pre-filled when encoding a transaction.
Invoice Date and Bill Date are pre-filled when encoding a transaction.
- A Quick encoding option is available for customer invoices and vendor bills.
A Quick encoding option is available for customer invoices and vendor bills.

## Share invoices with external accountants

Odoo offers multiple ways to share invoices and bills with an external accountant, including
the abilities to grant access rights to your database
and to download ZIP files containing all invoices and all bills.

### Accountant access rights

To grant access to the companyâs accountant, add the accountant as a new user and configure the appropriate access rights in the Accounting section to enable access to the
companyâs financial data:
- Accounting : Select Accountant .
Accounting : Select Accountant .
- Bank : Allow bank account validation.
Bank : Allow bank account validation.
Adding an accountant as a new user in Odoo Online is
free if the accountant has an Odoo account registered with the same email address as the one
listed for the company user. However, Odoo.sh and Odoo On-premise may involve extra charges for each
additional user. For more pricing information, see Odooâs pricing .
For a multi-company environment, set the appropriate access .

### ZIP file export

Groups of invoices and bills can be exported in ZIP files. To export invoices or bills in ZIP files,
follow these steps:
- Navigate to Accounting â£ Customers â£ Invoices or Accounting
â£ Vendors â£ Bills .
Navigate to Accounting â£ Customers â£ Invoices or Accounting
â£ Vendors â£ Bills .
- Select the invoices or bills to be included in the ZIP file.
Select the invoices or bills to be included in the ZIP file.
- Click Actions menu, and click Export ZIP .
Click Actions menu, and click Export ZIP .
Once the ZIP file is exported, it can be sent to an external accountant to provide them with all the
information of your invoices and bills.


Bank and cash accounts

# Bank and cash accounts

You can manage as many bank or cash accounts as needed on your database. Configuring them correctly
allows you to have all your banking data up-to-date and ready for reconciliation with your journal entries.
In Odoo Accounting, each bank account has a dedicated journal set to post all entries in a dedicated
account. Both the journal and the account are automatically created and configured whenever you add
a bank account.
Cash journals and accounts must be configured manually.
Bank journals are displayed by default on the Accounting Dashboard in the form of cards
which include action buttons.

## Manage bank and cash accounts

### Connect a bank for automatic synchronization

To connect your bank account to your database, go to the Accounting Dashboard and on the
kanban card of an unconnected bank, click Search over 26000 banks . Select your bank from
the list, click on Connect , and follow the instructions.

### Create a bank account

If your banking institution is not available in Odoo, or if you donât want to connect your bank
account to your database, you can configure your bank account manually.
To manually add a bank account, go to the Accounting Dashboard and on the kanban card of
an unconnected bank, click Search over 26000 banks . Then, click on Record
transactions manually (at the bottom right), fill out the bank information, and click Create .
- Odoo automatically detects the bank account type (e.g., IBAN) and enables some features
accordingly.
Odoo automatically detects the bank account type (e.g., IBAN) and enables some features
accordingly.
- A default bank journal is available and can be used to
configure your bank account by going to Accounting â£ Configuration â£
Accounting: Journals â£ Bank . Open it and edit the different fields to match your bank
account information.
A default bank journal is available and can be used to
configure your bank account by going to Accounting â£ Configuration â£
Accounting: Journals â£ Bank . Open it and edit the different fields to match your bank
account information.


Bank synchronization

# Bank synchronization

Odoo synchronizes directly with your bank institution to automatically import all bank transactions
into the database. It supports over 26,000 financial institutions worldwide and relies on multiple third-party providers to connect with
banks.
To use this service, a valid Odoo Enterprise subscription is required.
To check if your bank is compatible with Odoo, go to Odoo Accounting Features , and click See list of
supported institutions in the Bank & Cash section.

## Configuration

### First synchronization

To synchronize the database with a bank, go to the Accounting Dashboard, click the (vertical ellipsis) icon of the Bank journal, and Connect bank . In the Search for an institution window, select the relevant
bank and click Connect .
- Alternatively, go to Accounting â£ Configuration â£ Add a Bank Account or
click Search over 26000 banks in the Accounting dashboard.
Alternatively, go to Accounting â£ Configuration â£ Add a Bank Account or
click Search over 26000 banks in the Accounting dashboard.
- Depending on your bank and country, you can select the Type of account and/or
choose another third-party provider to connect with the bank if needed before clicking Connect .
Depending on your bank and country, you can select the Type of account and/or
choose another third-party provider to connect with the bank if needed before clicking Connect .
- If your bank is not listed in the Search for an institution window, scroll down the
list and click Add new bank to create a bank account manually. Fill
in the Account Number , Bank , and SWIFT Code and click Connect . A bank journal is then created and named using the account number. Note
that in this case, the bank is not synchronized.
If your bank is not listed in the Search for an institution window, scroll down the
list and click Add new bank to create a bank account manually. Fill
in the Account Number , Bank , and SWIFT Code and click Connect . A bank journal is then created and named using the account number. Note
that in this case, the bank is not synchronized.
- If issues occur during the first synchronization, check that no firewall or proxy is blocking
the address https://production.odoofin.com/ . Make sure your web browser allows pop-ups and that
any ad-blocker is disabled.
If issues occur during the first synchronization, check that no firewall or proxy is blocking
the address https://production.odoofin.com/ . Make sure your web browser allows pop-ups and that
any ad-blocker is disabled.
When setting up bank synchronization, accounting transactions are automatically recorded from the
date of the last transaction +1 day (e.g., if the last transaction date is 31/12/2025, the
recording starts on 01/01/2026). If the journal contains no transactions, all available past
transactions are retrieved. To limit the retrieval period, go to Accounting â£
Accounting â£ Lock Dates , and set a date in the Lock Everything field.
- Some banks are in a Beta status, meaning theyâre not yet fully supported by
third-party providers. This may lead to bugs or other issues. Although they can be used, Odoo
does not provide technical support in this case.
Some banks are in a Beta status, meaning theyâre not yet fully supported by
third-party providers. This may lead to bugs or other issues. Although they can be used, Odoo
does not provide technical support in this case.
- The third-party provider may
request more information to connect with a bank. This information is not stored on Odooâs
servers.
The third-party provider may
request more information to connect with a bank. This information is not stored on Odooâs
servers.
- To view all past synchronizations, activate the developer mode and go to Accounting â£ Configuration â£ Online Synchronization .
To view all past synchronizations, activate the developer mode and go to Accounting â£ Configuration â£ Online Synchronization .

### Manual synchronization

After the first synchronization , bank
journals are synchronized by default every twelve hours. To manually trigger synchronization, go to
the Accounting dashboard and click Fetch Transactions on the relevant bank journal.
Alternatively, activate the developer mode , go to Accounting â£ Configuration â£ Online Synchronization , select the relevant
bank, and click Fetch transactions .
- Some banks do not support automatic transaction fetching. For these institutions, an error
message appears during the automatic account synchronization, prompting the user to disable the
automatic synchronization. This message is also logged in the chatter of the online
synchronization. In such cases, disable the Automatic synchronization option in the
corresponding bankâs Online Synchronization and make sure to perform manual
synchronizations by clicking Fetch Transactions on the relevant bank journal.
Some banks do not support automatic transaction fetching. For these institutions, an error
message appears during the automatic account synchronization, prompting the user to disable the
automatic synchronization. This message is also logged in the chatter of the online
synchronization. In such cases, disable the Automatic synchronization option in the
corresponding bankâs Online Synchronization and make sure to perform manual
synchronizations by clicking Fetch Transactions on the relevant bank journal.
- For some bank institutions, transactions can only be fetched up to three months in the past. If
older transactions are needed, they can be imported .
For some bank institutions, transactions can only be fetched up to three months in the past. If
older transactions are needed, they can be imported .

### Update synchronization credentials

To update bank credentials, activate the developer mode , and go to Accounting â£ Configuration â£ Online Synchronization . Open the connection that
needs to be updated, click Update Credentials , and follow the steps.
- The steps may vary depending on the third-party provider, as each provider follows its own
process.
The steps may vary depending on the third-party provider, as each provider follows its own
process.
- When updating bank credentials, make sure all accounts are selected for synchronization,
including those from other banking institutions if applicable.
When updating bank credentials, make sure all accounts are selected for synchronization,
including those from other banking institutions if applicable.

### Third-party providers

Odoo relies on third-party providers to securely connect to your bank accounts and automatically
import transactions and financial data into the database. The following providers are used:
- Plaid (supported in the United States of America and Canada )
Plaid (supported in the United States of America and Canada )
- Yodlee (supported in Europe)
Yodlee (supported in Europe)
- Salt Edge (supported worldwide )
Salt Edge (supported worldwide )
- Ponto (supported in Europe)
Ponto (supported in Europe)
- Enable Banking (supported in Scandinavian countries )
Enable Banking (supported in Scandinavian countries )
When connecting a bank to Odoo :
- Depending on your bank and country, change the default third-party provider when selecting the
bank, if necessary.
Depending on your bank and country, change the default third-party provider when selecting the
bank, if necessary.
- Make sure to check the consent checkbox to allow information to be shared with Odoo.
Make sure to check the consent checkbox to allow information to be shared with Odoo.
- Select all accounts that need access and synchronization, including those from other banking
institutions.
Select all accounts that need access and synchronization, including those from other banking
institutions.
- Bank synchronization troubleshooting
Bank synchronization troubleshooting
- Salt Edge bank synchronization troubleshooting
Salt Edge bank synchronization troubleshooting
- Ponto bank synchronization troubleshooting
Ponto bank synchronization troubleshooting

## Duplicate transactions

When importing transactions, some may appear duplicated due to the same online transaction
identifier or the same currency, amount, account number, and date.
To search for duplicate transactions, access the bank reconciliation view , then follow these steps:
- Click the (gear) icon, and select Find Duplicate
Transactions .
Click the (gear) icon, and select Find Duplicate
Transactions .
- All duplicate transactions from the starting date are displayed in the Transactions tab. Update the Starting Date if needed.
All duplicate transactions from the starting date are displayed in the Transactions tab. Update the Starting Date if needed.
- To delete a transaction, select it, click Delete Selected , and confirm.
To delete a transaction, select it, click Delete Selected , and confirm.
Journal entries can only be deleted if they have not been reconciled.

## Missing transactions

Missing or pending transactions are entries that the bank has not yet validated.
To find missing and pending transactions, access the bank reconciliation view , click the (gear) icon, and select Find Missing Transactions .
To import a posted missing transaction, select it and click Import Transactions .
- Make sure the connection with the bank is active to find missing transactions.
Make sure the connection with the bank is active to find missing transactions.
- Pending transactions cannot be imported.
Pending transactions cannot be imported.

## Troubleshooting

Bank synchronization troubleshooting - Ponto

### Synchronization errors or disconnections

To report a connection error to Odoo support , activate the developer mode , go to Accounting â£ Configuration â£
Online Synchronization , select the failed connection, and copy the error description and the
reference.
If the connection with the proxy is lost and reconnection using the Reconnect option
isnât successful, contact support directly. Provide the client ID or
the error reference from the chatter.

### Why is the synchronization not working in real-time?

Synchronization is not designed to work in real time, as third-party providers synchronize accounts
at different intervals. To manually trigger synchronization and retrieve bank transactions, go to
the Accounting Dashboard , and click Fetch Transactions .
Alternatively, to synchronize and fetch transactions, activate the developer mode and go to Accounting â£ Configuration â£ Online
Synchronization .
Some providers restrict refreshes to once per day. If transactions have already been fetched,
clicking Fetch Transactions again may not retrieve the latest data.
Transactions may appear on a bank account, but cannot be fetched if they have a Pending status; only transactions with a Posted status are retrieved.

### Why do my transactions only synchronize when I refresh manually?

Some banks implement additional security measures and require extra steps, such as an SMS or email
authentication code, or another type of MFA . As a result,
the third-party provider cannot retrieve transactions until the security code is provided.

### Why are no transactions visible?

There are a few possible reasons for this issue:
- No bank accounts were synchronized during the first synchronization .
No bank accounts were synchronized during the first synchronization .
- There may be no new transactions available to fetch.
There may be no new transactions available to fetch.
If the bank account is correctly linked to a journal, but posted transactions still arenât visible
in the database, contact support .

### Why are no accounts shown after synchronization?

During the synchronization process, a bank institution was selected, but no bank accounts from this
institution were authorized during the first synchronization .

### Saltedge troubleshooting

#### Why is there an error when deleting a synchronization in Odoo?

Odoo canât permanently delete the connection established with the banking institution. However,
it revokes consent, which prevents Odoo from accessing the account. The error message indicates that
the consent has been revoked, but the record could not be deleted as it remains in Salt Edge.
To delete the connection, connect to the Salt Edge account and manually remove the synchronization. Once this is done, the record can be deleted in Odoo.

#### I have an error saying that this account has already been synchronized

The bank account has already been synchronized with Salt Edge. Access the Salt Edge dashboard to check if a connection with the same credentials exists.
There are two options:
- If a connection with the same credentials exists in Salt Edge but has not been synchronized with
Odoo, delete the existing connection and create a new one from the Odoo database.
If a connection with the same credentials exists in Salt Edge but has not been synchronized with
Odoo, delete the existing connection and create a new one from the Odoo database.
- If a connection with the same credentials exists in Salt Edge and has already been synchronized
with Odoo, update the synchronization credentials to reactivate the connection.
If a connection with the same credentials exists in Salt Edge and has already been synchronized
with Odoo, update the synchronization credentials to reactivate the connection.


Ponto

# Ponto

Ponto is a paid third-party service that enables companies and
professionals to connect multiple bank accounts to a single platform. It provides a unified view of
all transactions within a single interface. When integrated with Odoo, it automatically synchronizes
bank transactions directly into its database.
Using Ponto is subject to applicable fees.
- Bank synchronization
- Financial institutions connected to Ponto
Financial institutions connected to Ponto

## Configuration

To connect a bank with Odoo using Ponto as the third-party provider, follow these steps:
- Set up your email address: Click the profile icon in the upper-right corner, select My profile , and fill in the Email field.
Set up your email address: Click the profile icon in the upper-right corner, select My profile , and fill in the Email field.
- Create a Ponto account if
needed.
Create a Ponto account if
needed.
- Connect Odoo to your bank .
Connect Odoo to your bank .

### Ponto account creation

- Access the Ponto website .
Access the Ponto website .
- Click Login , then Not a user yet? and follow the instructions to create a
new account. Note Use the same email address as the one used for your Odoo profile .
Click Login , then Not a user yet? and follow the instructions to create a
new account.
Use the same email address as the one used for your Odoo profile .
- After logging in, create an Organization and provide the necessary contact details.
After logging in, create an Organization and provide the necessary contact details.
- Give consent to Ponto to access the bank account data.
Give consent to Ponto to access the bank account data.
- Click Accounts , Add account , then Choose your bank , enter the
bank account reference, and follow the on-screen steps to complete the linking process.
Click Accounts , Add account , then Choose your bank , enter the
bank account reference, and follow the on-screen steps to complete the linking process.
- Add all relevant bank accounts that need to be synchronized with Odoo, then proceed to the next
steps.
Add all relevant bank accounts that need to be synchronized with Odoo, then proceed to the next
steps.

### Connection with Odoo

When connecting a bank to Odoo using
Ponto as the third-party provider, follow these steps:
- When connecting to the desired bank, make sure Ponto is selected as the third-party Provider .
When connecting to the desired bank, make sure Ponto is selected as the third-party Provider .
- Select the account(s) to grant Ponto access to account balances and transactions, then confirm
the selection.
Select the account(s) to grant Ponto access to account balances and transactions, then confirm
the selection.
- Authorize Odoo to request account information and initiate payment orders.
Authorize Odoo to request account information and initiate payment orders.
- Select the specific bank account to connect.
Select the specific bank account to connect.
- Make sure to check the consent checkbox to allow information to be shared with Odoo.
Make sure to check the consent checkbox to allow information to be shared with Odoo.
- Select all accounts that need access and synchronization, including those from other banking
institutions.
Select all accounts that need access and synchronization, including those from other banking
institutions.
Update synchronization credentials

## Vendor payments with Ponto

Before managing vendor payments with Ponto, make sure the following steps are completed:
- SEPA Credit Transfer is activated (SCT) .
SEPA Credit Transfer is activated (SCT) .
- The SEPA Credit Transfer payment method has been added to the bank journal .
The SEPA Credit Transfer payment method has been added to the bank journal .
- The vendorâs bank account has been marked as trusted .
The vendorâs bank account has been marked as trusted .
- The Account Online Payment ( account_online_payment ) module is installed .
The Account Online Payment ( account_online_payment ) module is installed .
`account_online_payment`
To register a vendor payment using Ponto, follow these steps:
- Go to Accounting â£ Vendors â£ Payments and create the payment. Fill in the
relevant bank Journal field, select SEPA Credit Transfer as the Payment Method , and enter the Vendor Bank Account . Then click Confirm .
Go to Accounting â£ Vendors â£ Payments and create the payment. Fill in the
relevant bank Journal field, select SEPA Credit Transfer as the Payment Method , and enter the Vendor Bank Account . Then click Confirm .
- Go to Accounting â£ Vendors â£ Batch Payments and create a batch . Select the same bank Journal and Payment
Method , and click Add a line to select the payment created in the previous step.
Go to Accounting â£ Vendors â£ Batch Payments and create a batch . Select the same bank Journal and Payment
Method , and click Add a line to select the payment created in the previous step.
- Click Initiate Payment to connect to Ponto and follow the steps to sign the payment.
Click Initiate Payment to connect to Ponto and follow the steps to sign the payment.

## Troubleshooting

Bank synchronization troubleshooting

### Why has the authorization expired?

Every six months (180 days), the connection between a bank account and Ponto must be re-authorized
via the Ponto website . Failure to do so will result in synchronization
stopping for those accounts.

Configuration
Ponto account creation
Connection with Odoo
Vendor payments with Ponto
Troubleshooting
Why has the authorization expired?


# Manage a bank account in a foreign currency

In Odoo, every transaction is recorded in the default currency of the company, and reports are all
based on that default currency. When you have a bank account in a foreign currency, for every
transaction, Odoo stores two values:
- The debit/credit in the currency of the company ;
The debit/credit in the currency of the company ;
- The debit/credit in the currency of the bank account .
The debit/credit in the currency of the bank account .
Currency rates are updated automatically using the web services of a banking institution. By
default, Odoo uses the European Central Bankâs web services but other options are available.

## Configuration

### Activate multi-currencies

To work with multiple currencies, go to Accounting â£ Configuration â£ Settings
â£ Currencies and tick Multi-Currencies . Under Post Exchange difference
entries in: , provide a Journal , a Gain Account , a Loss Account ,
and then click on Save .

### Configure currencies

Once Odoo is configured to support multiple currencies, they are all created by default, but not
necessarily active. To activate the new currencies, click on Activate Other Currencies under the Multi-Currencies setting or go to Accounting â£ Configuration
â£ Accounting: Currencies .
When the currencies are activated, you can choose to automate the currency rate update, or leave
it on manual . To configure the rate update, go back to Accounting â£
Configuration â£ Settings â£ Currencies , check Automatic Currency Rates , set Interval to your desired frequency, and then click on Save . You also have
the option to choose the Service you wish to obtain currency rates from.
Click on the Update now button ( ð ) besides the Next Run field to update
the currency rates manually.

### Create a new bank account

In the accounting application, go to Accounting â£ Configuration â£ Journals and
create a new one. Enter a Journal Name and set the Type to Bank . In the Journal Entries tab, enter a short code , a currency , and then finally click on
the Bank Account field to create a new account. In the pop-up window of the account
creation, enter a name, a code (ex.: 550007), set its type to Bank and Cash , set a currency type,
and save. When you are back on the journal , click on the Account Number field, and
in the pop-up window, fill out the Account Number , Bank of your account, and
save.
`Bank`
`BankandCash`
Upon creation of the journal, Odoo automatically links the bank account to the journal. It can be
found under Accounting â£ Configuration â£ Accounting: Chart of Accounts .

## Vendor bill in a foreign currency

To pay a bill in a foreign currency, simply select the currency next to the Journal field and register the payment. Odoo automatically creates and posts the foreign exchange gain or
loss as a new journal entry.
Note that you can pay a foreign bill with another currency. In that case, Odoo automatically
converts between the two currencies.

## Unrealized Currency Gains/Losses Report

This report gives an overview of all unrealized amounts in a foreign currency on your balance sheet,
and allows you to adjust an entry or manually set an exchange rate. To access this report, go to Reporting â£ Management: Unrealized Currency Gains/Losses . From here, you have
access to all open entries in your balance sheet .
If you wish to use a different currency rate than the one set in Accounting â£
Configuration â£ Settings â£ Currencies , click the Exchange Rates button and change
the rate of the foreign currencies in the report.
When manually changing exchange rates , a yellow banner appears allowing you to reset back to
Odooâs rate. To do so, simply click on Reset to Odooâs Rate .
In order to update your balance sheet with the amount of the adjustment column,
click on the Adjustment Entry button. In the pop-up window, select a Journal , Expense Account and Income Account to calculate and
process the unrealized gains and losses .
You can set the date of the report in the Date field. Odoo automatically reverses the
booking entry to the date set in Reversal Date .
Once posted, the adjustment column should indicate 0.00 , meaning all unrealized
gains/losses have been adjusted.
`0.00`

Configuration
Activate multi-currencies
Configure currencies
Create a new bank account
Vendor bill in a foreign currency
Unrealized Currency Gains/Losses Report


Internal transfers

# Internal transfers

Internal money transfers can be handled in Odoo. At least two bank or cash accounts are needed to
make internal transfers.
How to add an additional bank account

## Configuration

An internal transfer account is automatically created on your database based on your companyâs localization and depending on your countryâs legislation. To
modify the default Internal Transfer account, go to Accounting â£
Configuration â£ Settings and scroll down to the Default Accounts section.

## Register an internal transfer from one bank to another

When money is transferred from one bank or cash account to another, that amount appears as two
transactions on the corresponding journals, whether the transactions are created manually, via
import, or via bank synchronization . When reconciling the transaction,
select the Internal Transfers reconciliation model button. This reconciliation model button writes the transaction off to the Internal
Transfer account.
Remember to reconcile the transaction for both the outgoing transaction on the journal that sends
the payment and the incoming transaction on the journal that receives the payment.
Take, for example, a transfer of $1000 from Bank A to Bank B:
- Bank journal (Bank A) Account Debit Credit Bank A account $1,000 Internal transfer account $1,000
Bank journal (Bank A)
Internal transfer account
- Bank journal (Bank B) Account Debit Credit Bank B account $1,000 Internal transfer account $1,000
Bank journal (Bank B)
Internal transfer account
- Bank reconciliation
- Reconciliation models
Reconciliation models


Loans management

# Loans management

Odooâs loan management gives a comprehensive list of all loans undertaken by your company in order
to maintain a holistic and forecasted view of upcoming due dates (e.g., cash forecast). Set up
amortization schedulesâor import themâand let Odoo automatically handle monthly interest and
principal adjustments so that your financial reports are always accurate with minimal effort.

## Create a new loan

Create a new loan by going to Accounting â£ Accounting â£ Loans . When creating a
new loan, there are three options for how to create amortization schedules:
- importing it from a supported file;
importing it from a supported file;
- calculating it from multiple input values (e.g., the Amount Borrowed , the Duration , etc.) using the Compute button;
calculating it from multiple input values (e.g., the Amount Borrowed , the Duration , etc.) using the Compute button;
- manually filling in the lines of the schedule.
manually filling in the lines of the schedule.
In each case, three different fields are required for each line of the amortization schedule: the Date , the Principal , and the Interest .
The Amount Borrowed , Interest , and Duration fields will be red
if the sum of the lines does not match the total of the amortization schedule lines.

## Loan entries mechanism

When the amount borrowed is credited to a bank account, it should be transferred to a long-term
account (defined in the Loan Settings tab). Then, upon the validation of the loan, Odoo
creates the necessary journal entries so that there is always a holistic and forecasted view of
upcoming due dates. The entire process is completely automated with a long-term and short-term
principal reclassification mechanism.
For each line of the amortization schedule, Odoo creates the following entries:
- debits the principal amount to the long-term account;
debits the principal amount to the long-term account;
- debits the interest amount to the expense account;
debits the interest amount to the expense account;
- credits the payment amount to the short-term account: this is the amount that will be
withdrawn by the bank.
credits the payment amount to the short-term account: this is the amount that will be
withdrawn by the bank.
- debits the sum of the principal amounts of the next 12 months to the long-term account;
debits the sum of the principal amounts of the next 12 months to the long-term account;
- credits the sum of the principal amounts of the next 12 months to the short-term account.
credits the sum of the principal amounts of the next 12 months to the short-term account.
A reversed entry of the reclassification entry on the next day that simply reverses the previous
one.
With this mechanism, month after month, the short-term account is always up to date with the
current short-term due amounts.

## Closing a loan

By default, a loan will be closed whenever its last payment entry is posted. However, it can also
be manually closed (e.g., because it is being paid off early) by clicking on the Close button. A wizard will appear asking from which date the loan should be closed. All draft entries
after this date will be deleted too.
A loan can also be cancelled. In that case, all entries will be deleted even if they were already
posted.

## Loans Analysis Report

By going to Accounting â£ Reporting â£ Loans Analysis , you can access a
report with a pivot view of your ongoing loans. By default, the report shows the principal,
interest, and total payment for each year for the loan duration.

Create a new loan
Loan entries mechanism
Closing a loan
Loans Analysis Report


Bank reconciliation

# Bank reconciliation

Bank reconciliation is the process of matching your bank transactions with
your business records, such as customer invoices , vendor bills , and payments . Not only is this compulsory for most
businesses, but it also offers several benefits, such as reduced risk of errors in financial
reports, detection of fraudulent activities, and improved cash flow management.
Thanks to the bank reconciliation models , Odoo pre-selects the
matching entries automatically.
- Odoo Tutorials: Bank reconciliation
Odoo Tutorials: Bank reconciliation
- Bank synchronization
- Transactions

## Bank reconciliation view

To access a bank journalâs reconciliation view , go to your Accounting Dashboard and
either:
- click the journal name (e.g., Bank ) to display all transactions, including those
previously reconciled or
click the journal name (e.g., Bank ) to display all transactions, including those
previously reconciled or
- click the Reconcile items button to display all transactions Odoo pre-selected for
reconciliation. You can remove the Not Matched filter from the search bar to include
previously reconciled transactions.
click the Reconcile items button to display all transactions Odoo pre-selected for
reconciliation. You can remove the Not Matched filter from the search bar to include
previously reconciled transactions.
The bank reconciliation view is structured into three distinct sections: transactions, counterpart
entries, and resulting entry.
The transactions section on the left shows all bank transactions, with the newest displayed
first. Click a transaction to select it.
- Duplicate transactions
Duplicate transactions
- Missing transactions
The counterpart entries section on the bottom right displays the options to match the selected
bank transaction. Multiple tabs are available, including Match existing entries , Batch payments , Manual operations , and Discuss , which contains the chatter for
the selected bank transaction.
The resulting entry section on the top right displays the selected bank transaction matched with
the counterpart entries and includes any remaining debits or credits. In this section, you can
validate the reconciliation or mark it as To Check . Any reconciliation model
buttons are also available in the resulting entry section.

## Reconcile transactions

Transactions can be matched automatically with the use of reconciliation models , or they can be matched with existing entries , batch payments , manual operations , and reconciliation model buttons .
- Select a transaction among unmatched bank transactions.
Select a transaction among unmatched bank transactions.
- Define the counterpart. There are several options for defining a counterpart, including matching existing entries , manual operations , batch payments , and reconciliation model buttons .
Define the counterpart. There are several options for defining a counterpart, including matching existing entries , manual operations , batch payments , and reconciliation model buttons .
- If the resulting entry is not fully balanced, balance it by adding another existing counterpart
entry or writing it off with a manual operation .
If the resulting entry is not fully balanced, balance it by adding another existing counterpart
entry or writing it off with a manual operation .
- Click the Validate button to confirm the reconciliation and move to the next
transaction.
Click the Validate button to confirm the reconciliation and move to the next
transaction.
If you are not sure how to reconcile a particular transaction and would like to deal with it
later, use the To Check button instead. All transactions marked as To
Check can be displayed using the To Check filter.
Bank transactions are posted on the journalâs suspense account until reconciliation. At this
point, reconciliation modifies the transaction journal entry by replacing the bank suspense
account with the corresponding receivable, payable, or outstanding account.

### Match existing entries

This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
models. The entry order is based on reconciliation models , with
suggested entries appearing first.
The search bar within the Match Existing Entries tab allows you to search for
specific journal items.

### Batch payments

Batch payments allow you to group different payments to ease
reconciliation. Use the Batch Payments tab to find batch payments for customers and
vendors. Similarly to the Match Existing Entries tab, the Batch Payments tab
has a search bar that allows you to search for specific batch payments.

### Manual operations

If there is not an existing entry to match the selected transaction, you may instead wish to
reconcile the transaction manually by choosing the correct account and amount. Then, complete any
of the relevant optional fields.
You can use the fully paid option to reconcile a payment, even in cases where only a
partial payment is received. A new line appears in the resulting entry section to reflect the
open balance registered on the Account Receivable by default. You can choose another
account by clicking on the new line in the resulting entry section and selecting the Account to record the open balance.
Lines are silently reconciled unless a write-off entry is required, which launches a
reconciliation wizard.

### Reconciliation model buttons

Use a reconciliation model button for manual operations that are
frequently used. These custom buttons allow you to quickly reconcile bank transactions manually and
can also be used in combination with existing entries.

Bank reconciliation view
Reconcile transactions
Match existing entries
Batch payments
Manual operations
Reconciliation model buttons


Reconciliation models

# Reconciliation models

Reconciliation models are used to automate the bank reconciliation process,
which is especially handy when dealing with recurring entries like bank fees. Reconciliation models
can also be helpful in handling cash discounts .
Each model is created based on a model type and bank transaction
conditions .
- Bank synchronization
- Odoo Tutorials: Reconciliation models
Odoo Tutorials: Reconciliation models

## Reconciliation model types

The reconciliation models are available by going to Accounting â£ Configuration
â£ Banks: Reconciliation Models . For each reconciliation model, a Type must be set.
Three types of models exist:
- Button to generate counterpart entry : a button is created in the resulting entry
section of the bank reconciliation view. If clicked, this button generates a counterpart entry to
reconcile with the active transaction based on the rules set in the model. The rules specified in
the model determine the counterpart entryâs account(s), amount(s), label(s), and analytic
distribution;
Button to generate counterpart entry : a button is created in the resulting entry
section of the bank reconciliation view. If clicked, this button generates a counterpart entry to
reconcile with the active transaction based on the rules set in the model. The rules specified in
the model determine the counterpart entryâs account(s), amount(s), label(s), and analytic
distribution;
- Rule to suggest counterpart entry : used for recurring transactions to match the
transaction to a new entry based on conditions that must match the information on the transaction;
Rule to suggest counterpart entry : used for recurring transactions to match the
transaction to a new entry based on conditions that must match the information on the transaction;
- Rule to match invoices/bills : used for recurring transactions to match the transaction
to existing invoices, bills, or payments based on conditions that must match the information on
the transaction.
Rule to match invoices/bills : used for recurring transactions to match the transaction
to existing invoices, bills, or payments based on conditions that must match the information on
the transaction.

## Default reconciliation models

In Odoo, different models are available by default depending on the companyâs fiscal localization.
These can be updated if needed. Users can also create their own reconciliation models by clicking New .
If a record matches with several reconciliation models, the first one in the sequence of models
is applied. You can rearrange the order by dragging and dropping the handle next to the name.

### Invoices/Bills perfect match

This model should be at the top of the sequence of models, as it enables Odoo to suggest matching
existing invoices or bills with a bank transaction based on set conditions.
Odoo automatically reconciles the payment when the Auto-validate option is selected, and
the model conditions are perfectly met. In this case, it expects to find on the bank statementâs
line the invoice/paymentâs reference (as Label is selected) and the partnerâs name
(as Partner is set is selected) to suggest the correct counterpart entry and reconcile
the payment automatically.

### Invoices/Bills partial match if underpaid

This model suggests a customer invoice or vendor bill that partially matches the payment when the
amount received is slightly lower than the invoice amount, for example in the case of cash discounts . The difference is reconciled with the account indicated in the counterpart entries tab.
The reconciliation model Type is Rule to match invoices/bills , and the Payment tolerance should be set.
The Payment tolerance is only applicable to lower payments. It is disregarded when an
overpayment is received.
Cash discounts and tax reduction

### Line with bank fees

This model suggests a counterpart entry according to the rules set in the model. In this case, the
reconciliation model Type is Rule to suggest counterpart entry , and the Label can be used for example, to identify the information referring to the Bank fees in the label of the transaction.
Regular expressions , often abbreviated as Regex , can be used in
Odoo in various ways to search, validate, and manipulate data within the system. Regex can be
powerful but also complex, so itâs essential to use it judiciously and with a good understanding
of the patterns youâre working with.
To use regular expressions in your reconciliation models, set the Transaction Type to Match Regex and add your expression. Odoo automatically retrieves the
transactions that match your Regex expression and the conditions specified in your model.

## Partner mapping

Partner mapping allows you to establish rules for automatically matching transactions to the correct
partner account, saving time and reducing the risk of errors that can occur during manual
reconciliation. For example, you can create a partner mapping rule for incoming payments with
specific reference numbers or keywords in the transaction description. When an incoming payment
meets these criteria, Odoo automatically maps it to the corresponding customerâs account.
To create a partner mapping rule, go to the Partner Mapping tab and enter the Find Text in Label , Find Text in Notes , and Partner .


Transactions

# Transactions

Importing transactions from your bank statements allows keeping track of bank account transactions
and reconciling them with the ones recorded in your accounting.
Bank synchronization automates the process. However, if you do not
want to use it or if your bank is not yet supported, other options exist:
- Import bank transactions delivered by your bank;
Import bank transactions delivered by your bank;
- Register bank transactions manually.
Register bank transactions manually.
Grouping transactions by statement is optional.

## Import transactions

Odoo supports multiple file formats to import transactions:
- SEPA recommended Cash Management format (CAMT.053)
SEPA recommended Cash Management format (CAMT.053)
- Comma-separated values (CSV)
Comma-separated values (CSV)
- Open Financial Exchange (OFX)
Open Financial Exchange (OFX)
- Quicken Interchange Format (QIF)
Quicken Interchange Format (QIF)
- Belgium: Coded Statement of Account (CODA)
Belgium: Coded Statement of Account (CODA)
To import a file, go to the Accounting Dashboard , and in the Bank journal,
click on Import File .
Alternatively, you can also:
- click the (ellipsis) icon on the Bank journal and select Import file ;
click the (ellipsis) icon on the Bank journal and select Import file ;
- or access the transaction list by clicking the (ellipsis) icon on the Bank journal and selecting Transactions , then click
the (gear) icon and select Import records .
or access the transaction list by clicking the (ellipsis) icon on the Bank journal and selecting Transactions , then click
the (gear) icon and select Import records .
Next, select the file and upload it.
After setting the necessary formatting options and mapping the file columns with their related Odoo
fields, you can run a Test and Import your bank transactions.
Export and import data

## Register bank transactions manually

You can also record your bank transactions manually. To do so, go to Accounting
Dashboard , click on the Bank journal, and then on New . Make sure to fill
out the Partner and Label fields to ease the reconciliation process.

## Statements

A bank statement is a document provided by a bank or financial institution that lists the
transactions that have occurred in a particular bank account over a specified period of time.
In Odoo Accounting, it is optional to group transactions by their related statement, but depending
on your business flow, you may want to record them for control purposes.
If you want to compare the ending balances of your bank statements with the ending balances of
your financial records, donât forget to create an opening transaction to record the bank
account balance as of the date you begin synchronizing or importing transactions. This is
necessary to ensure the accuracy of your accounting.
To access a list of existing statements, go to the Accounting Dashboard , click the (ellipsis) icon next to the bank or cash journal you want to
check, then click Statements .

### Statement creation from the kanban view

Open the bank reconciliation (kanban) view from the Accounting Dashboard by clicking on
the name of the bank journal and identify the transaction corresponding to the last (most recent)
transaction of your bank statement. Click on the Statement button when hovering on the
upper separator line to create a statement from that transaction down to the oldest transaction that
is not yet part of a statement.
In the Create Statement window, fill out the statementâs Reference , verify
its Starting Balance and Ending Balance , and click Save .

### Statement creation from the list view

Open the list of transactions by clicking on the name of the bank journal and switching to the list
view. Select all the transactions corresponding to the bank statement, and, in the Statement column, select an existing statement or create a new one by typing its
reference, clicking on Create and editâ¦ , filling out the statementâs details, and
saving.

### Statement viewing, editing, and printing

To view an existing statement, click on the statement amount in the reconciliation (kanban) view or
click on the statement name in the bank transaction list view. From here, you can edit the Reference , Starting Balance , or Ending Balance .
Manually updating the Starting Balance automatically updates the Ending
Balance based on the new value of the Starting Balance and the value of the
statementâs transactions.
If the Starting Balance doesnât equal the previous statementâs Ending
Balance , or if the Ending Balance doesnât equal the running balance
( Starting Balance plus the statementâs transactions), a warning appears explaining
the issue. To maintain flexibility, it is still possible to save without first resolving the
issue.
To attach a digital copy (i.e., JPEG, PNG, or PDF) of the bank statement for enhanced recordkeeping,
click the Attachments button and select the file to attach.
To generate and print a PDF of the bank statement, click the Print button (if accessed
via the reconciliation view) or click on the (gear) icon and click Statement (if accessed via the list view).
When a bank statement is generated to be printed, it is automatically added to the Attachments .


Customer invoices

# Customer invoices

A customer invoice is a document issued by a company for products and/or services sold to a
customer. It records receivables as they are sent to customers. Customer invoices can include
amounts due for the goods and/or services provided, applicable sales taxes, shipping and handling
fees, and other charges. Odoo supports multiple invoicing and payment workflows.
From draft invoice to profit and loss report, the process involves several steps once the goods (or
services) have been ordered/shipped (or rendered) to a customer, depending on the invoicing policy:
- Invoice creation
- Invoice confirmation
- Invoice sending
- Payment and reconciliation
Payment and reconciliation
- Payment follow-up
- Reporting

## Invoice creation

Draft invoices can be created directly from documents like sales orders or purchase orders or
manually from the Customer Invoices journal in the Accounting Dashboard .
An invoice must include the required information to enable the customer to pay promptly for their
goods and services. Make sure the following fields are appropriately completed:
- Customer : When a customer is selected, Odoo automatically pulls information from the
customer record like the invoice address, preferred payment terms , fiscal positions , receivable account, and more onto the invoice.
To change these values for this specific invoice, edit them directly on the invoice. To change
them for future invoices, change the values on the contact record.
Customer : When a customer is selected, Odoo automatically pulls information from the
customer record like the invoice address, preferred payment terms , fiscal positions , receivable account, and more onto the invoice.
To change these values for this specific invoice, edit them directly on the invoice. To change
them for future invoices, change the values on the contact record.
- Invoice Date : If not set manually, this field is automatically set as the current date
upon confirmation.
Invoice Date : If not set manually, this field is automatically set as the current date
upon confirmation.
- Due Date or payment terms : To specify when
the customer has to pay the invoice.
Due Date or payment terms : To specify when
the customer has to pay the invoice.
- Journal : Automatically set and can be changed if needed.
Journal : Automatically set and can be changed if needed.
- Currency . If the invoiceâs currency differs from the
companyâs currency, the currency exchange rate is automatically displayed.
Currency . If the invoiceâs currency differs from the
companyâs currency, the currency exchange rate is automatically displayed.
In the Invoice Lines tab:
- Product : Click Add a line , then search for and select the product.
Product : Click Add a line , then search for and select the product.
- Quantity
- Taxes (if applicable)
Taxes (if applicable)
To access the product catalog and view all items in an organized display, click Catalog .
When the products and quantities are selected, click Back to Invoice to return to the
invoice; the selected catalog items will appear in the invoice lines.
To display the total amount of the invoice in words, go to Accounting â£
Configuration â£ Settings and activate the Total amount of invoice in letters option.
The Journal Items tab displays the accounting entries created. Additional invoice
information such as the Customer Reference , Payment Reference , Fiscal
Positions , Incoterms , and more can be
added or modified in the Other Info tab.
Odoo initially creates invoices in Draft status. Draft invoices have no accounting
impact until they are confirmed .

## Invoice confirmation

Click Confirm when the invoice is completed. The invoiceâs status changes to Posted , and a journal entry is generated based on the invoice configuration. On
confirmation, Odoo assigns each invoice a unique number from a defined sequence .
- Once confirmed, an invoice can no longer be updated. Click Reset to draft if
changes are needed.
Once confirmed, an invoice can no longer be updated. Click Reset to draft if
changes are needed.
- If required, invoices and other journal entries can be locked once posted using the Secure posted entries with hash feature.
If required, invoices and other journal entries can be locked once posted using the Secure posted entries with hash feature.

## Invoice sending

To set a preferred Invoice sending method for a customer, go to Accounting â£ Customers â£ Customers and select the customer. In the Accounting tab of the contact form, select the preferred Invoice sending method in the Customer Invoices section.
Sending letters in Odoo requires In-App Purchase (IAP) credit or tokens.
To send the invoice to the customer, navigate back to the invoice record and follow these steps:
- Click Send .
- If the default invoice layout has not been customized
yet, a Configure your document layout pop-up window appears. Configure the layout and
click Continue . Note The document layout can be changed at any time in the general settings. To add a QR code for banking app payments to the invoice, enable the QR Code option in the Configure Your Document Layout window. To modify this option, go
to Accounting â£ Configuration â£ Settings , scroll down to the Customer Payments section, and enable/disable the QR Codes option.
If the default invoice layout has not been customized
yet, a Configure your document layout pop-up window appears. Configure the layout and
click Continue .
- The document layout can be changed at any time in the general settings.
The document layout can be changed at any time in the general settings.
- To add a QR code for banking app payments to the invoice, enable the QR Code option in the Configure Your Document Layout window. To modify this option, go
to Accounting â£ Configuration â£ Settings , scroll down to the Customer Payments section, and enable/disable the QR Codes option.
To add a QR code for banking app payments to the invoice, enable the QR Code option in the Configure Your Document Layout window. To modify this option, go
to Accounting â£ Configuration â£ Settings , scroll down to the Customer Payments section, and enable/disable the QR Codes option.
- In the Send window: If a preferred Invoice sending method was set in the contact form, it is selected
by default. Select another one if needed. If no preferred Invoice sending method was set in the contact form, select the
method to use for sending the invoice to the customer.
- If a preferred Invoice sending method was set in the contact form, it is selected
by default. Select another one if needed.
If a preferred Invoice sending method was set in the contact form, it is selected
by default. Select another one if needed.
- If no preferred Invoice sending method was set in the contact form, select the
method to use for sending the invoice to the customer.
If no preferred Invoice sending method was set in the contact form, select the
method to use for sending the invoice to the customer.
- Click Send if the by Email option is selected, or click Download .
Click Send if the by Email option is selected, or click Download .

### Sending multiple invoices

To send multiple invoices, go to Accounting â£ Customers â£ Invoices ,
select them in the Invoices list view and click Send . The Send window displays the number of selected invoice to send by email.
After clicking Send , a banner is added to the selected invoices to indicate they are
part of an ongoing send batch. This helps prevent the process from being triggered manually again,
as it may take some time to complete for exceptionally large batches.
To check all invoices that have not yet been sent, go to Accounting â£ Customers
â£ Invoices . In the Invoices list view, click into the search bar and filter on Not Sent .

## Payment and reconciliation

In Odoo, an invoice is considered Paid when the associated accounting entry has been
reconciled with a corresponding bank transaction.
- Payments
- Bank reconciliation

## Payment follow-up

Odooâs follow-up actions help companies follow up on customer invoices.
Different actions can be set up to remind customers to pay their outstanding invoices, depending on
how much the customer is overdue. These actions are bundled into follow-up levels that trigger when
an invoice is overdue by a certain number of days. If there are multiple overdue invoices for the
same customer, the actions are performed on the most overdue invoice.

## Reporting

### Partner reports

#### Partner Ledger

The Partner Ledger report shows the balance of customers and suppliers. To access it,
go to Accounting â£ Reporting â£ Partner Ledger .

#### Aged Receivable

To review outstanding customer invoices and their related due dates, use the Aged Receivable report. To access it, go to Accounting â£
Reporting â£ Aged Receivable .

#### Aged Payable

To review outstanding vendor bills and their related due dates, use the Aged Payable report. To access it, go to Accounting â£
Reporting â£ Aged Payable .

### Profit and Loss

The Profit and Loss statement shows details of income
and expenses.

### Balance sheet

The Balance Sheet summarizes the companyâs assets,
liabilities, and equity at a specific time.

Invoice creation
Invoice confirmation
Invoice sending
Sending multiple invoices
Payment and reconciliation
Payment follow-up
Reporting
Partner reports
Profit and Loss
Balance sheet


Cash discounts and tax reduction

# Cash discounts and tax reduction

Cash discounts are reductions in the amount a customer must pay for goods or services offered as
an incentive for paying their invoice promptly. These discounts are typically a percentage of the
total invoice amount and are applied if the customer pays within a specified time. Cash discounts
can help a company maintain a steady cash flow.
You issue a â¬100 invoice on the 1st of January. The full payment is due within 30 days, and you
also offer a 2% discount if your customer pays you within seven days.
The customer can pay â¬98 up to the 8th of January. After that date, they would have to pay â¬100
by the 31st of January.
A tax reduction can also be applied depending on the country
or region.
- Payment terms and installment plans
Payment terms and installment plans
- Payments

## Configuration

To grant cash discounts to customers, you must first verify the gain and loss accounts . Then, configure payment terms and add a cash discount by checking the Early Discount checkbox and filling in the discount percentage, discount days, and tax
reduction fields.

### Cash discount gain/loss accounts

With a cash discount, the amount you earn depends on whether the customer benefits from the cash
discount or not. This inevitably leads to gains and losses, which are recorded on default accounts.
To modify these accounts, go to Accounting â£ Configuration â£ Settings , and, in
the Default Accounts section, select the accounts you want to use for the Cash Discount Gain account and Cash Discount Loss account .

### Payment terms

Cash discounts are defined on payment terms . Configure them to your liking by
going to Accounting â£ Configuration â£ Payment Terms , and make sure to fill out
the discount percentage, discount days, and tax reduction fields.

### Tax reductions

Depending on the country or region, the base amount used to compute the tax can vary, which can lead
to a tax reduction . Since tax reductions are set on individual payment terms, each term can use
a specific tax reduction.
To configure how the tax reduction is applied, go to a payment term with the Early
Discount checkbox enabled, and select one of the three following options:
- Always (upon invoice) The tax is always reduced. The base amount used to compute the tax is the discounted amount,
whether the customer benefits from the discount or not.
The tax is always reduced. The base amount used to compute the tax is the discounted amount,
whether the customer benefits from the discount or not.
- On early payment The tax is reduced only if the customer pays early. The base amount used to compute the tax is the
same as the sale: if the customer benefits from the reduction, then the tax is reduced. This means
that, depending on the customer, the tax amount can vary after the invoice is issued.
The tax is reduced only if the customer pays early. The base amount used to compute the tax is the
same as the sale: if the customer benefits from the reduction, then the tax is reduced. This means
that, depending on the customer, the tax amount can vary after the invoice is issued.
- Never The tax is never reduced. The base amount used to compute the tax is the full amount, whether the
customer benefits from the discount or not.
The tax is never reduced. The base amount used to compute the tax is the full amount, whether the
customer benefits from the discount or not.
You issue a â¬100 invoice (tax-excluded) on the 1st of January, with a 21% tax rate. The full
payment is due within 30 days, and you also offer a 2% discount if your customer pays you within
seven days.
â¬98 + (21% of â¬98)
â¬100 + (21% of â¬98)
â¬98 + (21% of â¬98)
â¬100 + (21% of â¬100)
â¬98 + (21% of â¬100)
â¬100 + (21% of â¬100)
- Tax grids , which are used for the tax report, are correctly
computed according to the type of tax reduction you
configured.
Tax grids , which are used for the tax report, are correctly
computed according to the type of tax reduction you
configured.
- The type of cash discount tax reduction may be correctly pre-configured, depending on your fiscal localization package .
The type of cash discount tax reduction may be correctly pre-configured, depending on your fiscal localization package .

## Apply a cash discount to a customer invoice

On a customer invoice, apply a cash discount by selecting the payment terms you created . Odoo automatically computes the correct amounts, tax amounts, due
dates, and accounting records.
Under the Journal Items tab, you can display the discount details by clicking on the
âtoggleâ button and adding the Discount Date and Discount Amount columns.
The discount amount and due date are also displayed on the generated invoice report sent to the
customer if the Show installment dates option is checked on the payment terms.

### Payment reconciliation

When you record a payment or reconcile your bank transactions , Odoo takes the customer paymentâs date into account to determine if the
customer can benefit from the cash discount or not.
If your customer pays the discount amount after the discount date, you can always decide to
mark the invoice as fully paid with a write-off or as partially paid.


Cash rounding

# Cash rounding

Cash rounding is required when the lowest physical denomination
of currency, or the smallest coin, is higher than the minimum unit
of account.
For example, some countries require their companies to round up or
down the total amount of an invoice to the nearest five cents, when
the payment is made in cash.

## Configuration

Go to Accounting â£ Configuration â£ Settings and enable Cash Rounding , then click on Save .
Go to Accounting â£ Configuration â£ Cash Roundings ,
and click on Create .
Define here your Rounding Precision , Rounding Strategy , and Rounding Method .
Odoo supports two rounding strategies :
- Add a rounding line : a rounding line is added on the invoice.
You have to define which account records the cash roundings.
Add a rounding line : a rounding line is added on the invoice.
You have to define which account records the cash roundings.
- Modify tax amount : the rounding is applied in the taxes section.
Modify tax amount : the rounding is applied in the taxes section.

## Apply roundings

When editing a draft invoice, open the Other Info tab, go to the Accounting Information section, and select the appropriate Cash
Rounding Method .