Skip to content

[IMP] accounting: (multi) companies, branches & accountant access info #13474

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: 17.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 170 additions & 20 deletions content/applications/finance/accounting.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
Accounting and Invoicing
========================

**Odoo Invoicing** is a standalone invoicing app to create invoices, send them to your customers,
and manage payments.
**Odoo Invoicing** is a standalone invoicing app to create invoices, send them to customers, and
manage payments.

**Odoo Accounting** is a full featured accounting app. Accountant productivity is at the core of its
development with features such as AI-powered invoice recognition, synchronization with your bank
**Odoo Accounting** is a full-featured accounting app. Accountant productivity is at the core of its
development with features such as AI-powered invoice recognition, synchronization with bank
accounts, smart matching suggestions, etc.

.. seealso::
Expand Down Expand Up @@ -52,6 +52,8 @@ accounts, smart matching suggestions, etc.

Reporting, declarations, and analytic accounting

.. _accounting/double-entry-booking:

Double-entry bookkeeping
========================

Expand All @@ -66,6 +68,8 @@ always balance.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`

.. _accounting/accrual-cash:

Accrual and cash basis
======================

Expand All @@ -81,11 +85,68 @@ expense either when the transaction occurs (accrual basis) or when the payment i
Multi-company
=============

Several companies can be managed within the same database. Each company has its :doc:`chart of
accounts <accounting/get_started/chart_of_accounts>`, which is also useful to generate consolidation
reports. Users can access several companies but can only work on a single company's accounting at a
:doc:`Several companies </applications/general/companies/multi_company>` can be managed within the
same database. Each company has its :doc:`chart of accounts
<accounting/get_started/chart_of_accounts>`, which is also useful to generate consolidation reports.
Users can access several companies but can only work on a single company's accounting at a
time.

.. seealso::
- :doc:`Multi-company </applications/general/companies/multi_company>`

.. _general/companies/inter-company:

Inter-company transactions
--------------------------

It is possible to generate counterpart documents for order/invoices between companies automatically.
To activate inter-company transactions, open the Settings app of the selected company, navigate to
the :guilabel:`Companies` section, enable the :guilabel:`Inter-Company Transactions`, and
:guilabel:`Save`. Then, choose one of the following :guilabel:`Rule` options to create a counterpart
for the selected company:

- :guilabel:`Do not synchronize`: do not synchronize any inter-company transactions.
- :guilabel:`Synchronized invoice/bills`: generates a bill/invoice when a company confirms a
bill/invoice for the selected company.
- :guilabel:`Synchronize Sales Order`: generates a drafted sales order using the selected company
warehouse, when a sales order is confirmed for the selected company. If, instead of a drafted
sales order, it should be validated, enable :guilabel:`Automatic Validation`.\*
- :guilabel:`Synchronize Purchase Order`: generates a drafted purchase order using the selected
company warehouse, when a purchase order is confirmed for the selected company. If, instead of a
drafted purchase order, it should be validated, enable :guilabel:`Automatic Validation`.\*
- :guilabel:`Synchronize Sales and Purchase Order`: generates a drafted purchase/sales order using
the selected company warehouse, when a sales/purchase order is confirmed for the selected company.
If, instead of a drafted purchase/sales order, it should be validated, enable :guilabel:`Automatic
Validation`.\*

\* The given option needs to be selected, so :guilabel:`Automatic Validation` appears in the
configuration.

.. note::
Products **must** be configured as :guilabel:`Can be sold` and shared between the companies. See
:doc:`../inventory_and_mrp/inventory/product_management/configure/type`.

.. example::
:guilabel:`Synchronize invoices/bills`: an invoice posted on `JS Store Belgium`, for `JS Store
US`, automatically creates a vendor bill, and generates a drafted purchase/sales order using the
selected company warehouse, when a sales/purchase order is confirmed for the selected company.
If, instead of a drafted purchase/sales order, it should be validated, enable
:guilabel:`Automatic Validation`.

:guilabel:`Synchronize sales/purchase order`: when a sale order for `JS Store US` is confirmed on
`JS Store Belgium`, a purchase order on `JS Store Belgium` is automatically created (and
confirmed, if the :guilabel:`Automatic Validation` feature was enabled).

.. tip::
Remember to test all workflows as a user *other* than the administrator.

.. seealso::
- :doc:`Multi-company Guidelines <../../developer/howtos/company>`
- :doc:`../finance/accounting/get_started/multi_currency`


.. _accounting/multi-currency:

Multi-currency environment
==========================

Expand All @@ -98,32 +159,82 @@ gains and losses after reconciling the journal items.
.. seealso::
:doc:`Manage a bank in a foreign currency <accounting/bank/foreign_currency>`

Branch management
=================
.. _accounting/branches:

Branches
========

Parent :doc:`companies </applications/general/companies>` and their :ref:`branches
<general/companies/branches>` can be managed within a single database, operating under shared
accounting and reporting rules, including the following:

- The parent company’s :doc:`chart of accounts <accounting/get_started/chart_of_accounts>`,
:doc:`main currency <accounting/get_started/multi_currency>`, and :doc:`taxes <accounting/taxes>`
apply to all branches.
- Branches can manage their own dedicated journals and related records.
- The parent company manages a common :ref:`fiscal period <year-end/fiscal-years>`, 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 :doc:`reports <accounting/reporting>`, :doc:`invoices
<accounting/customer_invoices>`, :doc:`bills <accounting/vendor_bills>`, etc., from its branches,
while each branch can only view its own data.
- The parent company and all branches must be located in the same country to ensure accounting
consistency.

.. note::
Branch :doc:`accounting <accounting>` and :doc:`fiscal localizations <fiscal_localizations>` are
set on the parent company.

.. warning::
Adding a branch to a :doc:`company <../general/companies>` enables multi-company functions.

For more information, refer to `Odoo's pricing page <https://www.odoo.com/pricing-plan>`_ or
contact the company's account manager.

.. _accounting/branch/reporting:

Reporting
---------

The parent company consolidates accounting operations from all branches, providing a centralized
view of :doc:`financial reports <accounting/reporting>`, such as profit and loss or balance sheets.

.. _accounting/branch/vat:

VAT
---

Each company and branch must be configured with its own legal information, such as a VAT number when
applicable. Branches are not part of the parent company’s VAT unit.

This company- or branch-specific setup allows users to generate individual reports and :doc:`tax
returns <accounting/reporting/tax_returns>` for each entity.

Multiple branches can be managed thanks to multi-company hierarchies. This allows to post journal
entries on each branch as well as setting up a common lock date managed by the main company.
.. _accounting/international-standards:

International standards
=======================

Odoo Accounting supports more than 70 countries. It provides the central standards and mechanisms
common to all nations, and thanks to country-specific modules, local requirements are fulfilled.
Fiscal positions exist to address regional specificities like the chart of accounts, taxes, or any
other requirements.
Fiscal localizations exist to address regional specificities like the chart of accounts, taxes, or
any other requirements.

.. seealso::
:doc:`Fiscal localization packages <fiscal_localizations>`

.. _accounting/accounts-receivable-payable:

Accounts receivable and payable
===============================

By default, there is a single account for the account receivable entries and one for the account
payable entries. As transactions are linked to your **contacts**, you can run a report per customer,
vendor, or supplier.
payable entries. As transactions are linked to **contacts**, run a report per customer, vendor, or
supplier.

The **Partner Ledger** report displays the balance of customers and suppliers. To access it, go to
:menuselection:`Accounting --> Reporting --> Partner Ledger`.

The **Partner Ledger** report displays the balance of your customers and suppliers. It is available
by going to :menuselection:`Accounting --> Reporting --> Partner Ledger`.
.. _accounting/reporting:

Reporting
=========
Expand All @@ -140,6 +251,8 @@ real-time:
| +----------------------------------+
| | Cash flow statement |
| +----------------------------------+
| | Executive summary |
| +----------------------------------+
| | Tax report |
| +----------------------------------+
| | EC sales list |
Expand All @@ -162,8 +275,16 @@ real-time:
+------------+----------------------------------+
| Management | Invoice analysis |
| +----------------------------------+
| | Analytic reporting |
| +----------------------------------+
| | Audit trail |
| +----------------------------------+
| | Unrealized currency gains/losses |
| +----------------------------------+
| | Deferred revenue |
| +----------------------------------+
| | Deferred expense |
| +----------------------------------+
| | Depreciation schedule |
| +----------------------------------+
| | Disallowed expenses |
Expand All @@ -178,6 +299,8 @@ real-time:
.. tip::
:doc:`Create and customize reports <accounting/reporting/customize>` with Odoo's report engine.

.. _accounting/tax-report:

Tax report
----------

Expand All @@ -193,16 +316,20 @@ 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.

.. _accounting/bank-synchronization:

Bank synchronization
====================

The bank synchronization system directly connects with your bank institution to automatically
import all transactions into your database. It gives an overview of your cash flow without logging
The bank synchronization system directly connects with the bank institution 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.

.. seealso::
:doc:`Bank synchronization <accounting/bank/bank_synchronization>`

.. _accounting/inventory-valuation:

Inventory valuation
===================

Expand All @@ -213,6 +340,8 @@ available methods are standard price, average price, :abbr:`LIFO (Last-In, First
.. seealso::
:doc:`../inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config`

.. _accounting/retained-earnings:

Retained earnings
=================

Expand All @@ -223,7 +352,7 @@ and loss balance is automatically reported on the balance sheet report.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`

.. _fiduciaries:
.. _accounting/fiduciaries:

Fiduciaries
===========
Expand All @@ -237,6 +366,27 @@ Configuration --> Settings --> Accounting Firms mode`. When enabled:
- :guilabel:`Invoice Date` and :guilabel:`Bill Date` are pre-filled when encoding a transaction.
- A :guilabel:`Quick encoding` option is available for customer invoices and vendor bills.

.. _accounting/accountant-access-rights:

Accountant access rights
========================

To grant access to the company's accountant, :ref:`add the accountant as a new user
<users/add-individual>` and configure the appropriate :doc:`access rights
<../general/users/access_rights>` in the :guilabel:`Accounting` section to enable access to the
company's financial data:

- :guilabel:`Accounting`: select the appropriate group
- :guilabel:`Bank`: allow bank account validation

.. Note::
Adding a new user is free of charge in :doc:`Odoo Online <../../administration/odoo_online>`.
However, :doc:`Odoo.sh <../../administration/odoo_sh>` and :doc:`Odoo On-premise
<../../administration/on_premise>` may involve extra charges for each additional user. For more
pricing information, see `Odoo's pricing <https://www.odoo.com/pricing-plan>`_.

For multi-company environment, set the appropriate :ref:`access <users/multi-companies>`.

.. toctree::
:titlesonly:

Expand Down
2 changes: 1 addition & 1 deletion content/applications/finance/accounting/taxes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Default taxes

**Default taxes** define which taxes are automatically selected when creating a new product. They
are also used to prefill the :guilabel:`Taxes` field when adding a new line on an invoice in
:ref:`Accounting Firms <fiduciaries>` mode.
:ref:`Accounting Firms <accounting/fiduciaries>` mode.

.. image:: taxes/default-configuration.png
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
Expand Down
33 changes: 15 additions & 18 deletions content/applications/finance/fiscal_localizations/kenya.rst
Original file line number Diff line number Diff line change
Expand Up @@ -148,20 +148,17 @@ Multi-company
:doc:`../../general/companies`

If you have :ref:`multiple companies <accounting/multi-company>`, you can centralize and manage them
all on a single Odoo database. The KRA identifies and differentiates the **main** company from
its **subsidiaries** by using IDs. Furthermore, subsidiaries are classified as **branches** of the
main company.
all on a single Odoo database. The KRA identifies and differentiates the **parent** company from
its **subsidiaries** by using IDs. Furthermore, subsidiaries are classified as :ref:`branches
<general/companies/branches>` of the parent company.

To configure the company's ID, open the **Settings** app, click :guilabel:`Update Info` in the
:guilabel:`Companies` section, and search for the :guilabel:`eTIMS Branch Code` field. The **main
:guilabel:`Companies` section, and search for the :guilabel:`eTIMS Branch Code` field. The **parent
company** has a branch ID equal to `00` in a multi-company environment. Companies that are *not* the
main company have a branch ID other than `00` and are assigned an ID by the KRA.
parent company have a branch ID other than `00` and are assigned an ID by the KRA.

To add a branch, go to the :guilabel:`Branches` tab in the **company settings** and click
:guilabel:`Add a line`.

To fetch the **branch ID** from the KRA for your non-main companies, ensure the main company has a
Kenyan :guilabel:`Tax ID` and the OSCU device has been :ref:`initialized <kenya/initialization>`.
To fetch the **branch ID** from the KRA for your non-parent companies, ensure the parent company has
a Kenyan :guilabel:`Tax ID` and the OSCU device has been :ref:`initialized <kenya/initialization>`.
Then, go to the :guilabel:`Branches` tab and click :guilabel:`Populate from KRA`.

.. note::
Expand All @@ -184,29 +181,29 @@ KRA sequences
.. important::
Odoo invoice sequences and KRA sequences are **different**.

In Odoo, invoice sequences depend on the **main company**. Main companies can see the invoices of
branches, but branches **cannot** see the main company's invoices or those of other branches.
In Odoo, invoice sequences depend on the **parent company**. Parent companies can see the invoices
of branches, but branches **cannot** see the parent company's invoices or those of other branches.

The KRA needs **independent** sequences per branch. Therefore, Odoo manages sequences individually
per branch.

.. example::
If you have a main company with two branches, the invoice sequence would be the following:
If you have a parent company with two branches, the invoice sequence would be the following:

- Creating an invoice on **branch 1**: INV/2024/00001;
- Creating an invoice on **branch 2**: INV/2024/00002;
- Creating an invoice on the **main company**: INV/2024/00003.
- Creating an invoice on the **parent company**: INV/2024/00003.

This is how Odoo manages sequences to be compliant with the KRA regulations:

- Creating an invoice on **branch 1**: INV/2024/00001;
- Creating an invoice on **branch 2**: INV/2024/00001;
- Creating an invoice on the **main company**: INV/2024/00001.
- Creating an invoice on the **parent company**: INV/2024/00001.

Insurance
=========

For **health service providers**, you can send insurance information about the main and branch
For **health service providers**, you can send insurance information about the parent and branch
companies and update it in eTIMS. To do so, go to :menuselection:`Accounting --> Configuration -->
Settings`, scroll to the :guilabel:`Kenya eTIMS Integration` section, and fill in the
:guilabel:`Code`, :guilabel:`Name`, and :guilabel:`Rate` fields. Click :guilabel:`Send Insurance
Expand Down Expand Up @@ -246,9 +243,9 @@ internal operations or stock adjustments; therefore, Odoo automatically sends th
of the following conditions are met:

#. No contact is set for the move;
#. The contact is your main company or a branch of the main company.
#. The contact is your parent company or a branch of the parent company.

If the stock moves are **external operations** (e.g., to contacts that are not part of the main
If the stock moves are **external operations** (e.g., to contacts that are not part of the parent
company or its branches), the stock moves are automatically sent *after* the invoice is sent to
eTIMS.

Expand Down
1 change: 0 additions & 1 deletion content/applications/general.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ General settings
general/apps_modules
general/users
general/companies
general/multi_company
general/iot
general/email_communication
general/integrations
Expand Down
Loading