convert rst to markdown

This commit is contained in:
2025-02-27 18:56:07 +07:00
parent ef68fdc2d9
commit 637a4dd9fd
5527 changed files with 189985 additions and 45 deletions
+12
View File
@@ -0,0 +1,12 @@
# Odoo essentials
```{toctree}
essentials/activities
essentials/reporting
essentials/search
essentials/contacts
essentials/export_import_data
essentials/in_app_purchase
essentials/keyboard_shortcuts
```
-13
View File
@@ -1,13 +0,0 @@
===============
Odoo essentials
===============
.. toctree::
essentials/activities
essentials/reporting
essentials/search
essentials/contacts
essentials/export_import_data
essentials/in_app_purchase
essentials/keyboard_shortcuts
@@ -0,0 +1,361 @@
---
substitutions:
clock: '{icon}`fa-clock-o` {guilabel}`(clock)` icon'
---
# Activities
*Activities* are follow-up tasks tied to a record in an Odoo database.
(activities-important)=
The icon used to display activities varies, depending on the {ref}`activity type
<activities/types>`:
- {icon}`fa-clock-o` {guilabel}`(clock)` icon: the default activities icon.
- {icon}`fa-phone` {guilabel}`(phone)` icon: a phone call is scheduled.
- {icon}`fa-envelope` {guilabel}`(envelope)` icon: an email is scheduled.
- {icon}`fa-check` {guilabel}`(check)` icon: a "to-do" is scheduled.
- {icon}`fa-users` {guilabel}`(people)` icon: a meeting is scheduled.
- {icon}`fa-upload` {guilabel}`(upload)` icon: a document is scheduled to be uploaded.
- {icon}`fa-pencil-square-o` {guilabel}`(request signature)` icon: a signature request is scheduled.
## Schedule activities
Activities can be scheduled on any page of the database that contains a {ref}`chatter
<activities/chatter>` thread, {ref}`Kanban view <activities/kanban>`, {ref}`list view
<activities/list>`, or {ref}`activities view <activities/activity>` of an application.
(activities-chatter)=
### Chatter
Activities can be created from the chatter on any record.
To schedule a new activity, click the {guilabel}`Activities` button, located at the top of the
chatter. In the {guilabel}`Schedule Activity` pop-up window that appears, {ref}`fill out the
Schedule Activity form <activities/form>`.
```{image} activities/chatter.png
:align: center
:alt: New activity type form.
```
(activities-kanban)=
### Kanban view
Activities can also be created from the {icon}`oi-view-kanban` {guilabel}`(Kanban)` view.
To do so, click on the {{ clock }} located at the bottom of an individual record.
Click {guilabel}`+ Schedule An Activity`, then proceed to {ref}`fill out the Schedule Activity form
<activities/form>`.
```{image} activities/schedule-kanban-activity.png
:align: center
:alt: Kanban view of the CRM pipeline and the option to schedule an activity.
```
:::{note}
If a record already has a scheduled activity, the {{ clock }} is replaced by the icon that represents
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
:::
(activities-list)=
### List view
Activities can also be created from a {icon}`oi-view-list` {guilabel}`(list)` view.
If the {guilabel}`Activities` column is hidden, reveal it using the {icon}`oi-settings-adjust`
{guilabel}`(settings adjust)` icon in the far-right of the top row.
Then, click on the {{ clock }} for the record the activity is being added to, and click {guilabel}`+
Schedule an activity`. Proceed to {ref}`fill out the Schedule Activity form <activities/form>` that
appears.
:::{note}
If a record already has a scheduled activity, the {{ clock }} is replaced by the icon that represents
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
:::
```{image} activities/schedule-list-activity.png
:align: center
:alt: List view of the CRM pipeline and the option to schedule an activity.
```
(activities-activity)=
### Activity view
Most applications in Odoo have an *Activity* view available. If available, a {{ clock }} is visible in
the top-right corner of the main menu bar, amongst the other view option icons.
To open the activity view, click the {{ clock }}.
```{image} activities/activities.png
:align: center
:alt: Top-right menu with the Activities icon called out.
```
In this view, all the available activities are listed in the columns, while the horizontal entries
represent all the individual records.
Activities that appear green have a due date in the future, activities that appear orange are due
today, while activities appearing red are overdue.
Color bars in each column represent records for specific activity types, and display a number
indicating how many activities are scheduled for that type.
If multiple activity types are scheduled for a record, a number appears in the box, indicating the
total number of scheduled activities.
:::{note}
Activity colors, and their relation to an activity's due date, are consistent throughout Odoo,
regardless of the activity type, or the view.
:::
To schedule an activity for a record, hover over the corresponding field. Click the {icon}`fa-plus`
{guilabel}`(plus)` icon that appears, and then {ref}`fill out the Schedule Activity form
<activities/form>`.
```{image} activities/activity-view.png
:align: center
:alt: Activity view of the CRM pipeline and the option to schedule an activity.
```
(activities-form)=
### Schedule Activity form
Activities can be scheduled from many different places, such as from the {ref}`chatter
<activities/chatter>` of a record, or from one of multiple views in an application, when available:
the {ref}`Kanban view <activities/kanban>`, {ref}`list view <activities/list>`, or {ref}`activity
view <activities/activity>`.
Enter the following information on the form:
- {guilabel}`Activity Type`: select the type of activity from the drop-down menu. The default
options are: {guilabel}`Email`, {guilabel}`Call`, {guilabel}`Meeting`, or {guilabel}`To-Do`.
Depending on what other applications are installed, additional options may be available.
- {guilabel}`Summary`: enter a short title for the activity, such as `Discuss Proposal`.
- {guilabel}`Due Date`: using the calendar popover, select the activity's deadline.
- {guilabel}`Assigned to`: by default, the current user populates this field. To assign a different
user to the activity, select them from the drop-down menu.
- {guilabel}`Notes`: add any additional information for the activity in this field.
When the {guilabel}`Schedule Activity` pop-up window is completed, click one of the following
buttons:
- {guilabel}`Open Calendar`: opens the user's calendar to add and schedule the activity.
Click on the desired date and time for the activity, and a {guilabel}`New Event` pop-up window
appears. The summary from the *Schedule Activity* pop-up window populates the {guilabel}`Title`
field.
Enter the information in the {guilabel}`New Event` pop-up window, then click {guilabel}`Save &
Close` to schedule it. Once scheduled, the activity is added to the chatter under the
{guilabel}`Planned Activities` section.
:::{important}
The {guilabel}`Open Calendar` button **only** appears if the {guilabel}`Activity Type` is set
to either {guilabel}`Call` or {guilabel}`Meeting`.
:::
- {guilabel}`Schedule`: schedules the activity, and adds the activity to the chatter under
{guilabel}`Planned Activities`.
- {guilabel}`Schedule & Mark as Done`: adds the details of the activity to the chatter under
{guilabel}`Today`. The activity is not scheduled, and is automatically marked as done.
- {guilabel}`Done & Schedule Next`: adds the details of the activity to the chatter under
{guilabel}`Today`. The activity is not scheduled, is automatically marked as done, and a new
{guilabel}`Schedule Activity` pop-up window appears.
- {guilabel}`Cancel`: discards any changes made on the {guilabel}`Schedule Activity` pop-up window.
```{image} activities/schedule-pop-up.png
:align: center
:alt: View of CRM leads and the option to schedule an activity.
```
(activities-all)=
## All scheduled activities
To view a consolidated list of activities, organized by application, click the {{ clock }} in the header
menu, located in the top-right corner.
If any activities are scheduled, the number of activities appear in a red bubble on the
{{ clock }}.
All activities for each application are further divided into subsections, indicating where in the
application the activity is to be completed. Each sub-section lists the number of scheduled
activities that are {guilabel}`Late`, due {guilabel}`Today`, and scheduled in the
{guilabel}`Future`.
```{eval-rst}
.. example::
In the *Time Off* application, one activity is scheduled to be done in the *All Time Off*
requests dashboard, and six activities are scheduled to be done in the *Allocations* dashboard.
These requests appear in two separate lists in the all activities drop-down menu: one labeled
`Time Off` and one labeled `Time Off Allocation`.
.. image:: activities/activities-menu.png
:align: center
:alt: The list of activities that is accessed from the main menu bar. Two entries for the Time
Off application are highlighted.
```
### Request a document
The option to {guilabel}`Request a Document` is available at the bottom of the list of {ref}`all
scheduled activities <activities/all>`, the option to {guilabel}`Request a Document` appears. Click
{guilabel}`Request a Document`, and a {guilabel}`Request a file` pop-up window appears.
Enter the following information on the form:
- {guilabel}`Document Name`: enter a name for the document being requested.
- {guilabel}`Request To`: select the user the document is being requested from using the drop-down
menu.
- {guilabel}`Due Date In`: enter a numerical value indicating when the document is due. Next to
this field, a {guilabel}`Days` field is visible. Click {guilabel}`Days`, the default option, to
reveal a drop-down menu. Select the desired time-frame option from the list. The options are
{guilabel}`Days`, {guilabel}`Weeks`, or {guilabel}`Months`.
- {guilabel}`Workspace`: using the drop-down menu, select the specific {ref}`Workspace
<documents/workspaces>` the document is being uploaded to.
- {guilabel}`Tags`: select any desired tags from the drop-down menu. The available tags displayed
are based on the tags configured for the selected {guilabel}`Workspace`.
- {guilabel}`Message`: enter a message to clarify the document request in this field.
When all the fields are completed, click {guilabel}`Request` to send the document request.
```{image} activities/request-doc.png
:align: center
:alt: The Request a file form, with all fields filled out to request a contract.
```
(activities-types)=
## Activity types
To view the currently configured types of activities in the database, navigate to
{menuselection}`Settings app --> Discuss section --> Activities setting --> Activity Types`.
```{image} activities/settings-activities-types.png
:align: center
:alt: Activity Types button in the Settings application under the Discuss section.
```
Doing so reveals the {guilabel}`Activity Types` page, where the existing activity types are found.
:::{tip}
Individual applications have a list of *Activity Types* dedicated to that application. For
example, to view and edit the activities available for the *CRM* application, go to
{menuselection}`CRM app --> Configuration --> Activity Types`.
:::
```{image} activities/activity-list.png
:align: center
:alt: The list of activity types already configured and available.
```
### Edit activity types
To edit an existing {ref}`activity type <activities/types>`, click on the activity type, and the
activity type form loads.
Make any desired changes to the activity type form. The form automatically saves, but it can be
saved manually at any time by clicking the {guilabel}`Save Manually` option, represented by a
{icon}`fa-cloud-upload` {guilabel}`(cloud upload)` icon, located in the top-left corner of the page.
### Create new activity types
To create a new {ref}`activity type <activities/types>`, click {guilabel}`New` from the
{guilabel}`Activity Types` page, and a blank activity type form loads.
Enter a {guilabel}`Name` for the activity type at the top of the form, then enter the following
information on the form.
#### Activity Settings section
- {guilabel}`Action`: using the drop-down menu, select an action associated with this new activity
type. Some actions trigger specific behaviors after an activity is scheduled, such as:
- {guilabel}`Upload Document`: if selected, a link to upload a document is automatically added to
the planned activity in the chatter.
- {guilabel}`Call` or {guilabel}`Meeting`: if selected, users have the option to open their
calendar to select a date and time for the activity.
- {guilabel}`Request Signature`: if selected, a link to open a signature request pop-up window is
automatically added to the planned activity in the chatter. This requires the Odoo *Sign*
application to be installed.
:::{note}
Available activity types vary based on the installed applications in the database.
:::
- {guilabel}`Folder`: select a specific {ref}`workspace <documents/workspaces>` folder to save a
document to. This field **only** appears if {guilabel}`Upload Document` is selected for the
{guilabel}`Action`.
Using the drop-down menu, select the {guilabel}`Folder` the document is saved to.
- {guilabel}`Default User`: select a user from the drop-down menu to automatically assign this
activity to the selected user when this activity type is scheduled. If this field is left blank,
the activity is assigned to the user who creates the activity.
- {guilabel}`Default Summary`: enter a note to include whenever this activity type is created.
:::{note}
The information in the {guilabel}`Default User` and {guilabel}`Default Summary` fields are
included when an activity is created. However, they can be altered before the activity is
scheduled or saved.
:::
- {guilabel}`Keep Done`: tick this checkbox to keep activities that have been marked as `Done`
visible in the {ref}`activity view <activities/activity>`.
- {guilabel}`Default Note`: enter any notes to appear with the activity.
#### Next Activity section
It is possible to have another activity either suggested or triggered. To do so, configure the
{guilabel}`Next Activity` section.
- {guilabel}`Chaining Type`: select either {guilabel}`Suggest Next Activity` or {guilabel}`Trigger
Next Activity` from the drop-down menu. Depending on the selected option, either the
{guilabel}`Suggest` or {guilabel}`Trigger` field is displayed.
:::{note}
The {guilabel}`Chaining Type` field does **not** appear if {guilabel}`Upload Document` is
selected for the {guilabel}`Action`.
:::
- {guilabel}`Suggest/Trigger`: depending on what is selected for the {guilabel}`Chaining Type`, this
field either displays {guilabel}`Suggest` or {guilabel}`Trigger`. Using the drop-down menu, select
the activity to recommend or schedule as a follow-up task to the activity type.
- {guilabel}`Schedule`: configure when the next activity is suggested or triggered.
First, enter a numerical value indicating when the activity is suggested or triggered.
Next to this field, a {guilabel}`Days` field is visible. Click {guilabel}`Days`, the default
option, to reveal a drop-down menu. Select the desired time-frame option from the list. The
options are {guilabel}`Days`, {guilabel}`Weeks`, or {guilabel}`Months`.
Lastly, using the drop-down menu, select whether the activity is scheduled or triggered either
{guilabel}`after previous activity deadline` or {guilabel}`after completion date`.
```{image} activities/new-activity.png
:align: center
:alt: A new Activity form with all the fields filled out.
```
:::{seealso}
- {doc}`../productivity/discuss`
- {doc}`../productivity/discuss/team_communication`
- {doc}`../sales/crm/optimize/utilize_activities`
:::
@@ -1,345 +0,0 @@
==========
Activities
==========
.. |clock| replace:: :icon:`fa-clock-o` :guilabel:`(clock)` icon
*Activities* are follow-up tasks tied to a record in an Odoo database.
.. _activities/important:
The icon used to display activities varies, depending on the :ref:`activity type
<activities/types>`:
- :icon:`fa-clock-o` :guilabel:`(clock)` icon: the default activities icon.
- :icon:`fa-phone` :guilabel:`(phone)` icon: a phone call is scheduled.
- :icon:`fa-envelope` :guilabel:`(envelope)` icon: an email is scheduled.
- :icon:`fa-check` :guilabel:`(check)` icon: a "to-do" is scheduled.
- :icon:`fa-users` :guilabel:`(people)` icon: a meeting is scheduled.
- :icon:`fa-upload` :guilabel:`(upload)` icon: a document is scheduled to be uploaded.
- :icon:`fa-pencil-square-o` :guilabel:`(request signature)` icon: a signature request is scheduled.
Schedule activities
===================
Activities can be scheduled on any page of the database that contains a :ref:`chatter
<activities/chatter>` thread, :ref:`Kanban view <activities/kanban>`, :ref:`list view
<activities/list>`, or :ref:`activities view <activities/activity>` of an application.
.. _activities/chatter:
Chatter
-------
Activities can be created from the chatter on any record.
To schedule a new activity, click the :guilabel:`Activities` button, located at the top of the
chatter. In the :guilabel:`Schedule Activity` pop-up window that appears, :ref:`fill out the
Schedule Activity form <activities/form>`.
.. image:: activities/chatter.png
:align: center
:alt: New activity type form.
.. _activities/kanban:
Kanban view
-----------
Activities can also be created from the :icon:`oi-view-kanban` :guilabel:`(Kanban)` view.
To do so, click on the |clock| located at the bottom of an individual record.
Click :guilabel:`+ Schedule An Activity`, then proceed to :ref:`fill out the Schedule Activity form
<activities/form>`.
.. image:: activities/schedule-kanban-activity.png
:align: center
:alt: Kanban view of the CRM pipeline and the option to schedule an activity.
.. note::
If a record already has a scheduled activity, the |clock| is replaced by the icon that represents
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
.. _activities/list:
List view
---------
Activities can also be created from a :icon:`oi-view-list` :guilabel:`(list)` view.
If the :guilabel:`Activities` column is hidden, reveal it using the :icon:`oi-settings-adjust`
:guilabel:`(settings adjust)` icon in the far-right of the top row.
Then, click on the |clock| for the record the activity is being added to, and click :guilabel:`+
Schedule an activity`. Proceed to :ref:`fill out the Schedule Activity form <activities/form>` that
appears.
.. note::
If a record already has a scheduled activity, the |clock| is replaced by the icon that represents
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
.. image:: activities/schedule-list-activity.png
:align: center
:alt: List view of the CRM pipeline and the option to schedule an activity.
.. _activities/activity:
Activity view
-------------
Most applications in Odoo have an *Activity* view available. If available, a |clock| is visible in
the top-right corner of the main menu bar, amongst the other view option icons.
To open the activity view, click the |clock|.
.. image:: activities/activities.png
:align: center
:alt: Top-right menu with the Activities icon called out.
In this view, all the available activities are listed in the columns, while the horizontal entries
represent all the individual records.
Activities that appear green have a due date in the future, activities that appear orange are due
today, while activities appearing red are overdue.
Color bars in each column represent records for specific activity types, and display a number
indicating how many activities are scheduled for that type.
If multiple activity types are scheduled for a record, a number appears in the box, indicating the
total number of scheduled activities.
.. note::
Activity colors, and their relation to an activity's due date, are consistent throughout Odoo,
regardless of the activity type, or the view.
To schedule an activity for a record, hover over the corresponding field. Click the :icon:`fa-plus`
:guilabel:`(plus)` icon that appears, and then :ref:`fill out the Schedule Activity form
<activities/form>`.
.. image:: activities/activity-view.png
:align: center
:alt: Activity view of the CRM pipeline and the option to schedule an activity.
.. _activities/form:
Schedule Activity form
----------------------
Activities can be scheduled from many different places, such as from the :ref:`chatter
<activities/chatter>` of a record, or from one of multiple views in an application, when available:
the :ref:`Kanban view <activities/kanban>`, :ref:`list view <activities/list>`, or :ref:`activity
view <activities/activity>`.
Enter the following information on the form:
- :guilabel:`Activity Type`: select the type of activity from the drop-down menu. The default
options are: :guilabel:`Email`, :guilabel:`Call`, :guilabel:`Meeting`, or :guilabel:`To-Do`.
Depending on what other applications are installed, additional options may be available.
- :guilabel:`Summary`: enter a short title for the activity, such as `Discuss Proposal`.
- :guilabel:`Due Date`: using the calendar popover, select the activity's deadline.
- :guilabel:`Assigned to`: by default, the current user populates this field. To assign a different
user to the activity, select them from the drop-down menu.
- :guilabel:`Notes`: add any additional information for the activity in this field.
When the :guilabel:`Schedule Activity` pop-up window is completed, click one of the following
buttons:
- :guilabel:`Open Calendar`: opens the user's calendar to add and schedule the activity.
Click on the desired date and time for the activity, and a :guilabel:`New Event` pop-up window
appears. The summary from the *Schedule Activity* pop-up window populates the :guilabel:`Title`
field.
Enter the information in the :guilabel:`New Event` pop-up window, then click :guilabel:`Save &
Close` to schedule it. Once scheduled, the activity is added to the chatter under the
:guilabel:`Planned Activities` section.
.. important::
The :guilabel:`Open Calendar` button **only** appears if the :guilabel:`Activity Type` is set
to either :guilabel:`Call` or :guilabel:`Meeting`.
- :guilabel:`Schedule`: schedules the activity, and adds the activity to the chatter under
:guilabel:`Planned Activities`.
- :guilabel:`Schedule & Mark as Done`: adds the details of the activity to the chatter under
:guilabel:`Today`. The activity is not scheduled, and is automatically marked as done.
- :guilabel:`Done & Schedule Next`: adds the details of the activity to the chatter under
:guilabel:`Today`. The activity is not scheduled, is automatically marked as done, and a new
:guilabel:`Schedule Activity` pop-up window appears.
- :guilabel:`Cancel`: discards any changes made on the :guilabel:`Schedule Activity` pop-up window.
.. image:: activities/schedule-pop-up.png
:align: center
:alt: View of CRM leads and the option to schedule an activity.
.. _activities/all:
All scheduled activities
========================
To view a consolidated list of activities, organized by application, click the |clock| in the header
menu, located in the top-right corner.
If any activities are scheduled, the number of activities appear in a red bubble on the
|clock|.
All activities for each application are further divided into subsections, indicating where in the
application the activity is to be completed. Each sub-section lists the number of scheduled
activities that are :guilabel:`Late`, due :guilabel:`Today`, and scheduled in the
:guilabel:`Future`.
.. example::
In the *Time Off* application, one activity is scheduled to be done in the *All Time Off*
requests dashboard, and six activities are scheduled to be done in the *Allocations* dashboard.
These requests appear in two separate lists in the all activities drop-down menu: one labeled
`Time Off` and one labeled `Time Off Allocation`.
.. image:: activities/activities-menu.png
:align: center
:alt: The list of activities that is accessed from the main menu bar. Two entries for the Time
Off application are highlighted.
Request a document
------------------
The option to :guilabel:`Request a Document` is available at the bottom of the list of :ref:`all
scheduled activities <activities/all>`, the option to :guilabel:`Request a Document` appears. Click
:guilabel:`Request a Document`, and a :guilabel:`Request a file` pop-up window appears.
Enter the following information on the form:
- :guilabel:`Document Name`: enter a name for the document being requested.
- :guilabel:`Request To`: select the user the document is being requested from using the drop-down
menu.
- :guilabel:`Due Date In`: enter a numerical value indicating when the document is due. Next to
this field, a :guilabel:`Days` field is visible. Click :guilabel:`Days`, the default option, to
reveal a drop-down menu. Select the desired time-frame option from the list. The options are
:guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`.
- :guilabel:`Workspace`: using the drop-down menu, select the specific :ref:`Workspace
<documents/workspaces>` the document is being uploaded to.
- :guilabel:`Tags`: select any desired tags from the drop-down menu. The available tags displayed
are based on the tags configured for the selected :guilabel:`Workspace`.
- :guilabel:`Message`: enter a message to clarify the document request in this field.
When all the fields are completed, click :guilabel:`Request` to send the document request.
.. image:: activities/request-doc.png
:align: center
:alt: The Request a file form, with all fields filled out to request a contract.
.. _activities/types:
Activity types
==============
To view the currently configured types of activities in the database, navigate to
:menuselection:`Settings app --> Discuss section --> Activities setting --> Activity Types`.
.. image:: activities/settings-activities-types.png
:align: center
:alt: Activity Types button in the Settings application under the Discuss section.
Doing so reveals the :guilabel:`Activity Types` page, where the existing activity types are found.
.. tip::
Individual applications have a list of *Activity Types* dedicated to that application. For
example, to view and edit the activities available for the *CRM* application, go to
:menuselection:`CRM app --> Configuration --> Activity Types`.
.. image:: activities/activity-list.png
:align: center
:alt: The list of activity types already configured and available.
Edit activity types
-------------------
To edit an existing :ref:`activity type <activities/types>`, click on the activity type, and the
activity type form loads.
Make any desired changes to the activity type form. The form automatically saves, but it can be
saved manually at any time by clicking the :guilabel:`Save Manually` option, represented by a
:icon:`fa-cloud-upload` :guilabel:`(cloud upload)` icon, located in the top-left corner of the page.
Create new activity types
-------------------------
To create a new :ref:`activity type <activities/types>`, click :guilabel:`New` from the
:guilabel:`Activity Types` page, and a blank activity type form loads.
Enter a :guilabel:`Name` for the activity type at the top of the form, then enter the following
information on the form.
Activity Settings section
~~~~~~~~~~~~~~~~~~~~~~~~~
- :guilabel:`Action`: using the drop-down menu, select an action associated with this new activity
type. Some actions trigger specific behaviors after an activity is scheduled, such as:
- :guilabel:`Upload Document`: if selected, a link to upload a document is automatically added to
the planned activity in the chatter.
- :guilabel:`Call` or :guilabel:`Meeting`: if selected, users have the option to open their
calendar to select a date and time for the activity.
- :guilabel:`Request Signature`: if selected, a link to open a signature request pop-up window is
automatically added to the planned activity in the chatter. This requires the Odoo *Sign*
application to be installed.
.. note::
Available activity types vary based on the installed applications in the database.
- :guilabel:`Folder`: select a specific :ref:`workspace <documents/workspaces>` folder to save a
document to. This field **only** appears if :guilabel:`Upload Document` is selected for the
:guilabel:`Action`.
Using the drop-down menu, select the :guilabel:`Folder` the document is saved to.
- :guilabel:`Default User`: select a user from the drop-down menu to automatically assign this
activity to the selected user when this activity type is scheduled. If this field is left blank,
the activity is assigned to the user who creates the activity.
- :guilabel:`Default Summary`: enter a note to include whenever this activity type is created.
.. note::
The information in the :guilabel:`Default User` and :guilabel:`Default Summary` fields are
included when an activity is created. However, they can be altered before the activity is
scheduled or saved.
- :guilabel:`Keep Done`: tick this checkbox to keep activities that have been marked as `Done`
visible in the :ref:`activity view <activities/activity>`.
- :guilabel:`Default Note`: enter any notes to appear with the activity.
Next Activity section
~~~~~~~~~~~~~~~~~~~~~
It is possible to have another activity either suggested or triggered. To do so, configure the
:guilabel:`Next Activity` section.
- :guilabel:`Chaining Type`: select either :guilabel:`Suggest Next Activity` or :guilabel:`Trigger
Next Activity` from the drop-down menu. Depending on the selected option, either the
:guilabel:`Suggest` or :guilabel:`Trigger` field is displayed.
.. note::
The :guilabel:`Chaining Type` field does **not** appear if :guilabel:`Upload Document` is
selected for the :guilabel:`Action`.
- :guilabel:`Suggest/Trigger`: depending on what is selected for the :guilabel:`Chaining Type`, this
field either displays :guilabel:`Suggest` or :guilabel:`Trigger`. Using the drop-down menu, select
the activity to recommend or schedule as a follow-up task to the activity type.
- :guilabel:`Schedule`: configure when the next activity is suggested or triggered.
First, enter a numerical value indicating when the activity is suggested or triggered.
Next to this field, a :guilabel:`Days` field is visible. Click :guilabel:`Days`, the default
option, to reveal a drop-down menu. Select the desired time-frame option from the list. The
options are :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`.
Lastly, using the drop-down menu, select whether the activity is scheduled or triggered either
:guilabel:`after previous activity deadline` or :guilabel:`after completion date`.
.. image:: activities/new-activity.png
:align: center
:alt: A new Activity form with all the fields filled out.
.. seealso::
- :doc:`../productivity/discuss`
- :doc:`../productivity/discuss/team_communication`
- :doc:`../sales/crm/optimize/utilize_activities`
+257
View File
@@ -0,0 +1,257 @@
---
show-content: true
---
# Contacts
Contacts are created in the **Contacts** application for customers the company does business with
through Odoo. A contact is a repository of vital business information, facilitating communication
and business transactions.
## Contact form
To create a new contact, navigate to the {menuselection}`Contacts app`, and click
{guilabel}`Create`. A new form appears where various contact information can be added.
### Contact type
Odoo allows for both {guilabel}`Individual` and {guilabel}`Company` contacts. Select either
{guilabel}`Individual` or {guilabel}`Company`, depending on the type of contact that is being added.
### Name
First, fill in the name of the {guilabel}`Individual` or {guilabel}`Company`. This is how the name
appears throughout the database. This field is **mandatory**.
:::{tip}
{guilabel}`Individual` contacts can have a {guilabel}`Company` contact linked to it. After
selecting {guilabel}`Individual`, a new {guilabel}`Company Name...` field appears below the
first name field.
:::
### Address
Next, enter the {guilabel}`Address` of the {guilabel}`Company` or {guilabel}`Individual`.
:::{tip}
If the {guilabel}`Individual` option is chosen, then the *type of address* can be chosen from a
drop-down menu. Options for this drop-down menu include: {guilabel}`Contact`, {guilabel}`Invoice
Address`, {guilabel}`Delivery Address`, {guilabel}`Other Address`, and {guilabel}`Private
Address`.
:::
### Additional fields
Additional details are included on the initial form. The following fields are available:
- {guilabel}`VAT`: Value Added Tax number.
- {guilabel}`Citizen Identification`: citizen or government identification number (only available
on {guilabel}`Individual`).
- {guilabel}`Job Position`: list the job position of the {guilabel}`Individual` (only available on
{guilabel}`Individual`).
- {guilabel}`Phone`: list phone number (with country code). Make a call, send an SMS, or WhatsApp
message by hovering over the field on the saved form, and clicking the desired option.
- {guilabel}`Mobile`: list mobile phone number (with country code). Make a call, send an SMS, or
WhatsApp message by hovering over the field on the saved form, and clicking on the desired option.
- {guilabel}`Email`: enter the email address with the domain.
- {guilabel}`Website`: enter the full website address, starting with `http` or `https`.
- {guilabel}`Title`: select {guilabel}`Doctor`, {guilabel}`Madam`, {guilabel}`Miss`,
{guilabel}`Mister`, {guilabel}`Professor`, or create a new one directly from this field.
- {guilabel}`Tags`: enter preconfigured tags by typing them in the field, or clicking the drop-down
menu, and selecting one. To create a new one, type the new tag in the field, and click
{guilabel}`Create` from the resulting drop-down menu.
### Contacts & Addresses tab
At the bottom of the contact form are several tabs. On the {guilabel}`Contacts & Addresses` tab,
contacts can be added that are associated with a {guilabel}`Company` and related addresses. For
example, a specific contact person for the company can be listed here.
Multiple addresses can be added on both {guilabel}`Individual` and {guilabel}`Company` contacts. To
do so, click {guilabel}`Add` in the {guilabel}`Contacts & Addresses` tab. Doing so reveals a
{guilabel}`Create Contact` pop-up form, in which additional addresses can be configured.
```{image} contacts/contact-form-add-address.png
:align: center
:alt: Add a contact/address to the contact form.
```
On the {guilabel}`Create Contact` pop-up form, start by clicking the default {guilabel}`Other
Address` field at the top to reveal a drop-down menu of address-related options.
Select any of the following options:
- {guilabel}`Contact`: adds another contact to the existing contact form.
- {guilabel}`Invoice Address`: adds a specific invoice address to the existing contact form.
- {guilabel}`Delivery Address`: adds a specific delivery address to the existing contact form.
- {guilabel}`Other Address`: adds an alternate address to the existing contact form.
- {guilabel}`Private Address`: adds a private address to the existing contact form.
```{image} contacts/create-contact-window.png
:align: center
:alt: Create a new contact/address on a contact form.
```
Once an option is selected, enter the corresponding contact information that should be used for the
specified address type.
Add the {guilabel}`Contact Name`, {guilabel}`Address`, {guilabel}`Email`, along with the
{guilabel}`Phone` and/or {guilabel}`Mobile` numbers below.
Set the {guilabel}`Job Position`, which appears if the {guilabel}`Contact` address type has been
selected. This is similar to the {guilabel}`Individual` contact.
To add a note, click on the text field next to {guilabel}`Notes`, and write anything that is
applicable to the customer or contact.
Then, click {guilabel}`Save & Close` to save the address, and close the {guilabel}`Create Contact`
window. Or, click {guilabel}`Save & New` to save the address, and immediately input another one.
### Sales & Purchase tab
Next, is the {guilabel}`Sales & Purchases` tab, which only appears when the *Sales*, *Purchase*,
**or** *Point of Sale* applications are installed.
The {guilabel}`Fiscal Position` can be set on the {guilabel}`Sales & Purchases` tab. Select a
{guilabel}`Fiscal Position` from the drop-down menu.
#### Sales section
Under the {guilabel}`Sales` heading, a specific {guilabel}`Salesperson` can be assigned to a
contact. To do that, click the {guilabel}`Salesperson` drop-down field, and select one. Create a new
{guilabel}`Salesperson` by typing the user's name, and making the appropriate selection.
Certain {guilabel}`Payment Terms`, or a certain {guilabel}`Pricelist`, can also be set, if needed.
Click the drop-down menu next to {guilabel}`Payment Terms`, and change it to one of the preselected
{guilabel}`Payment Terms`, or {guilabel}`Create` a new one. Select the {guilabel}`Pricelist`
drop-down menu to choose the appropriate {guilabel}`Pricelist`.
Click into the {guilabel}`Delivery Method` field to select an option from the drop-down menu.
#### Point Of Sale section
Under the {guilabel}`Point Of Sale` heading, enter a {guilabel}`Barcode` that can be used to
identify the contact. Use the {guilabel}`Loyalty Points` field to track points the user won as part
of a *Loyalty Program*.
#### Purchase section
Specify {guilabel}`Payment Terms`, {guilabel}`1099 Box` information, and a preferred
{guilabel}`Payment Method` here. A {guilabel}`Receipt Reminder` can be set here, as well.
#### Misc section
Under the {guilabel}`Misc.` heading, use {guilabel}`Reference` field to add any additional
information for this contact. If this contact should only be accessible for one company in a
multi-company database, select it from the {guilabel}`Company` field drop-down list. Use the
{guilabel}`Website` drop-down menu to restrict the publishing of this contact to one website (if
working on a database with multiple websites). Select one or more {guilabel}`Website Tags` to assist
in filtering published customers on the `/customers` website page. Select an {guilabel}`Industry`
for this contact from the drop-down menu. Use the {guilabel}`SLA Policies` field to assign a
*Helpdesk* SLA policy to this contact.
### Accounting tab
The {guilabel}`Accounting` tab appears when the *Accounting* application is installed. Here, a user
can add any related {guilabel}`Bank Accounts`, or set default {guilabel}`Accounting entries`.
Under the {guilabel}`Miscellaneous` heading, use the {guilabel}`LEI` field to enter a Legal Entity
Identifier, if necessary.
### Internal Notes tab
Following the {guilabel}`Accounting` tab is the {guilabel}`Internal Notes` tab, where notes can be
left on this contact form, just like on the contact form noted above.
### Partner Assignment tab
Next is the {guilabel}`Partner Assignment` tab, which by default, includes a {guilabel}`Geolocation`
section, and other partner options, including {guilabel}`Partner Activation` and {guilabel}`Partner
Review` configurations. These are **only** present when the *Resellers* module is installed.
:::{seealso}
Follow the {doc}`Resellers documentation <../sales/crm/track_leads/resellers>` for more
information on publishing partners on the website.
:::
### Membership tab
Finally, there is the {guilabel}`Membership` tab on contact forms, which can help users manage any
memberships that are being offered to this specific contact. It should be noted that this tab
**only** appears when the *Members* application is installed.
#### Activate membership
To activate a contact's membership, click {guilabel}`Buy Membership` in the {guilabel}`Membership`
tab of a contact form. On the pop-up window that appears, select a {guilabel}`Membership` from the
drop-down menu. Then, configure a {guilabel}`Member Price`. Click {guilabel}`Invoice Membership`
when both fields are filled in.
Alternatively, to offer a free membership, tick the {guilabel}`Free Member` checkbox, in the
{guilabel}`Membership` tab of a contact form.
:::{seealso}
Follow the {doc}`Members documentation <../sales/members>` for more information on publishing
members on the website.
:::
## Smart buttons
At the top of the contact form, there are some additional options available, known as *smart
buttons*.
Here, Odoo displays a variety of records, related to this contact, that were created on other apps.
Odoo integrates information from every single app, so there are many smart buttons.
```{eval-rst}
.. example::
For example, there is an :guilabel:`Opportunities` smart button, where all the opportunities
related to this customer from the *CRM* app are accessible.
```
:::{tip}
If the corresponding applications are installed, their related smart buttons appear
automatically on a contact form.
:::
A user can see any {guilabel}`Meetings`, {guilabel}`Sales`, {guilabel}`POS Orders`,
{guilabel}`Subscriptions`, project {guilabel}`Tasks`, and the {guilabel}`More` smart button reveals
additional options, via a drop-down menu. A user can even quickly access {guilabel}`Purchases`,
{guilabel}`Helpdesk` tasks, {guilabel}`On-time Rate` for deliveries, {guilabel}`Invoiced`
information, {guilabel}`Vendor Bills`, and the {guilabel}`Partner Ledger` connected to this contact.
Deliveries, documents, loyalty cards, and direct debits are *also* linked to smart buttons, like
this, should there be any outstanding/on-file for this contact.
If the contact is a partner, the user can visit their partner page on the Odoo-built website by
clicking the {guilabel}`Go to Website` smart button.
### Archive contacts
If a user decides they no longer want to have this contact active, the record can be archived. To do
that, go to the {icon}`fa-cog` {guilabel}`Action` menu at the top of the contact form, and click
{guilabel}`Archive`.
Then, click {guilabel}`OK` from the resulting {guilabel}`Confirmation` pop-up window.
With this contact successfully archived, as indicated by a banner at the top, they do not show up
in the main contacts page, but they can still be searched for with the {guilabel}`Archived` filter.
:::{tip}
A contact can be *unarchived*, if the user decides to work with them again. To do that, just
click the {icon}`fa-cog` {guilabel}`Action` menu again at the top of the archived contact form,
and click {guilabel}`Unarchive`. Upon doing so, the {guilabel}`Archived` banner is removed, and
the contact is restored.
:::
:::{seealso}
- {doc}`Add different addresses in CRM <../sales/sales/send_quotations/different_addresses>`
- [Odoo's eLearning Contacts tutorial](https://www.odoo.com/slides/slide/contacts-2527?fullscreen=1)
:::
```{toctree}
:titlesonly: true
contacts/merge
```
@@ -1,263 +0,0 @@
:show-content:
========
Contacts
========
Contacts are created in the **Contacts** application for customers the company does business with
through Odoo. A contact is a repository of vital business information, facilitating communication
and business transactions.
Contact form
============
To create a new contact, navigate to the :menuselection:`Contacts app`, and click
:guilabel:`Create`. A new form appears where various contact information can be added.
Contact type
------------
Odoo allows for both :guilabel:`Individual` and :guilabel:`Company` contacts. Select either
:guilabel:`Individual` or :guilabel:`Company`, depending on the type of contact that is being added.
Name
----
First, fill in the name of the :guilabel:`Individual` or :guilabel:`Company`. This is how the name
appears throughout the database. This field is **mandatory**.
.. tip::
:guilabel:`Individual` contacts can have a :guilabel:`Company` contact linked to it. After
selecting :guilabel:`Individual`, a new :guilabel:`Company Name...` field appears below the
first name field.
Address
-------
Next, enter the :guilabel:`Address` of the :guilabel:`Company` or :guilabel:`Individual`.
.. tip::
If the :guilabel:`Individual` option is chosen, then the *type of address* can be chosen from a
drop-down menu. Options for this drop-down menu include: :guilabel:`Contact`, :guilabel:`Invoice
Address`, :guilabel:`Delivery Address`, :guilabel:`Other Address`, and :guilabel:`Private
Address`.
Additional fields
-----------------
Additional details are included on the initial form. The following fields are available:
- :guilabel:`VAT`: Value Added Tax number.
- :guilabel:`Citizen Identification`: citizen or government identification number (only available
on :guilabel:`Individual`).
- :guilabel:`Job Position`: list the job position of the :guilabel:`Individual` (only available on
:guilabel:`Individual`).
- :guilabel:`Phone`: list phone number (with country code). Make a call, send an SMS, or WhatsApp
message by hovering over the field on the saved form, and clicking the desired option.
- :guilabel:`Mobile`: list mobile phone number (with country code). Make a call, send an SMS, or
WhatsApp message by hovering over the field on the saved form, and clicking on the desired option.
- :guilabel:`Email`: enter the email address with the domain.
- :guilabel:`Website`: enter the full website address, starting with `http` or `https`.
- :guilabel:`Title`: select :guilabel:`Doctor`, :guilabel:`Madam`, :guilabel:`Miss`,
:guilabel:`Mister`, :guilabel:`Professor`, or create a new one directly from this field.
- :guilabel:`Tags`: enter preconfigured tags by typing them in the field, or clicking the drop-down
menu, and selecting one. To create a new one, type the new tag in the field, and click
:guilabel:`Create` from the resulting drop-down menu.
Contacts & Addresses tab
------------------------
At the bottom of the contact form are several tabs. On the :guilabel:`Contacts & Addresses` tab,
contacts can be added that are associated with a :guilabel:`Company` and related addresses. For
example, a specific contact person for the company can be listed here.
Multiple addresses can be added on both :guilabel:`Individual` and :guilabel:`Company` contacts. To
do so, click :guilabel:`Add` in the :guilabel:`Contacts & Addresses` tab. Doing so reveals a
:guilabel:`Create Contact` pop-up form, in which additional addresses can be configured.
.. image:: contacts/contact-form-add-address.png
:align: center
:alt: Add a contact/address to the contact form.
On the :guilabel:`Create Contact` pop-up form, start by clicking the default :guilabel:`Other
Address` field at the top to reveal a drop-down menu of address-related options.
Select any of the following options:
- :guilabel:`Contact`: adds another contact to the existing contact form.
- :guilabel:`Invoice Address`: adds a specific invoice address to the existing contact form.
- :guilabel:`Delivery Address`: adds a specific delivery address to the existing contact form.
- :guilabel:`Other Address`: adds an alternate address to the existing contact form.
- :guilabel:`Private Address`: adds a private address to the existing contact form.
.. image:: contacts/create-contact-window.png
:align: center
:alt: Create a new contact/address on a contact form.
Once an option is selected, enter the corresponding contact information that should be used for the
specified address type.
Add the :guilabel:`Contact Name`, :guilabel:`Address`, :guilabel:`Email`, along with the
:guilabel:`Phone` and/or :guilabel:`Mobile` numbers below.
Set the :guilabel:`Job Position`, which appears if the :guilabel:`Contact` address type has been
selected. This is similar to the :guilabel:`Individual` contact.
To add a note, click on the text field next to :guilabel:`Notes`, and write anything that is
applicable to the customer or contact.
Then, click :guilabel:`Save & Close` to save the address, and close the :guilabel:`Create Contact`
window. Or, click :guilabel:`Save & New` to save the address, and immediately input another one.
Sales & Purchase tab
--------------------
Next, is the :guilabel:`Sales & Purchases` tab, which only appears when the *Sales*, *Purchase*,
**or** *Point of Sale* applications are installed.
The :guilabel:`Fiscal Position` can be set on the :guilabel:`Sales & Purchases` tab. Select a
:guilabel:`Fiscal Position` from the drop-down menu.
Sales section
~~~~~~~~~~~~~
Under the :guilabel:`Sales` heading, a specific :guilabel:`Salesperson` can be assigned to a
contact. To do that, click the :guilabel:`Salesperson` drop-down field, and select one. Create a new
:guilabel:`Salesperson` by typing the user's name, and making the appropriate selection.
Certain :guilabel:`Payment Terms`, or a certain :guilabel:`Pricelist`, can also be set, if needed.
Click the drop-down menu next to :guilabel:`Payment Terms`, and change it to one of the preselected
:guilabel:`Payment Terms`, or :guilabel:`Create` a new one. Select the :guilabel:`Pricelist`
drop-down menu to choose the appropriate :guilabel:`Pricelist`.
Click into the :guilabel:`Delivery Method` field to select an option from the drop-down menu.
Point Of Sale section
~~~~~~~~~~~~~~~~~~~~~
Under the :guilabel:`Point Of Sale` heading, enter a :guilabel:`Barcode` that can be used to
identify the contact. Use the :guilabel:`Loyalty Points` field to track points the user won as part
of a *Loyalty Program*.
Purchase section
~~~~~~~~~~~~~~~~
Specify :guilabel:`Payment Terms`, :guilabel:`1099 Box` information, and a preferred
:guilabel:`Payment Method` here. A :guilabel:`Receipt Reminder` can be set here, as well.
Misc section
~~~~~~~~~~~~
Under the :guilabel:`Misc.` heading, use :guilabel:`Reference` field to add any additional
information for this contact. If this contact should only be accessible for one company in a
multi-company database, select it from the :guilabel:`Company` field drop-down list. Use the
:guilabel:`Website` drop-down menu to restrict the publishing of this contact to one website (if
working on a database with multiple websites). Select one or more :guilabel:`Website Tags` to assist
in filtering published customers on the `/customers` website page. Select an :guilabel:`Industry`
for this contact from the drop-down menu. Use the :guilabel:`SLA Policies` field to assign a
*Helpdesk* SLA policy to this contact.
Accounting tab
--------------
The :guilabel:`Accounting` tab appears when the *Accounting* application is installed. Here, a user
can add any related :guilabel:`Bank Accounts`, or set default :guilabel:`Accounting entries`.
Under the :guilabel:`Miscellaneous` heading, use the :guilabel:`LEI` field to enter a Legal Entity
Identifier, if necessary.
Internal Notes tab
------------------
Following the :guilabel:`Accounting` tab is the :guilabel:`Internal Notes` tab, where notes can be
left on this contact form, just like on the contact form noted above.
Partner Assignment tab
----------------------
Next is the :guilabel:`Partner Assignment` tab, which by default, includes a :guilabel:`Geolocation`
section, and other partner options, including :guilabel:`Partner Activation` and :guilabel:`Partner
Review` configurations. These are **only** present when the *Resellers* module is installed.
.. seealso::
Follow the :doc:`Resellers documentation <../sales/crm/track_leads/resellers>` for more
information on publishing partners on the website.
Membership tab
--------------
Finally, there is the :guilabel:`Membership` tab on contact forms, which can help users manage any
memberships that are being offered to this specific contact. It should be noted that this tab
**only** appears when the *Members* application is installed.
Activate membership
~~~~~~~~~~~~~~~~~~~
To activate a contact's membership, click :guilabel:`Buy Membership` in the :guilabel:`Membership`
tab of a contact form. On the pop-up window that appears, select a :guilabel:`Membership` from the
drop-down menu. Then, configure a :guilabel:`Member Price`. Click :guilabel:`Invoice Membership`
when both fields are filled in.
Alternatively, to offer a free membership, tick the :guilabel:`Free Member` checkbox, in the
:guilabel:`Membership` tab of a contact form.
.. seealso::
Follow the :doc:`Members documentation <../sales/members>` for more information on publishing
members on the website.
Smart buttons
=============
At the top of the contact form, there are some additional options available, known as *smart
buttons*.
Here, Odoo displays a variety of records, related to this contact, that were created on other apps.
Odoo integrates information from every single app, so there are many smart buttons.
.. example::
For example, there is an :guilabel:`Opportunities` smart button, where all the opportunities
related to this customer from the *CRM* app are accessible.
.. tip::
If the corresponding applications are installed, their related smart buttons appear
automatically on a contact form.
A user can see any :guilabel:`Meetings`, :guilabel:`Sales`, :guilabel:`POS Orders`,
:guilabel:`Subscriptions`, project :guilabel:`Tasks`, and the :guilabel:`More` smart button reveals
additional options, via a drop-down menu. A user can even quickly access :guilabel:`Purchases`,
:guilabel:`Helpdesk` tasks, :guilabel:`On-time Rate` for deliveries, :guilabel:`Invoiced`
information, :guilabel:`Vendor Bills`, and the :guilabel:`Partner Ledger` connected to this contact.
Deliveries, documents, loyalty cards, and direct debits are *also* linked to smart buttons, like
this, should there be any outstanding/on-file for this contact.
If the contact is a partner, the user can visit their partner page on the Odoo-built website by
clicking the :guilabel:`Go to Website` smart button.
Archive contacts
----------------
If a user decides they no longer want to have this contact active, the record can be archived. To do
that, go to the :icon:`fa-cog` :guilabel:`Action` menu at the top of the contact form, and click
:guilabel:`Archive`.
Then, click :guilabel:`OK` from the resulting :guilabel:`Confirmation` pop-up window.
With this contact successfully archived, as indicated by a banner at the top, they do not show up
in the main contacts page, but they can still be searched for with the :guilabel:`Archived` filter.
.. tip::
A contact can be *unarchived*, if the user decides to work with them again. To do that, just
click the :icon:`fa-cog` :guilabel:`Action` menu again at the top of the archived contact form,
and click :guilabel:`Unarchive`. Upon doing so, the :guilabel:`Archived` banner is removed, and
the contact is restored.
.. seealso::
- :doc:`Add different addresses in CRM <../sales/sales/send_quotations/different_addresses>`
- `Odoo's eLearning Contacts tutorial
<https://www.odoo.com/slides/slide/contacts-2527?fullscreen=1>`_
.. toctree::
:titlesonly:
contacts/merge
@@ -0,0 +1,80 @@
# Merge contacts
Odoo's *Contacts* application allows user's to merge duplicate contacts, without losing any
information in the process. This keeps the database organized, and prevents contacts from being
contacted by more than one salesperson.
(contacts-merge-duplicate)=
## Merge duplicate contacts
:::{danger}
Merging is an irreversible action. Do **not** merge contacts unless absolutely certain they
should be combined.
:::
Navigate to the {menuselection}`Contacts app`, and select the {icon}`oi-view-list`
{guilabel}`(list)` icon. Select two or more duplicate contacts from the list, and tick the checkbox
(on the far-left) for the contacts that should be merged. Then, click the {icon}`fa-cog`
{guilabel}`Actions` icon, and select {guilabel}`Merge` from the resulting drop-down menu.
```{image} merge/merge-menu.png
:align: center
:alt: The merge contacts option in the Contacts application.
```
This opens the {guilabel}`Merge` pop-up window. From here, review the details of the contacts before
confirming they should be merged. If any contacts in the list should **not** be merged, click the
{icon}`fa-times` {guilabel}`(delete)` icon at the far right of the contact.
:::{tip}
Click the individual contact to open the record for that contact, and view additional
information.
:::
```{image} merge/merge-window.png
:align: center
:alt: The merge pop-up window in the Contacts application.
```
Click the {guilabel}`Destination Contact` field, and select an option from the drop-down list. This
field defaults to the contact record that was created first in the system.
After confirming the information on the pop-up window, click {guilabel}`Merge Contacts`.
## Deduplicate contacts
After the merge is finished, a pop-up window appears confirming it is complete. This pop-up window
also contains a {guilabel}`Deduplicate the other Contacts` button. This feature searches for
duplicated records, based on selected criteria, and merges them automatically, or after manual
approval.
Click the {guilabel}`Deduplicate the other Contacts` button to open the {guilabel}`Deduplicate
Contacts` pop-up window.
Select one or more fields to be used in the search for duplicated records. Duplicated contacts can
be searched, based on the following criteria:
- {guilabel}`Email`
- {guilabel}`Name`
- {guilabel}`Is Company`
- {guilabel}`VAT`
- {guilabel}`Parent Company`
:::{note}
If more than one field is selected, only records that have **all** fields in common are suggested
as duplicates.
:::
If necessary, select criteria to be used to exclude potential duplicates from the search. Potential
duplicates can be excluded from the search, based on the following criteria:
- {guilabel}`A user associated to the contact`
- {guilabel}`Journal Items associated to the contact`
After confirming the search criteria, click either {guilabel}`Merge with Manual Check`,
{guilabel}`Merge Automatically`, or {guilabel}`Merge Automatically all process`.
If {guilabel}`Merge with Manual Check` is selected, complete the merge by following the {ref}`steps
above <contacts/merge-duplicate>`.
@@ -1,78 +0,0 @@
==============
Merge contacts
==============
Odoo's *Contacts* application allows user's to merge duplicate contacts, without losing any
information in the process. This keeps the database organized, and prevents contacts from being
contacted by more than one salesperson.
.. _contacts/merge-duplicate:
Merge duplicate contacts
========================
.. danger::
Merging is an irreversible action. Do **not** merge contacts unless absolutely certain they
should be combined.
Navigate to the :menuselection:`Contacts app`, and select the :icon:`oi-view-list`
:guilabel:`(list)` icon. Select two or more duplicate contacts from the list, and tick the checkbox
(on the far-left) for the contacts that should be merged. Then, click the :icon:`fa-cog`
:guilabel:`Actions` icon, and select :guilabel:`Merge` from the resulting drop-down menu.
.. image:: merge/merge-menu.png
:align: center
:alt: The merge contacts option in the Contacts application.
This opens the :guilabel:`Merge` pop-up window. From here, review the details of the contacts before
confirming they should be merged. If any contacts in the list should **not** be merged, click the
:icon:`fa-times` :guilabel:`(delete)` icon at the far right of the contact.
.. tip::
Click the individual contact to open the record for that contact, and view additional
information.
.. image:: merge/merge-window.png
:align: center
:alt: The merge pop-up window in the Contacts application.
Click the :guilabel:`Destination Contact` field, and select an option from the drop-down list. This
field defaults to the contact record that was created first in the system.
After confirming the information on the pop-up window, click :guilabel:`Merge Contacts`.
Deduplicate contacts
====================
After the merge is finished, a pop-up window appears confirming it is complete. This pop-up window
also contains a :guilabel:`Deduplicate the other Contacts` button. This feature searches for
duplicated records, based on selected criteria, and merges them automatically, or after manual
approval.
Click the :guilabel:`Deduplicate the other Contacts` button to open the :guilabel:`Deduplicate
Contacts` pop-up window.
Select one or more fields to be used in the search for duplicated records. Duplicated contacts can
be searched, based on the following criteria:
- :guilabel:`Email`
- :guilabel:`Name`
- :guilabel:`Is Company`
- :guilabel:`VAT`
- :guilabel:`Parent Company`
.. note::
If more than one field is selected, only records that have **all** fields in common are suggested
as duplicates.
If necessary, select criteria to be used to exclude potential duplicates from the search. Potential
duplicates can be excluded from the search, based on the following criteria:
- :guilabel:`A user associated to the contact`
- :guilabel:`Journal Items associated to the contact`
After confirming the search criteria, click either :guilabel:`Merge with Manual Check`,
:guilabel:`Merge Automatically`, or :guilabel:`Merge Automatically all process`.
If :guilabel:`Merge with Manual Check` is selected, complete the merge by following the :ref:`steps
above <contacts/merge-duplicate>`.
@@ -0,0 +1,554 @@
---
substitutions:
actions: '{icon}`fa-cog` {guilabel}`Actions`'
list: '{icon}`oi-view-list` {guilabel}`(list)` icon'
---
# Export and import data
In Odoo, it is sometimes necessary to export or import data for running reports, or for data
modification. This document covers the export and import of data into and out of Odoo.
:::{important}
Sometimes, users run into a 'time out' error, or a record does not process, due to its size. This
can occur with large exports, or in cases where the import file is too large. To circumvent this
limitation surrounding the size of the records, process exports or imports in smaller batches.
:::
(export-data)=
## Export data from Odoo
When working with a database, it is sometimes necessary to export data in a distinct file. Doing so
can aid in reporting on activities, although, Odoo provides a precise and easy reporting tool with
each available application.
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
({{ list }}), on the items that need to be exported, then select the records that should be exported. To
select a record, tick the checkbox next to the corresponding record. Finally, click on {{ actions }},
then {guilabel}`Export`.
```{image} export_import_data/list-view-export.png
:alt: View of the different things to enable/click to export data.
```
When clicking on {guilabel}`Export`, an {guilabel}`Export Data` pop-over window appears, with
several options for the data to export:
```{image} export_import_data/export-data-overview.png
:alt: Overview of options to consider when exporting data in Odoo.
```
1. With the {guilabel}`I want to update data (import-compatable export)` option ticked, the system
only shows the fields that can be imported. This is helpful in the case where the {ref}`existing
records need to be updated <essentials/update-data>`. This works like a filter. Leaving the box
unticked, gives many more field options because it shows all the fields, not just the ones that
can be imported.
2. When exporting, there is the option to export in two formats: `.csv` and `.xls`. With `.csv`,
items are separated by a comma, while `.xls` holds information about all the worksheets in a
file, including both content and formatting.
3. These are the items that can be exported. Use the {guilabel}`> (right arrow)` icon to display
more sub-field options. Use the {guilabel}`Search` bar to find specific fields. To use the
{guilabel}`Search` option more efficiently, click on all the {guilabel}`> (right arrows)` to
display all fields.
4. The {guilabel}`+ (plus sign)` icon button is present to add fields to the {guilabel}`Fields to
export` list.
5. The {guilabel}`↕️ (up-down arrow)` to the left of the selected fields can be used to move the
fields up and down, to change the order in which they are displayed in the exported file.
Drag-and-drop using the {guilabel}`↕️ (up-down arrow)` icon.
6. The {guilabel}`🗑️ (trash can)` icon is used to remove fields. Click on the {guilabel}`🗑️ (trash
can)` icon to remove the field.
7. For recurring reports, it is helpful to save export presets. Select all the needed fields, and
click on the template drop-down menu. Once there, click on {guilabel}`New template`, and give a
unique name to the export just created. Click the {guilabel}`💾 (floppy drive)` icon to save the
configuration. The next time the same list needs to be exported, select the related template that
was previously saved from the drop-down menu.
:::{tip}
It is helpful to know the field's external identifier. For example, {guilabel}`Related Company`
in the export user interface is equal to *parent_id* (external identifier). This is helpful
because then, the only data exported is what should be modified and re-imported.
:::
(import-data)=
## Import data into Odoo
Importing data into Odoo is extremely helpful during implementation, or in times where data needs to
be {ref}`updated in bulk <essentials/update-data>`. The following documentation covers how to import
data into an Odoo database.
:::{warning}
Imports are permanent and **cannot** be undone. However, it is possible to use filters (`created
on` or `last modified`) to identify records changed or created by the import.
:::
:::{tip}
Activating {ref}`developer mode <developer-mode>` changes the visible import settings in the left
menu. Doing so reveals an {menuselection}`Advanced` menu. Included in this advanced menu are two
options: {guilabel}`Track history during import` and {guilabel}`Allow matching with subfields`.
```{image} export_import_data/advanced-import.png
:alt: Advanced import options when developer mode is activated.
```
If the model uses openchatter, the {guilabel}`Track history during import` option sets up
subscriptions and sends notifications during the import, but leads to a slower import.
Should the {guilabel}`Allow matching with subfields` option be selected, then all subfields
within a field are used to match under the {guilabel}`Odoo Field` while importing.
:::
(essentials-export-import-data-get-started)=
### Get started
Data can be imported on any Odoo business object using either Excel (`.xlsx`) or {abbr}`CSV
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
journal entries, and orders.
Open the view of the object to which the data should be imported/populated, click the {icon}`fa-cog`
({guilabel}`gear`) icon and select {guilabel}`Import records`.
```{image} export_import_data/import-button.png
:alt: Action menu revealed with the import records option highlighted.
```
Click {icon}`fa-download`{guilabel}`Import Template for Customers` at the center of the page to
download a {ref}`template <essentials/export_import_data/adapt-a-template>` and populate it with
the company's own data. Such templates can be imported in one click since the data mapping is
already preconfigured.
To upload the downloaded template or your own file, follow the next steps:
1. Click {guilabel}`Upload Data File` and select the desired file.
2. Adjust the {guilabel}`Formatting` options as needed (for CSV files only).
3. Ensure all data in the {guilabel}`File Column` is correctly mapped to the appropriate
{guilabel}`Odoo Field` and free of errors.
4. (Optional) Click {guilabel}`Load Data File` to reload the same file or upload a different one.
5. Click {guilabel}`Test` to verify that the data is valid.
6. Click {guilabel}`Import`.
:::{note}
The {guilabel}`Formatting` options do **not** appear when importing the proprietary Excel file
type (i.e., `.xls` or `.xlsx`).
:::
(essentials-export-import-data-adapt-a-template)=
### Adapt a template
Import templates are provided in the import tool of the most common data to import (contacts,
products, bank statements, etc.). Open them with any spreadsheet software (*Microsoft Office*,
*OpenOffice*, *Google Drive*, etc.).
Once the template is downloaded, proceed to follow these steps:
- Add, remove, and sort columns to best fit the data structure.
- It is strongly advised to **not** remove the {guilabel}`External ID` (ID) column (see why in the
next section).
- Set a unique ID to every record by dragging down the ID sequencing in the {guilabel}`External ID`
(ID) column.
```{image} export_import_data/dragdown.gif
:alt: An animation of the mouse dragging down the ID column, so each record has a unique
: ID.
```
:::{note}
When a new column is added, Odoo may not be able to map it automatically, if its label does not
fit any field within Odoo. However, new columns can be mapped manually when the import is tested.
Search the drop-down menu for the corresponding field.
```{image} export_import_data/field_list.png
:alt: Drop-down menu expanded in the initial import screen on Odoo.
```
Then, use this field's label in the import file to ensure future imports are successful.
:::
:::{tip}
Another useful way to find out the proper column names to import is to export a sample file
using the fields that should be imported. This way, if there is not a sample import template,
the names are accurate.
:::
(essentials-external-id)=
### Import from another application
The {guilabel}`External ID` (ID) is a unique identifier for the line item. Feel free to use one
from previous software to facilitate the transition to Odoo.
Setting an ID is not mandatory when importing, but it helps in many cases:
- {ref}`Update imports <essentials/update-data>`: import the same file several times without
creating duplicates.
- {ref}`Import relation fields <export_import_data/relation-fields>`.
To recreate relationships between different records, the unique identifier from the original
application should be used to map it to the {guilabel}`External ID` (ID) column in Odoo.
When another record is imported that links to the first one, use **XXX/ID** (XXX/External ID) for
the original unique identifier. This record can also be found using its name.
:::{warning}
It should be noted that conflicts occur if two (or more) records have the same *External ID*.
:::
### Field missing to map column
Odoo heuristically tries to find the type of field for each column inside the imported file, based
on the first ten lines of the files.
For example, if there is a column only containing numbers, only the fields with the *integer* type
are presented as options.
While this behavior might be beneficial in most cases, it is also possible that it could fail, or
the column may be mapped to a field that is not proposed by default.
If this happens, check the {guilabel}`Show fields of relation fields (advanced) option`, then a
complete list of fields becomes available for each column.
```{image} export_import_data/field_list.png
:alt: Searching for the field to match the tax column.
```
### Change data import format
:::{note}
Odoo can automatically detect if a column is a date, and tries to guess the date format from a
set of most commonly used date formats. While this process can work for many date formats, some
date formats are not recognizable. This can cause confusion, due to day-month inversions; it is
difficult to guess which part of a date format is the day, and which part is the month, in a
date, such as `01-03-2016`.
:::
When importing a {abbr}`CSV (Comma-separated Values)` file, Odoo provides {guilabel}`Formatting`
options.
To view which date format Odoo has found from the file, check the {guilabel}`Date Format` that is
shown when clicking on options under the file selector. If this format is incorrect, change it to
the preferred format using *ISO 8601* to define the format.
:::{important}
*ISO 8601* is an international standard, covering the worldwide exchange, along with the
communication of date and time-related data. For example, the date format should be `YYYY-MM-DD`.
So, in the case of July 24th 1981, it should be written as `1981-07-24`.
:::
:::{tip}
When importing Excel files (`.xls`, `.xlsx`), consider using *date cells* to store dates. This
maintains locale date formats for display, regardless of how the date is formatted in Odoo. When
importing a {abbr}`CSV (Comma-separated Values)` file, use Odoo's {guilabel}`Formatting` section
to select the date format columns to import.
:::
### Import numbers with currency signs
Odoo fully supports numbers with parenthesis to represent negative signs, as well as numbers with
currency signs attached to them. Odoo also automatically detects which thousand/decimal separator is
used. If a currency symbol unknown to Odoo is used, it might not be recognized as a number, and the
import crashes.
:::{note}
When importing a {abbr}`CSV (Comma-separated Values)` file, the {guilabel}`Formatting` menu
appears on the left-hand column. Under these options, the {guilabel}`Thousands Separator` can be
changed.
:::
Examples of supported numbers (using 'thirty-two thousand' as the figure):
- 32.000,00
- 32000,00
- 32,000.00
- -32000.00
- (32000.00)
- \$ 32.000,00
- (32000.00 €)
Example that will not work:
- ABC 32.000,00
- \$ (32.000,00)
:::{important}
A {guilabel}`() (parenthesis)` around the number indicates that the number is a negative value.
The currency symbol **must** be placed within the parenthesis for Odoo to recognize it as a
negative currency value.
:::
### Import preview table not displayed correctly
By default, the import preview is set on commas as field separators, and quotation marks as text
delimiters. If the {abbr}`CSV (Comma-separated Values)` file does not have these settings, modify
the {guilabel}`Formatting` options (displayed under the {guilabel}`Import` {abbr}`CSV
(Comma-separated Values)` file bar after selecting the {abbr}`CSV (Comma-separated Values)` file).
:::{important}
If the {abbr}`CSV (Comma-separated Values)` file has a tabulation as a separator, Odoo does
**not** detect the separations. The file format options need to be modified in the spreadsheet
application. See the following {ref}`Change CSV file format <export_import_data/change-csv>`
section.
:::
(export-import-data-change-csv)=
### Change CSV file format in spreadsheet application
When editing and saving {abbr}`CSV (Comma-separated Values)` files in spreadsheet applications, the
computer's regional settings are applied for the separator and delimiter. Odoo suggests using
*OpenOffice* or *LibreOffice*, as both applications allow modifications of all three options (from
*LibreOffice* application, go to {menuselection}`'Save As' dialog box --> Check the box 'Edit filter
settings' --> Save`).
Microsoft Excel can modify the encoding when saving ({menuselection}`'Save As' dialog box -->
'Tools' drop-down menu --> Encoding tab`).
### Difference between Database ID and External ID
Some fields define a relationship with another object. For example, the country of a contact is a
link to a record of the 'Country' object. When such fields are imported, Odoo has to recreate links
between the different records. To help import such fields, Odoo provides three mechanisms.
:::{important}
**Only one** mechanism should be used per field that is imported.
:::
For example, to reference the country of a contact, Odoo proposes three different fields to import:
- {guilabel}`Country`: the name or code of the country
- {guilabel}`Country/Database ID`: the unique Odoo ID for a record, defined by the ID PostgreSQL
column
- {guilabel}`Country/External ID`: the ID of this record referenced in another application (or the
`.XML` file that imported it)
For the country of Belgium, for example, use one of these three ways to import:
- {guilabel}`Country`: `Belgium`
- {guilabel}`Country/Database ID`: `21`
- {guilabel}`Country/External ID`: `base.be`
According to the company's need, use one of these three ways to reference records in relations. Here
is an example when one or the other should be used, according to the need:
- Use {guilabel}`Country`: this is the easiest way when data comes from {abbr}`CSV (Comma-separated
Values)` files that have been created manually.
- Use {guilabel}`Country/Database ID`: this should rarely be used. It is mostly used by developers
as the main advantage is to never have conflicts (there may be several records with the same name,
but they always have a unique Database ID)
- Use {guilabel}`Country/External ID`: use *External ID* when importing data from a third-party
application.
When *External IDs* are used, import {abbr}`CSV (Comma-separated Values)` files with the
{guilabel}`External ID` (ID) column defining the *External ID* of each record that is imported.
Then, a reference can be made to that record with columns, like `Field/External ID`. The following
two {abbr}`CSV (Comma-separated Values)` files provide an example for products and their categories.
- {download}`CSV file for categories
<export_import_data/External_id_3rd_party_application_product_categories.csv>`
- {download}`CSV file for Products
<export_import_data/External_id_3rd_party_application_products.csv>`
(export-import-data-relation-fields)=
### Import relation fields
An Odoo object is always related to many other objects (e.g. a product is linked to product
categories, attributes, vendors, etc.). To import those relations, the records of the related object
need to be imported first, from their own list menu.
This can be achieved by using either the name of the related record, or its ID, depending on the
circumstances. The ID is expected when two records have the same name. In such a case add `/ ID`
at the end of the column title (e.g. for product attributes: `Product Attributes / Attribute / ID`).
#### Options for multiple matches on fields
If, for example, there are two product categories with the child name `Sellable` (e.g. `Misc.
Products/Sellable` & `Other Products/Sellable`), the validation is halted, but the data may still be
imported. However, Odoo recommends that the data is not imported because it will all be linked to
the first `Sellable` category found in the *Product Category* list (`Misc. Products/Sellable`).
Odoo, instead, recommends modifying one of the duplicate's values, or the product category
hierarchy.
However, if the company does not wish to change the configuration of product categories, Odoo
recommends making use of the *External ID* for this field, 'Category'.
#### Import many2many relationship fields
The tags should be separated by a comma, without any spacing. For example, if a customer needs to be
linked to both tags: `Manufacturer` and `Retailer` then 'Manufacturer,Retailer' needs to be encoded
in the same column of the {abbr}`CSV (Comma-separated Values)` file.
- {download}`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
#### Import one2many relationships
If a company wants to import a sales order with several order lines, a specific row **must** be
reserved in the {abbr}`CSV (Comma-separated Values)` file for each order line. The first order line
is imported on the same row as the information relative to order. Any additional lines need an
additional row that does not have any information in the fields relative to the order.
As an example, here is a {abbr}`CSV (Comma-separated Values)` file of some quotations that can be
imported, based on demo data:
- {download}`File for some Quotations
<export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`
The following {abbr}`CSV (Comma-separated Values)` file shows how to import purchase orders with
their respective purchase order lines:
- {download}`Purchase orders with their respective purchase order lines
<export_import_data/o2m_purchase_order_lines.csv>`
The following {abbr}`CSV (Comma-separated Values)` file shows how to import customers and their
respective contacts:
- {download}`Customers and their respective contacts
<export_import_data/o2m_customers_contacts.csv>`
### Import image files
To import image files along with the {ref}`uploaded <essentials/export_import_data/get-started>`
CSV or Excel file, follow the next steps:
1. Add the image file names to the relevant {guilabel}`Image` column in the data file.
2. {ref}`Upload the data file <essentials/export_import_data/get-started>` or reload it by
clicking {guilabel}`Load Data File`.
3. Click {guilabel}`Upload your files` under the {guilabel}`Files to import` section.
4. Select the relevant image files. The number of files selected appears next to the button.
5. Click {guilabel}`Test` to verify that all data is valid.
6. Click {guilabel}`Import`. During the import process, Odoo performs a file check to automatically
link the uploaded images to the imported data file. If there is no match, the data file is
imported without any image.
:::{note}
- The {guilabel}`Files to import` section is enabled if your product template has an
{guilabel}`Image` column with all fields populated.
- The image file names in the data file must correspond to the uploaded image files.
- When importing a large number of images, you can specify the maximum batch size in megabytes
and set a delay to prevent the system from becoming overloaded. To do so, {doc}`enable the
developer mode <../general/developer_mode>` and fill in the {guilabel}`Max size per
batch` and the {guilabel}`Delay after each batch` fields in the {guilabel}`Files to import`
section. By default, the delay meets the RPC/API call limit defined in the [Odoo Cloud -
Acceptable Use Policy](https://www.odoo.com/acceptable-use).
:::
### Import records several times
If an imported file contains one of the columns: {guilabel}`External ID` or {guilabel}`Database ID`,
records that have already been imported are modified, instead of being created. This is extremely
useful as it allows users to import the same {abbr}`CSV (Comma-separated Values)` file several
times, while having made some changes in between two imports.
Odoo takes care of creating or modifying each record, depending if it is new or not.
This feature allows a company to use the *Import/Export tool* in Odoo to modify a batch of records
in a spreadsheet application.
### Value not provided for a specific field
If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined
field. But, if fields are set with empty values in the {abbr}`CSV (Comma-separated Values)` file,
Odoo sets the empty value in the field, instead of assigning the default value.
### Export/import different tables from an SQL application to Odoo
If data needs to be imported from different tables, relations need to be recreated between records
belonging to different tables. For instance, if companies and people are imported, the link between
each person and the company they work for needs to be recreated.
To manage relations between tables, use the `External ID` facilities of Odoo. The `External ID` of a
record is the unique identifier of this record in another application. The `External ID` must be
unique across all records of all objects. It is a good practice to prefix this `External ID` with
the name of the application or table. (like, 'company_1', 'person_1' - instead of '1')
As an example, suppose there is an SQL database with two tables that are to be imported: companies
and people. Each person belongs to one company, so the link between a person and the company they
work for must be recreated.
Test this example, with a {download}`sample of a PostgreSQL database
<export_import_data/database_import_test.sql>`.
First, export all companies and their *External ID*. In PSQL, write the following command:
```sh
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
```
This SQL command creates the following {abbr}`CSV (Comma-separated Values)` file:
```text
External ID,Name,Is a Company
company_1,Bigees,True
company_2,Organi,True
company_3,Boum,True
```
To create the {abbr}`CSV (Comma-separated Values)` file for people linked to companies, use the
following SQL command in PSQL:
```sh
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
```
It produces the following {abbr}`CSV (Comma-separated Values)` file:
```text
External ID,Name,Is a Company,Related Company/External ID
person_1,Fabien,False,company_1
person_2,Laurence,False,company_1
person_3,Eric,False,company_2
person_4,Ramsy,False,company_3
```
In this file, Fabien and Laurence are working for the Bigees company (`company_1`), and Eric is
working for the Organi company. The relation between people and companies is done using the
*External ID* of the companies. The *External ID* is prefixed by the name of the table to avoid a
conflict of ID between people and companies (`person_1` and `company_1`, who shared the same ID 1 in
the original database).
The two files produced are ready to be imported in Odoo without any modifications. After having
imported these two {abbr}`CSV (Comma-separated Values)` files, there are four contacts and three
companies (the first two contacts are linked to the first company). Keep in mind to first import
the companies, and then the people.
(essentials-update-data)=
## Update data in Odoo
Existing data can be updated in bulk through a data import, as long as the {ref}`External ID
<essentials/external-id>` remains consistent.
### Prepare data export
To update data through an import, first navigate to the data to be updated, and select the {{ list }} to
activate list view. On the far-left side of the list, tick the checkbox for any record to be
updated. Then, click {{ actions }}, and select {icon}`fa-upload` {guilabel}`Export` from the drop-down
menu.
On the resulting {guilabel}`Export Data` pop-up window, tick the checkbox labeled, {guilabel}`I want
to update data (import-compatible export)`. This automatically includes the *External ID* in the
export. Additionally, it limits the {guilabel}`Fields to export` list to **only** include fields
that are able to be imported.
:::{note}
The {guilabel}`External ID` field does **not** appear in the {guilabel}`Fields to export` list
unless it is manually added, but it is still included in the export. However, if the {guilabel}`I
want to update data (import-compatible export)` checkbox is ticked, it is included in the export.
:::
Select the required fields to be included in the export using the {ref}`options <export-data>` on
the pop-up window, then click {guilabel}`Export`.
### Import updated data
After exporting, make any necessary changes to the data file. When the file is ready, it can be
{ref}`imported <import-data>` by following the same process as a normal data import.
:::{danger}
When updating data, it is extremely important that the *External ID* remain consistent, as
this is how the system identifies a record. If an ID is altered, or removed, the system may add a
duplicate record, instead of updating the existing one.
:::
@@ -1,549 +0,0 @@
======================
Export and import data
======================
.. |list| replace:: :icon:`oi-view-list` :guilabel:`(list)` icon
.. |actions| replace:: :icon:`fa-cog` :guilabel:`Actions`
In Odoo, it is sometimes necessary to export or import data for running reports, or for data
modification. This document covers the export and import of data into and out of Odoo.
.. important::
Sometimes, users run into a 'time out' error, or a record does not process, due to its size. This
can occur with large exports, or in cases where the import file is too large. To circumvent this
limitation surrounding the size of the records, process exports or imports in smaller batches.
.. _export-data:
Export data from Odoo
=====================
When working with a database, it is sometimes necessary to export data in a distinct file. Doing so
can aid in reporting on activities, although, Odoo provides a precise and easy reporting tool with
each available application.
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
(|list|), on the items that need to be exported, then select the records that should be exported. To
select a record, tick the checkbox next to the corresponding record. Finally, click on |actions|,
then :guilabel:`Export`.
.. image:: export_import_data/list-view-export.png
:alt: View of the different things to enable/click to export data.
When clicking on :guilabel:`Export`, an :guilabel:`Export Data` pop-over window appears, with
several options for the data to export:
.. image:: export_import_data/export-data-overview.png
:alt: Overview of options to consider when exporting data in Odoo.
#. With the :guilabel:`I want to update data (import-compatable export)` option ticked, the system
only shows the fields that can be imported. This is helpful in the case where the :ref:`existing
records need to be updated <essentials/update-data>`. This works like a filter. Leaving the box
unticked, gives many more field options because it shows all the fields, not just the ones that
can be imported.
#. When exporting, there is the option to export in two formats: `.csv` and `.xls`. With `.csv`,
items are separated by a comma, while `.xls` holds information about all the worksheets in a
file, including both content and formatting.
#. These are the items that can be exported. Use the :guilabel:`> (right arrow)` icon to display
more sub-field options. Use the :guilabel:`Search` bar to find specific fields. To use the
:guilabel:`Search` option more efficiently, click on all the :guilabel:`> (right arrows)` to
display all fields.
#. The :guilabel:`+ (plus sign)` icon button is present to add fields to the :guilabel:`Fields to
export` list.
#. The :guilabel:`↕️ (up-down arrow)` to the left of the selected fields can be used to move the
fields up and down, to change the order in which they are displayed in the exported file.
Drag-and-drop using the :guilabel:`↕️ (up-down arrow)` icon.
#. The :guilabel:`🗑️ (trash can)` icon is used to remove fields. Click on the :guilabel:`🗑️ (trash
can)` icon to remove the field.
#. For recurring reports, it is helpful to save export presets. Select all the needed fields, and
click on the template drop-down menu. Once there, click on :guilabel:`New template`, and give a
unique name to the export just created. Click the :guilabel:`💾 (floppy drive)` icon to save the
configuration. The next time the same list needs to be exported, select the related template that
was previously saved from the drop-down menu.
.. tip::
It is helpful to know the field's external identifier. For example, :guilabel:`Related Company`
in the export user interface is equal to *parent_id* (external identifier). This is helpful
because then, the only data exported is what should be modified and re-imported.
.. _import-data:
Import data into Odoo
=====================
Importing data into Odoo is extremely helpful during implementation, or in times where data needs to
be :ref:`updated in bulk <essentials/update-data>`. The following documentation covers how to import
data into an Odoo database.
.. warning::
Imports are permanent and **cannot** be undone. However, it is possible to use filters (`created
on` or `last modified`) to identify records changed or created by the import.
.. tip::
Activating :ref:`developer mode <developer-mode>` changes the visible import settings in the left
menu. Doing so reveals an :menuselection:`Advanced` menu. Included in this advanced menu are two
options: :guilabel:`Track history during import` and :guilabel:`Allow matching with subfields`.
.. image:: export_import_data/advanced-import.png
:alt: Advanced import options when developer mode is activated.
If the model uses openchatter, the :guilabel:`Track history during import` option sets up
subscriptions and sends notifications during the import, but leads to a slower import.
Should the :guilabel:`Allow matching with subfields` option be selected, then all subfields
within a field are used to match under the :guilabel:`Odoo Field` while importing.
.. _essentials/export_import_data/get-started:
Get started
-----------
Data can be imported on any Odoo business object using either Excel (`.xlsx`) or :abbr:`CSV
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
journal entries, and orders.
Open the view of the object to which the data should be imported/populated, click the :icon:`fa-cog`
(:guilabel:`gear`) icon and select :guilabel:`Import records`.
.. image:: export_import_data/import-button.png
:alt: Action menu revealed with the import records option highlighted.
Click :icon:`fa-download`:guilabel:`Import Template for Customers` at the center of the page to
download a :ref:`template <essentials/export_import_data/adapt-a-template>` and populate it with
the company's own data. Such templates can be imported in one click since the data mapping is
already preconfigured.
To upload the downloaded template or your own file, follow the next steps:
#. Click :guilabel:`Upload Data File` and select the desired file.
#. Adjust the :guilabel:`Formatting` options as needed (for CSV files only).
#. Ensure all data in the :guilabel:`File Column` is correctly mapped to the appropriate
:guilabel:`Odoo Field` and free of errors.
#. (Optional) Click :guilabel:`Load Data File` to reload the same file or upload a different one.
#. Click :guilabel:`Test` to verify that the data is valid.
#. Click :guilabel:`Import`.
.. note::
The :guilabel:`Formatting` options do **not** appear when importing the proprietary Excel file
type (i.e., `.xls` or `.xlsx`).
.. _essentials/export_import_data/adapt-a-template:
Adapt a template
----------------
Import templates are provided in the import tool of the most common data to import (contacts,
products, bank statements, etc.). Open them with any spreadsheet software (*Microsoft Office*,
*OpenOffice*, *Google Drive*, etc.).
Once the template is downloaded, proceed to follow these steps:
- Add, remove, and sort columns to best fit the data structure.
- It is strongly advised to **not** remove the :guilabel:`External ID` (ID) column (see why in the
next section).
- Set a unique ID to every record by dragging down the ID sequencing in the :guilabel:`External ID`
(ID) column.
.. image:: export_import_data/dragdown.gif
:alt: An animation of the mouse dragging down the ID column, so each record has a unique ID.
.. note::
When a new column is added, Odoo may not be able to map it automatically, if its label does not
fit any field within Odoo. However, new columns can be mapped manually when the import is tested.
Search the drop-down menu for the corresponding field.
.. image:: export_import_data/field_list.png
:alt: Drop-down menu expanded in the initial import screen on Odoo.
Then, use this field's label in the import file to ensure future imports are successful.
.. tip::
Another useful way to find out the proper column names to import is to export a sample file
using the fields that should be imported. This way, if there is not a sample import template,
the names are accurate.
.. _essentials/external-id:
Import from another application
-------------------------------
The :guilabel:`External ID` (ID) is a unique identifier for the line item. Feel free to use one
from previous software to facilitate the transition to Odoo.
Setting an ID is not mandatory when importing, but it helps in many cases:
- :ref:`Update imports <essentials/update-data>`: import the same file several times without
creating duplicates.
- :ref:`Import relation fields <export_import_data/relation-fields>`.
To recreate relationships between different records, the unique identifier from the original
application should be used to map it to the :guilabel:`External ID` (ID) column in Odoo.
When another record is imported that links to the first one, use **XXX/ID** (XXX/External ID) for
the original unique identifier. This record can also be found using its name.
.. warning::
It should be noted that conflicts occur if two (or more) records have the same *External ID*.
Field missing to map column
---------------------------
Odoo heuristically tries to find the type of field for each column inside the imported file, based
on the first ten lines of the files.
For example, if there is a column only containing numbers, only the fields with the *integer* type
are presented as options.
While this behavior might be beneficial in most cases, it is also possible that it could fail, or
the column may be mapped to a field that is not proposed by default.
If this happens, check the :guilabel:`Show fields of relation fields (advanced) option`, then a
complete list of fields becomes available for each column.
.. image:: export_import_data/field_list.png
:alt: Searching for the field to match the tax column.
Change data import format
-------------------------
.. note::
Odoo can automatically detect if a column is a date, and tries to guess the date format from a
set of most commonly used date formats. While this process can work for many date formats, some
date formats are not recognizable. This can cause confusion, due to day-month inversions; it is
difficult to guess which part of a date format is the day, and which part is the month, in a
date, such as `01-03-2016`.
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
options.
To view which date format Odoo has found from the file, check the :guilabel:`Date Format` that is
shown when clicking on options under the file selector. If this format is incorrect, change it to
the preferred format using *ISO 8601* to define the format.
.. important::
*ISO 8601* is an international standard, covering the worldwide exchange, along with the
communication of date and time-related data. For example, the date format should be `YYYY-MM-DD`.
So, in the case of July 24th 1981, it should be written as `1981-07-24`.
.. tip::
When importing Excel files (`.xls`, `.xlsx`), consider using *date cells* to store dates. This
maintains locale date formats for display, regardless of how the date is formatted in Odoo. When
importing a :abbr:`CSV (Comma-separated Values)` file, use Odoo's :guilabel:`Formatting` section
to select the date format columns to import.
Import numbers with currency signs
----------------------------------
Odoo fully supports numbers with parenthesis to represent negative signs, as well as numbers with
currency signs attached to them. Odoo also automatically detects which thousand/decimal separator is
used. If a currency symbol unknown to Odoo is used, it might not be recognized as a number, and the
import crashes.
.. note::
When importing a :abbr:`CSV (Comma-separated Values)` file, the :guilabel:`Formatting` menu
appears on the left-hand column. Under these options, the :guilabel:`Thousands Separator` can be
changed.
Examples of supported numbers (using 'thirty-two thousand' as the figure):
- 32.000,00
- 32000,00
- 32,000.00
- -32000.00
- (32000.00)
- $ 32.000,00
- (32000.00 €)
Example that will not work:
- ABC 32.000,00
- $ (32.000,00)
.. important::
A :guilabel:`() (parenthesis)` around the number indicates that the number is a negative value.
The currency symbol **must** be placed within the parenthesis for Odoo to recognize it as a
negative currency value.
Import preview table not displayed correctly
--------------------------------------------
By default, the import preview is set on commas as field separators, and quotation marks as text
delimiters. If the :abbr:`CSV (Comma-separated Values)` file does not have these settings, modify
the :guilabel:`Formatting` options (displayed under the :guilabel:`Import` :abbr:`CSV
(Comma-separated Values)` file bar after selecting the :abbr:`CSV (Comma-separated Values)` file).
.. important::
If the :abbr:`CSV (Comma-separated Values)` file has a tabulation as a separator, Odoo does
**not** detect the separations. The file format options need to be modified in the spreadsheet
application. See the following :ref:`Change CSV file format <export_import_data/change-csv>`
section.
.. _export_import_data/change-csv:
Change CSV file format in spreadsheet application
-------------------------------------------------
When editing and saving :abbr:`CSV (Comma-separated Values)` files in spreadsheet applications, the
computer's regional settings are applied for the separator and delimiter. Odoo suggests using
*OpenOffice* or *LibreOffice*, as both applications allow modifications of all three options (from
*LibreOffice* application, go to :menuselection:`'Save As' dialog box --> Check the box 'Edit filter
settings' --> Save`).
Microsoft Excel can modify the encoding when saving (:menuselection:`'Save As' dialog box -->
'Tools' drop-down menu --> Encoding tab`).
Difference between Database ID and External ID
----------------------------------------------
Some fields define a relationship with another object. For example, the country of a contact is a
link to a record of the 'Country' object. When such fields are imported, Odoo has to recreate links
between the different records. To help import such fields, Odoo provides three mechanisms.
.. important::
**Only one** mechanism should be used per field that is imported.
For example, to reference the country of a contact, Odoo proposes three different fields to import:
- :guilabel:`Country`: the name or code of the country
- :guilabel:`Country/Database ID`: the unique Odoo ID for a record, defined by the ID PostgreSQL
column
- :guilabel:`Country/External ID`: the ID of this record referenced in another application (or the
`.XML` file that imported it)
For the country of Belgium, for example, use one of these three ways to import:
- :guilabel:`Country`: `Belgium`
- :guilabel:`Country/Database ID`: `21`
- :guilabel:`Country/External ID`: `base.be`
According to the company's need, use one of these three ways to reference records in relations. Here
is an example when one or the other should be used, according to the need:
- Use :guilabel:`Country`: this is the easiest way when data comes from :abbr:`CSV (Comma-separated
Values)` files that have been created manually.
- Use :guilabel:`Country/Database ID`: this should rarely be used. It is mostly used by developers
as the main advantage is to never have conflicts (there may be several records with the same name,
but they always have a unique Database ID)
- Use :guilabel:`Country/External ID`: use *External ID* when importing data from a third-party
application.
When *External IDs* are used, import :abbr:`CSV (Comma-separated Values)` files with the
:guilabel:`External ID` (ID) column defining the *External ID* of each record that is imported.
Then, a reference can be made to that record with columns, like `Field/External ID`. The following
two :abbr:`CSV (Comma-separated Values)` files provide an example for products and their categories.
- :download:`CSV file for categories
<export_import_data/External_id_3rd_party_application_product_categories.csv>`
- :download:`CSV file for Products
<export_import_data/External_id_3rd_party_application_products.csv>`
.. _export_import_data/relation-fields:
Import relation fields
----------------------
An Odoo object is always related to many other objects (e.g. a product is linked to product
categories, attributes, vendors, etc.). To import those relations, the records of the related object
need to be imported first, from their own list menu.
This can be achieved by using either the name of the related record, or its ID, depending on the
circumstances. The ID is expected when two records have the same name. In such a case add `/ ID`
at the end of the column title (e.g. for product attributes: `Product Attributes / Attribute / ID`).
Options for multiple matches on fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If, for example, there are two product categories with the child name `Sellable` (e.g. `Misc.
Products/Sellable` & `Other Products/Sellable`), the validation is halted, but the data may still be
imported. However, Odoo recommends that the data is not imported because it will all be linked to
the first `Sellable` category found in the *Product Category* list (`Misc. Products/Sellable`).
Odoo, instead, recommends modifying one of the duplicate's values, or the product category
hierarchy.
However, if the company does not wish to change the configuration of product categories, Odoo
recommends making use of the *External ID* for this field, 'Category'.
Import many2many relationship fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The tags should be separated by a comma, without any spacing. For example, if a customer needs to be
linked to both tags: `Manufacturer` and `Retailer` then 'Manufacturer,Retailer' needs to be encoded
in the same column of the :abbr:`CSV (Comma-separated Values)` file.
- :download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
Import one2many relationships
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If a company wants to import a sales order with several order lines, a specific row **must** be
reserved in the :abbr:`CSV (Comma-separated Values)` file for each order line. The first order line
is imported on the same row as the information relative to order. Any additional lines need an
additional row that does not have any information in the fields relative to the order.
As an example, here is a :abbr:`CSV (Comma-separated Values)` file of some quotations that can be
imported, based on demo data:
- :download:`File for some Quotations
<export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`
The following :abbr:`CSV (Comma-separated Values)` file shows how to import purchase orders with
their respective purchase order lines:
- :download:`Purchase orders with their respective purchase order lines
<export_import_data/o2m_purchase_order_lines.csv>`
The following :abbr:`CSV (Comma-separated Values)` file shows how to import customers and their
respective contacts:
- :download:`Customers and their respective contacts
<export_import_data/o2m_customers_contacts.csv>`
Import image files
------------------
To import image files along with the :ref:`uploaded <essentials/export_import_data/get-started>`
CSV or Excel file, follow the next steps:
#. Add the image file names to the relevant :guilabel:`Image` column in the data file.
#. :ref:`Upload the data file <essentials/export_import_data/get-started>` or reload it by
clicking :guilabel:`Load Data File`.
#. Click :guilabel:`Upload your files` under the :guilabel:`Files to import` section.
#. Select the relevant image files. The number of files selected appears next to the button.
#. Click :guilabel:`Test` to verify that all data is valid.
#. Click :guilabel:`Import`. During the import process, Odoo performs a file check to automatically
link the uploaded images to the imported data file. If there is no match, the data file is
imported without any image.
.. note::
- The :guilabel:`Files to import` section is enabled if your product template has an
:guilabel:`Image` column with all fields populated.
- The image file names in the data file must correspond to the uploaded image files.
- When importing a large number of images, you can specify the maximum batch size in megabytes
and set a delay to prevent the system from becoming overloaded. To do so, :doc:`enable the
developer mode <../general/developer_mode>` and fill in the :guilabel:`Max size per
batch` and the :guilabel:`Delay after each batch` fields in the :guilabel:`Files to import`
section. By default, the delay meets the RPC/API call limit defined in the `Odoo Cloud -
Acceptable Use Policy <https://www.odoo.com/acceptable-use>`_.
Import records several times
----------------------------
If an imported file contains one of the columns: :guilabel:`External ID` or :guilabel:`Database ID`,
records that have already been imported are modified, instead of being created. This is extremely
useful as it allows users to import the same :abbr:`CSV (Comma-separated Values)` file several
times, while having made some changes in between two imports.
Odoo takes care of creating or modifying each record, depending if it is new or not.
This feature allows a company to use the *Import/Export tool* in Odoo to modify a batch of records
in a spreadsheet application.
Value not provided for a specific field
---------------------------------------
If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined
field. But, if fields are set with empty values in the :abbr:`CSV (Comma-separated Values)` file,
Odoo sets the empty value in the field, instead of assigning the default value.
Export/import different tables from an SQL application to Odoo
--------------------------------------------------------------
If data needs to be imported from different tables, relations need to be recreated between records
belonging to different tables. For instance, if companies and people are imported, the link between
each person and the company they work for needs to be recreated.
To manage relations between tables, use the `External ID` facilities of Odoo. The `External ID` of a
record is the unique identifier of this record in another application. The `External ID` must be
unique across all records of all objects. It is a good practice to prefix this `External ID` with
the name of the application or table. (like, 'company_1', 'person_1' - instead of '1')
As an example, suppose there is an SQL database with two tables that are to be imported: companies
and people. Each person belongs to one company, so the link between a person and the company they
work for must be recreated.
Test this example, with a :download:`sample of a PostgreSQL database
<export_import_data/database_import_test.sql>`.
First, export all companies and their *External ID*. In PSQL, write the following command:
.. code-block:: sh
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
This SQL command creates the following :abbr:`CSV (Comma-separated Values)` file:
.. code-block:: text
External ID,Name,Is a Company
company_1,Bigees,True
company_2,Organi,True
company_3,Boum,True
To create the :abbr:`CSV (Comma-separated Values)` file for people linked to companies, use the
following SQL command in PSQL:
.. code-block:: sh
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
It produces the following :abbr:`CSV (Comma-separated Values)` file:
.. code-block:: text
External ID,Name,Is a Company,Related Company/External ID
person_1,Fabien,False,company_1
person_2,Laurence,False,company_1
person_3,Eric,False,company_2
person_4,Ramsy,False,company_3
In this file, Fabien and Laurence are working for the Bigees company (`company_1`), and Eric is
working for the Organi company. The relation between people and companies is done using the
*External ID* of the companies. The *External ID* is prefixed by the name of the table to avoid a
conflict of ID between people and companies (`person_1` and `company_1`, who shared the same ID 1 in
the original database).
The two files produced are ready to be imported in Odoo without any modifications. After having
imported these two :abbr:`CSV (Comma-separated Values)` files, there are four contacts and three
companies (the first two contacts are linked to the first company). Keep in mind to first import
the companies, and then the people.
.. _essentials/update-data:
Update data in Odoo
===================
Existing data can be updated in bulk through a data import, as long as the :ref:`External ID
<essentials/external-id>` remains consistent.
Prepare data export
-------------------
To update data through an import, first navigate to the data to be updated, and select the |list| to
activate list view. On the far-left side of the list, tick the checkbox for any record to be
updated. Then, click |actions|, and select :icon:`fa-upload` :guilabel:`Export` from the drop-down
menu.
On the resulting :guilabel:`Export Data` pop-up window, tick the checkbox labeled, :guilabel:`I want
to update data (import-compatible export)`. This automatically includes the *External ID* in the
export. Additionally, it limits the :guilabel:`Fields to export` list to **only** include fields
that are able to be imported.
.. note::
The :guilabel:`External ID` field does **not** appear in the :guilabel:`Fields to export` list
unless it is manually added, but it is still included in the export. However, if the :guilabel:`I
want to update data (import-compatible export)` checkbox is ticked, it is included in the export.
Select the required fields to be included in the export using the :ref:`options <export-data>` on
the pop-up window, then click :guilabel:`Export`.
Import updated data
-------------------
After exporting, make any necessary changes to the data file. When the file is ready, it can be
:ref:`imported <import-data>` by following the same process as a normal data import.
.. danger::
When updating data, it is extremely important that the *External ID* remain consistent, as
this is how the system identifies a record. If an ID is altered, or removed, the system may add a
duplicate record, instead of updating the existing one.
@@ -0,0 +1,199 @@
---
substitutions:
IAP: '{abbr}`IAP (In-app purchases)`'
---
# In-app purchases (IAP)
In-app purchases (IAP) are optional services that enhance Odoo databases. Each service provides its
own specific features and functionality. A full list of services is available on the [Odoo IAP
Catalog](https://iap.odoo.com/iap/all-in-app-services).
```{image} in_app_purchase/iap.png
:align: center
:alt: The IAP catalog with various services available on IAP.Odoo.com.
```
```{eval-rst}
.. example::
The :guilabel:`SMS` service sends text messages to contacts directly from the database, and the
:guilabel:`Documents Digitization` service digitizes scanned or PDF vendor bills, expenses, and
resumes with optical character recognition (OCR) and artificial intelligence (AI).
```
{{ IAP }} services do **not** need to be configured or set up before use. Odoo users can simply click on
the service in the app to activate it. However, each service requires its own prepaid credits, and
when they run out, users **must** {ref}`buy more <iap/buying_credits>` in order to keep using it.
:::{note}
Enterprise Odoo users with a valid subscription get free credits to test IAP features before
deciding to purchase more credits for the database. This includes demo/training databases,
educational databases, and one-app-free databases.
:::
(in-app-purchase-portal)=
## IAP services
{{ IAP }} services are provided by Odoo, as well as third-parties, and have a wide range of uses.
The following {{ IAP }} services are offered by Odoo:
- {guilabel}`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
with OCR and AI.
- {guilabel}`Partner Autocomplete`: automatically populates contact records with corporate data.
- {guilabel}`SMS`: sends SMS text messages to contacts directly from the database.
- {guilabel}`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
into quality leads and opportunities.
- {guilabel}`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
- {guilabel}`Signer identification with itsme®️`: ask document signatories in Odoo *Sign* to provide
their identity using the *itsme®* identity platform, which is available in Belgium and the
Netherlands.
For more information on every service currently available (offered from developers other than Odoo),
visit the [Odoo IAP Catalog](https://iap.odoo.com/iap/all-in-app-services).
### Use IAP services
{{ IAP }} services are automatically integrated with Odoo, and do **not** require users to configure any
settings. To use a service, simply interact with it wherever it appears in the database.
```{eval-rst}
.. example::
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
This can be done by clicking the :guilabel:`📱 SMS` icon within the database.
.. image:: in_app_purchase/sms-icon.png
:align: center
:alt: The SMS icon on a typical contact information form located within an Odoo database.
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
First, navigate to the :menuselection:`Contacts application`, and click on a contact with a
mobile phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
contact form.
Next, find the :guilabel:`📱 SMS` icon that appears to the right of the :guilabel:`Phone` or
:guilabel:`Mobile` fields. Click the :guilabel:`📱 SMS` icon, and a :guilabel:`Send SMS Text
Message` pop-up window appears.
Type a message in the :guilabel:`Message` field of the pop-up window. Then, click the
:guilabel:`Send SMS` button. Odoo then sends the message, via SMS, to the contact, and logs what
was sent in the *chatter* of the contact's form.
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
deducted from the existing credits. If there are not enough credits to send the message, Odoo
prompts the user to purchase more.
```
:::{seealso}
For more information on how to use various {{ IAP }} services, and for more in-depth instructions
related to SMS functionality in Odoo, review the documentation below:
- {doc}`Lead mining <../sales/crm/acquire_leads/lead_mining>`
- {doc}`Enrich your contacts base with Partner Autocomplete
<../sales/crm/optimize/partner_autocomplete>`
- {doc}`SMS Marketing <../marketing/sms_marketing>`
:::
(in-app-purchase-credits)=
## IAP credits
Every time an {{ IAP }} service is used, the prepaid credits for that service are spent. Odoo prompts
the purchase of more credits when there are not enough credits left to continue using a service.
Email alerts can also be set up for when {ref}`credits are low <in_app_purchase/low-credits>`.
Credits are purchased in *Packs* from the [Odoo IAP Catalog](https://iap.odoo.com/iap/all-in-app-services), and pricing is specific to each service.
```{eval-rst}
.. example::
The `SMS service <https://iap.odoo.com/iap/in-app-services/1>`_ has four packs available, in
denominations of:
- :guilabel:`Starter Pack`: 10 credits
- :guilabel:`Standard Pack`: 100 credits
- :guilabel:`Advanced Pack`: 500 credits
- :guilabel:`Expert Pack`: 1,000 credits
.. image:: in_app_purchase/packs.png
:align: center
:alt: Four different packs of credits for the SMS IAP service.
The number of credits consumed depends on the length of the SMS and the country of destination.
For more information, refer to the :doc:`SMS Pricing and FAQ
<../marketing/sms_marketing/pricing_and_faq>` documentation.
```
(iap-buying-credits)=
### Buy credits
If there are not enough credits to perform a task, the database automatically prompts the purchase
of more credits.
Users can check the current balance of credits for each service, and manually purchase more credits,
by navigating to the {menuselection}`Settings app --> Contacts section`, and beneath the
{guilabel}`Odoo IAP` setting, click {guilabel}`View My Services`.
Doing so reveals an {guilabel}`IAP Service` page, listing the various {{ IAP }} services in the
database. From here, click an {{ IAP }} service to open its {guilabel}`Account Information` page, where
additional credits can be purchased.
#### Manually buy credits
To manually buy credits in Odoo, follow these steps:
First, go to the {menuselection}`Settings application` and type `IAP` in the {guilabel}`Search...`
bar. Alternatively users can scroll down to the {guilabel}`Contacts` section. Under the
{guilabel}`Contacts` section, where it says {guilabel}`Odoo IAP`, click {guilabel}`View My
Services`.
```{image} in_app_purchase/view-services.png
:align: center
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
```
Doing so reveals an {guilabel}`IAP Account` page, listing the various {{ IAP }} services in the
database. From here, click an {{ IAP }} service to open its {guilabel}`Account Information` page, where
additional credits can be purchased.
On the {guilabel}`Account Information` page, click the {guilabel}`Buy Credit` button. Doing so loads
a {guilabel}`Buy Credits for (IAP Account)` page in a new tab. From here, click {guilabel}`Buy` on
the desired pack of credits. Then, follow the prompts to enter payment details, and confirm the
order.
```{image} in_app_purchase/buy-pack.png
:align: center
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for
: purchase.
```
Once the transaction is complete, the credits are available for use in the database.
(in-app-purchase-low-credits)=
#### Low-credit notification
It is possible to be notified when credits are low, in order to avoid running out of credits, while
using an {{ IAP }} service. To do that, follow this process:
Go to the {menuselection}`Settings application`, and type `IAP` in the {guilabel}`Search...` bar.
Under the {guilabel}`Contacts` section, where it says {guilabel}`Odoo IAP`, click {guilabel}`View My
Services`.
The available {{ IAP }} accounts appear in a list view on the {guilabel}`IAP Account` page. From here,
click on the desired {{ IAP }} account to view that service's {guilabel}`Account Information` page.
On the {guilabel}`Account Information` page, tick the {guilabel}`Warn Me` checkbox. Doing so reveals
two fields on the form: {guilabel}`Threshold` and {guilabel}`Warning Email`.
In the {guilabel}`Threshold` field, enter an amount of credits Odoo should use as the
minimum threshold for this service. In the {guilabel}`Warning Email` field, enter the email address
that receives the notification.
Odoo sends a low-credit alert to the {guilabel}`Warning Email` when the balance of credits falls
below the amount listed as the {guilabel}`Threshold`.
@@ -1,192 +0,0 @@
======================
In-app purchases (IAP)
======================
.. |IAP| replace:: :abbr:`IAP (In-app purchases)`
In-app purchases (IAP) are optional services that enhance Odoo databases. Each service provides its
own specific features and functionality. A full list of services is available on the `Odoo IAP
Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
.. image:: in_app_purchase/iap.png
:align: center
:alt: The IAP catalog with various services available on IAP.Odoo.com.
.. example::
The :guilabel:`SMS` service sends text messages to contacts directly from the database, and the
:guilabel:`Documents Digitization` service digitizes scanned or PDF vendor bills, expenses, and
resumes with optical character recognition (OCR) and artificial intelligence (AI).
|IAP| services do **not** need to be configured or set up before use. Odoo users can simply click on
the service in the app to activate it. However, each service requires its own prepaid credits, and
when they run out, users **must** :ref:`buy more <iap/buying_credits>` in order to keep using it.
.. note::
Enterprise Odoo users with a valid subscription get free credits to test IAP features before
deciding to purchase more credits for the database. This includes demo/training databases,
educational databases, and one-app-free databases.
.. _in_app_purchase/portal:
IAP services
============
|IAP| services are provided by Odoo, as well as third-parties, and have a wide range of uses.
The following |IAP| services are offered by Odoo:
- :guilabel:`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
with OCR and AI.
- :guilabel:`Partner Autocomplete`: automatically populates contact records with corporate data.
- :guilabel:`SMS`: sends SMS text messages to contacts directly from the database.
- :guilabel:`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
into quality leads and opportunities.
- :guilabel:`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
- :guilabel:`Signer identification with itsme®️`: ask document signatories in Odoo *Sign* to provide
their identity using the *itsme®* identity platform, which is available in Belgium and the
Netherlands.
For more information on every service currently available (offered from developers other than Odoo),
visit the `Odoo IAP Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
Use IAP services
----------------
|IAP| services are automatically integrated with Odoo, and do **not** require users to configure any
settings. To use a service, simply interact with it wherever it appears in the database.
.. example::
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
This can be done by clicking the :guilabel:`📱 SMS` icon within the database.
.. image:: in_app_purchase/sms-icon.png
:align: center
:alt: The SMS icon on a typical contact information form located within an Odoo database.
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
First, navigate to the :menuselection:`Contacts application`, and click on a contact with a
mobile phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
contact form.
Next, find the :guilabel:`📱 SMS` icon that appears to the right of the :guilabel:`Phone` or
:guilabel:`Mobile` fields. Click the :guilabel:`📱 SMS` icon, and a :guilabel:`Send SMS Text
Message` pop-up window appears.
Type a message in the :guilabel:`Message` field of the pop-up window. Then, click the
:guilabel:`Send SMS` button. Odoo then sends the message, via SMS, to the contact, and logs what
was sent in the *chatter* of the contact's form.
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
deducted from the existing credits. If there are not enough credits to send the message, Odoo
prompts the user to purchase more.
.. seealso::
For more information on how to use various |IAP| services, and for more in-depth instructions
related to SMS functionality in Odoo, review the documentation below:
- :doc:`Lead mining <../sales/crm/acquire_leads/lead_mining>`
- :doc:`Enrich your contacts base with Partner Autocomplete
<../sales/crm/optimize/partner_autocomplete>`
- :doc:`SMS Marketing <../marketing/sms_marketing>`
.. _in_app_purchase/credits:
IAP credits
===========
Every time an |IAP| service is used, the prepaid credits for that service are spent. Odoo prompts
the purchase of more credits when there are not enough credits left to continue using a service.
Email alerts can also be set up for when :ref:`credits are low <in_app_purchase/low-credits>`.
Credits are purchased in *Packs* from the `Odoo IAP Catalog
<https://iap.odoo.com/iap/all-in-app-services>`_, and pricing is specific to each service.
.. example::
The `SMS service <https://iap.odoo.com/iap/in-app-services/1>`_ has four packs available, in
denominations of:
- :guilabel:`Starter Pack`: 10 credits
- :guilabel:`Standard Pack`: 100 credits
- :guilabel:`Advanced Pack`: 500 credits
- :guilabel:`Expert Pack`: 1,000 credits
.. image:: in_app_purchase/packs.png
:align: center
:alt: Four different packs of credits for the SMS IAP service.
The number of credits consumed depends on the length of the SMS and the country of destination.
For more information, refer to the :doc:`SMS Pricing and FAQ
<../marketing/sms_marketing/pricing_and_faq>` documentation.
.. _iap/buying_credits:
Buy credits
-----------
If there are not enough credits to perform a task, the database automatically prompts the purchase
of more credits.
Users can check the current balance of credits for each service, and manually purchase more credits,
by navigating to the :menuselection:`Settings app --> Contacts section`, and beneath the
:guilabel:`Odoo IAP` setting, click :guilabel:`View My Services`.
Doing so reveals an :guilabel:`IAP Service` page, listing the various |IAP| services in the
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
additional credits can be purchased.
Manually buy credits
~~~~~~~~~~~~~~~~~~~~
To manually buy credits in Odoo, follow these steps:
First, go to the :menuselection:`Settings application` and type `IAP` in the :guilabel:`Search...`
bar. Alternatively users can scroll down to the :guilabel:`Contacts` section. Under the
:guilabel:`Contacts` section, where it says :guilabel:`Odoo IAP`, click :guilabel:`View My
Services`.
.. image:: in_app_purchase/view-services.png
:align: center
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
additional credits can be purchased.
On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button. Doing so loads
a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click :guilabel:`Buy` on
the desired pack of credits. Then, follow the prompts to enter payment details, and confirm the
order.
.. image:: in_app_purchase/buy-pack.png
:align: center
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
Once the transaction is complete, the credits are available for use in the database.
.. _in_app_purchase/low-credits:
Low-credit notification
~~~~~~~~~~~~~~~~~~~~~~~
It is possible to be notified when credits are low, in order to avoid running out of credits, while
using an |IAP| service. To do that, follow this process:
Go to the :menuselection:`Settings application`, and type `IAP` in the :guilabel:`Search...` bar.
Under the :guilabel:`Contacts` section, where it says :guilabel:`Odoo IAP`, click :guilabel:`View My
Services`.
The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From here,
click on the desired |IAP| account to view that service's :guilabel:`Account Information` page.
On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` checkbox. Doing so reveals
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the
minimum threshold for this service. In the :guilabel:`Warning Email` field, enter the email address
that receives the notification.
Odoo sends a low-credit alert to the :guilabel:`Warning Email` when the balance of credits falls
below the amount listed as the :guilabel:`Threshold`.
@@ -1,27 +1,28 @@
==================
Keyboard shortcuts
==================
# Keyboard shortcuts
Users in Odoo can utilize several keyboard shortcuts to navigate through modules, execute actions,
and manage data.
.. tip::
Hold :kbd:`Ctrl` to view the keyboard shortcuts assigned to each element on the interface.
:::{tip}
Hold {kbd}`Ctrl` to view the keyboard shortcuts assigned to each element on the interface.
.. image:: keyboard_shortcuts/menu-shortcuts.png
:align: center
:alt: A selection of keyboard shortcuts in Odoo.
```{image} keyboard_shortcuts/menu-shortcuts.png
:align: center
:alt: A selection of keyboard shortcuts in Odoo.
```
:::
.. important::
Some keyboard shortcuts may not be available on different versions of Odoo or effective depending
on browsers, extensions, or other individual settings.
:::{important}
Some keyboard shortcuts may not be available on different versions of Odoo or effective depending
on browsers, extensions, or other individual settings.
:::
Keyboard shortcuts by operating system
======================================
## Keyboard shortcuts by operating system
Below is a list of some of the most commonly used keyboard shortcuts within Odoo, listed by
operating system.
```{eval-rst}
.. list-table::
:header-rows: 1
:stub-columns: 1
@@ -68,19 +69,23 @@ operating system.
* - Open command palette
- :kbd:`Ctrl` + :kbd:`K`
- :kbd:`Command` + :kbd:`K`
```
.. tip::
After opening the command palette, search using the following keyboard shortcuts:
:::{tip}
After opening the command palette, search using the following keyboard shortcuts:
- :kbd:`/`: search for menus, applications, and modules.
- :kbd:`@`: search for users.
- :kbd:`#`: search for **Discuss** channels.
- :kbd:`?`: search for **Knowledge** articles.
- {kbd}`/`: search for menus, applications, and modules.
- {kbd}`@`: search for users.
- {kbd}`#`: search for **Discuss** channels.
- {kbd}`?`: search for **Knowledge** articles.
Enter a name (or term) in the search bar, or use the arrow keys to scroll through the available
options. Then, click :kbd:`Ctrl` + :kbd:`Enter` to open the selected app, module, or menu in a
new tab.
Enter a name (or term) in the search bar, or use the arrow keys to scroll through the available
options. Then, click {kbd}`Ctrl` + {kbd}`Enter` to open the selected app, module, or menu in a
new tab.
```{image} keyboard_shortcuts/command-palete.png
:align: center
:alt: The command palette in Odoo, with the menu search option selected.
```
:::
.. image:: keyboard_shortcuts/command-palete.png
:align: center
:alt: The command palette in Odoo, with the menu search option selected.
@@ -1,70 +1,70 @@
=========
Reporting
=========
# Reporting
You can find several reports under the :guilabel:`Reporting` menu of most apps that let you analyze
You can find several reports under the {guilabel}`Reporting` menu of most apps that let you analyze
and visualize the data of your records.
.. _reporting/views:
(reporting-views)=
Selecting a view
================
## Selecting a view
Depending on the report, Odoo can display the data in various ways. Sometimes, a unique view
fully tailored to the report is available, while several views are available for others. However,
two generic views are dedicated to reporting: the graph and pivot views.
.. _reporting/views/graph:
(reporting-views-graph)=
Graph view
----------
### Graph view
The :ref:`graph view <reporting/using-graph>` is used to visualize your records' data, helping you
identify patterns and trends. The view is often found under the :guilabel:`Reporting` menu of apps
The {ref}`graph view <reporting/using-graph>` is used to visualize your records' data, helping you
identify patterns and trends. The view is often found under the {guilabel}`Reporting` menu of apps
but can be found elsewhere. Click the **graph view button** located at the top right to access
it.
.. image:: reporting/graph-button.png
:alt: Selecting the graph view
```{image} reporting/graph-button.png
:alt: Selecting the graph view
```
.. _reporting/views/pivot:
(reporting-views-pivot)=
Pivot view
----------
### Pivot view
The :ref:`pivot view <reporting/using-pivot>` is used to aggregate your records' data and break it
down for analysis. The view is often found under the :guilabel:`Reporting` menu of apps but can be
The {ref}`pivot view <reporting/using-pivot>` is used to aggregate your records' data and break it
down for analysis. The view is often found under the {guilabel}`Reporting` menu of apps but can be
found elsewhere. Click the **pivot view button** located at the top right to access it.
.. image:: reporting/pivot-button.png
:alt: Selecting the pivot view
```{image} reporting/pivot-button.png
:alt: Selecting the pivot view
```
.. _reporting/choosing-measures:
(reporting-choosing-measures)=
Choosing measures
=================
## Choosing measures
After selecting a view, you should ensure only the relevant records are :doc:`filtered <search>`.
After selecting a view, you should ensure only the relevant records are {doc}`filtered <search>`.
Next, you should choose what is measured. By default, a measure is always selected. If you wish to
edit it, click :guilabel:`Measures` and choose one or, only for pivots, multiple measures.
edit it, click {guilabel}`Measures` and choose one or, only for pivots, multiple measures.
.. note::
When you select a measure, Odoo aggregates the values recorded on that field for the filtered
records. Only numerical fields (:ref:`integer <studio/fields/simple-fields/integer>`,
:ref:`decimal <studio/fields/simple-fields/decimal>`, :ref:`monetary
<studio/fields/simple-fields/monetary>`) can be measured. In addition, the :guilabel:`Count`
option is used to count the total number of filtered records.
:::{note}
When you select a measure, Odoo aggregates the values recorded on that field for the filtered
records. Only numerical fields ({ref}`integer <studio/fields/simple-fields/integer>`,
{ref}`decimal <studio/fields/simple-fields/decimal>`, {ref}`monetary
<studio/fields/simple-fields/monetary>`) can be measured. In addition, the {guilabel}`Count`
option is used to count the total number of filtered records.
:::
After choosing what you want to measure, you can define how the data should be :ref:`grouped
After choosing what you want to measure, you can define how the data should be {ref}`grouped
<search/group>` depending on the dimension you want to analyze. By default, the data is often
grouped by *Date > Month*, which is used to analyze the evolution of a measure over the months.
.. tip::
When you filter a single time period, the option to compare it against another one appears.
:::{tip}
When you filter a single time period, the option to compare it against another one appears.
.. image:: reporting/comparison.png
:alt: Using the comparison option
```{image} reporting/comparison.png
:alt: Using the comparison option
```
:::
```{eval-rst}
.. example::
.. tabs::
@@ -85,21 +85,22 @@ grouped by *Date > Month*, which is used to analyze the evolution of a measure o
.. image:: reporting/single-group.png
:alt: Adding a group on the Sales Analysis report
```
.. _reporting/using-pivot:
(reporting-using-pivot)=
Using the pivot view
====================
## Using the pivot view
Grouping data is quintessential to the pivot view. It enables drilling down the data to gain deeper
insights. While you can use the :guilabel:`Group By` option to quickly add a group at the level of
rows, as shown in the example above, you can also click the plus button (:guilabel:``) next to the
:guilabel:`Total` header at the level of rows *and* columns, and then select one of the
**preconfigured groups**. To remove one, click the minus button (:guilabel:``).
insights. While you can use the {guilabel}`Group By` option to quickly add a group at the level of
rows, as shown in the example above, you can also click the plus button ({guilabel}``) next to the
{guilabel}`Total` header at the level of rows *and* columns, and then select one of the
**preconfigured groups**. To remove one, click the minus button ({guilabel}``).
Once you have added a group, you can add new ones on the opposite axis or the newly created
subgroups.
```{eval-rst}
.. example::
You could further divide the measures on the previous Sales Analysis report example by the
:guilabel:`Salesperson` group at the level of columns and by the :guilabel:`Order Date > Month`
@@ -107,16 +108,17 @@ subgroups.
.. image:: reporting/multiple-groups.png
:alt: Adding multiple groups on the Sales Analysis report
```
.. tip::
- Switch the rows and columns' groups by clicking the flip axis button (:guilabel:`⇄`).
- Click on a measure's label to sort the values by ascending (⏶) or descending (⏷) order.
- Download a `.xlsx` version of the pivot by clicking the download button (:guilabel:`⭳`).
:::{tip}
- Switch the rows and columns' groups by clicking the flip axis button ({guilabel}`⇄`).
- Click on a measure's label to sort the values by ascending (⏶) or descending (⏷) order.
- Download a `.xlsx` version of the pivot by clicking the download button ({guilabel}`⭳`).
:::
.. _reporting/using-graph:
(reporting-using-graph)=
Using the graph view
====================
## Using the graph view
Three graphs are available: the bar, line, and pie charts.
@@ -128,6 +130,7 @@ especially useful as they can deal with larger data sets.
**Pie charts** are used to show the distribution or a comparison of a small number of categories
when they form a meaningful whole.
```{eval-rst}
.. tabs::
.. tab:: Bar chart
@@ -144,44 +147,51 @@ when they form a meaningful whole.
.. image:: reporting/pie.png
:alt: Viewing the Sales Analysis report as a pie chart
```
.. tip::
For **bar** and **line** charts, you can use the stacked option when you have at least two
groups, which then appear on top of each other instead of next to each other.
:::{tip}
For **bar** and **line** charts, you can use the stacked option when you have at least two
groups, which then appear on top of each other instead of next to each other.
.. tabs::
```{eval-rst}
.. tabs::
.. tab:: Stacked bar chart
.. tab:: Stacked bar chart
.. image:: reporting/stacked-bar.png
:alt: Stacked bar chart example
.. image:: reporting/stacked-bar.png
:alt: Stacked bar chart example
.. tab:: Regular bar chart
.. tab:: Regular bar chart
.. image:: reporting/non-stacked-bar.png
:alt: Non-stacked bar chart example
.. image:: reporting/non-stacked-bar.png
:alt: Non-stacked bar chart example
.. tab:: Stacked line chart
.. tab:: Stacked line chart
.. image:: reporting/stacked-line.png
:alt: Stacked line chart example
.. image:: reporting/stacked-line.png
:alt: Stacked line chart example
.. tab:: Regular line chart
.. tab:: Regular line chart
.. image:: reporting/non-stacked-line.png
:alt: Non-stacked line chart example
.. image:: reporting/non-stacked-line.png
:alt: Non-stacked line chart example
```
For **line** charts, you can use the cumulative option to sum values, which is especially useful
to show the change in growth over a time period.
For **line** charts, you can use the cumulative option to sum values, which is especially useful
to show the change in growth over a time period.
.. tabs::
```{eval-rst}
.. tabs::
.. tab:: Cumulative line chart
.. tab:: Cumulative line chart
.. image:: reporting/cumulative.png
:alt: Cumulative line chart example
.. image:: reporting/cumulative.png
:alt: Cumulative line chart example
.. tab:: Regular line chart
.. tab:: Regular line chart
.. image:: reporting/non-cumulative.png
:alt: Regular line chart example
```
:::
.. image:: reporting/non-cumulative.png
:alt: Regular line chart example
@@ -1,21 +1,19 @@
=================================
Search, filter, and group records
=================================
# Search, filter, and group records
Odoo allows for the searching, filtering, and grouping of records in a view to display only the most
relevant records. The search bar is located at the top of the view, start typing to :ref:`search for
values <search/values>`, or click the :guilabel:`🔽 (down arrow)` icon to access the :ref:`Filter
<search/filters>`, :ref:`Group By <search/group>`, and :ref:`Favorites <search/favorites>` drop-down
relevant records. The search bar is located at the top of the view, start typing to {ref}`search for
values <search/values>`, or click the {guilabel}`🔽 (down arrow)` icon to access the {ref}`Filter
<search/filters>`, {ref}`Group By <search/group>`, and {ref}`Favorites <search/favorites>` drop-down
menus.
.. _search/values:
(search-values)=
Search for values
=================
## Search for values
Use the search field to quickly look for specific values, and add them as a filter. Type the value
to search for, and select the desired option from the drop-down menu to apply the search filter.
```{eval-rst}
.. example::
Instead of adding a :ref:`custom filter <search/custom-filters>` to select records where
*Mitchell Admin* is the salesperson on the *Sales Analysis* report (:menuselection:`Sales app -->
@@ -25,31 +23,32 @@ to search for, and select the desired option from the drop-down menu to apply th
.. image:: search/search-values.png
:align: center
:alt: Searching for a specific value on the Sales Analysis report
```
.. note::
Using the search field is equivalent to using the *contains* operator when adding a :ref:`custom
filter <search/custom-filters>`. If a partial value is entered, and the desired field is directly
selected (without selecting the :guilabel:`⏵ (right arrow)`), *all* records containing the typed
characters for the selected field are included.
:::{note}
Using the search field is equivalent to using the *contains* operator when adding a {ref}`custom
filter <search/custom-filters>`. If a partial value is entered, and the desired field is directly
selected (without selecting the {guilabel}`⏵ (right arrow)`), *all* records containing the typed
characters for the selected field are included.
:::
.. _search/filters:
(search-filters)=
Filters
=======
## Filters
Filters are used to select records that meet specific criteria. The default selection of records is
specific to each view, but can be modified by selecting one (or several) :ref:`preconfigured filters
<search/preconfigured-filters>`, or by adding a :ref:`custom filter <search/custom-filters>`.
specific to each view, but can be modified by selecting one (or several) {ref}`preconfigured filters
<search/preconfigured-filters>`, or by adding a {ref}`custom filter <search/custom-filters>`.
.. _search/preconfigured-filters:
(search-preconfigured-filters)=
Preconfigured filters
---------------------
### Preconfigured filters
Modify the default selection of records by clicking the :guilabel:`🔽 (down arrow)` icon from the
search bar, and selecting one (or several) *preconfigured filters* from the :guilabel:`Filters`
Modify the default selection of records by clicking the {guilabel}`🔽 (down arrow)` icon from the
search bar, and selecting one (or several) *preconfigured filters* from the {guilabel}`Filters`
drop-down menu.
```{eval-rst}
.. example::
On the *Sales Analysis* report (:menuselection:`Sales app --> Reporting --> Sales`), only records
that are at the *sales order* stage, with an *order date* within the last 365 days, are selected
@@ -65,73 +64,79 @@ drop-down menu.
.. image:: search/preconfigured-filters.png
:align: center
:alt: Using preconfigured filters on the Sales Analysis report
```
.. note::
The preconfigured :guilabel:`Filters` are grouped, and each group is separated by a horizontal
line. Selecting preconfigured filters from the same group allows records to match *any* of the
applied conditions. However, selecting filters from different groups requires records to match
*all* of the applied conditions.
:::{note}
The preconfigured {guilabel}`Filters` are grouped, and each group is separated by a horizontal
line. Selecting preconfigured filters from the same group allows records to match *any* of the
applied conditions. However, selecting filters from different groups requires records to match
*all* of the applied conditions.
:::
.. _search/custom-filters:
(search-custom-filters)=
Custom filters
--------------
### Custom filters
If the :ref:`preconfigured filters <search/preconfigured-filters>` are not specific enough, add a
custom filter. To do so, click the :guilabel:`🔽 (down arrow)` icon in the search bar, then select
:menuselection:`Filters --> Add Custom Filter`.
If the {ref}`preconfigured filters <search/preconfigured-filters>` are not specific enough, add a
custom filter. To do so, click the {guilabel}`🔽 (down arrow)` icon in the search bar, then select
{menuselection}`Filters --> Add Custom Filter`.
The :guilabel:`Add Custom Filter` pop-up window displays the matching option, filter rule, and a
toggle to :guilabel:`Include archived` records.
The {guilabel}`Add Custom Filter` pop-up window displays the matching option, filter rule, and a
toggle to {guilabel}`Include archived` records.
.. image:: search/custom-filter.png
:align: center
:alt: The Add Custom Filter pop-up window.
```{image} search/custom-filter.png
:align: center
:alt: The Add Custom Filter pop-up window.
```
The default matching configuration is to :guilabel:`Match any of the following rules`, indicating
The default matching configuration is to {guilabel}`Match any of the following rules`, indicating
that each filter rule is applied independently. To change the matching configuration to
:guilabel:`Match all of the following rules`, at least two filter rules must be added to the custom
{guilabel}`Match all of the following rules`, at least two filter rules must be added to the custom
filter.
- :guilabel:`Match all 🔽 of the following rules`: **all** of the filter rules must be met.
- {guilabel}`Match all 🔽 of the following rules`: **all** of the filter rules must be met.
Logically, this is an *AND* (`&`) operation.
- :guilabel:`Match any 🔽 of the following rules`: **any** of the filter rules can be met.
- {guilabel}`Match any 🔽 of the following rules`: **any** of the filter rules can be met.
Logically, this is an *OR* (`|`) operation.
By default, a single filter rule is added to the custom filter. The following describes the
structure of a filter rule:
#. The first inline field is the *field name* to filter by. Some fields have refined parameters that
are nested within another field. These fields have an :guilabel:`> (arrow)` icon beside them,
1. The first inline field is the *field name* to filter by. Some fields have refined parameters that
are nested within another field. These fields have an {guilabel}`> (arrow)` icon beside them,
which can be selected to reveal the nested fields.
#. The second inline field is the conditional *operator* used to compare the field name to the
value. The :ref:`available conditional operators <reference/orm/domains>` are specific to the
2. The second inline field is the conditional *operator* used to compare the field name to the
value. The {ref}`available conditional operators <reference/orm/domains>` are specific to the
field's data type.
#. The third inline field is the variable *value* of the field name. The value input may appear as a
3. The third inline field is the variable *value* of the field name. The value input may appear as a
drop-down menu, a text input, a number input, a date/time input, a boolean selector, or it may be
blank, depending on the operator used and the field's data type.
Three inline buttons are also available to the right of the rule's filter criteria:
#. :guilabel:` (plus sign)`: adds a new rule below the existing rule.
#. :guilabel:`(Add branch)`: adds a new group of rules below the existing rule, with the
:guilabel:`any` and :guilabel:`all` matching options available to define how each rule within
1. {guilabel}` (plus sign)`: adds a new rule below the existing rule.
2. {guilabel}`(Add branch)`: adds a new group of rules below the existing rule, with the
{guilabel}`any` and {guilabel}`all` matching options available to define how each rule within
this branch is applied to the filter. If the matching option is set to the same as the parent
group, the fields are moved to join the parent group.
```{eval-rst}
.. example::
If the matching option is set to :guilabel:`Match all 🔽 of the following rules`, and a new
branch is added with its matching option changed from :guilabel:`any 🔽 of` to :guilabel:`all
🔽 of`, the newly-added branch disappears, and its group of rules are moved to the parent
group.
```
#. :guilabel:`🗑️ (garbage can)`: deletes the node. If a branch node is deleted, all children of
3. {guilabel}`🗑️ (garbage can)`: deletes the node. If a branch node is deleted, all children of
that node are deleted, as well.
A new filter rule can be added to the custom filter by clicking the :guilabel:`New Rule` button.
A new filter rule can be added to the custom filter by clicking the {guilabel}`New Rule` button.
Once the filter criteria are defined, click :guilabel:`Add` to add the custom filter to the view.
Once the filter criteria are defined, click {guilabel}`Add` to add the custom filter to the view.
```{eval-rst}
.. example::
To target all leads and opportunities from the :menuselection:`CRM` app that are in the *Won*
stage, and have an expected revenue greater than $1,000, the following should be entered:
@@ -148,21 +153,23 @@ Once the filter criteria are defined, click :guilabel:`Add` to add the custom fi
.. image:: search/custom-filter-example.png
:align: center
:alt: Adding a custom filter to filter specific records in CRM.
```
.. tip::
Activate :ref:`developer-mode` to reveal each field's technical name and data type, as well as
the :guilabel:`# Code editor` text area below the filter rules, to view and edit the domain
manually.
:::{tip}
Activate {ref}`developer-mode` to reveal each field's technical name and data type, as well as
the {guilabel}`# Code editor` text area below the filter rules, to view and edit the domain
manually.
:::
.. _search/group:
(search-group)=
Group records
=============
## Group records
The display of records in a view can be clustered together, according to one of the *preconfigured
groups*. To do so, click the :guilabel:`🔽 (down arrow)` icon in the search bar, then select one of
the :guilabel:`Group By` options from the drop-down menu.
groups*. To do so, click the {guilabel}`🔽 (down arrow)` icon in the search bar, then select one of
the {guilabel}`Group By` options from the drop-down menu.
```{eval-rst}
.. example::
To group the records by salesperson on the *Sales Analysis* report (:menuselection:`Sales app -->
Reporting --> Sales`), click the :guilabel:`Salesperson` option from the :guilabel:`Group By`
@@ -172,67 +179,71 @@ the :guilabel:`Group By` options from the drop-down menu.
.. image:: search/group.png
:align: center
:alt: Grouping records on the Sales Analysis report
```
It is possible to *customize groups* by using a field present on the model. To do so, click
:menuselection:`Add Custom Group`, and select a field from the drop-down menu.
{menuselection}`Add Custom Group`, and select a field from the drop-down menu.
.. note::
Several groups can be used at the same time. The first group that is selected is the main
cluster, the next one that is added further divides the main group's categories, and so on.
Furthermore, filters and groups can be used together to refine the view even more.
:::{note}
Several groups can be used at the same time. The first group that is selected is the main
cluster, the next one that is added further divides the main group's categories, and so on.
Furthermore, filters and groups can be used together to refine the view even more.
:::
.. _search/comparison:
(search-comparison)=
Comparison
==========
## Comparison
Certain reporting dashboards include a :guilabel:`Comparison` section in the drop-down menus of
their :guilabel:`Search...` bars. This includes the :doc:`Overall Equipment Effectiveness
Certain reporting dashboards include a {guilabel}`Comparison` section in the drop-down menus of
their {guilabel}`Search...` bars. This includes the {doc}`Overall Equipment Effectiveness
<../inventory_and_mrp/manufacturing/reporting/oee>` report for the *Manufacturing* app, and the
:doc:`Purchase <../inventory_and_mrp/purchase/advanced/analyze>` report for the *Purchase* app,
{doc}`Purchase <../inventory_and_mrp/purchase/advanced/analyze>` report for the *Purchase* app,
among others.
The options in the :icon:`fa-adjust` :guilabel:`Comparison` section are used to compare data from
two different time periods. There are two comparison options to choose from: :guilabel:`(Time
Filter): Previous Period` and :guilabel:`(Time Filter): Previous Year`.
The options in the {icon}`fa-adjust` {guilabel}`Comparison` section are used to compare data from
two different time periods. There are two comparison options to choose from: {guilabel}`(Time
Filter): Previous Period` and {guilabel}`(Time Filter): Previous Year`.
.. important::
For some reports, the :guilabel:`Comparison` section **only** appears in the
:guilabel:`Search...` bar drop-down menu if one (or more) time periods have been selected in the
:guilabel:`Filters` column. This is because, if no time period is specified, there is nothing to
compare.
:::{important}
For some reports, the {guilabel}`Comparison` section **only** appears in the
{guilabel}`Search...` bar drop-down menu if one (or more) time periods have been selected in the
{guilabel}`Filters` column. This is because, if no time period is specified, there is nothing to
compare.
Additionally, some reports only allow use of the :guilabel:`Comparison` feature when the
:icon:`fa-pie-chart` :guilabel:`(pie chart)` graph type, or the :icon:`oi-view-pivot`
:guilabel:`(pivot)` view, is selected. A :guilabel:`Comparison` option can be selected even if
another view is enabled, but doing so does **not** change the way data is displayed on the
report.
Additionally, some reports only allow use of the {guilabel}`Comparison` feature when the
{icon}`fa-pie-chart` {guilabel}`(pie chart)` graph type, or the {icon}`oi-view-pivot`
{guilabel}`(pivot)` view, is selected. A {guilabel}`Comparison` option can be selected even if
another view is enabled, but doing so does **not** change the way data is displayed on the
report.
:::
.. image:: search/comparison-section.png
:align: center
:alt: The Search... bar for the production analysis report.
```{image} search/comparison-section.png
:align: center
:alt: The Search... bar for the production analysis report.
```
To view data using one of the two comparisons, begin by selecting a time period in the
:guilabel:`Filters` column of the :guilabel:`Search...` bar drop-down menu. Then, select either
:guilabel:`(Time Filter): Previous Period` or :guilabel:`(Time Filter): Previous Year` in the
:guilabel:`Comparison` section.
{guilabel}`Filters` column of the {guilabel}`Search...` bar drop-down menu. Then, select either
{guilabel}`(Time Filter): Previous Period` or {guilabel}`(Time Filter): Previous Year` in the
{guilabel}`Comparison` section.
With one of the :guilabel:`Comparison` options enabled, the report compares the data for the
With one of the {guilabel}`Comparison` options enabled, the report compares the data for the
selected period, with the data for the same unit of time (month, quarter, year), one period or year
prior. The way the data is displayed depends on the selected view:
- The :icon:`fa-bar-chart` :guilabel:`(bar chart)` shows two bars, side-by-side, for each unit of
- The {icon}`fa-bar-chart` {guilabel}`(bar chart)` shows two bars, side-by-side, for each unit of
time for the selected time period. The left bar represents the selected time period, while the
right bar represents the previous time period.
- The :icon:`fa-line-chart` :guilabel:`(line chart)` is displayed with two lines, one representing
- The {icon}`fa-line-chart` {guilabel}`(line chart)` is displayed with two lines, one representing
the selected time period, and the other representing the previous time period.
- The :icon:`fa-pie-chart` :guilabel:`(pie chart)` appears as a large circle with a smaller circle
- The {icon}`fa-pie-chart` {guilabel}`(pie chart)` appears as a large circle with a smaller circle
inside. The larger circle represents the selected time period, while the smaller circle represents
the previous time period.
- The :icon:`oi-view-pivot` :guilabel:`(pivot table)` is displayed with each column split into two
- The {icon}`oi-view-pivot` {guilabel}`(pivot table)` is displayed with each column split into two
smaller columns. The right column represents the selected time period, while the left column
represents the previous time period.
```{eval-rst}
.. example::
In the :guilabel:`Production Analysis` report of the :menuselection:`Manufacturing` app, data for
the second quarter of 2024 is compared to data for the second quarter of 2023. :guilabel:`Q2` is
@@ -249,35 +260,38 @@ prior. The way the data is displayed depends on the selected view:
.. image:: search/comparison.png
:align: center
:alt: The comparison view of the Production Analysis report.
```
.. _search/favorites:
(search-favorites)=
Favorites
=========
## Favorites
Favorites are a way to save a specific search for future use, or as the new default filter for the
view.
To save the current view as a favorite, click the :guilabel:`🔽 (down arrow)` icon in the search
bar, then select the :guilabel:`Save current search` drop-down menu to display the following
To save the current view as a favorite, click the {guilabel}`🔽 (down arrow)` icon in the search
bar, then select the {guilabel}`Save current search` drop-down menu to display the following
options:
- Filter name: name of the favorited search.
- :guilabel:`Default filter`: sets the favorited search as the default filter for the view.
- :guilabel:`Shared`: makes the favorited search available to all users. By default, the favorited
- {guilabel}`Default filter`: sets the favorited search as the default filter for the view.
- {guilabel}`Shared`: makes the favorited search available to all users. By default, the favorited
search is only available to the user who created it.
Once the options are set, click :guilabel:`Save` to save the favorited search.
Once the options are set, click {guilabel}`Save` to save the favorited search.
.. image:: search/favorites.png
:align: center
:alt: Saving a favorite search on the Sales Analysis report
```{image} search/favorites.png
:align: center
:alt: Saving a favorite search on the Sales Analysis report
```
Saved favorites can be accessed by clicking the :guilabel:`🔽 (down arrow)` icon in the search bar,
then selecting the saved filter in the :guilabel:`Favorites` drop-down menu. To remove a saved
favorite, click the :guilabel:`🗑️ (garbage can)` icon next to the favorited search.
Saved favorites can be accessed by clicking the {guilabel}`🔽 (down arrow)` icon in the search bar,
then selecting the saved filter in the {guilabel}`Favorites` drop-down menu. To remove a saved
favorite, click the {guilabel}`🗑️ (garbage can)` icon next to the favorited search.
:::{tip}
To view *all* favorited searches, first activate {ref}`developer-mode`, and navigate to
{menuselection}`Settings app --> Technical --> User Interface: User-defined Filters`. From here,
all favorited searches can be viewed, edited, archived, or deleted.
:::
.. tip::
To view *all* favorited searches, first activate :ref:`developer-mode`, and navigate to
:menuselection:`Settings app --> Technical --> User Interface: User-defined Filters`. From here,
all favorited searches can be viewed, edited, archived, or deleted.
+13
View File
@@ -0,0 +1,13 @@
---
nosearch: true
---
# Finance
```{toctree}
finance/accounting
finance/expenses
finance/payment_providers
finance/fiscal_localizations
```
-12
View File
@@ -1,12 +0,0 @@
:nosearch:
=======
Finance
=======
.. toctree::
finance/accounting
finance/expenses
finance/payment_providers
finance/fiscal_localizations
@@ -1,8 +1,8 @@
:show-content:
---
show-content: true
---
========================
Accounting and Invoicing
========================
# Accounting and Invoicing
**Odoo Invoicing** is a standalone invoicing app to create invoices, send them to your customers,
and manage payments.
@@ -11,9 +11,11 @@ and manage payments.
development with features such as AI-powered invoice recognition, synchronization with your bank
accounts, smart matching suggestions, etc.
.. seealso::
`Odoo Tutorials: Accounting <https://www.odoo.com/slides/accounting-19>`_
:::{seealso}
[Odoo Tutorials: Accounting](https://www.odoo.com/slides/accounting-19)
:::
```{eval-rst}
.. cards::
.. card:: Get started
@@ -51,9 +53,9 @@ accounts, smart matching suggestions, etc.
:target: accounting/reporting
Reporting, declarations, and analytic accounting
```
Double-entry bookkeeping
========================
## 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.).
@@ -63,74 +65,72 @@ opposite counterpart in a different account, with one account debited and the ot
It ensures that all transactions are recorded accurately and consistently and that the accounts
always balance.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
:::{seealso}
{doc}`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
:::
Accrual and cash basis
======================
## 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).
.. seealso::
:doc:`Cash basis <accounting/taxes/cash_basis>`
:::{seealso}
{doc}`Cash basis <accounting/taxes/cash_basis>`
:::
.. _accounting/multi-company:
(accounting-multi-company)=
Multi-company
=============
## Multi-company
Several companies can be managed within the same database. Each company has its :doc:`chart of
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
time.
Multi-currency environment
==========================
## Multi-currency environment
A :doc:`multi-currency <accounting/get_started/multi_currency>` environment with an automated
A {doc}`multi-currency <accounting/get_started/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.
.. seealso::
:doc:`Manage a bank in a foreign currency <accounting/bank/foreign_currency>`
:::{seealso}
{doc}`Manage a bank in a foreign currency <accounting/bank/foreign_currency>`
:::
Branch management
=================
## Branch management
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.
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.
.. seealso::
:doc:`Fiscal localization packages <fiscal_localizations>`
:::{seealso}
{doc}`Fiscal localization packages <fiscal_localizations>`
:::
Accounts receivable and 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.
The **Partner Ledger** report displays the balance of your customers and suppliers. It is available
by going to :menuselection:`Accounting --> Reporting --> Partner Ledger`.
by going to {menuselection}`Accounting --> Reporting --> Partner Ledger`.
Reporting
=========
## Reporting
The following financial :doc:`reports <accounting/reporting>` are available and updated in
The following financial {doc}`reports <accounting/reporting>` are available and updated in
real-time:
```{eval-rst}
+-----------------------------------------------+
| Financial reports |
+============+==================================+
@@ -174,76 +174,80 @@ real-time:
| +----------------------------------+
| | 1099 report |
+------------+----------------------------------+
```
.. tip::
:doc:`Create and customize reports <accounting/reporting/customize>` with Odoo's report engine.
:::{tip}
{doc}`Create and customize reports <accounting/reporting/customize>` with Odoo's report engine.
:::
Tax report
----------
### Tax report
Odoo computes all accounting transactions for the specific tax period and uses these totals to
calculate the tax obligation.
.. important::
Once the tax report has been generated for a period, Odoo locks it and prevents the creation of
new journal entries involving VAT. Any correction to customer invoices or vendor bills has to
be recorded in the next period.
:::{important}
Once the tax report has been generated for a period, Odoo locks it and prevents the creation of
new journal entries involving VAT. Any correction to customer invoices or vendor bills has to
be recorded in the next period.
:::
.. note::
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.
:::{note}
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
====================
## 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
into an online banking system or waiting for paper bank statements.
.. seealso::
:doc:`Bank synchronization <accounting/bank/bank_synchronization>`
:::{seealso}
{doc}`Bank synchronization <accounting/bank/bank_synchronization>`
:::
Inventory valuation
===================
## Inventory valuation
Both periodic (manual) and perpetual (automated) inventory valuations are supported in Odoo. The
available methods are standard price, average price, :abbr:`LIFO (Last-In, First-Out)` and
:abbr:`FIFO (First-In, First-Out).`
available methods are standard price, average price, {abbr}`LIFO (Last-In, First-Out)` and
{abbr}`FIFO (First-In, First-Out).`
.. seealso::
:doc:`../inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config`
:::{seealso}
{doc}`../inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config`
:::
Retained earnings
=================
## 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.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
:::{seealso}
{doc}`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
:::
.. _fiduciaries:
(fiduciaries)=
Fiduciaries
===========
## Fiduciaries
The :guilabel:`Accounting Firms` mode can be activated by going to :menuselection:`Accounting -->
The {guilabel}`Accounting Firms` mode can be activated by going to {menuselection}`Accounting -->
Configuration --> Settings --> Accounting Firms mode`. When enabled:
- The document's sequence becomes editable on all documents;
- The :guilabel:`Total (tax incl.)` field appears to speed up and control the encoding by automating
- The {guilabel}`Total (tax incl.)` field appears to speed up and control the encoding by automating
line creation with the right account and tax;
- :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.
- {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.
.. toctree::
:titlesonly:
```{toctree}
:titlesonly: true
accounting/get_started
accounting/taxes
accounting/customer_invoices
accounting/vendor_bills
accounting/payments
accounting/bank
accounting/reporting
```
accounting/get_started
accounting/taxes
accounting/customer_invoices
accounting/vendor_bills
accounting/payments
accounting/bank
accounting/reporting
@@ -0,0 +1,205 @@
---
show-content: true
---
# 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 {doc}`reconciliation
<bank/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.
:::{note}
Cash journals and accounts must be configured manually.
:::
Bank journals are displayed by default on the {guilabel}`Accounting Dashboard` in the form of cards
which include action buttons.
```{image} bank/card.png
:alt: Bank journals are displayed on the Accounting Dashboard and contain action buttons
```
(accounting-bank-manage)=
## Manage bank and cash accounts
### Connect a bank for automatic synchronization
To connect your bank account to your database, go to {menuselection}`Accounting --> Configuration
--> Add a Bank Account`, select your bank in the list, click on {guilabel}`Connect`, and follow the
instructions.
:::{seealso}
{doc}`bank/bank_synchronization`
:::
(accounting-bank-create)=
### 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 {menuselection}`Accounting --> Configuration --> Add a Bank
Account`, click on {guilabel}`Record transactions manually` (at the bottom right), fill out the bank
information, and click {guilabel}`Create`.
:::{note}
- 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
{menuselection}`Accounting --> Configuration --> Accounting: Journals --> Bank`. Open it and
edit the different fields to match your bank account information.
:::
### Create a cash journal
To create a new cash journal, go to {menuselection}`Accounting --> Configuration --> Accounting:
Journals`, click on {guilabel}`Create` and select {guilabel}`Cash` in the {guilabel}`Type` field.
For more information on the accounting information fields, read the
{ref}`accounting/bank/configuration` section of this page.
:::{note}
A default cash journal is available and can be used straight away. You can review it by going to
{menuselection}`Accounting --> Configuration --> Accounting: Journals --> Cash`.
:::
### Edit an existing bank or cash journal
To edit an existing bank journal, go to {menuselection}`Accounting --> Configuration --> Accounting:
Journals` and select the journal you want to modify.
(accounting-bank-configuration)=
## Configuration
You can edit the accounting information and bank account number according to your needs.
```{image} bank/bank-journal-config.png
:alt: Manually configure your bank information
```
:::{seealso}
- {doc}`get_started/multi_currency`
- {doc}`bank/transactions`
- [Bank configuration](https://www.youtube.com/watch?v=tVhhXw-VnGE)
:::
(accounting-bank-suspense)=
### Suspense account
Bank statement transactions are posted on the suspense account until they are reconciled. At any
moment, the suspense account's balance in the general ledger shows the balance of transactions that
have not yet been reconciled.
:::{note}
When a bank transaction is reconciled, the journal entry is modified to replace the bank suspense
account with the account of the journal item it is reconciled with. This account is usually the
{ref}`outstanding receipts or payments account <accounting/bank/outstanding-accounts>` if
reconciling with a registered payment or the account receivable or payable if reconciling with
an invoice or bill directly.
:::
### Profit and loss accounts
The {guilabel}`Profit Account` is used to register a profit when the ending balance of a cash
register differs from what the system computes, while the {guilabel}`Loss Account` is used to
register a loss when the ending balance of a cash register differs from what the system computes.
### Currency
You can edit the currency used to enter the transactions.
:::{seealso}
{doc}`get_started/multi_currency`
:::
(accounting-bank-account-number)=
### Account number
If you need to **edit your bank account details**, click on the external link arrow next to your
{guilabel}`Account Number`. On the account page, click on the external link arrow next to your
{guilabel}`Bank` and update your bank information accordingly. These details are used when
registering payments.
```{image} bank/bank-account-number.png
:alt: Edit your bank information
```
### Bank feeds
{guilabel}`Bank Feeds` defines how the bank transactions are registered. Three options are
available:
- {guilabel}`Undefined yet`, which should be selected when you dont know yet if you will
synchronize your bank account with your database or not.
- {guilabel}`Import (CAMT, CODA, CSV, OFX, QIF)`, which should be selected if you want to import
your bank statements and transactions using a different format.
- {guilabel}`Automated Bank Synchronization`, which should be selected if your bank is synchronized
with your database.
:::{seealso}
- {doc}`bank/bank_synchronization`
- {doc}`bank/transactions`
:::
(accounting-bank-outstanding-accounts)=
## Outstanding accounts
By default, payments in Odoo do not create journal entries, but they can easily be configured to
create journal entries using **outstanding accounts**.
- An **outstanding receipts account** is where incoming payments are posted until they are linked
with incoming bank transactions.
- An **outstanding payments account** is where outgoing payments are posted until they are linked
with outgoing bank transactions.
These accounts are usually of {ref}`type <chart-of-account/type>` {guilabel}`Current Assets` and
{guilabel}`Current Liabilities`.
Payments that are registered in Odoo are posted to the outstanding receipts and outstanding accounts
until they are reconciled. At any moment, the outstanding receipts account's balance in the general
ledger shows the balance of registered incoming payments that have not yet been reconciled, and the
outstanding payments account's balance in the general ledger shows the balance of registered
outgoing payments that have not yet been reconciled.
### Bank and cash journal configuration
To configure payments to create journal entries, set outstanding accounts for the journal's payment
methods. This can be done for any journal with the {ref}`type <chart-of-account/type>`
{guilabel}`Bank` or {guilabel}`Cash`.
To configure the outstanding accounts for a journal's payment methods, first go to
{menuselection}`Accounting --> Configuration --> Journals` and select a bank or cash journal. In the
{guilabel}`Incoming Payments` and {guilabel}`Outgoing Payments` tabs, set {guilabel}`Outstanding
Receipts accounts` and {guilabel}`Outstanding Payments accounts` for each payment method that you
want to create journal entries.
:::{note}
- If the main bank account of the journal is added as an outstanding receipts account or
outstanding payments account, when a payment is registered, the invoice or bill's status is
directly set to {guilabel}`Paid`.
- If the outstanding receipts or outstanding payments account for a payment method is left blank,
registering a payment with that payment method will not create any journal entry.
:::
```{toctree}
:titlesonly: true
bank/bank_synchronization
bank/transactions
bank/reconciliation
bank/reconciliation_models
bank/internal_transfers
bank/foreign_currency
bank/loans
```
@@ -1,204 +0,0 @@
:show-content:
======================
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 :doc:`reconciliation
<bank/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.
.. note::
Cash journals and accounts must be configured manually.
Bank journals are displayed by default on the :guilabel:`Accounting Dashboard` in the form of cards
which include action buttons.
.. image:: bank/card.png
:alt: Bank journals are displayed on the Accounting Dashboard and contain action buttons
.. _accounting/bank/manage:
Manage bank and cash accounts
=============================
Connect a bank for automatic synchronization
--------------------------------------------
To connect your bank account to your database, go to :menuselection:`Accounting --> Configuration
--> Add a Bank Account`, select your bank in the list, click on :guilabel:`Connect`, and follow the
instructions.
.. seealso::
:doc:`bank/bank_synchronization`
.. _accounting/bank/create:
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 :menuselection:`Accounting --> Configuration --> Add a Bank
Account`, click on :guilabel:`Record transactions manually` (at the bottom right), fill out the bank
information, and click :guilabel:`Create`.
.. note::
- 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
:menuselection:`Accounting --> Configuration --> Accounting: Journals --> Bank`. Open it and
edit the different fields to match your bank account information.
Create a cash journal
---------------------
To create a new cash journal, go to :menuselection:`Accounting --> Configuration --> Accounting:
Journals`, click on :guilabel:`Create` and select :guilabel:`Cash` in the :guilabel:`Type` field.
For more information on the accounting information fields, read the
:ref:`accounting/bank/configuration` section of this page.
.. note::
A default cash journal is available and can be used straight away. You can review it by going to
:menuselection:`Accounting --> Configuration --> Accounting: Journals --> Cash`.
Edit an existing bank or cash journal
-------------------------------------
To edit an existing bank journal, go to :menuselection:`Accounting --> Configuration --> Accounting:
Journals` and select the journal you want to modify.
.. _accounting/bank/configuration:
Configuration
=============
You can edit the accounting information and bank account number according to your needs.
.. image:: bank/bank-journal-config.png
:alt: Manually configure your bank information
.. seealso::
- :doc:`get_started/multi_currency`
- :doc:`bank/transactions`
- `Bank configuration <https://www.youtube.com/watch?v=tVhhXw-VnGE>`_
.. _accounting/bank/suspense:
Suspense account
----------------
Bank statement transactions are posted on the suspense account until they are reconciled. At any
moment, the suspense account's balance in the general ledger shows the balance of transactions that
have not yet been reconciled.
.. note::
When a bank transaction is reconciled, the journal entry is modified to replace the bank suspense
account with the account of the journal item it is reconciled with. This account is usually the
:ref:`outstanding receipts or payments account <accounting/bank/outstanding-accounts>` if
reconciling with a registered payment or the account receivable or payable if reconciling with
an invoice or bill directly.
Profit and loss accounts
------------------------
The :guilabel:`Profit Account` is used to register a profit when the ending balance of a cash
register differs from what the system computes, while the :guilabel:`Loss Account` is used to
register a loss when the ending balance of a cash register differs from what the system computes.
Currency
--------
You can edit the currency used to enter the transactions.
.. seealso::
:doc:`get_started/multi_currency`
.. _accounting/bank/account-number:
Account number
--------------
If you need to **edit your bank account details**, click on the external link arrow next to your
:guilabel:`Account Number`. On the account page, click on the external link arrow next to your
:guilabel:`Bank` and update your bank information accordingly. These details are used when
registering payments.
.. image:: bank/bank-account-number.png
:alt: Edit your bank information
Bank feeds
----------
:guilabel:`Bank Feeds` defines how the bank transactions are registered. Three options are
available:
- :guilabel:`Undefined yet`, which should be selected when you dont know yet if you will
synchronize your bank account with your database or not.
- :guilabel:`Import (CAMT, CODA, CSV, OFX, QIF)`, which should be selected if you want to import
your bank statements and transactions using a different format.
- :guilabel:`Automated Bank Synchronization`, which should be selected if your bank is synchronized
with your database.
.. seealso::
- :doc:`bank/bank_synchronization`
- :doc:`bank/transactions`
.. _accounting/bank/outstanding-accounts:
Outstanding accounts
====================
By default, payments in Odoo do not create journal entries, but they can easily be configured to
create journal entries using **outstanding accounts**.
- An **outstanding receipts account** is where incoming payments are posted until they are linked
with incoming bank transactions.
- An **outstanding payments account** is where outgoing payments are posted until they are linked
with outgoing bank transactions.
These accounts are usually of :ref:`type <chart-of-account/type>` :guilabel:`Current Assets` and
:guilabel:`Current Liabilities`.
Payments that are registered in Odoo are posted to the outstanding receipts and outstanding accounts
until they are reconciled. At any moment, the outstanding receipts account's balance in the general
ledger shows the balance of registered incoming payments that have not yet been reconciled, and the
outstanding payments account's balance in the general ledger shows the balance of registered
outgoing payments that have not yet been reconciled.
Bank and cash journal configuration
-----------------------------------
To configure payments to create journal entries, set outstanding accounts for the journal's payment
methods. This can be done for any journal with the :ref:`type <chart-of-account/type>`
:guilabel:`Bank` or :guilabel:`Cash`.
To configure the outstanding accounts for a journal's payment methods, first go to
:menuselection:`Accounting --> Configuration --> Journals` and select a bank or cash journal. In the
:guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs, set :guilabel:`Outstanding
Receipts accounts` and :guilabel:`Outstanding Payments accounts` for each payment method that you
want to create journal entries.
.. note::
- If the main bank account of the journal is added as an outstanding receipts account or
outstanding payments account, when a payment is registered, the invoice or bill's status is
directly set to :guilabel:`Paid`.
- If the outstanding receipts or outstanding payments account for a payment method is left blank,
registering a payment with that payment method will not create any journal entry.
.. toctree::
:titlesonly:
bank/bank_synchronization
bank/transactions
bank/reconciliation
bank/reconciliation_models
bank/internal_transfers
bank/foreign_currency
bank/loans
@@ -0,0 +1,201 @@
---
show-content: true
---
# Bank synchronization
Odoo can synchronize directly with your bank institution to get all bank statements imported
automatically into your database.
To check if your bank is compatible with Odoo, go to [Odoo Accounting Features](https://www.odoo.com/page/accounting-features), and click on
{guilabel}`See list of supported institutions`.
Odoo supports more than 26,000 institutions around the world.
To connect to the banks, Odoo uses multiple web-services:
- **Plaid**: United States of America and Canada
- **Yodlee**: Worldwide
- {doc}`Salt Edge <bank_synchronization/saltedge>`: Worldwide
- {doc}`Ponto <bank_synchronization/ponto>`: Europe
- {doc}`Enable Banking <bank_synchronization/enablebanking>`: Scandinavian countries
:::{seealso}
{doc}`transactions`
:::
## Configuration
### On-Premise users
To be able to use this service, you need to have a valid Odoo Enterprise subscription.
So make sure that your database is registered with your Odoo Enterprise contract.
We also use a proxy between your database and the third party provider so, in case of
a connection error, please check that you don't have a firewall or a proxy blocking the
following address:
- <https://production.odoofin.com/>
### First synchronization
You can start synchronization either by going to the Accounting app and
{menuselection}`Accounting --> Configuration --> Add a Bank Account`.
Now you can search for your bank institution. Select it and follow the steps to synchronize with it.
:::{note}
If you have any issues during your first synchronization, please verify that your
web browser doesn't block pop-ups and that your ad-blocker is disabled.
:::
:::{important}
When setting up the bank statement synchronization, Odoo automatically starts recording the
accounting transactions from the last transactions date +1 day (if the last transaction day is
31/12/2022, the recording starts on 01/01/2023). If the journal contains no transaction, Odoo
retrieves transactions as far back as possible. You can limit how far back Odoo retrieves
transactions by opening the Accounting app, going to {menuselection}`Accounting --> Lock Dates`,
and setting a date in the {guilabel}`Journal Entries Lock Date` field.
:::
You must provide a phone number during your first synchronization to secure your account. We ask for
such information because we don't want your data falling into the wrong hands. Therefore, if we
detect suspicious activities on your account, we block all requests coming from your account, and
you need to reactivate it using that phone number.
The third-party provider may request more information in order to connect with your bank
institution. This information is not stored on Odoo's servers.
By default, transactions fetched from an online source are grouped inside the same statement, and
one bank statement is created per month. You can change the bank statement creation periodicity
in your journal settings.
To view all your synchronizations, activate the {ref}`developer mode <developer-mode>` and go to
{menuselection}`Accounting --> Configuration --> Online Synchronization`.
### Synchronize manually
After your first synchronization, the created journals are synchronized by default every 12 hours.
If you wish, you can synchronize them manually by clicking on the {guilabel}`Synchronize Now` button
on the dashboard.
Alternatively, activate the {ref}`developer mode <developer-mode>`, go to
{menuselection}`Accounting --> Configuration --> Online Synchronization`, select your institution,
and then click the {guilabel}`Fetch transactions` button.
:::{important}
Some institutions do not allow transactions to be fetched automatically. For such institutions,
during the automatic synchronization of the account, you receive an error message asking you to
disable the automatic synchronization. This message can be found in the chatter of your online
synchronizations. In this case, make sure to perform manual synchronizations.
:::
## Issues
### Synchronization in error
To report a connection error to the [Odoo support](https://www.odoo.com/help), activate the
{ref}`developer mode <developer-mode>`, go to {menuselection}`Accounting --> Configuration -->
Online Synchronization`, select the connection that failed, and copy the error description and the
reference.
### Synchronization disconnected
If your connection with the proxy is disconnected, you can reconnect with the proxy using the
{guilabel}`Fetch Account` button.
:::{note}
If you are unable to reconnect using the {guilabel}`Reconnect` button, please contact the
[support](https://www.odoo.com/help) directly with your client id or the reference of the error
listed in the chatter.
:::
(migrationonlinesync)=
## Migration process for users having installed Odoo before December 2020
If you are on-premise, please first make sure that your source is up-to-date with the latest version
of Odoo.
Users who have created a database before December 2020 need to install the new module manually to
use the new functionalities.
To do so, go to {menuselection}`Apps --> Update Apps List`, remove the default filter in the search
bar and type `account_online_synchronization`. You can then click on {guilabel}`Install`.
Finally, make sure all your users refresh their Odoo page by pressing CTRL+F5.
:::{Note}
- All previous synchronizations are disconnected during the installation and will not work
anymore. To view them, activate the {ref}`developer mode <developer-mode>` and go to
{menuselection}`Accounting --> Configuration --> Online Synchronization`). It is not possible
to resynchronize these connections; you have to make new ones.
- Do not uninstall the `account_online_sync` module, which is the previous module for online
synchronization. The new one overrides it.
- By default, the `account_online_synchronization` module is installed automatically with
Accounting.
:::
## FAQ
### The synchronization is not working in real-time. Is that normal?
The process is not intended to work in real-time as third party providers synchronize your accounts
at different intervals. To force the synchronization and fetch the statements, go to your
{guilabel}`Accounting Dashboard`, and click on the {guilabel}`Synchronize Now` button. Synchronize
and fetch transactions by activating the {ref}`developer mode <developer-mode>` and going to
{menuselection}`Accounting --> Configuration --> Online Synchronization`. Some providers only allow
one refresh per day, so it is possible that clicking on {guilabel}`Synchronize Now` does not get
your latest transactions if you already performed such action earlier in the day.
A transaction can be visible on your bank account but not be fetched if it has the status
{guilabel}`Pending`. Only transactions with the {guilabel}`Posted` status will be retrieved. If the
transaction is not **Posted** yet, you will have to wait until the status changes.
### Is the Online Bank Synchronization feature included in my contract?
- **Community Edition**: No, this feature is not included in the Community Version.
- **Online Edition**: Yes, even if you benefit from the One App Free contract.
- **Enterprise Edition**: Yes, if you have a valid enterprise contract linked to your database.
### Some banks have a status "Beta." What does this mean?
This means that banking institutions are not yet fully supported by our Third Party Provider. Bugs
or other problems may arise. Odoo does not support technical problems that occur with banks in the
Beta phase, but the user may still choose to connect. Connecting with these banks contributes to the
development process since the Provider will have real data and feedback from the connection.
### Why do my transactions only synchronize when I refresh manually?
Some banks have additional security measures and require extra steps, such as an SMS/email
authentication code or another type of MFA. Because of this, the integrator cannot pull transactions
until the security code is provided.
### Not all of my past transactions are in Odoo, why?
For some institutions, transactions can only be fetched up to 3 months in the past.
### Why don't I see any transactions?
During your first synchronization, you selected the bank accounts you decided to synchronize with
Odoo. If you didn't synchronize any of your accounts, activate the {ref}`developer mode
<developer-mode>`, go to {menuselection}`Accounting --> Configuration --> Online Synchronization`,
and click the {guilabel}`Fetch Account` button on the connection.
There may also be no new transactions.
If your bank account is properly linked to a journal and posted transactions are not visible in your
database, please [submit a support ticket](https://www.odoo.com/help).
### How can I update my bank credentials?
To update your credentials, activate the {ref}`developer mode <developer-mode>` and go to
{menuselection}`Accounting --> Configuration --> Online Synchronization`. Open the connection you
want to update your credentials and click the {guilabel}`Update Credentials` button.
```{toctree}
:titlesonly: true
bank_synchronization/saltedge
bank_synchronization/ponto
bank_synchronization/enablebanking
```
@@ -1,211 +0,0 @@
:show-content:
====================
Bank synchronization
====================
Odoo can synchronize directly with your bank institution to get all bank statements imported
automatically into your database.
To check if your bank is compatible with Odoo, go to `Odoo Accounting Features
<https://www.odoo.com/page/accounting-features>`_, and click on
:guilabel:`See list of supported institutions`.
Odoo supports more than 26,000 institutions around the world.
To connect to the banks, Odoo uses multiple web-services:
- **Plaid**: United States of America and Canada
- **Yodlee**: Worldwide
- :doc:`Salt Edge <bank_synchronization/saltedge>`: Worldwide
- :doc:`Ponto <bank_synchronization/ponto>`: Europe
- :doc:`Enable Banking <bank_synchronization/enablebanking>`: Scandinavian countries
.. seealso::
:doc:`transactions`
Configuration
=============
On-Premise users
----------------
To be able to use this service, you need to have a valid Odoo Enterprise subscription.
So make sure that your database is registered with your Odoo Enterprise contract.
We also use a proxy between your database and the third party provider so, in case of
a connection error, please check that you don't have a firewall or a proxy blocking the
following address:
- https://production.odoofin.com/
First synchronization
---------------------
You can start synchronization either by going to the Accounting app and
:menuselection:`Accounting --> Configuration --> Add a Bank Account`.
Now you can search for your bank institution. Select it and follow the steps to synchronize with it.
.. note::
If you have any issues during your first synchronization, please verify that your
web browser doesn't block pop-ups and that your ad-blocker is disabled.
.. important::
When setting up the bank statement synchronization, Odoo automatically starts recording the
accounting transactions from the last transactions date +1 day (if the last transaction day is
31/12/2022, the recording starts on 01/01/2023). If the journal contains no transaction, Odoo
retrieves transactions as far back as possible. You can limit how far back Odoo retrieves
transactions by opening the Accounting app, going to :menuselection:`Accounting --> Lock Dates`,
and setting a date in the :guilabel:`Journal Entries Lock Date` field.
You must provide a phone number during your first synchronization to secure your account. We ask for
such information because we don't want your data falling into the wrong hands. Therefore, if we
detect suspicious activities on your account, we block all requests coming from your account, and
you need to reactivate it using that phone number.
The third-party provider may request more information in order to connect with your bank
institution. This information is not stored on Odoo's servers.
By default, transactions fetched from an online source are grouped inside the same statement, and
one bank statement is created per month. You can change the bank statement creation periodicity
in your journal settings.
To view all your synchronizations, activate the :ref:`developer mode <developer-mode>` and go to
:menuselection:`Accounting --> Configuration --> Online Synchronization`.
Synchronize manually
--------------------
After your first synchronization, the created journals are synchronized by default every 12 hours.
If you wish, you can synchronize them manually by clicking on the :guilabel:`Synchronize Now` button
on the dashboard.
Alternatively, activate the :ref:`developer mode <developer-mode>`, go to
:menuselection:`Accounting --> Configuration --> Online Synchronization`, select your institution,
and then click the :guilabel:`Fetch transactions` button.
.. important::
Some institutions do not allow transactions to be fetched automatically. For such institutions,
during the automatic synchronization of the account, you receive an error message asking you to
disable the automatic synchronization. This message can be found in the chatter of your online
synchronizations. In this case, make sure to perform manual synchronizations.
Issues
======
Synchronization in error
------------------------
To report a connection error to the `Odoo support <https://www.odoo.com/help>`_, activate the
:ref:`developer mode <developer-mode>`, go to :menuselection:`Accounting --> Configuration -->
Online Synchronization`, select the connection that failed, and copy the error description and the
reference.
Synchronization disconnected
----------------------------
If your connection with the proxy is disconnected, you can reconnect with the proxy using the
:guilabel:`Fetch Account` button.
.. note::
If you are unable to reconnect using the :guilabel:`Reconnect` button, please contact the
`support <https://www.odoo.com/help>`_ directly with your client id or the reference of the error
listed in the chatter.
.. _MigrationOnlineSync:
Migration process for users having installed Odoo before December 2020
======================================================================
If you are on-premise, please first make sure that your source is up-to-date with the latest version
of Odoo.
Users who have created a database before December 2020 need to install the new module manually to
use the new functionalities.
To do so, go to :menuselection:`Apps --> Update Apps List`, remove the default filter in the search
bar and type `account_online_synchronization`. You can then click on :guilabel:`Install`.
Finally, make sure all your users refresh their Odoo page by pressing CTRL+F5.
.. Note::
- All previous synchronizations are disconnected during the installation and will not work
anymore. To view them, activate the :ref:`developer mode <developer-mode>` and go to
:menuselection:`Accounting --> Configuration --> Online Synchronization`). It is not possible
to resynchronize these connections; you have to make new ones.
- Do not uninstall the `account_online_sync` module, which is the previous module for online
synchronization. The new one overrides it.
- By default, the `account_online_synchronization` module is installed automatically with
Accounting.
FAQ
===
The synchronization is not working in real-time. Is that normal?
----------------------------------------------------------------
The process is not intended to work in real-time as third party providers synchronize your accounts
at different intervals. To force the synchronization and fetch the statements, go to your
:guilabel:`Accounting Dashboard`, and click on the :guilabel:`Synchronize Now` button. Synchronize
and fetch transactions by activating the :ref:`developer mode <developer-mode>` and going to
:menuselection:`Accounting --> Configuration --> Online Synchronization`. Some providers only allow
one refresh per day, so it is possible that clicking on :guilabel:`Synchronize Now` does not get
your latest transactions if you already performed such action earlier in the day.
A transaction can be visible on your bank account but not be fetched if it has the status
:guilabel:`Pending`. Only transactions with the :guilabel:`Posted` status will be retrieved. If the
transaction is not **Posted** yet, you will have to wait until the status changes.
Is the Online Bank Synchronization feature included in my contract?
-------------------------------------------------------------------
- **Community Edition**: No, this feature is not included in the Community Version.
- **Online Edition**: Yes, even if you benefit from the One App Free contract.
- **Enterprise Edition**: Yes, if you have a valid enterprise contract linked to your database.
Some banks have a status "Beta." What does this mean?
-----------------------------------------------------
This means that banking institutions are not yet fully supported by our Third Party Provider. Bugs
or other problems may arise. Odoo does not support technical problems that occur with banks in the
Beta phase, but the user may still choose to connect. Connecting with these banks contributes to the
development process since the Provider will have real data and feedback from the connection.
Why do my transactions only synchronize when I refresh manually?
----------------------------------------------------------------
Some banks have additional security measures and require extra steps, such as an SMS/email
authentication code or another type of MFA. Because of this, the integrator cannot pull transactions
until the security code is provided.
Not all of my past transactions are in Odoo, why?
-------------------------------------------------
For some institutions, transactions can only be fetched up to 3 months in the past.
Why don't I see any transactions?
---------------------------------
During your first synchronization, you selected the bank accounts you decided to synchronize with
Odoo. If you didn't synchronize any of your accounts, activate the :ref:`developer mode
<developer-mode>`, go to :menuselection:`Accounting --> Configuration --> Online Synchronization`,
and click the :guilabel:`Fetch Account` button on the connection.
There may also be no new transactions.
If your bank account is properly linked to a journal and posted transactions are not visible in your
database, please `submit a support ticket <https://www.odoo.com/help>`_.
How can I update my bank credentials?
-------------------------------------
To update your credentials, activate the :ref:`developer mode <developer-mode>` and go to
:menuselection:`Accounting --> Configuration --> Online Synchronization`. Open the connection you
want to update your credentials and click the :guilabel:`Update Credentials` button.
.. toctree::
:titlesonly:
bank_synchronization/saltedge
bank_synchronization/ponto
bank_synchronization/enablebanking
@@ -0,0 +1,36 @@
# Enable Banking
**Enable Banking** is a third-party provider aggregating banking information from bank accounts all
in one place. It offers non-intrusive connectivity to ASPSPs' official APIs across Europe without
storing data.
```{image} enablebanking/enablebanking.png
:alt: Enable Banking logo
```
**Odoo** synchronizes directly with banks to get access to all bank transactions and automatically
import them into your database.
:::{seealso}
- {doc}`../bank_synchronization`
- [Enable Banking website](https://enablebanking.com/)
:::
## Configuration
### Link bank accounts with Odoo
1. Start synchronization by clicking on {menuselection}`Accounting --> Configuration -->
Add a Bank Account`;
2. Select your bank;
3. Make sure you give your consent to share your account information with Odoo by clicking
{guilabel}`Continue authentication`;
```{image} enablebanking/enablebankingauth.png
:alt: Enable Banking authentication page
```
4. Finally, you are redirected to your bank's login page.
@@ -1,34 +0,0 @@
==============
Enable Banking
==============
**Enable Banking** is a third-party provider aggregating banking information from bank accounts all
in one place. It offers non-intrusive connectivity to ASPSPs' official APIs across Europe without
storing data.
.. image:: enablebanking/enablebanking.png
:alt: Enable Banking logo
**Odoo** synchronizes directly with banks to get access to all bank transactions and automatically
import them into your database.
.. seealso::
- :doc:`../bank_synchronization`
- `Enable Banking website <https://enablebanking.com/>`_
Configuration
=============
Link bank accounts with Odoo
----------------------------
#. Start synchronization by clicking on :menuselection:`Accounting --> Configuration -->
Add a Bank Account`;
#. Select your bank;
#. Make sure you give your consent to share your account information with Odoo by clicking
:guilabel:`Continue authentication`;
.. image:: enablebanking/enablebankingauth.png
:alt: Enable Banking authentication page
#. Finally, you are redirected to your bank's login page.
@@ -0,0 +1,112 @@
# Ponto
**Ponto** is a service that allows companies and professionals to aggregate their accounts in one
place and directly see all their transactions within one app. It is a third-party solution that is
continuously expanding the number of bank institutions that can be synchronized with Odoo.
**Odoo** can synchronize directly with your bank to get all bank statements imported automatically
into your database.
Ponto is a paid third-party provider that can handle the synchronization between your bank accounts
and Odoo.
:::{seealso}
- {doc}`../bank_synchronization`
- {doc}`../transactions`
:::
## Configuration
### Link your bank accounts with Ponto
1. Go to [Ponto's website (https://myponto.com)](https://myponto.com).
2. Create an account if you don't have one yet.
3. Once you are logged in, create an *organization*.
```{image} ponto/ponto-organization.png
:alt: Fill out the form to add an organization in Ponto.
```
4. Go to {menuselection}`Accounts --> Live`, and click {guilabel}`Add account`. You might have to
add your **Billing Information** first.
5. Select your country, your bank institutions, give your consent to Ponto, and follow the steps
on-screen to link your bank account with your Ponto account.
```{image} ponto/ponto-add-account.png
:alt: Add bank accounts to your Ponto account.
```
6. Add all bank accounts you want to synchronize with your Odoo database and move to the next steps.
### Link your Ponto account with your Odoo database
1. Go to {menuselection}`Accounting --> Configuration --> Add a Bank Account`.
2. Search for your institution and select it so you can verify that the third party provider is
Ponto.
3. Click {guilabel}`Connect` and follow the steps.
4. Select **all accounts** you want to access and synchronize in Odoo, even the ones coming from
other banking institutions.
```{image} ponto/ponto-select-accounts.png
:alt: Selection of the accounts you wish to synchronize with Odoo.
```
5. Finish the flow.
:::{note}
You have to authorize all the accounts you want to access in Odoo, but Odoo will filter the
accounts based on the institution you selected in the second step.
:::
### Update your synchronization credentials
To update your Ponto credentials or modify the synchronization settings, activate the
{ref}`developer mode <developer-mode>`, go to {menuselection}`Accounting --> Configuration -->
Online Synchronization`, and select the institution from which you want to fetch the other
accounts. Click {guilabel}`Fetch Accounts` to start the flow.
:::{note}
During the update, select **all accounts** you want to synchronize, even the ones coming from
other banking institutions.
:::
### Fetch new accounts
To add new online accounts to your connection, activate the {ref}`developer mode <developer-mode>`,
go to {menuselection}`Accounting --> Configuration --> Online Synchronization`, and select the
institution from which you want to fetch the other accounts. Click {guilabel}`Fetch Accounts` to
start the flow.
:::{note}
Don't forget to keep authorization for existing accounts (for all institutions that you have
synchronized with Ponto).
:::
## FAQ
### After my synchronization, no account appears
You selected an institution from the list and did not authorize any accounts from this institution.
### I have an error about that my authorization has expired
Every **6 months** (180 days) you must re-authorize the connection between your bank account
and Ponto. This must be done from the [Ponto website](https://myponto.com). If you do not
do this, the synchronization will stop for these accounts.
### I have some errors with my beta institution
Ponto provides institutions in *beta*, these institutions are not directly supported by Odoo
and we advise you to contact Ponto directly.
:::{important}
Using an institution in beta is beneficial for Ponto, it allows them to have real
feedback on the connection with the institution.
:::
@@ -1,108 +0,0 @@
=====
Ponto
=====
**Ponto** is a service that allows companies and professionals to aggregate their accounts in one
place and directly see all their transactions within one app. It is a third-party solution that is
continuously expanding the number of bank institutions that can be synchronized with Odoo.
**Odoo** can synchronize directly with your bank to get all bank statements imported automatically
into your database.
Ponto is a paid third-party provider that can handle the synchronization between your bank accounts
and Odoo.
.. seealso::
- :doc:`../bank_synchronization`
- :doc:`../transactions`
Configuration
=============
Link your bank accounts with Ponto
----------------------------------
#. Go to `Ponto's website (https://myponto.com) <https://myponto.com>`_.
#. Create an account if you don't have one yet.
#. Once you are logged in, create an *organization*.
.. image:: ponto/ponto-organization.png
:alt: Fill out the form to add an organization in Ponto.
#. Go to :menuselection:`Accounts --> Live`, and click :guilabel:`Add account`. You might have to
add your **Billing Information** first.
#. Select your country, your bank institutions, give your consent to Ponto, and follow the steps
on-screen to link your bank account with your Ponto account.
.. image:: ponto/ponto-add-account.png
:alt: Add bank accounts to your Ponto account.
#. Add all bank accounts you want to synchronize with your Odoo database and move to the next steps.
Link your Ponto account with your Odoo database
-----------------------------------------------
#. Go to :menuselection:`Accounting --> Configuration --> Add a Bank Account`.
#. Search for your institution and select it so you can verify that the third party provider is
Ponto.
#. Click :guilabel:`Connect` and follow the steps.
#. Select **all accounts** you want to access and synchronize in Odoo, even the ones coming from
other banking institutions.
.. image:: ponto/ponto-select-accounts.png
:alt: Selection of the accounts you wish to synchronize with Odoo.
#. Finish the flow.
.. note::
You have to authorize all the accounts you want to access in Odoo, but Odoo will filter the
accounts based on the institution you selected in the second step.
Update your synchronization credentials
---------------------------------------
To update your Ponto credentials or modify the synchronization settings, activate the
:ref:`developer mode <developer-mode>`, go to :menuselection:`Accounting --> Configuration -->
Online Synchronization`, and select the institution from which you want to fetch the other
accounts. Click :guilabel:`Fetch Accounts` to start the flow.
.. note::
During the update, select **all accounts** you want to synchronize, even the ones coming from
other banking institutions.
Fetch new accounts
------------------
To add new online accounts to your connection, activate the :ref:`developer mode <developer-mode>`,
go to :menuselection:`Accounting --> Configuration --> Online Synchronization`, and select the
institution from which you want to fetch the other accounts. Click :guilabel:`Fetch Accounts` to
start the flow.
.. note::
Don't forget to keep authorization for existing accounts (for all institutions that you have
synchronized with Ponto).
FAQ
===
After my synchronization, no account appears
--------------------------------------------
You selected an institution from the list and did not authorize any accounts from this institution.
I have an error about that my authorization has expired
-------------------------------------------------------
Every **6 months** (180 days) you must re-authorize the connection between your bank account
and Ponto. This must be done from the `Ponto website <https://myponto.com>`_. If you do not
do this, the synchronization will stop for these accounts.
I have some errors with my beta institution
-------------------------------------------
Ponto provides institutions in *beta*, these institutions are not directly supported by Odoo
and we advise you to contact Ponto directly.
.. important::
Using an institution in beta is beneficial for Ponto, it allows them to have real
feedback on the connection with the institution.
@@ -0,0 +1,97 @@
# Salt Edge
**Salt Edge** is a third-party provider that aggregates banking information
from your bank accounts. It supports ~5000 institutions in more than 50
countries.
Odoo can synchronize directly with your bank to get all bank statements imported
automatically into your database.
:::{seealso}
- {doc}`../bank_synchronization`
- {doc}`../transactions`
:::
## Configuration
### Link your bank accounts with Odoo
1. Start synchronization by clicking on {menuselection}`Accounting --> Configuration
--> Add a Bank Account`.
2. Select the institution you want to synchronize. You can see if Salt Edge is the
third party provider of the institution by selecting it.
3. After giving your phone number, you are asked for an email address. This email
address is used to create your Salt Edge account. Please make sure you enter a
valid email address, as otherwise, you will not be able to access your Salt Edge
account.
```{image} saltedge/saltedge-contact-email.png
:alt: Email address to provide to Salt Edge for the creation of your account.
```
4. After entering your email address, you are redirected to Salt Edge to continue
the synchronization process.
```{image} saltedge/saltedge-login-page.png
:alt: Salt Edge Login page.
```
5. Make sure you give your consent by checking the consent checkbox.
```{image} saltedge/saltedge-give-consent.png
:alt: Salt Edge give consent page.
```
6. Complete the synchronization by following the steps.
### Update your credentials
To update your Salt Edge credentials or modify the synchronization settings, activate the
{ref}`developer mode <developer-mode>`, go to {menuselection}`Accounting --> Configuration -->
Online Synchronization`, and select the institution you want to update credentials. Click
{guilabel}`Update Credentials` to start the flow and follow the steps.
Don't forget to check the consent checkbox. Otherwise, Odoo may not be able to access
your information.
### Fetch new accounts
To add new online accounts to your connection, activate the {ref}`developer mode <developer-mode>`,
go to {menuselection}`Accounting --> Configuration --> Online Synchronization`, and select the
institution to fetch the new accounts. Click {guilabel}`Fetch Accounts` to start the flow and
follow the steps.
:::{note}
Don't forget to check the consent checkbox. Otherwise, Odoo may not be able to access your
information.
:::
## FAQ
### I have an error when I try to delete my synchronization within Odoo
Odoo can't permanently delete the connection you have created with the banking institution. However,
it can revoke the consent you gave so that Odoo won't be able to access your account anymore. The
error you are seeing is probably a message telling you that the consent was revoked, but the record
could not be deleted as it still exists within Salt edge. If you want to remove the connection
completely, please connect to your [Salt Edge account](https://www.saltedge.com/dashboard)
and manually delete your synchronization. Once this is done, you can go back to Odoo to delete the
record.
### I have an error saying that I have already synchronized this account
You have probably already synchronized your bank account with Salt Edge, please check on your
[dashboard](https://www.saltedge.com/dashboard) that you don't already have a connection with the
same credentials.
If you already have a synchronization with the same credentials present on your Salt Edge
dashboard and this synchronization has not been created with Odoo, delete it and create it from your
Odoo database.
If you already have a connection with the same credentials present on your Salt Edge dashboard
and this synchronization was created with Odoo, activate the {ref}`developer
mode <developer-mode>`, go to {menuselection}`Accounting --> Configuration --> Online
Synchronization`, and click {guilabel}`Update Credentials` to reactivate the connection.
@@ -1,99 +0,0 @@
=========
Salt Edge
=========
**Salt Edge** is a third-party provider that aggregates banking information
from your bank accounts. It supports ~5000 institutions in more than 50
countries.
Odoo can synchronize directly with your bank to get all bank statements imported
automatically into your database.
.. seealso::
- :doc:`../bank_synchronization`
- :doc:`../transactions`
Configuration
=============
Link your bank accounts with Odoo
---------------------------------
#. Start synchronization by clicking on :menuselection:`Accounting --> Configuration
--> Add a Bank Account`.
#. Select the institution you want to synchronize. You can see if Salt Edge is the
third party provider of the institution by selecting it.
#. After giving your phone number, you are asked for an email address. This email
address is used to create your Salt Edge account. Please make sure you enter a
valid email address, as otherwise, you will not be able to access your Salt Edge
account.
.. image:: saltedge/saltedge-contact-email.png
:alt: Email address to provide to Salt Edge for the creation of your account.
#. After entering your email address, you are redirected to Salt Edge to continue
the synchronization process.
.. image:: saltedge/saltedge-login-page.png
:alt: Salt Edge Login page.
#. Make sure you give your consent by checking the consent checkbox.
.. image:: saltedge/saltedge-give-consent.png
:alt: Salt Edge give consent page.
#. Complete the synchronization by following the steps.
Update your credentials
-----------------------
To update your Salt Edge credentials or modify the synchronization settings, activate the
:ref:`developer mode <developer-mode>`, go to :menuselection:`Accounting --> Configuration -->
Online Synchronization`, and select the institution you want to update credentials. Click
:guilabel:`Update Credentials` to start the flow and follow the steps.
Don't forget to check the consent checkbox. Otherwise, Odoo may not be able to access
your information.
Fetch new accounts
------------------
To add new online accounts to your connection, activate the :ref:`developer mode <developer-mode>`,
go to :menuselection:`Accounting --> Configuration --> Online Synchronization`, and select the
institution to fetch the new accounts. Click :guilabel:`Fetch Accounts` to start the flow and
follow the steps.
.. note::
Don't forget to check the consent checkbox. Otherwise, Odoo may not be able to access your
information.
FAQ
===
I have an error when I try to delete my synchronization within Odoo
-------------------------------------------------------------------
Odoo can't permanently delete the connection you have created with the banking institution. However,
it can revoke the consent you gave so that Odoo won't be able to access your account anymore. The
error you are seeing is probably a message telling you that the consent was revoked, but the record
could not be deleted as it still exists within Salt edge. If you want to remove the connection
completely, please connect to your `Salt Edge account <https://www.saltedge.com/dashboard>`_
and manually delete your synchronization. Once this is done, you can go back to Odoo to delete the
record.
I have an error saying that I have already synchronized this account
--------------------------------------------------------------------
You have probably already synchronized your bank account with Salt Edge, please check on your
`dashboard <https://www.saltedge.com/dashboard>`_ that you don't already have a connection with the
same credentials.
If you already have a synchronization with the same credentials present on your Salt Edge
dashboard and this synchronization has not been created with Odoo, delete it and create it from your
Odoo database.
If you already have a connection with the same credentials present on your Salt Edge dashboard
and this synchronization was created with Odoo, activate the :ref:`developer
mode <developer-mode>`, go to :menuselection:`Accounting --> Configuration --> Online
Synchronization`, and click :guilabel:`Update Credentials` to reactivate the connection.
@@ -0,0 +1,117 @@
# 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 *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 {menuselection}`Accounting --> Configuration --> Settings
--> Currencies` and tick {guilabel}`Multi-Currencies`. Under {guilabel}`Post Exchange difference
entries in:`, provide a {guilabel}`Journal`, a {guilabel}`Gain Account`, a {guilabel}`Loss Account`,
and then click on {guilabel}`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 {guilabel}`Activate Other Currencies`
under the {guilabel}`Multi-Currencies` setting or go to {menuselection}`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 {menuselection}`Accounting -->
Configuration --> Settings --> Currencies`, check {guilabel}`Automatic Currency Rates`, set
{guilabel}`Interval` to your desired frequency, and then click on {guilabel}`Save`. You also have
the option to choose the {guilabel}`Service` you wish to obtain currency rates from.
Click on the Update now button ({guilabel}`🗘`) besides the {guilabel}`Next Run` field to update
the currency rates manually.
### Create a new bank account
In the accounting application, go to {menuselection}`Accounting --> Configuration --> Journals` and
create a new one. Enter a {guilabel}`Journal Name` and set the {guilabel}`Type` to `Bank`. In the
{guilabel}`Journal Entries` tab, enter a **short code**, a **currency**, and then finally click on
the {guilabel}`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 {guilabel}`Account Number` field, and
in the pop-up window, fill out the {guilabel}`Account Number`, {guilabel}`Bank` of your account, and
save.
```{image} foreign_currency/foreign-journal.png
:align: center
:alt: Example of a created bank journal.
```
Upon creation of the journal, Odoo automatically links the bank account to the journal. It can be
found under {menuselection}`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 {guilabel}`Journal`
field and register the payment. Odoo automatically creates and posts the foreign **exchange gain or
loss** as a new journal entry.
```{image} foreign_currency/foreign-bill-currency.png
:align: center
:alt: How to set a bill currency.
```
:::{note}
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
{menuselection}`Reporting --> Management: Unrealized Currency Gains/Losses`. From here, you have
access to all open entries in your **balance sheet**.
```{image} foreign_currency/foreign-gains-losses.png
:align: center
:alt: View of the Unrealized Gains/Losses journal.
```
If you wish to use a different currency rate than the one set in {menuselection}`Accounting -->
Configuration --> Settings --> Currencies`, click the {guilabel}`Exchange Rates` button and change
the rate of the foreign currencies in the report.
```{image} foreign_currency/foreign-exchange-rates.png
:align: center
:alt: Menu to manually change exchange rates.
```
When manually changing **exchange rates**, a yellow banner appears allowing you to reset back to
Odoo's rate. To do so, simply click on {guilabel}`Reset to Odoo's Rate`.
```{image} foreign_currency/foreign-reset-rates.png
:align: center
:alt: Banner to reset back to Odoo's rates.
```
In order to update your **balance sheet** with the amount of the {guilabel}`adjustment` column,
click on the {guilabel}`Adjustment Entry` button. In the pop-up window, select a
{guilabel}`Journal`, {guilabel}`Expense Account` and {guilabel}`Income Account` to calculate and
process the **unrealized gains and losses**.
You can set the date of the report in the {guilabel}`Date` field. Odoo automatically reverses the
booking entry to the date set in {guilabel}`Reversal Date`.
Once posted, the {guilabel}`adjustment` column should indicate `0.00`, meaning all **unrealized
gains/losses** have been adjusted.
```{image} foreign_currency/foreign-adjustment.png
:align: center
:alt: Unrealized Currency Gains/Losses report once adjusted.
```
@@ -1,117 +0,0 @@
===========================================
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 *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 :menuselection:`Accounting --> Configuration --> Settings
--> Currencies` and tick :guilabel:`Multi-Currencies`. Under :guilabel:`Post Exchange difference
entries in:`, provide a :guilabel:`Journal`, a :guilabel:`Gain Account`, a :guilabel:`Loss Account`,
and then click on :guilabel:`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 :guilabel:`Activate Other Currencies`
under the :guilabel:`Multi-Currencies` setting or go to :menuselection:`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 :menuselection:`Accounting -->
Configuration --> Settings --> Currencies`, check :guilabel:`Automatic Currency Rates`, set
:guilabel:`Interval` to your desired frequency, and then click on :guilabel:`Save`. You also have
the option to choose the :guilabel:`Service` you wish to obtain currency rates from.
Click on the Update now button (:guilabel:`🗘`) besides the :guilabel:`Next Run` field to update
the currency rates manually.
Create a new bank account
-------------------------
In the accounting application, go to :menuselection:`Accounting --> Configuration --> Journals` and
create a new one. Enter a :guilabel:`Journal Name` and set the :guilabel:`Type` to `Bank`. In the
:guilabel:`Journal Entries` tab, enter a **short code**, a **currency**, and then finally click on
the :guilabel:`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 :guilabel:`Account Number` field, and
in the pop-up window, fill out the :guilabel:`Account Number`, :guilabel:`Bank` of your account, and
save.
.. image:: foreign_currency/foreign-journal.png
:align: center
:alt: Example of a created bank journal.
Upon creation of the journal, Odoo automatically links the bank account to the journal. It can be
found under :menuselection:`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 :guilabel:`Journal`
field and register the payment. Odoo automatically creates and posts the foreign **exchange gain or
loss** as a new journal entry.
.. image:: foreign_currency/foreign-bill-currency.png
:align: center
:alt: How to set a bill currency.
.. note::
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
:menuselection:`Reporting --> Management: Unrealized Currency Gains/Losses`. From here, you have
access to all open entries in your **balance sheet**.
.. image:: foreign_currency/foreign-gains-losses.png
:align: center
:alt: View of the Unrealized Gains/Losses journal.
If you wish to use a different currency rate than the one set in :menuselection:`Accounting -->
Configuration --> Settings --> Currencies`, click the :guilabel:`Exchange Rates` button and change
the rate of the foreign currencies in the report.
.. image:: foreign_currency/foreign-exchange-rates.png
:align: center
:alt: Menu to manually change exchange rates.
When manually changing **exchange rates**, a yellow banner appears allowing you to reset back to
Odoo's rate. To do so, simply click on :guilabel:`Reset to Odoo's Rate`.
.. image:: foreign_currency/foreign-reset-rates.png
:align: center
:alt: Banner to reset back to Odoo's rates.
In order to update your **balance sheet** with the amount of the :guilabel:`adjustment` column,
click on the :guilabel:`Adjustment Entry` button. In the pop-up window, select a
:guilabel:`Journal`, :guilabel:`Expense Account` and :guilabel:`Income Account` to calculate and
process the **unrealized gains and losses**.
You can set the date of the report in the :guilabel:`Date` field. Odoo automatically reverses the
booking entry to the date set in :guilabel:`Reversal Date`.
Once posted, the :guilabel:`adjustment` column should indicate `0.00`, meaning all **unrealized
gains/losses** have been adjusted.
.. image:: foreign_currency/foreign-adjustment.png
:align: center
:alt: Unrealized Currency Gains/Losses report once adjusted.
@@ -1,35 +1,34 @@
==================
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.
.. seealso::
:ref:`How to add an additional bank account <accounting/bank/create>`
:::{seealso}
{ref}`How to add an additional bank account <accounting/bank/create>`
:::
Configuration
=============
## Configuration
An internal transfer account is automatically created on your database based on your company's
:doc:`localization <../../fiscal_localizations>` and depending on your countrys legislation. To
modify the default :guilabel:`Internal Transfer` account, go to :menuselection:`Accounting -->
Configuration --> Settings` and scroll down to the :guilabel:`Default Accounts` section.
{doc}`localization <../../fiscal_localizations>` and depending on your countrys legislation. To
modify the default {guilabel}`Internal Transfer` account, go to {menuselection}`Accounting -->
Configuration --> Settings` and scroll down to the {guilabel}`Default Accounts` section.
Register an internal transfer from one bank to another
======================================================
## 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 :doc:`bank synchronization <bank_synchronization>`. When reconciling the transaction,
select the :guilabel:`Internal Transfers` :doc:`reconciliation model <reconciliation_models>`
button. This reconciliation model button writes the transaction off to the :guilabel:`Internal
import, or via {doc}`bank synchronization <bank_synchronization>`. When reconciling the transaction,
select the {guilabel}`Internal Transfers` {doc}`reconciliation model <reconciliation_models>`
button. This reconciliation model button writes the transaction off to the {guilabel}`Internal
Transfer` account.
.. tip::
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.
:::{tip}
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.
:::
```{eval-rst}
.. example::
Take, for example, a transfer of $1000 from Bank A to Bank B:
@@ -65,7 +64,10 @@ Transfer` account.
* - **Internal transfer account**
-
- **$1,000**
```
:::{seealso}
{doc}`reconciliation`
{doc}`reconciliation_models`
:::
.. seealso::
:doc:`reconciliation`
:doc:`reconciliation_models`
@@ -1,34 +1,30 @@
================
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
Create a new loan by going to :menuselection:`Accounting --> Accounting --> Loans`. When creating a
Create a new loan by going to {menuselection}`Accounting --> Accounting --> Loans`. When creating a
new loan, there are three options for how to create amortization schedules:
- importing it from a supported file;
- calculating it from multiple input values (e.g., the :guilabel:`Amount Borrowed`, the
:guilabel:`Duration`, etc.) using the :guilabel:`Compute` button;
- calculating it from multiple input values (e.g., the {guilabel}`Amount Borrowed`, the
{guilabel}`Duration`, etc.) using the {guilabel}`Compute` button;
- manually filling in the lines of the schedule.
In each case, three different fields are required for each line of the amortization schedule: the
:guilabel:`Date`, the :guilabel:`Principal`, and the :guilabel:`Interest`.
{guilabel}`Date`, the {guilabel}`Principal`, and the {guilabel}`Interest`.
The :guilabel:`Amount Borrowed`, :guilabel:`Interest`, and :guilabel:`Duration` fields will be red
The {guilabel}`Amount Borrowed`, {guilabel}`Interest`, and {guilabel}`Duration` fields will be red
if the sum of the lines does not match the total of the amortization schedule lines.
Loan entries mechanism
----------------------
## 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 :guilabel:`Loan Settings` tab). Then, upon the validation of the loan, Odoo
account (defined in the {guilabel}`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.
@@ -36,13 +32,13 @@ principal reclassification mechanism.
For each line of the amortization schedule, Odoo creates the following entries:
A payment entry on the same date that
- 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;
- credits the payment amount to the short-term account: this is the amount that will be
withdrawn by the bank.
A reclassification entry on the same date that
- 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.
A reversed entry of the reclassification entry on *the next day* that simply reverses the previous
@@ -51,20 +47,19 @@ 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
--------------
## 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 :guilabel:`Close`
be manually closed (e.g., because it is being paid off early) by clicking on the {guilabel}`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
---------------------
## Loans Analysis Report
By going to :menuselection:`Accounting --> Reporting --> Loans Analysis`, you can access a
By going to {menuselection}`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.
@@ -0,0 +1,144 @@
# Bank reconciliation
**Bank reconciliation** is the process of matching your {doc}`bank transactions <transactions>` with
your business records, such as {doc}`customer invoices <../customer_invoices>`, {doc}`vendor bills
<../vendor_bills>`, and {doc}`payments <../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 {doc}`reconciliation models <reconciliation_models>`, Odoo pre-selects the
matching entries automatically.
:::{seealso}
- [Odoo Tutorials: Bank reconciliation](https://www.odoo.com/slides/slide/bank-reconciliation-2724)
- {doc}`bank_synchronization`
- {doc}`transactions`
:::
## Bank reconciliation view
To access a bank journal's **reconciliation view**, go to your {guilabel}`Accounting Dashboard` and
either:
- click the journal name (e.g., {guilabel}`Bank`) to display all transactions, including those
previously reconciled or
- click the {guilabel}`Reconcile items` button to display all transactions Odoo pre-selected for
reconciliation. You can remove the {guilabel}`Not Matched` filter from the search bar to include
previously reconciled transactions.
```{image} reconciliation/bank-card.png
:alt: Reaching the bank reconciliation tool from your accounting dashboard
```
The bank reconciliation view is structured into three distinct sections: transactions, counterpart
entries, and resulting entry.
```{image} reconciliation/user-interface.png
:alt: The user interface of the reconciliation view of a bank journal.
```
Transactions
: The transactions section on the left shows all bank transactions, with the newest displayed
first. Click a transaction to select it.
Counterpart entries
: The counterpart entries section on the bottom right displays the options to match the selected
bank transaction. Multiple tabs are available, including
{ref}`reconciliation/existing-entries`, {ref}`reconciliation/batch-payments`,
{ref}`reconciliation/manual-operations`, and {guilabel}`Discuss`, which contains the chatter for
the selected bank transaction.
Resulting entry
: 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 {guilabel}`To Check`. Any {ref}`reconciliation model
buttons <reconciliation/button>` are also available in the resulting entry section.
## Reconcile transactions
Transactions can be matched automatically with the use of {doc}`reconciliation models
<reconciliation_models>`, or they can be matched with {ref}`existing entries
<reconciliation/existing-entries>`, {ref}`batch payments <reconciliation/batch-payments>`,
{ref}`manual operations <reconciliation/manual-operations>`, and {ref}`reconciliation model buttons
<reconciliation/button>`.
1. Select a transaction among unmatched bank transactions.
2. Define the counterpart. There are several options for defining a counterpart, including
{ref}`matching existing entries <reconciliation/existing-entries>`, {ref}`manual operations
<reconciliation/manual-operations>`, {ref}`batch payments <reconciliation/batch-payments>`, and
{ref}`reconciliation model buttons <reconciliation/button>`.
3. If the resulting entry is not fully balanced, balance it by adding another existing counterpart
entry or writing it off with a {ref}`manual operation <reconciliation/manual-operations>`.
4. Click the {guilabel}`Validate` button to confirm the reconciliation and move to the next
transaction.
:::{tip}
If you are not sure how to reconcile a particular transaction and would like to deal with it
later, use the {guilabel}`To Check` button instead. All transactions marked as {guilabel}`To
Check` can be displayed using the {guilabel}`To Check` filter.
:::
:::{note}
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.
:::
(reconciliation-existing-entries)=
### Match existing entries
This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
models. The entry order is based on {doc}`reconciliation models <reconciliation_models>`, with
suggested entries appearing first.
:::{tip}
The search bar within the {guilabel}`Match Existing Entries` tab allows you to search for
specific journal items.
:::
(reconciliation-batch-payments)=
### Batch payments
[Batch payments](payments/batch-payments) allow you to group different payments to ease
reconciliation. Use the {guilabel}`Batch Payments` tab to find batch payments for customers and
vendors. Similarly to the {guilabel}`Match Existing Entries` tab, the {guilabel}`Batch Payments` tab
has a search bar that allows you to search for specific batch payments.
(reconciliation-manual-operations)=
### 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.
:::{tip}
You can use the {guilabel}`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
{guilabel}`Account` to record the open balance.
:::
:::{note}
Lines are silently reconciled unless a write-off entry is required, which launches a
reconciliation wizard.
```{image} reconciliation/fully-paid.png
:alt: Click on fully paid to manually set an invoice as entirely paid.
```
:::
(reconciliation-button)=
### Reconciliation model buttons
Use a {doc}`reconciliation model <reconciliation_models>` 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.
@@ -1,140 +0,0 @@
===================
Bank reconciliation
===================
**Bank reconciliation** is the process of matching your :doc:`bank transactions <transactions>` with
your business records, such as :doc:`customer invoices <../customer_invoices>`, :doc:`vendor bills
<../vendor_bills>`, and :doc:`payments <../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 :doc:`reconciliation models <reconciliation_models>`, Odoo pre-selects the
matching entries automatically.
.. seealso::
- `Odoo Tutorials: Bank reconciliation
<https://www.odoo.com/slides/slide/bank-reconciliation-2724>`_
- :doc:`bank_synchronization`
- :doc:`transactions`
Bank reconciliation view
========================
To access a bank journal's **reconciliation view**, go to your :guilabel:`Accounting Dashboard` and
either:
- click the journal name (e.g., :guilabel:`Bank`) to display all transactions, including those
previously reconciled or
- click the :guilabel:`Reconcile items` button to display all transactions Odoo pre-selected for
reconciliation. You can remove the :guilabel:`Not Matched` filter from the search bar to include
previously reconciled transactions.
.. image:: reconciliation/bank-card.png
:alt: Reaching the bank reconciliation tool from your accounting dashboard
The bank reconciliation view is structured into three distinct sections: transactions, counterpart
entries, and resulting entry.
.. image:: reconciliation/user-interface.png
:alt: The user interface of the reconciliation view of a bank journal.
Transactions
The transactions section on the left shows all bank transactions, with the newest displayed
first. Click a transaction to select it.
Counterpart entries
The counterpart entries section on the bottom right displays the options to match the selected
bank transaction. Multiple tabs are available, including
:ref:`reconciliation/existing-entries`, :ref:`reconciliation/batch-payments`,
:ref:`reconciliation/manual-operations`, and :guilabel:`Discuss`, which contains the chatter for
the selected bank transaction.
Resulting entry
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 :guilabel:`To Check`. Any :ref:`reconciliation model
buttons <reconciliation/button>` are also available in the resulting entry section.
Reconcile transactions
======================
Transactions can be matched automatically with the use of :doc:`reconciliation models
<reconciliation_models>`, or they can be matched with :ref:`existing entries
<reconciliation/existing-entries>`, :ref:`batch payments <reconciliation/batch-payments>`,
:ref:`manual operations <reconciliation/manual-operations>`, and :ref:`reconciliation model buttons
<reconciliation/button>`.
#. Select a transaction among unmatched bank transactions.
#. Define the counterpart. There are several options for defining a counterpart, including
:ref:`matching existing entries <reconciliation/existing-entries>`, :ref:`manual operations
<reconciliation/manual-operations>`, :ref:`batch payments <reconciliation/batch-payments>`, and
:ref:`reconciliation model buttons <reconciliation/button>`.
#. If the resulting entry is not fully balanced, balance it by adding another existing counterpart
entry or writing it off with a :ref:`manual operation <reconciliation/manual-operations>`.
#. Click the :guilabel:`Validate` button to confirm the reconciliation and move to the next
transaction.
.. tip::
If you are not sure how to reconcile a particular transaction and would like to deal with it
later, use the :guilabel:`To Check` button instead. All transactions marked as :guilabel:`To
Check` can be displayed using the :guilabel:`To Check` filter.
.. note::
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.
.. _reconciliation/existing-entries:
Match existing entries
----------------------
This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
models. The entry order is based on :doc:`reconciliation models <reconciliation_models>`, with
suggested entries appearing first.
.. tip::
The search bar within the :guilabel:`Match Existing Entries` tab allows you to search for
specific journal items.
.. _reconciliation/batch-payments:
Batch payments
--------------
`Batch payments <payments/batch-payments>`_ allow you to group different payments to ease
reconciliation. Use the :guilabel:`Batch Payments` tab to find batch payments for customers and
vendors. Similarly to the :guilabel:`Match Existing Entries` tab, the :guilabel:`Batch Payments` tab
has a search bar that allows you to search for specific batch payments.
.. _reconciliation/manual-operations:
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.
.. tip::
You can use the :guilabel:`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
:guilabel:`Account` to record the open balance.
.. note::
Lines are silently reconciled unless a write-off entry is required, which launches a
reconciliation wizard.
.. image:: reconciliation/fully-paid.png
:alt: Click on fully paid to manually set an invoice as entirely paid.
.. _reconciliation/button:
Reconciliation model buttons
----------------------------
Use a :doc:`reconciliation model <reconciliation_models>` 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.
@@ -0,0 +1,127 @@
# Reconciliation models
Reconciliation models are used to automate the {doc}`bank reconciliation <reconciliation>` process,
which is especially handy when dealing with recurring entries like bank fees. Reconciliation models
can also be helpful in handling {doc}`cash discounts <../customer_invoices/cash_discounts>`.
Each model is created based on a {ref}`model type <models/type>` and {guilabel}`bank transaction
conditions`.
:::{seealso}
- {doc}`bank_synchronization`
- [Odoo Tutorials: Reconciliation models](https://www.odoo.com/slides/slide/reconciliation-models-1841?fullscreen=1)
:::
(models-type)=
## Reconciliation model types
The reconciliation models are available by going to {menuselection}`Accounting --> Configuration
--> Banks: Reconciliation Models`. For each reconciliation model, a {guilabel}`Type` must be set.
Three types of models exist:
- {guilabel}`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;
- {guilabel}`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;
- {guilabel}`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
{guilabel}`New`.
:::{important}
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.
```{image} reconciliation_models/list-view.png
:alt: Rearrange the sequence of models in the list view.
```
:::
### 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.
```{image} reconciliation_models/invoices-bills-perfect-match.png
:alt: Set rules to trigger the reconciliation.
```
Odoo automatically reconciles the payment when the {guilabel}`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 {guilabel}`Label` is selected) and the partner's name
(as {guilabel}`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
{guilabel}`counterpart entries` tab.
The reconciliation model {guilabel}`Type` is {guilabel}`Rule to match invoices/bills`, and the
{guilabel}`Payment tolerance` should be set.
```{image} reconciliation_models/partial-match.png
:alt: Set rules to trigger the reconciliation.
```
:::{note}
The {guilabel}`Payment tolerance` is only applicable to lower payments. It is disregarded when an
overpayment is received.
:::
:::{seealso}
{doc}`../customer_invoices/cash_discounts`
:::
### Line with bank fees
This model suggests a counterpart entry according to the rules set in the model. In this case, the
reconciliation model {guilabel}`Type` is {guilabel}`Rule to suggest counterpart entry`, and the
{guilabel}`Label` can be used for example, to identify the information referring to the
{guilabel}`Bank fees` in the label of the transaction.
```{image} reconciliation_models/bank-fees.png
:alt: Set rules to trigger the reconciliation.
```
:::{note}
[Regular expressions](https://regexone.com/), 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 {guilabel}`Transaction Type`
to {guilabel}`Match Regex` and add your expression. Odoo automatically retrieves the
transactions that match your Regex expression and the conditions specified in your model.
```{image} reconciliation_models/regex.png
:alt: Using Regex in Odoo
```
:::
## 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 {guilabel}`Partner Mapping` tab and enter the
{guilabel}`Find Text in Label`, {guilabel}`Find Text in Notes`, and {guilabel}`Partner`.
```{image} reconciliation_models/partner-mapping.png
:alt: defining partner mapping
```
@@ -1,123 +0,0 @@
=====================
Reconciliation models
=====================
Reconciliation models are used to automate the :doc:`bank reconciliation <reconciliation>` process,
which is especially handy when dealing with recurring entries like bank fees. Reconciliation models
can also be helpful in handling :doc:`cash discounts <../customer_invoices/cash_discounts>`.
Each model is created based on a :ref:`model type <models/type>` and :guilabel:`bank transaction
conditions`.
.. seealso::
- :doc:`bank_synchronization`
- `Odoo Tutorials: Reconciliation models <https://www.odoo.com/slides/slide/reconciliation-models-1841?fullscreen=1>`_
.. _models/type:
Reconciliation model types
==========================
The reconciliation models are available by going to :menuselection:`Accounting --> Configuration
--> Banks: Reconciliation Models`. For each reconciliation model, a :guilabel:`Type` must be set.
Three types of models exist:
- :guilabel:`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;
- :guilabel:`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;
- :guilabel:`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
:guilabel:`New`.
.. important::
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.
.. image:: reconciliation_models/list-view.png
:alt: Rearrange the sequence of models in the list view.
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.
.. image:: reconciliation_models/invoices-bills-perfect-match.png
:alt: Set rules to trigger the reconciliation.
Odoo automatically reconciles the payment when the :guilabel:`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 :guilabel:`Label` is selected) and the partner's name
(as :guilabel:`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
:guilabel:`counterpart entries` tab.
The reconciliation model :guilabel:`Type` is :guilabel:`Rule to match invoices/bills`, and the
:guilabel:`Payment tolerance` should be set.
.. image:: reconciliation_models/partial-match.png
:alt: Set rules to trigger the reconciliation.
.. note::
The :guilabel:`Payment tolerance` is only applicable to lower payments. It is disregarded when an
overpayment is received.
.. seealso::
:doc:`../customer_invoices/cash_discounts`
Line with bank fees
-------------------
This model suggests a counterpart entry according to the rules set in the model. In this case, the
reconciliation model :guilabel:`Type` is :guilabel:`Rule to suggest counterpart entry`, and the
:guilabel:`Label` can be used for example, to identify the information referring to the
:guilabel:`Bank fees` in the label of the transaction.
.. image:: reconciliation_models/bank-fees.png
:alt: Set rules to trigger the reconciliation.
.. note::
`Regular expressions <https://regexone.com/>`_, 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 :guilabel:`Transaction Type`
to :guilabel:`Match Regex` and add your expression. Odoo automatically retrieves the
transactions that match your Regex expression and the conditions specified in your model.
.. image:: reconciliation_models/regex.png
:alt: Using Regex in Odoo
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 :guilabel:`Partner Mapping` tab and enter the
:guilabel:`Find Text in Label`, :guilabel:`Find Text in Notes`, and :guilabel:`Partner`.
.. image:: reconciliation_models/partner-mapping.png
:alt: defining partner mapping
@@ -0,0 +1,139 @@
# Transactions
Importing transactions from your bank statements allows keeping track of bank account transactions
and reconciling them with the ones recorded in your accounting.
{doc}`Bank synchronization <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:
- {ref}`Import bank transactions <transactions/import>` delivered by your bank;
- {ref}`Register bank transactions <transactions/register>` manually.
:::{note}
{ref}`Grouping transactions by statement <transactions/statements>` is optional.
:::
(transactions-import)=
## Import transactions
Odoo supports multiple file formats to import transactions:
- SEPA recommended Cash Management format (CAMT.053)
- Comma-separated values (CSV)
- Open Financial Exchange (OFX)
- Quicken Interchange Format (QIF)
- Belgium: Coded Statement of Account (CODA)
To import a file, go to the {guilabel}`Accounting Dashboard`, and in the {guilabel}`Bank` journal,
click on {guilabel}`Import File`.
:::{tip}
Alternatively, you can also:
- click the {icon}`fa-ellipsis-v` {guilabel}`(ellipsis)` icon on the {guilabel}`Bank`
journal and select {guilabel}`Import file`;
- or access the transaction list by clicking the {icon}`fa-ellipsis-v` {guilabel}`(ellipsis)`
icon on the {guilabel}`Bank` journal and selecting {guilabel}`Transactions`, then click
the {icon}`fa-cog` {guilabel}`(gear)` icon and select {guilabel}`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 {guilabel}`Test` and {guilabel}`Import` your bank transactions.
:::{seealso}
{doc}`/applications/essentials/export_import_data`
:::
(transactions-register)=
## Register bank transactions manually
You can also record your bank transactions manually. To do so, go to {guilabel}`Accounting
Dashboard`, click on the {guilabel}`Bank` journal, and then on {guilabel}`New`. Make sure to fill
out the {guilabel}`Partner` and {guilabel}`Label` fields to ease the reconciliation process.
(transactions-statements)=
## 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.
:::{important}
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 {guilabel}`Accounting Dashboard`, click the
{icon}`fa-ellipsis-v` {guilabel}`(ellipsis)` icon next to the bank or cash journal you want to
check, then click {guilabel}`Statements`.
(transactions-statement-kanban)=
### Statement creation from the kanban view
Open the bank reconciliation (kanban) view from the {guilabel}`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 {guilabel}`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.
```{image} transactions/statements-kanban.png
:alt: A "Statement" button is visible when hovering on the line separating two transactions.
```
In the {guilabel}`Create Statement` window, fill out the statement's {guilabel}`Reference`, verify
its {guilabel}`Starting Balance` and {guilabel}`Ending Balance`, and click {guilabel}`Save`.
(transactions-statement-list)=
### 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
{guilabel}`Statement` column, select an existing statement or create a new one by typing its
reference, clicking on {guilabel}`Create and edit...`, filling out the statement's details, and
saving.
(transactions-view-edit-print)=
### 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
{guilabel}`Reference`, {guilabel}`Starting Balance`, or {guilabel}`Ending Balance`.
:::{note}
Manually updating the {guilabel}`Starting Balance` automatically updates the {guilabel}`Ending
Balance` based on the new value of the {guilabel}`Starting Balance` and the value of the
statement's transactions.
:::
:::{warning}
If the {guilabel}`Starting Balance` doesn't equal the previous statement's {guilabel}`Ending
Balance`, or if the {guilabel}`Ending Balance` doesn't equal the running balance
({guilabel}`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 {icon}`fa-paperclip` {guilabel}`Attachments` button and select the file to attach.
To generate and print a PDF of the bank statement, click the {guilabel}`Print` button (if accessed
via the reconciliation view) or click on the {icon}`fa-cog`{guilabel}`(gear)` icon and click
{icon}`fa-print`{guilabel}`Statement` (if accessed via the list view).
:::{note}
When a bank statement is generated to be printed, it is automatically added to the
{guilabel}`Attachments`.
:::
@@ -1,138 +0,0 @@
============
Transactions
============
Importing transactions from your bank statements allows keeping track of bank account transactions
and reconciling them with the ones recorded in your accounting.
:doc:`Bank synchronization <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:
- :ref:`Import bank transactions <transactions/import>` delivered by your bank;
- :ref:`Register bank transactions <transactions/register>` manually.
.. note::
:ref:`Grouping transactions by statement <transactions/statements>` is optional.
.. _transactions/import:
Import transactions
===================
Odoo supports multiple file formats to import transactions:
- SEPA recommended Cash Management format (CAMT.053)
- Comma-separated values (CSV)
- Open Financial Exchange (OFX)
- Quicken Interchange Format (QIF)
- Belgium: Coded Statement of Account (CODA)
To import a file, go to the :guilabel:`Accounting Dashboard`, and in the :guilabel:`Bank` journal,
click on :guilabel:`Import File`.
.. tip::
Alternatively, you can also:
- click the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon on the :guilabel:`Bank`
journal and select :guilabel:`Import file`;
- or access the transaction list by clicking the :icon:`fa-ellipsis-v` :guilabel:`(ellipsis)`
icon on the :guilabel:`Bank` journal and selecting :guilabel:`Transactions`, then click
the :icon:`fa-cog` :guilabel:`(gear)` icon and select :guilabel:`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 :guilabel:`Test` and :guilabel:`Import` your bank transactions.
.. seealso::
:doc:`/applications/essentials/export_import_data`
.. _transactions/register:
Register bank transactions manually
===================================
You can also record your bank transactions manually. To do so, go to :guilabel:`Accounting
Dashboard`, click on the :guilabel:`Bank` journal, and then on :guilabel:`New`. Make sure to fill
out the :guilabel:`Partner` and :guilabel:`Label` fields to ease the reconciliation process.
.. _transactions/statements:
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.
.. important::
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 :guilabel:`Accounting Dashboard`, click the
:icon:`fa-ellipsis-v` :guilabel:`(ellipsis)` icon next to the bank or cash journal you want to
check, then click :guilabel:`Statements`.
.. _transactions/statement-kanban:
Statement creation from the kanban view
---------------------------------------
Open the bank reconciliation (kanban) view from the :guilabel:`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 :guilabel:`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.
.. image:: transactions/statements-kanban.png
:alt: A "Statement" button is visible when hovering on the line separating two transactions.
In the :guilabel:`Create Statement` window, fill out the statement's :guilabel:`Reference`, verify
its :guilabel:`Starting Balance` and :guilabel:`Ending Balance`, and click :guilabel:`Save`.
.. _transactions/statement-list:
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
:guilabel:`Statement` column, select an existing statement or create a new one by typing its
reference, clicking on :guilabel:`Create and edit...`, filling out the statement's details, and
saving.
.. _transactions/view-edit-print:
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
:guilabel:`Reference`, :guilabel:`Starting Balance`, or :guilabel:`Ending Balance`.
.. note::
Manually updating the :guilabel:`Starting Balance` automatically updates the :guilabel:`Ending
Balance` based on the new value of the :guilabel:`Starting Balance` and the value of the
statement's transactions.
.. warning::
If the :guilabel:`Starting Balance` doesn't equal the previous statement's :guilabel:`Ending
Balance`, or if the :guilabel:`Ending Balance` doesn't equal the running balance
(:guilabel:`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 :icon:`fa-paperclip` :guilabel:`Attachments` button and select the file to attach.
To generate and print a PDF of the bank statement, click the :guilabel:`Print` button (if accessed
via the reconciliation view) or click on the :icon:`fa-cog`:guilabel:`(gear)` icon and click
:icon:`fa-print`:guilabel:`Statement` (if accessed via the list view).
.. note::
When a bank statement is generated to be printed, it is automatically added to the
:guilabel:`Attachments`.
@@ -0,0 +1,239 @@
---
show-content: true
---
# 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.
:::{seealso}
{doc}`/applications/finance/accounting/customer_invoices/overview`
:::
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:
- {ref}`accounting/invoice/creation`
- {ref}`accounting/invoice/confirmation`
- {ref}`accounting/invoice/sending`
- {ref}`accounting/invoice/paymentandreconciliation`
- {ref}`accounting/invoice/followup`
- {ref}`accounting/invoice/reporting`
(accounting-invoice-creation)=
## Invoice creation
Draft invoices can be created directly from documents like sales orders or purchase orders or
manually from the {guilabel}`Customer Invoices` journal in the {guilabel}`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:
- {guilabel}`Customer`: When a customer is selected, Odoo automatically pulls information from the
customer record like the invoice address,
{doc}`preferred payment terms <customer_invoices/payment_terms>`,
{doc}`fiscal positions <taxes/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.
- {guilabel}`Invoice Date`: If not set manually, this field is automatically set as the current date
upon confirmation.
- {guilabel}`Due Date` or {doc}`payment terms <customer_invoices/payment_terms>`: To specify when
the customer has to pay the invoice.
- {guilabel}`Journal`: Automatically set and can be changed if needed.
- {doc}`Currency <get_started/multi_currency>`. If the invoice's currency differs from the
company's currency, the currency exchange rate is automatically displayed.
In the {guilabel}`Invoice Lines` tab:
- {guilabel}`Product`: Click {guilabel}`Add a line`, then search for and select the product.
- {guilabel}`Quantity`
- {guilabel}`Price`
- {doc}`Taxes <taxes>` (if applicable)
To access the product catalog and view all items in an organized display, click {doc}`Catalog
</applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/product_catalog>`.
When the products and quantities are selected, click {guilabel}`Back to Invoice` to return to the
invoice; the selected catalog items will appear in the invoice lines.
:::{tip}
To display the total amount of the invoice in words, go to {menuselection}`Accounting -->
Configuration --> Settings` and activate the {guilabel}`Total amount of invoice in letters`
option.
:::
The {guilabel}`Journal Items` tab displays the accounting entries created. Additional invoice
information such as the {guilabel}`Customer Reference`, {guilabel}`Payment Reference`, {doc}`Fiscal
Positions <taxes/fiscal_positions>`, {doc}`Incoterms <customer_invoices/incoterms>`, and more can be
added or modified in the {guilabel}`Other Info` tab.
:::{note}
Odoo initially creates invoices in {guilabel}`Draft` status. Draft invoices have no accounting
impact until they are {ref}`confirmed <accounting/invoice/confirmation>`.
:::
:::{seealso}
{doc}`/applications/sales/sales/invoicing/proforma`
:::
(accounting-invoice-confirmation)=
## Invoice confirmation
Click {guilabel}`Confirm` when the invoice is completed. The invoice's status changes to
{guilabel}`Posted`, and a journal entry is generated based on the invoice configuration. On
confirmation, Odoo assigns each invoice a unique number from a defined {doc}`sequence
<customer_invoices/sequence>`.
:::{note}
- Once confirmed, an invoice can no longer be updated. Click {guilabel}`Reset to draft` if
changes are needed.
- If required, invoices and other journal entries can be locked once posted using the
{ref}`Secure posted entries with hash <data-inalterability/restricted>` feature.
:::
(accounting-invoice-sending)=
## Invoice sending
To set a preferred {guilabel}`Invoice sending` method for a customer, go to
{menuselection}`Accounting --> Customers --> Customers` and select the customer. In the
{guilabel}`Accounting` tab of the contact form, select the preferred {guilabel}`Invoice sending`
method in the {guilabel}`Customer Invoices` section.
:::{note}
Sending letters in Odoo requires {doc}`In-App Purchase (IAP) <../../essentials/in_app_purchase>`
credit or tokens.
:::
To send the invoice to the customer, navigate back to the invoice record and follow these steps:
1. Click {guilabel}`Print & Send`.
2. If the {ref}`default invoice layout <studio/pdf-reports/default-layout>` has not been customized
yet, a {guilabel}`Configure your document layout` pop-up window appears. Configure the layout and
click {guilabel}`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 {guilabel}`QR Code`
option in the {guilabel}`Configure Your Document Layout` window. To modify this option, go
to {menuselection}`Accounting --> Configuration --> Settings`, scroll down to the
{guilabel}`Customer Payments` section, and enable/disable the {guilabel}`QR Codes` option.
:::
3. In the {guilabel}`Print & Send` window:
- If a preferred {guilabel}`Invoice sending` method was set in the contact form, it is selected
by default. Select another one if needed.
- If no preferred {guilabel}`Invoice sending` method was set in the contact form, select the
method to use for sending the invoice to the customer.
4. Click {guilabel}`Print & Send` if the {guilabel}`by Email` option is selected, or click
{guilabel}`Print`.
(accounting-invoice-sending-multiple-invoices)=
### Sending multiple invoices
To send and print multiple invoices, go to {menuselection}`Accounting --> Customers --> Invoices`,
select them in the {guilabel}`Invoices` list view and click {guilabel}`Print & Send`. The
{guilabel}`Print & Send` window displays the selected invoice sending methods based on the preferred
method set.
A banner is added to the selected invoices to indicate they are part of an ongoing send and print
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 {menuselection}`Accounting --> Customers
--> Invoices`. In the {guilabel}`Invoices` list view, click into the search bar and filter on
{guilabel}`Not Sent`.
(accounting-invoice-paymentandreconciliation)=
## Payment and reconciliation
In Odoo, an invoice is considered {guilabel}`Paid` when the associated accounting entry has been
reconciled with a corresponding bank transaction.
:::{seealso}
- {doc}`payments`
- {doc}`bank/reconciliation`
:::
(accounting-invoice-followup)=
## Payment follow-up
Odoo's {doc}`follow-up actions <payments/follow_up>` 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.
(accounting-invoice-reporting)=
## Reporting
(accounting-invoice-partner-reports)=
### Partner reports
(accounting-invoices-partner-ledger)=
#### Partner Ledger
The {guilabel}`Partner Ledger` report shows the balance of customers and suppliers. To access it,
go to {menuselection}`Accounting --> Reporting --> Partner Ledger`.
(accounting-invoices-aging-report)=
#### Aged Receivable
To review outstanding customer invoices and their related due dates, use the {ref}`Aged Receivable
<accounting/reporting/aged-receivable>` report. To access it, go to {menuselection}`Accounting -->
Reporting --> Aged Receivable`.
(accounting-invoices-aged-payable)=
#### Aged Payable
To review outstanding vendor bills and their related due dates, use the {ref}`Aged Payable
<accounting/reporting/aged-payable>` report. To access it, go to {menuselection}`Accounting -->
Reporting --> Aged Payable`.
(accounting-invoices-profit-and-loss)=
### Profit and Loss
The {ref}`Profit and Loss <accounting/reporting/profit-and-loss>` statement shows details of income
and expenses.
(accounting-invoices-balance-sheet)=
### Balance sheet
The {ref}`Balance Sheet <accounting/reporting/balance-sheet>` summarizes the company's assets,
liabilities, and equity at a specific time.
```{toctree}
:titlesonly: true
customer_invoices/overview
customer_invoices/customer_addresses
customer_invoices/payment_terms
customer_invoices/terms_conditions
customer_invoices/cash_discounts
customer_invoices/credit_notes
customer_invoices/cash_rounding
customer_invoices/deferred_revenues
customer_invoices/electronic_invoicing
customer_invoices/sequence
customer_invoices/snailmail
customer_invoices/epc_qr_code
customer_invoices/incoterms
```
@@ -1,241 +0,0 @@
:show-content:
=================
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.
.. seealso::
:doc:`/applications/finance/accounting/customer_invoices/overview`
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:
- :ref:`accounting/invoice/creation`
- :ref:`accounting/invoice/confirmation`
- :ref:`accounting/invoice/sending`
- :ref:`accounting/invoice/paymentandreconciliation`
- :ref:`accounting/invoice/followup`
- :ref:`accounting/invoice/reporting`
.. _accounting/invoice/creation:
Invoice creation
================
Draft invoices can be created directly from documents like sales orders or purchase orders or
manually from the :guilabel:`Customer Invoices` journal in the :guilabel:`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:
- :guilabel:`Customer`: When a customer is selected, Odoo automatically pulls information from the
customer record like the invoice address,
:doc:`preferred payment terms <customer_invoices/payment_terms>`,
:doc:`fiscal positions <taxes/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.
- :guilabel:`Invoice Date`: If not set manually, this field is automatically set as the current date
upon confirmation.
- :guilabel:`Due Date` or :doc:`payment terms <customer_invoices/payment_terms>`: To specify when
the customer has to pay the invoice.
- :guilabel:`Journal`: Automatically set and can be changed if needed.
- :doc:`Currency <get_started/multi_currency>`. If the invoice's currency differs from the
company's currency, the currency exchange rate is automatically displayed.
In the :guilabel:`Invoice Lines` tab:
- :guilabel:`Product`: Click :guilabel:`Add a line`, then search for and select the product.
- :guilabel:`Quantity`
- :guilabel:`Price`
- :doc:`Taxes <taxes>` (if applicable)
To access the product catalog and view all items in an organized display, click :doc:`Catalog
</applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/product_catalog>`.
When the products and quantities are selected, click :guilabel:`Back to Invoice` to return to the
invoice; the selected catalog items will appear in the invoice lines.
.. tip::
To display the total amount of the invoice in words, go to :menuselection:`Accounting -->
Configuration --> Settings` and activate the :guilabel:`Total amount of invoice in letters`
option.
The :guilabel:`Journal Items` tab displays the accounting entries created. Additional invoice
information such as the :guilabel:`Customer Reference`, :guilabel:`Payment Reference`, :doc:`Fiscal
Positions <taxes/fiscal_positions>`, :doc:`Incoterms <customer_invoices/incoterms>`, and more can be
added or modified in the :guilabel:`Other Info` tab.
.. note::
Odoo initially creates invoices in :guilabel:`Draft` status. Draft invoices have no accounting
impact until they are :ref:`confirmed <accounting/invoice/confirmation>`.
.. seealso::
:doc:`/applications/sales/sales/invoicing/proforma`
.. _accounting/invoice/confirmation:
Invoice confirmation
====================
Click :guilabel:`Confirm` when the invoice is completed. The invoice's status changes to
:guilabel:`Posted`, and a journal entry is generated based on the invoice configuration. On
confirmation, Odoo assigns each invoice a unique number from a defined :doc:`sequence
<customer_invoices/sequence>`.
.. note::
- Once confirmed, an invoice can no longer be updated. Click :guilabel:`Reset to draft` if
changes are needed.
- If required, invoices and other journal entries can be locked once posted using the
:ref:`Secure posted entries with hash <data-inalterability/restricted>` feature.
.. _accounting/invoice/sending:
Invoice sending
===============
To set a preferred :guilabel:`Invoice sending` method for a customer, go to
:menuselection:`Accounting --> Customers --> Customers` and select the customer. In the
:guilabel:`Accounting` tab of the contact form, select the preferred :guilabel:`Invoice sending`
method in the :guilabel:`Customer Invoices` section.
.. note::
Sending letters in Odoo requires :doc:`In-App Purchase (IAP) <../../essentials/in_app_purchase>`
credit or tokens.
To send the invoice to the customer, navigate back to the invoice record and follow these steps:
#. Click :guilabel:`Print & Send`.
#. If the :ref:`default invoice layout <studio/pdf-reports/default-layout>` has not been customized
yet, a :guilabel:`Configure your document layout` pop-up window appears. Configure the layout and
click :guilabel:`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 :guilabel:`QR Code`
option in the :guilabel:`Configure Your Document Layout` window. To modify this option, go
to :menuselection:`Accounting --> Configuration --> Settings`, scroll down to the
:guilabel:`Customer Payments` section, and enable/disable the :guilabel:`QR Codes` option.
#. In the :guilabel:`Print & Send` window:
- If a preferred :guilabel:`Invoice sending` method was set in the contact form, it is selected
by default. Select another one if needed.
- If no preferred :guilabel:`Invoice sending` method was set in the contact form, select the
method to use for sending the invoice to the customer.
#. Click :guilabel:`Print & Send` if the :guilabel:`by Email` option is selected, or click
:guilabel:`Print`.
.. _accounting/invoice/sending-multiple-invoices:
Sending multiple invoices
-------------------------
To send and print multiple invoices, go to :menuselection:`Accounting --> Customers --> Invoices`,
select them in the :guilabel:`Invoices` list view and click :guilabel:`Print & Send`. The
:guilabel:`Print & Send` window displays the selected invoice sending methods based on the preferred
method set.
A banner is added to the selected invoices to indicate they are part of an ongoing send and print
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 :menuselection:`Accounting --> Customers
--> Invoices`. In the :guilabel:`Invoices` list view, click into the search bar and filter on
:guilabel:`Not Sent`.
.. _accounting/invoice/paymentandreconciliation:
Payment and reconciliation
==========================
In Odoo, an invoice is considered :guilabel:`Paid` when the associated accounting entry has been
reconciled with a corresponding bank transaction.
.. seealso::
- :doc:`payments`
- :doc:`bank/reconciliation`
.. _accounting/invoice/followup:
Payment follow-up
=================
Odoo's :doc:`follow-up actions <payments/follow_up>` 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.
.. _accounting/invoice/reporting:
Reporting
=========
.. _accounting/invoice/partner-reports:
Partner reports
---------------
.. _accounting/invoices/partner-ledger:
Partner Ledger
~~~~~~~~~~~~~~
The :guilabel:`Partner Ledger` report shows the balance of customers and suppliers. To access it,
go to :menuselection:`Accounting --> Reporting --> Partner Ledger`.
.. _accounting/invoices/aging-report:
Aged Receivable
~~~~~~~~~~~~~~~
To review outstanding customer invoices and their related due dates, use the :ref:`Aged Receivable
<accounting/reporting/aged-receivable>` report. To access it, go to :menuselection:`Accounting -->
Reporting --> Aged Receivable`.
.. _accounting/invoices/aged-payable:
Aged Payable
~~~~~~~~~~~~
To review outstanding vendor bills and their related due dates, use the :ref:`Aged Payable
<accounting/reporting/aged-payable>` report. To access it, go to :menuselection:`Accounting -->
Reporting --> Aged Payable`.
.. _accounting/invoices/profit-and-loss:
Profit and Loss
---------------
The :ref:`Profit and Loss <accounting/reporting/profit-and-loss>` statement shows details of income
and expenses.
.. _accounting/invoices/balance-sheet:
Balance sheet
-------------
The :ref:`Balance Sheet <accounting/reporting/balance-sheet>` summarizes the company's assets,
liabilities, and equity at a specific time.
.. toctree::
:titlesonly:
customer_invoices/overview
customer_invoices/customer_addresses
customer_invoices/payment_terms
customer_invoices/terms_conditions
customer_invoices/cash_discounts
customer_invoices/credit_notes
customer_invoices/cash_rounding
customer_invoices/deferred_revenues
customer_invoices/electronic_invoicing
customer_invoices/sequence
customer_invoices/snailmail
customer_invoices/epc_qr_code
customer_invoices/incoterms
@@ -1,88 +1,86 @@
================================
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.
```{eval-rst}
.. example::
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 :ref:`tax reduction <cash-discounts/tax-reductions>` can also be applied depending on the country
A {ref}`tax reduction <cash-discounts/tax-reductions>` can also be applied depending on the country
or region.
.. seealso::
- :doc:`payment_terms`
- :doc:`../payments`
:::{seealso}
- {doc}`payment_terms`
- {doc}`../payments`
:::
.. _cash-discounts/configuration:
(cash-discounts-configuration)=
Configuration
=============
## Configuration
To grant cash discounts to customers, you must first verify the :ref:`gain and loss accounts
<cash-discounts/gain-loss-accounts>`. Then, configure :ref:`payment terms
<cash-discounts/payment-terms>` and add a cash discount by checking the :guilabel:`Early Discount`
checkbox and filling in the discount percentage, discount days, and :ref:`tax
To grant cash discounts to customers, you must first verify the {ref}`gain and loss accounts
<cash-discounts/gain-loss-accounts>`. Then, configure {ref}`payment terms
<cash-discounts/payment-terms>` and add a cash discount by checking the {guilabel}`Early Discount`
checkbox and filling in the discount percentage, discount days, and {ref}`tax
reduction <cash-discounts/tax-reductions>` fields.
.. _cash-discounts/gain-loss-accounts:
(cash-discounts-gain-loss-accounts)=
Cash discount gain/loss accounts
--------------------------------
### 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 :menuselection:`Accounting --> Configuration --> Settings`, and, in
the :guilabel:`Default Accounts` section, select the accounts you want to use for the
:guilabel:`Cash Discount Gain account` and :guilabel:`Cash Discount Loss account`.
To modify these accounts, go to {menuselection}`Accounting --> Configuration --> Settings`, and, in
the {guilabel}`Default Accounts` section, select the accounts you want to use for the
{guilabel}`Cash Discount Gain account` and {guilabel}`Cash Discount Loss account`.
.. _cash-discounts/payment-terms:
(cash-discounts-payment-terms)=
Payment terms
-------------
### Payment terms
Cash discounts are defined on :doc:`payment terms <payment_terms>`. Configure them to your liking by
going to :menuselection:`Accounting --> Configuration --> Payment Terms`, and make sure to fill out
the discount percentage, discount days, and :ref:`tax reduction <cash-discounts/tax-reductions>`
Cash discounts are defined on {doc}`payment terms <payment_terms>`. Configure them to your liking by
going to {menuselection}`Accounting --> Configuration --> Payment Terms`, and make sure to fill out
the discount percentage, discount days, and {ref}`tax reduction <cash-discounts/tax-reductions>`
fields.
.. image:: cash_discounts/payment-terms.png
:alt: Configuration of payment terms named "2/7 Net 30". The field "Description on Invoices"
reads: "Payment terms: 30 Days, 2% Early Payment Discount under 7 days".
```{image} cash_discounts/payment-terms.png
:alt: |-
: Configuration of payment terms named "2/7 Net 30". The field "Description on Invoices"
: reads: "Payment terms: 30 Days, 2% Early Payment Discount under 7 days".
```
.. _cash-discounts/tax-reductions:
(cash-discounts-tax-reductions)=
Tax reductions
--------------
### 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 :guilabel:`Early
To configure how the tax reduction is applied, go to a payment term with the {guilabel}`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,
: 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
: 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
: 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.
```{eval-rst}
.. example::
You issue a €100 invoice (tax-excluded) on the 1st of January, with a 21% tax rate. The full
@@ -135,44 +133,50 @@ Discount` checkbox enabled, and select one of the three following options:
* - 31st of January
- €121.00
- €100 + (21% of €100)
```
.. note::
- :ref:`Tax grids <tax-returns/tax-grids>`, which are used for the tax report, are correctly
computed according to the :ref:`type of tax reduction <cash-discounts/tax-reductions>` you
configured.
- The **type of cash discount tax reduction** may be correctly pre-configured, depending on your
:ref:`fiscal localization package <fiscal_localizations/packages>`.
:::{note}
- {ref}`Tax grids <tax-returns/tax-grids>`, which are used for the tax report, are correctly
computed according to the {ref}`type of tax reduction <cash-discounts/tax-reductions>` you
configured.
- The **type of cash discount tax reduction** may be correctly pre-configured, depending on your
{ref}`fiscal localization package <fiscal_localizations/packages>`.
:::
.. _cash-discounts/customer-invoice:
(cash-discounts-customer-invoice)=
Apply a cash discount to a customer invoice
===========================================
## Apply a cash discount to a customer invoice
On a customer invoice, apply a cash discount by selecting the :ref:`payment terms you created
On a customer invoice, apply a cash discount by selecting the {ref}`payment terms you created
<cash-discounts/payment-terms>`. Odoo automatically computes the correct amounts, tax amounts, due
dates, and accounting records.
Under the :guilabel:`Journal Items` tab, you can display the discount details by clicking on the
"toggle" button and adding the :guilabel:`Discount Date` and :guilabel:`Discount Amount` columns.
Under the {guilabel}`Journal Items` tab, you can display the discount details by clicking on the
"toggle" button and adding the {guilabel}`Discount Date` and {guilabel}`Discount Amount` columns.
.. image:: cash_discounts/invoice-journal-entry.png
:alt: An invoice of 100.00 with "2/7 Net 30" selected as payment terms. The "Journal Items" tab
is open, and the "Discount Date" and "Discount Amount" columns are displayed.
```{image} cash_discounts/invoice-journal-entry.png
:alt: "An invoice of \u20AC100.00 with \"2/7 Net 30\" selected as payment terms. The\
: \ \"Journal Items\" tab\nis open, and the \"Discount Date\" and \"Discount Amount\"\
: \ columns are displayed."
```
The discount amount and due date are also displayed on the generated invoice report sent to the
customer if the :guilabel:`Show installment dates` option is checked on the payment terms.
customer if the {guilabel}`Show installment dates` option is checked on the payment terms.
.. image:: cash_discounts/invoice-print.png
:alt: An invoice of 100.00 with the following text added to the terms and conditions: "30
Days, 2% Early Payment Discount under 7 days. 118.58 due if paid before 01/08/2023."
```{image} cash_discounts/invoice-print.png
:alt: "An invoice of \u20AC100.00 with the following text added to the terms and conditions:\
: \ \"30\nDays, 2% Early Payment Discount under 7 days. 118.58 \u20AC due if paid\
: \ before 01/08/2023.\""
```
Payment reconciliation
----------------------
### Payment reconciliation
When you record a :doc:`payment <../payments>` or :doc:`reconcile your bank transactions
When you record a {doc}`payment <../payments>` or {doc}`reconcile your bank transactions
<../bank/reconciliation>`, Odoo takes the customer payment's date into account to determine if the
customer can benefit from the cash discount or not.
.. note::
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.
:::{note}
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.
:::
@@ -1,6 +1,4 @@
=============
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
@@ -10,16 +8,16 @@ 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
=============
## Configuration
Go to :menuselection:`Accounting --> Configuration --> Settings`
Go to {menuselection}`Accounting --> Configuration --> Settings`
and enable *Cash Rounding*, then click on *Save*.
.. image:: cash_rounding/cash_rounding01.png
:align: center
```{image} cash_rounding/cash_rounding01.png
:align: center
```
Go to :menuselection:`Accounting --> Configuration --> Cash Roundings`,
Go to {menuselection}`Accounting --> Configuration --> Cash Roundings`,
and click on *Create*.
Define here your *Rounding Precision*, *Rounding Strategy*, and
@@ -29,12 +27,11 @@ Odoo supports two **rounding strategies**:
1. **Add a rounding line**: a *rounding* line is added on the invoice.
You have to define which account records the cash roundings.
2. **Modify tax amount**: the rounding is applied in the taxes section.
Apply roundings
===============
## 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*.
@@ -0,0 +1,118 @@
# Credit notes and refunds
A **credit/debit note**, or **credit/debit memo**, is a document issued to a customer that notifies
them that they have been *credited/debited* a certain amount.
Several use cases can lead to a credit note, such as:
> - a mistake in the invoice
> - a return of the goods, or a rejection of the services
> - the goods delivered are damaged
Debit notes are less common but are most frequently used to track debts owed by customers or to
vendors because of modifications to confirmed customer invoices or vendor bills.
:::{note}
Issuing a credit/debit note is the only legal way to cancel, refund, or modify a validated
invoice. Do not forget to **register the payment** afterward if you need to send money back to
your customer and/or validate the
{doc}`return </applications/sales/sales/products_prices/returns>` if a storable product is
returned.
:::
(accounting-issue-credit-note)=
## Issue a credit note
You can create a credit note from scratch by going to {menuselection}`Accounting --> Customers -->
Credit Notes`, and by clicking on {guilabel}`Create`. Filling out a credit note form works the same
way as an invoice form.
However, most of the time, credit notes are generated directly from the related invoices. To do so,
go to {menuselection}`Accounting --> Customers --> Invoices`, open the related **customer invoice**,
and click on {guilabel}`Credit Note`.
You can choose between three options:
> - {guilabel}`Partial Refund`
> - {guilabel}`Full Refund`
> - {guilabel}`Full refund and new draft invoice`
:::{note}
A credit note sequence starts with `R` and is followed by the number of the related document
(e.g., RINV/2019/0004 is related to the invoice INV/2019/0004).
:::
### Partial refund
When selecting the {guilabel}`Partial Refund` option, Odoo creates a draft credit note already
prefilled with all the necessary information from the original invoice. This is the option to choose
if you wish to do a partial refund or if you want to modify any detail of the credit note.
:::{note}
This is the only option for invoices marked as *in payment* or *paid*.
:::
### Full refund
When selecting the {guilabel}`Full Refund` option, Odoo creates a credit note, automatically
validates it, and reconciles it with the related invoice.
```{image} credit_notes/credit_notes02.png
:alt: Full refund credit note.
```
This is the option to choose for a full refund or to **cancel** a *validated* invoice.
### Full refund and new draft invoice
When selecting the {guilabel}`Full refund and new draft invoice` option, Odoo creates a credit note,
automatically validates it, reconciles it with the related invoice, and opens a new draft invoice
prefilled with the same details from the original invoice.
This is the option to **modify** the content of a *validated* invoice.
(accounting-issue-debit-note)=
## Issue a debit note
You can create a debit note from scratch by going to {menuselection}`Accounting --> Customers -->
Invoices` or by clicking on the related invoice you wish to issue a debit note for. On the invoice
form view, click {guilabel}`Cog icon (⚙) --> Debit Note`, fill in the information, and click
{guilabel}`Create Debit Note`.
## Record a vendor refund
**Vendor refunds** are recorded the same way as credit notes:
You can either create a credit note from scratch by going to {menuselection}`Accounting --> Vendors
--> Refund`, and by clicking on {guilabel}`Create`; or by opening the related **vendor bill**, and
clicking on {guilabel}`Credit Note`.
## Record a debit note
**Debit notes** from vendors are recorded in a similar way to how they are issued to customers:
Go to {menuselection}`Accounting --> Vendors --> Bills`, open the related bill you wish to record a
debit note for, and click {guilabel}`Cog icon (⚙) --> Debit Note`. Fill in the information, and click
{guilabel}`Create Debit Note`.
## Journal entries
Issuing a credit/debit note from an invoice/bill creates a **reverse entry** that zeroes out the
journal items generated by the original invoice.
```{eval-rst}
.. example::
The journal invoice of an entry:
.. image:: credit_notes/credit_notes03.png
:alt: Invoice journal entry.
And here is the credit notes journal entry generated to reverse
the original invoice above:
.. image:: credit_notes/credit_notes04.png
:alt: Credit note journal entry reverses the invoice journal entry.
```
@@ -1,122 +0,0 @@
========================
Credit notes and refunds
========================
A **credit/debit note**, or **credit/debit memo**, is a document issued to a customer that notifies
them that they have been *credited/debited* a certain amount.
Several use cases can lead to a credit note, such as:
- a mistake in the invoice
- a return of the goods, or a rejection of the services
- the goods delivered are damaged
Debit notes are less common but are most frequently used to track debts owed by customers or to
vendors because of modifications to confirmed customer invoices or vendor bills.
.. note::
Issuing a credit/debit note is the only legal way to cancel, refund, or modify a validated
invoice. Do not forget to **register the payment** afterward if you need to send money back to
your customer and/or validate the
:doc:`return </applications/sales/sales/products_prices/returns>` if a storable product is
returned.
.. _accounting/issue-credit-note:
Issue a credit note
===================
You can create a credit note from scratch by going to :menuselection:`Accounting --> Customers -->
Credit Notes`, and by clicking on :guilabel:`Create`. Filling out a credit note form works the same
way as an invoice form.
However, most of the time, credit notes are generated directly from the related invoices. To do so,
go to :menuselection:`Accounting --> Customers --> Invoices`, open the related **customer invoice**,
and click on :guilabel:`Credit Note`.
You can choose between three options:
- :guilabel:`Partial Refund`
- :guilabel:`Full Refund`
- :guilabel:`Full refund and new draft invoice`
.. note::
A credit note sequence starts with `R` and is followed by the number of the related document
(e.g., RINV/2019/0004 is related to the invoice INV/2019/0004).
Partial refund
--------------
When selecting the :guilabel:`Partial Refund` option, Odoo creates a draft credit note already
prefilled with all the necessary information from the original invoice. This is the option to choose
if you wish to do a partial refund or if you want to modify any detail of the credit note.
.. note::
This is the only option for invoices marked as *in payment* or *paid*.
Full refund
-----------
When selecting the :guilabel:`Full Refund` option, Odoo creates a credit note, automatically
validates it, and reconciles it with the related invoice.
.. image:: credit_notes/credit_notes02.png
:alt: Full refund credit note.
This is the option to choose for a full refund or to **cancel** a *validated* invoice.
Full refund and new draft invoice
---------------------------------
When selecting the :guilabel:`Full refund and new draft invoice` option, Odoo creates a credit note,
automatically validates it, reconciles it with the related invoice, and opens a new draft invoice
prefilled with the same details from the original invoice.
This is the option to **modify** the content of a *validated* invoice.
.. _accounting/issue-debit-note:
Issue a debit note
==================
You can create a debit note from scratch by going to :menuselection:`Accounting --> Customers -->
Invoices` or by clicking on the related invoice you wish to issue a debit note for. On the invoice
form view, click :guilabel:`Cog icon (⚙) --> Debit Note`, fill in the information, and click
:guilabel:`Create Debit Note`.
Record a vendor refund
======================
**Vendor refunds** are recorded the same way as credit notes:
You can either create a credit note from scratch by going to :menuselection:`Accounting --> Vendors
--> Refund`, and by clicking on :guilabel:`Create`; or by opening the related **vendor bill**, and
clicking on :guilabel:`Credit Note`.
Record a debit note
===================
**Debit notes** from vendors are recorded in a similar way to how they are issued to customers:
Go to :menuselection:`Accounting --> Vendors --> Bills`, open the related bill you wish to record a
debit note for, and click :guilabel:`Cog icon (⚙) --> Debit Note`. Fill in the information, and click
:guilabel:`Create Debit Note`.
Journal entries
===============
Issuing a credit/debit note from an invoice/bill creates a **reverse entry** that zeroes out the
journal items generated by the original invoice.
.. example::
The journal invoice of an entry:
.. image:: credit_notes/credit_notes03.png
:alt: Invoice journal entry.
And here is the credit notes journal entry generated to reverse
the original invoice above:
.. image:: credit_notes/credit_notes04.png
:alt: Credit note journal entry reverses the invoice journal entry.
@@ -0,0 +1,43 @@
# Delivery and invoice addresses
Companies often have multiple locations, and it is common that a customer invoice should be sent to
one address and the delivery should be sent to another. Odoo's **Customer Addresses** feature is
designed to handle this scenario by making it easy to specify which address to use for each case.
:::{seealso}
{doc}`overview`
:::
## Configuration
To specify a sales order's invoice and delivery addresses, first go to {menuselection}`Accounting
--> Configuration --> Settings`. In the {guilabel}`Customer Invoices` section, enable
{guilabel}`Customer Addresses` and click {guilabel}`Save`.
On quotations and sales orders, there are now fields for {guilabel}`Invoice Address` and
{guilabel}`Delivery Address`. If the customer has an invoice or delivery address listed on their
{ref}`contact record <sales/send_quotations/contact-form-config>`, the corresponding field uses that
address, by default, but any contact's address can be used instead.
:::{seealso}
For more information, refer to the documentation on {ref}`Contact Form Configuration
<sales/send_quotations/contact-form-config>`.
:::
## Invoice and deliver to different addresses
Delivery orders and their delivery slip reports use the address set as the {guilabel}`Delivery
Address` on the sales order. By default, invoice reports show both the shipping address and the
invoice address to assure the customer that the delivery is going to the correct location.
Emails also go to different addresses. The quotation and sales order are sent to the main contact's
email, as usual, but the invoice is sent to the email of the address set as the
{guilabel}`Invoice Address` on the sales order.
:::{note}
- Reports, such as the delivery slip and invoice report, can be {doc}`customized using Studio
</applications/studio/pdf_reports>`.
- If {doc}`Send by Post <snailmail>` is checked when you click {guilabel}`Send & Print`, the
invoice will be mailed to the invoice address.
:::
@@ -1,44 +0,0 @@
==============================
Delivery and invoice addresses
==============================
Companies often have multiple locations, and it is common that a customer invoice should be sent to
one address and the delivery should be sent to another. Odoo's **Customer Addresses** feature is
designed to handle this scenario by making it easy to specify which address to use for each case.
.. seealso::
:doc:`overview`
Configuration
=============
To specify a sales order's invoice and delivery addresses, first go to :menuselection:`Accounting
--> Configuration --> Settings`. In the :guilabel:`Customer Invoices` section, enable
:guilabel:`Customer Addresses` and click :guilabel:`Save`.
On quotations and sales orders, there are now fields for :guilabel:`Invoice Address` and
:guilabel:`Delivery Address`. If the customer has an invoice or delivery address listed on their
:ref:`contact record <sales/send_quotations/contact-form-config>`, the corresponding field uses that
address, by default, but any contact's address can be used instead.
.. seealso::
For more information, refer to the documentation on :ref:`Contact Form Configuration
<sales/send_quotations/contact-form-config>`.
Invoice and deliver to different addresses
==========================================
Delivery orders and their delivery slip reports use the address set as the :guilabel:`Delivery
Address` on the sales order. By default, invoice reports show both the shipping address and the
invoice address to assure the customer that the delivery is going to the correct location.
Emails also go to different addresses. The quotation and sales order are sent to the main contact's
email, as usual, but the invoice is sent to the email of the address set as the
:guilabel:`Invoice Address` on the sales order.
.. note::
- Reports, such as the delivery slip and invoice report, can be :doc:`customized using Studio
</applications/studio/pdf_reports>`.
- If :doc:`Send by Post <snailmail>` is checked when you click :guilabel:`Send & Print`, the
invoice will be mailed to the invoice address.
@@ -1,6 +1,4 @@
=================
Deferred revenues
=================
# Deferred revenues
**Deferred revenues**, or **unearned revenues**, are invoices addressed to customers
for goods yet to be delivered or services yet to be rendered.
@@ -12,106 +10,113 @@ These future revenues must be deferred on the company's balance sheet among the
until they can be **recognized**, at once or over a defined period, on the profit and loss
statement.
For example, let's say a business sells a software license of $1200 for 1 year. They immediately
For example, let's say a business sells a software license of \$1200 for 1 year. They immediately
invoice it to the customer but can't consider it earned yet, as the future months of licensing have
not yet been delivered. Therefore, they post this new revenue in a deferred revenue account and
recognize it on a monthly basis. Each month, for the next 12 months, $100 will be recognized as
recognize it on a monthly basis. Each month, for the next 12 months, \$100 will be recognized as
revenue.
Odoo Accounting handles deferred revenues by spreading them in multiple entries that are posted
periodically.
.. note::
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
you see a change from :guilabel:`Draft` to :guilabel:`Posted`.
:::{note}
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
you see a change from {guilabel}`Draft` to {guilabel}`Posted`.
:::
Configuration
=============
## Configuration
Make sure the default settings are correctly configured for your business. To do so, go to
:menuselection:`Accounting --> Configuration --> Settings`. The following options are available:
{menuselection}`Accounting --> Configuration --> Settings`. The following options are available:
Journal
The deferral entries are posted in this journal.
: The deferral entries are posted in this journal.
Deferred Revenue
Revenues are deferred on this Current Liability account until they are recognized.
: Revenues are deferred on this Current Liability account until they are recognized.
Generate Entries
By default, Odoo :ref:`automatically generates <customer_invoices/deferred/generate_on_validation>`
: By default, Odoo {ref}`automatically generates <customer_invoices/deferred/generate_on_validation>`
the deferral entries when you post a customer invoice. However, you can also choose to
:ref:`generate them manually <customer_invoices/deferred/generate_manually>` by selecting the
:guilabel:`Manually & Grouped` option instead.
{ref}`generate them manually <customer_invoices/deferred/generate_manually>` by selecting the
{guilabel}`Manually & Grouped` option instead.
Based on
Suppose an invoice of $1200 must be deferred over 12 months.
- The :guilabel:`Months` option accounts for $100 each month prorated to the number of days in
that month (e.g., $50 for the first month if the :guilabel:`Start Date` is set to the 15th of
: Suppose an invoice of \$1200 must be deferred over 12 months.
- The {guilabel}`Months` option accounts for \$100 each month prorated to the number of days in
that month (e.g., \$50 for the first month if the {guilabel}`Start Date` is set to the 15th of
the month).
- The :guilabel:`Full Months` option considers each month started to be full (e.g., $100 for the
first month even if the :guilabel:`Start Date` is set to the 15th of the month); this means that
with the :guilabel:`Full Months` option, a full $100 is recognized in the first partial month,
- The {guilabel}`Full Months` option considers each month started to be full (e.g., \$100 for the
first month even if the {guilabel}`Start Date` is set to the 15th of the month); this means that
with the {guilabel}`Full Months` option, a full \$100 is recognized in the first partial month,
eliminating the need for a 13th month to recognize any remainder as would be the case when using
the :guilabel:`Months` option.
the {guilabel}`Months` option.
- The {guilabel}`Days` option accounts for different amounts depending on the number of days in
each month (e.g., ~\$102 for January and ~\$92 for February).
- The :guilabel:`Days` option accounts for different amounts depending on the number of days in
each month (e.g., ~$102 for January and ~$92 for February).
(customer-invoices-deferred-generate-on-validation)=
.. _customer_invoices/deferred/generate_on_validation:
## Generate deferral entries on validation
Generate deferral entries on validation
=======================================
.. tip::
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
month as the :guilabel:`Invoice Date`. Deferred revenue entries are posted from the invoice
date and are displayed in the report accordingly.
:::{tip}
Make sure the {guilabel}`Start Date` and {guilabel}`End Date` fields are visible in the
{guilabel}`Invoice Lines` tab. In most cases, the {guilabel}`Start Date` should be in the same
month as the {guilabel}`Invoice Date`. Deferred revenue entries are posted from the invoice
date and are displayed in the report accordingly.
:::
For each line of the invoice that should be deferred, specify the start and end dates of the
deferral period.
If the :guilabel:`Generate Entries` field in the **Settings** is set to :guilabel:`On invoice/bill
If the {guilabel}`Generate Entries` field in the **Settings** is set to {guilabel}`On invoice/bill
validation`, Odoo automatically generates the deferral entries when the invoice is validated. Click
the :guilabel:`Deferred Entries` smart button to see them.
the {guilabel}`Deferred Entries` smart button to see them.
One entry, dated on the same day as the invoice's accounting date, moves the invoice amounts from
the income account to the deferred account. The other entries are deferral entries which, month
after month, move the invoice amounts from the deferred account to the income account to recognize
the revenue.
```{eval-rst}
.. example::
You can defer a January invoice of $1200 over 12 months by specifying a start date of 01/01/2023
and an end date of 12/31/2023. At the end of August, $800 is recognized as an income,
whereas $400 remains on the deferred account.
```
Reporting
=========
## Reporting
The deferred revenue report computes an overview of the necessary deferral entries for each account.
To access it, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue`.
To access it, go to {menuselection}`Accounting --> Reporting --> Deferred Revenue`.
To view the journal items of each account, click on the account name and then :guilabel:`Journal
To view the journal items of each account, click on the account name and then {guilabel}`Journal
Items`.
.. image:: deferred_revenues/deferred_revenue_report.png
:alt: Deferred revenue report
```{image} deferred_revenues/deferred_revenue_report.png
:alt: Deferred revenue report
```
.. note::
Only invoices whose accounting date is before the end of the period of the report
are taken into account.
:::{note}
Only invoices whose accounting date is before the end of the period of the report
are taken into account.
:::
.. _customer_invoices/deferred/generate_manually:
(customer-invoices-deferred-generate-manually)=
Generate grouped deferral entries manually
==========================================
## Generate grouped deferral entries manually
If you have a lot of deferred revenues and wish to reduce the number of journal entries created, you
can generate deferral entries manually. To do so, set the :guilabel:`Generate Entries` field in the
**Settings** to :guilabel:`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
can generate deferral entries manually. To do so, set the {guilabel}`Generate Entries` field in the
**Settings** to {guilabel}`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
single entry.
At the end of each month, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue` and
click the :guilabel:`Generate Entries` button. This generates two deferral entries:
At the end of each month, go to {menuselection}`Accounting --> Reporting --> Deferred Revenue` and
click the {guilabel}`Generate Entries` button. This generates two deferral entries:
- One dated at the end of the month which aggregates, for each account, all the deferred amounts
of that month. This means that a part of the deferred revenue is recognized at the end of that
@@ -119,6 +124,7 @@ click the :guilabel:`Generate Entries` button. This generates two deferral entri
- The reversal of this created entry, dated on the following day (i.e., the first day of the
next month) to cancel the previous entry.
```{eval-rst}
.. example::
There are two invoices:
@@ -185,3 +191,5 @@ click the :guilabel:`Generate Entries` button. This generates two deferral entri
Therefore, at the end of December, invoices A and B are fully recognized as income
only once in spite of all the created entries thanks to the reversal mechanism.
```
@@ -0,0 +1,318 @@
# Electronic invoicing ({abbr}`EDI (electronic data interchange)`)
EDI, or electronic data interchange, is the inter-company communication of business documents, such
as purchase orders and invoices, in a standard format. Sending documents according to an EDI
standard ensures that the machine receiving the message can interpret the information correctly.
Various EDI file formats exist and are available depending on your company's country.
EDI feature enables automating the administration between companies and might also be required by
some governments for fiscal control or to facilitate the administration.
Electronic invoicing of your documents such as customer invoices, credit notes or vendor bills is
one of the application of EDI.
Odoo supports e-invoicing in many countries. Refer to the country's page for more details:
- {doc}`Argentina <electronic_invoicing/argentina>`
- {doc}`Austria <electronic_invoicing/austria>`
- {doc}`Belgium <electronic_invoicing/belgium>`
- {doc}`Brazil <electronic_invoicing/brazil>`
- {doc}`Chile <electronic_invoicing/chile>`
- {doc}`Colombia <electronic_invoicing/colombia>`
- {doc}`Croatia <electronic_invoicing/croatia>`
- {doc}`Denmark <electronic_invoicing/denmark>`
- {doc}`Ecuador <electronic_invoicing/ecuador>`
- {doc}`Estonia <electronic_invoicing/estonia>`
- {doc}`Finland <electronic_invoicing/finland>`
- {doc}`France <electronic_invoicing/france>`
- {doc}`Germany <electronic_invoicing/germany>`
- {doc}`Hungary <electronic_invoicing/hungary>`
- {doc}`Ireland <electronic_invoicing/ireland>`
- {doc}`Italy <electronic_invoicing/italy>`
- {doc}`Latvia <electronic_invoicing/latvia>`
- {doc}`Lithuania <electronic_invoicing/lithuania>`
- {doc}`Luxembourg <electronic_invoicing/luxembourg>`
- {doc}`Mexico <electronic_invoicing/mexico>`
- {doc}`Netherlands <electronic_invoicing/netherlands>`
- {doc}`Norway <electronic_invoicing/norway>`
- {doc}`Peru <electronic_invoicing/peru>`
- {doc}`Poland <electronic_invoicing/poland>`
- {doc}`Portugal <electronic_invoicing/portugal>`
- {doc}`Romania <electronic_invoicing/romania>`
- {doc}`Slovenia <electronic_invoicing/slovenia>`
- {doc}`Spain <electronic_invoicing/spain>`
- {doc}`Spain - Basque Country <electronic_invoicing/basque_country>`
- {doc}`Uruguay <electronic_invoicing/uruguay>`
:::{seealso}
{doc}`Fiscal localizations documentation <../../fiscal_localizations>`
:::
(e-invoicing-configuration)=
## Configuration
By default, the format available in the {ref}`send window <e-invoicing/generation>` depends on your
customer's country.
You can define a specific e-invoicing format for each customer. To do so, go to
{menuselection}`Accounting --> Customers --> Customers`, open the customer form, go to the
{guilabel}`Accounting` tab and select the appropriate format.
```{image} electronic_invoicing/customer-form.png
:alt: Select an EDI format for a specific customer
```
### National electronic invoicing
Depending on your company's country (e.g., {doc}`Italy <../../fiscal_localizations/italy>`,
{doc}`Spain <../../fiscal_localizations/spain>`, {doc}`Mexico
<../../fiscal_localizations/mexico>`, etc.), you may be required to issue e-invoicing documents in
a specific format for all your invoices. In this case, you can define a default e-invoicing format
for your sales journal.
To do so, go to {menuselection}`Accounting --> Configuration --> Journals`, open your sales journal,
go to the {guilabel}`Advanced Settings` tab, and enable the formats you need for this journal.
(e-invoicing-generation)=
## E-invoices generation
From a confirmed invoice, click {guilabel}`Send & Print` to open the send window. Check the
e-invoicing option to generate and attach the e-invoice file.
```{image} electronic_invoicing/send-window.png
:alt: The Peppol option is checked and an e-invoicing XML file is attached to the email.
```
## Peppol
The [Peppol](https://peppol.org/about/) network ensures the exchange of documents and information
between enterprises and governmental authorities. It is primarily used for electronic invoicing, and
its access points (connectors to the Peppol network) allow enterprises to exchange electronic
documents.
Odoo is an **access point** and an {abbr}`SMP (Service Metadata Publisher)`, enabling electronic
invoicing transactions without the need to send invoices and bills by email or post.
If not done yet, {ref}`install <general/install>` the {guilabel}`Peppol` module (`account_peppol`).
:::{important}
- Peppol registration is **free** and available in Odoo Community
- You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and
**Refunds** via Peppol.
- You can send and receive in one of the following supported document formats:
**BIS Billing 3.0, XRechnung CIUS, NLCIUS**.
- The following
**countries**
are eligible for
**Peppol registration in Odoo**
:
Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus,
Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece,
Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia,
Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania,
Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)
:::
### Registration
Go to {menuselection}`Accounting --> Configuration --> Settings`. If you do not have the
Peppol module installed, first tick the {guilabel}`Enable PEPPOL` checkbox and then **manually
save**. Click {guilabel}`Start sending via Peppol` to open the registration form.
:::{note}
This registration form also pops up if you choose to {guilabel}`Send & Print` an
invoice via Peppol without completing the registration process.
:::
```{image} electronic_invoicing/peppol-registration-settings.png
:alt: Peppol registration button
```
You can register either as a sender or a receiver. A sender can only send invoices and credit notes
on Odoo via Peppol, without ever registering as a Peppol participant on Odoo SMP. If you have an
existing Peppol registration elsewhere that you want to keep, but want to send invoices from your
Odoo database and receive other documents in another software, register as a **sender**.
:::{tip}
- You can always register as a sender first and register to receive documents later.
- When registering, you can specify if you would also like to receive documents.
:::
```{image} electronic_invoicing/peppol-registration-wizard.png
:alt: Peppol registration form
```
Fill in the following information:
- Check the receiver box if you want to register on Odoo SMP. If you are migrating from another
service provider, insert the {guilabel}`Migration key` from the previous provider (the field
becomes visible after you tick the checkbox).
- {guilabel}`E-Address Scheme`: the Peppol Electronic Address Scheme usually depends on your
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
For example, the preferred EAS code for most companies in Belgium is `0208`.
- {guilabel}`Endpoint`: this is usually a Company Registry number or a VAT number.
- {guilabel}`Phone`: phone number including the country code (e.g., `+32` in Belgium).
- {guilabel}`Email`: this is the email Odoo can use to contact you regarding your Peppol
registration.
If you want to explore or demo Peppol, you can choose to register in {guilabel}`Demo` mode.
Otherwise, select {guilabel}`Live`.
:::{tip}
- Selecting {guilabel}`Demo` simulates everything in Odoo. There is no sending, receiving, or
partner verification.
- For **advanced users only**, it is possible to run tests on Peppol's test network. The server
allows to register on Peppol and send/receive test invoices to/from other participants.
To do so, enable the {ref}`developer-mode`, open the **Settings** app, go to
{menuselection}`Technical --> System Parameters`, and search for `account_peppol.edi.mode`.
Click the parameter and change the {guilabel}`Value` to `test`. Go back to the Peppol setup
menu in the **Settings** app. The option {guilabel}`Test` is now available.
```{image} electronic_invoicing/peppol-system-parameter.png
:alt: Peppol test mode parameter
```
:::
:::{seealso}
- [Peppol EAS - European Commision](https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/)
- [Peppol Endpoint - OpenPeppol eDEC Code Lists](https://docs.peppol.eu/edelivery/codelists/)
(open the "Participant Identifier Schemes" as HTML page)
:::
When set up, request a verification code to be sent to you by clicking {guilabel}`Send a
registration code by SMS`. A text message containing a code is sent to the phone number provided to
finalize the verification process.
```{image} electronic_invoicing/peppol-phone-verification.png
:alt: phone validation
```
Once you enter the code and click {guilabel}`Register`, your Peppol participant status is updated.
If you chose to only send documents, then the status changes to {guilabel}`Can send but
not receive`.
If you opted to receive documents as well, the status changes to {guilabel}`Can send, pending
registration to receive`. In that case, it should be automatically activated within a day.
Then, set the default journal for receiving vendor bills in the {guilabel}`Incoming Invoices
Journal`.
:::{tip}
To manually trigger the cron that checks the registration status, enable the
{ref}`developer-mode`, then go to {menuselection}`Settings --> Technical --> Scheduled Actions`,
and search for the {guilabel}`PEPPOL: update participant status` action.
:::
Your receiver application status should be updated soon after you are registered on the Peppol
network.
```{image} electronic_invoicing/peppol-receiver.png
:alt: receiver application
```
All invoices and vendor bills can now be sent directly using the Peppol network.
:::{important}
To update the email that Odoo can use to contact you, modify the email and click
{guilabel}`Update contact details`.
:::
### Configure Peppol services
Once you are registered on Odoo SMP, the {guilabel}`Configure Peppol Services` button
becomes visible to allow you to enable or disable document formats that other participants
can send you via Peppol. By default, all document formats supported by Odoo are enabled (depending
on the installed modules).
### Contact verification
Before sending an invoice to a contact using the Peppol network, it is necessary to verify that they
are also registered as a Peppol participant.
To do so, go to {menuselection}`Accounting --> Customers --> Customers` and open the customer's
form. Then go to {menuselection}`Accounting tab --> Electronic Invoicing`, select the correct
format, and make sure their {guilabel}`Peppol EAS code` and the {guilabel}`Endpoint` are filled in.
Then, click {guilabel}`Verify`. If the contact exists on the network, their Peppol endpoint validity
is set to Valid.
```{image} electronic_invoicing/peppol-contact-verify.png
:alt: verify contact registration
```
:::{important}
While Odoo prefills both the EAS code and the Endpoint number based on the information available
for a contact, it is better to confirm these details directly with the contact.
:::
It is possible to verify the Peppol participant status of several customers at once.
To do so, go to {menuselection}`Accounting --> Customers --> Customers` and switch to the list view.
Select the customers you want to verify and then click {menuselection}`Actions --> Verify Peppol`.
If the participant is registered on the Peppol network but cannot receive the format you selected
for them, the {guilabel}`Peppol endpoint validity` label changes to {guilabel}`Cannot
receive this format`.
```{image} electronic_invoicing/peppol-participant-format.png
:alt: verify contact ubl format
```
### Send invoices
Once ready to send an invoice via the Peppol network, simply click {guilabel}`Send & Print` on the
invoice form. To queue multiple invoices, select them in the list view and click
{menuselection}`Actions --> Send & Print`; they will be sent in a batch later on. Both
{guilabel}`BIS Billing 3.0` and {guilabel}`Send via PEPPOL` checkboxes need to be ticked.
```{image} electronic_invoicing/peppol-send-print.png
:alt: Send peppol invoice
```
Posted invoices that can be sent via Peppol are marked as {guilabel}`Peppol Ready`.
To display them, use the {guilabel}`Peppol Ready` filter or access the Accounting dashboard and
click {guilabel}`Peppol ready invoices` on the corresponding sales journal.
```{image} electronic_invoicing/peppol-ready-invoices.png
:alt: Filter Peppol ready invoices
```
Once the invoices are sent via Peppol, the status is changed to {guilabel}`Processing`. The
status is changed to `Done` after they have been successfully delivered to the contact's Access
Point.
```{image} electronic_invoicing/peppol-message-processing.png
:alt: Peppol message status
```
:::{tip}
By default, the Peppol status column is hidden on the Invoices list view. You can choose to have
it displayed by selecting it from the optional columns, accessible from the top right corner of
the Invoices list view.
:::
A cron runs regularly to check the status of these invoices. It is possible to check the status
before the cron runs by clicking {guilabel}`Fetch Peppol invoice status` in the corresponding
sales journal on the Accounting dashboard.
```{image} electronic_invoicing/peppol-fetch-message-status.png
:alt: Fetch invoice Peppol status
```
### Receive vendor bills
Once a day, a cron checks whether any new documents have been sent to you via the Peppol network.
These documents are imported, and the corresponding vendor bills are created automatically as
drafts.
```{image} electronic_invoicing/peppol-receive-bills.png
:alt: peppol receive bills
```
If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the
Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click
{guilabel}`Fetch from Peppol`.
```{image} electronic_invoicing/peppol-fetch-bills.png
:alt: Fetch bills from Peppol
```
@@ -1,299 +0,0 @@
================================================================
Electronic invoicing (:abbr:`EDI (electronic data interchange)`)
================================================================
EDI, or electronic data interchange, is the inter-company communication of business documents, such
as purchase orders and invoices, in a standard format. Sending documents according to an EDI
standard ensures that the machine receiving the message can interpret the information correctly.
Various EDI file formats exist and are available depending on your company's country.
EDI feature enables automating the administration between companies and might also be required by
some governments for fiscal control or to facilitate the administration.
Electronic invoicing of your documents such as customer invoices, credit notes or vendor bills is
one of the application of EDI.
Odoo supports e-invoicing in many countries. Refer to the country's page for more details:
- :doc:`Argentina <electronic_invoicing/argentina>`
- :doc:`Austria <electronic_invoicing/austria>`
- :doc:`Belgium <electronic_invoicing/belgium>`
- :doc:`Brazil <electronic_invoicing/brazil>`
- :doc:`Chile <electronic_invoicing/chile>`
- :doc:`Colombia <electronic_invoicing/colombia>`
- :doc:`Croatia <electronic_invoicing/croatia>`
- :doc:`Denmark <electronic_invoicing/denmark>`
- :doc:`Ecuador <electronic_invoicing/ecuador>`
- :doc:`Estonia <electronic_invoicing/estonia>`
- :doc:`Finland <electronic_invoicing/finland>`
- :doc:`France <electronic_invoicing/france>`
- :doc:`Germany <electronic_invoicing/germany>`
- :doc:`Hungary <electronic_invoicing/hungary>`
- :doc:`Ireland <electronic_invoicing/ireland>`
- :doc:`Italy <electronic_invoicing/italy>`
- :doc:`Latvia <electronic_invoicing/latvia>`
- :doc:`Lithuania <electronic_invoicing/lithuania>`
- :doc:`Luxembourg <electronic_invoicing/luxembourg>`
- :doc:`Mexico <electronic_invoicing/mexico>`
- :doc:`Netherlands <electronic_invoicing/netherlands>`
- :doc:`Norway <electronic_invoicing/norway>`
- :doc:`Peru <electronic_invoicing/peru>`
- :doc:`Poland <electronic_invoicing/poland>`
- :doc:`Portugal <electronic_invoicing/portugal>`
- :doc:`Romania <electronic_invoicing/romania>`
- :doc:`Slovenia <electronic_invoicing/slovenia>`
- :doc:`Spain <electronic_invoicing/spain>`
- :doc:`Spain - Basque Country <electronic_invoicing/basque_country>`
- :doc:`Uruguay <electronic_invoicing/uruguay>`
.. seealso::
:doc:`Fiscal localizations documentation <../../fiscal_localizations>`
.. _e-invoicing/configuration:
Configuration
=============
By default, the format available in the :ref:`send window <e-invoicing/generation>` depends on your
customer's country.
You can define a specific e-invoicing format for each customer. To do so, go to
:menuselection:`Accounting --> Customers --> Customers`, open the customer form, go to the
:guilabel:`Accounting` tab and select the appropriate format.
.. image:: electronic_invoicing/customer-form.png
:alt: Select an EDI format for a specific customer
National electronic invoicing
-----------------------------
Depending on your company's country (e.g., :doc:`Italy <../../fiscal_localizations/italy>`,
:doc:`Spain <../../fiscal_localizations/spain>`, :doc:`Mexico
<../../fiscal_localizations/mexico>`, etc.), you may be required to issue e-invoicing documents in
a specific format for all your invoices. In this case, you can define a default e-invoicing format
for your sales journal.
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open your sales journal,
go to the :guilabel:`Advanced Settings` tab, and enable the formats you need for this journal.
.. _e-invoicing/generation:
E-invoices generation
=====================
From a confirmed invoice, click :guilabel:`Send & Print` to open the send window. Check the
e-invoicing option to generate and attach the e-invoice file.
.. image:: electronic_invoicing/send-window.png
:alt: The Peppol option is checked and an e-invoicing XML file is attached to the email.
Peppol
======
The `Peppol <https://peppol.org/about/>`_ network ensures the exchange of documents and information
between enterprises and governmental authorities. It is primarily used for electronic invoicing, and
its access points (connectors to the Peppol network) allow enterprises to exchange electronic
documents.
Odoo is an **access point** and an :abbr:`SMP (Service Metadata Publisher)`, enabling electronic
invoicing transactions without the need to send invoices and bills by email or post.
If not done yet, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
.. important::
- Peppol registration is **free** and available in Odoo Community
- You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and
**Refunds** via Peppol.
- You can send and receive in one of the following supported document formats:
**BIS Billing 3.0, XRechnung CIUS, NLCIUS**.
- | The following **countries** are eligible for **Peppol registration in Odoo**:
| Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus,
Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece,
Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia,
Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania,
Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)
Registration
------------
Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the
Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually
save**. Click :guilabel:`Start sending via Peppol` to open the registration form.
.. note::
This registration form also pops up if you choose to :guilabel:`Send & Print` an
invoice via Peppol without completing the registration process.
.. image:: electronic_invoicing/peppol-registration-settings.png
:alt: Peppol registration button
You can register either as a sender or a receiver. A sender can only send invoices and credit notes
on Odoo via Peppol, without ever registering as a Peppol participant on Odoo SMP. If you have an
existing Peppol registration elsewhere that you want to keep, but want to send invoices from your
Odoo database and receive other documents in another software, register as a **sender**.
.. tip::
- You can always register as a sender first and register to receive documents later.
- When registering, you can specify if you would also like to receive documents.
.. image:: electronic_invoicing/peppol-registration-wizard.png
:alt: Peppol registration form
Fill in the following information:
- Check the receiver box if you want to register on Odoo SMP. If you are migrating from another
service provider, insert the :guilabel:`Migration key` from the previous provider (the field
becomes visible after you tick the checkbox).
- :guilabel:`E-Address Scheme`: the Peppol Electronic Address Scheme usually depends on your
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
For example, the preferred EAS code for most companies in Belgium is `0208`.
- :guilabel:`Endpoint`: this is usually a Company Registry number or a VAT number.
- :guilabel:`Phone`: phone number including the country code (e.g., `+32` in Belgium).
- :guilabel:`Email`: this is the email Odoo can use to contact you regarding your Peppol
registration.
If you want to explore or demo Peppol, you can choose to register in :guilabel:`Demo` mode.
Otherwise, select :guilabel:`Live`.
.. tip::
- Selecting :guilabel:`Demo` simulates everything in Odoo. There is no sending, receiving, or
partner verification.
- For **advanced users only**, it is possible to run tests on Peppol's test network. The server
allows to register on Peppol and send/receive test invoices to/from other participants.
To do so, enable the :ref:`developer-mode`, open the **Settings** app, go to
:menuselection:`Technical --> System Parameters`, and search for `account_peppol.edi.mode`.
Click the parameter and change the :guilabel:`Value` to `test`. Go back to the Peppol setup
menu in the **Settings** app. The option :guilabel:`Test` is now available.
.. image:: electronic_invoicing/peppol-system-parameter.png
:alt: Peppol test mode parameter
.. seealso::
- `Peppol EAS - European Commision <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
- `Peppol Endpoint - OpenPeppol eDEC Code Lists <https://docs.peppol.eu/edelivery/codelists/>`_
(open the "Participant Identifier Schemes" as HTML page)
When set up, request a verification code to be sent to you by clicking :guilabel:`Send a
registration code by SMS`. A text message containing a code is sent to the phone number provided to
finalize the verification process.
.. image:: electronic_invoicing/peppol-phone-verification.png
:alt: phone validation
Once you enter the code and click :guilabel:`Register`, your Peppol participant status is updated.
If you chose to only send documents, then the status changes to :guilabel:`Can send but
not receive`.
If you opted to receive documents as well, the status changes to :guilabel:`Can send, pending
registration to receive`. In that case, it should be automatically activated within a day.
Then, set the default journal for receiving vendor bills in the :guilabel:`Incoming Invoices
Journal`.
.. tip::
To manually trigger the cron that checks the registration status, enable the
:ref:`developer-mode`, then go to :menuselection:`Settings --> Technical --> Scheduled Actions`,
and search for the :guilabel:`PEPPOL: update participant status` action.
Your receiver application status should be updated soon after you are registered on the Peppol
network.
.. image:: electronic_invoicing/peppol-receiver.png
:alt: receiver application
All invoices and vendor bills can now be sent directly using the Peppol network.
.. important::
To update the email that Odoo can use to contact you, modify the email and click
:guilabel:`Update contact details`.
Configure Peppol services
-------------------------
Once you are registered on Odoo SMP, the :guilabel:`Configure Peppol Services` button
becomes visible to allow you to enable or disable document formats that other participants
can send you via Peppol. By default, all document formats supported by Odoo are enabled (depending
on the installed modules).
Contact verification
--------------------
Before sending an invoice to a contact using the Peppol network, it is necessary to verify that they
are also registered as a Peppol participant.
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and open the customer's
form. Then go to :menuselection:`Accounting tab --> Electronic Invoicing`, select the correct
format, and make sure their :guilabel:`Peppol EAS code` and the :guilabel:`Endpoint` are filled in.
Then, click :guilabel:`Verify`. If the contact exists on the network, their Peppol endpoint validity
is set to Valid.
.. image:: electronic_invoicing/peppol-contact-verify.png
:alt: verify contact registration
.. important::
While Odoo prefills both the EAS code and the Endpoint number based on the information available
for a contact, it is better to confirm these details directly with the contact.
It is possible to verify the Peppol participant status of several customers at once.
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view.
Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`.
If the participant is registered on the Peppol network but cannot receive the format you selected
for them, the :guilabel:`Peppol endpoint validity` label changes to :guilabel:`Cannot
receive this format`.
.. image:: electronic_invoicing/peppol-participant-format.png
:alt: verify contact ubl format
Send invoices
-------------
Once ready to send an invoice via the Peppol network, simply click :guilabel:`Send & Print` on the
invoice form. To queue multiple invoices, select them in the list view and click
:menuselection:`Actions --> Send & Print`; they will be sent in a batch later on. Both
:guilabel:`BIS Billing 3.0` and :guilabel:`Send via PEPPOL` checkboxes need to be ticked.
.. image:: electronic_invoicing/peppol-send-print.png
:alt: Send peppol invoice
Posted invoices that can be sent via Peppol are marked as :guilabel:`Peppol Ready`.
To display them, use the :guilabel:`Peppol Ready` filter or access the Accounting dashboard and
click :guilabel:`Peppol ready invoices` on the corresponding sales journal.
.. image:: electronic_invoicing/peppol-ready-invoices.png
:alt: Filter Peppol ready invoices
Once the invoices are sent via Peppol, the status is changed to :guilabel:`Processing`. The
status is changed to `Done` after they have been successfully delivered to the contact's Access
Point.
.. image:: electronic_invoicing/peppol-message-processing.png
:alt: Peppol message status
.. tip::
By default, the Peppol status column is hidden on the Invoices list view. You can choose to have
it displayed by selecting it from the optional columns, accessible from the top right corner of
the Invoices list view.
A cron runs regularly to check the status of these invoices. It is possible to check the status
before the cron runs by clicking :guilabel:`Fetch Peppol invoice status` in the corresponding
sales journal on the Accounting dashboard.
.. image:: electronic_invoicing/peppol-fetch-message-status.png
:alt: Fetch invoice Peppol status
Receive vendor bills
--------------------
Once a day, a cron checks whether any new documents have been sent to you via the Peppol network.
These documents are imported, and the corresponding vendor bills are created automatically as
drafts.
.. image:: electronic_invoicing/peppol-receive-bills.png
:alt: peppol receive bills
If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the
Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click
:guilabel:`Fetch from Peppol`.
.. image:: electronic_invoicing/peppol-fetch-bills.png
:alt: Fetch bills from Peppol
@@ -1,40 +1,38 @@
:orphan:
---
orphan: true
---
======================================
Odoo electronic invoicing in Argentina
======================================
# Odoo electronic invoicing in Argentina
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Argentina's regulatory standards and compatible with the requirements set
forth by the `Administración Federal de Ingresos Públicos (AFIP) <https://www.afip.gob.ar/>`_.
forth by the [Administración Federal de Ingresos Públicos (AFIP)](https://www.afip.gob.ar/).
Legal framework for e-invoicing in Argentina
============================================
## Legal framework for e-invoicing in Argentina
In Argentina, e-invoicing is regulated by the :abbr:`AFIP (Administración Federal de Ingresos
In Argentina, e-invoicing is regulated by the {abbr}`AFIP (Administración Federal de Ingresos
Públicos)` and is mandatory for most businesses to ensure tax compliance and transparency. The
primary regulations governing e-invoicing include:
- `General Resolution No. 4290/2018 <https://biblioteca.afip.gob.ar/search/query/norma.aspx?p=t:RAG|n:4290|o:3|a:2018|f:02/08/2018>`_
- [General Resolution No. 4290/2018](https://biblioteca.afip.gob.ar/search/query/norma.aspx?p=t:RAG|n:4290|o:3|a:2018|f:02/08/2018)
which establishes the mandatory use of electronic invoices for specific economic activities and
turnover thresholds.
- Fiscal code regulations: Requires electronic invoices for all VAT-registered businesses, including
B2B, :abbr:`B2G (business-to-government)`, and B2C transactions.
- Implementation of :abbr:`CAE (Código de Autorización Electrónico)`: Every electronic invoice must
include a :abbr:`CAE (Código de Autorización Electrónico)` issued by the :abbr:`AFIP
B2B, {abbr}`B2G (business-to-government)`, and B2C transactions.
- Implementation of {abbr}`CAE (Código de Autorización Electrónico)`: Every electronic invoice must
include a {abbr}`CAE (Código de Autorización Electrónico)` issued by the {abbr}`AFIP
(Administración Federal de Ingresos Públicos)`, ensuring its validity and authenticity.
Compliance with Argentinian e-invoicing regulations
===================================================
## Compliance with Argentinian e-invoicing regulations
Odoo Invoicing simplifies the process of adhering to Argentina's e-invoicing regulations, offering
features designed to ensure compliance:
- **Supported formats**: Odoo supports Argentina's authorized e-invoice formats, including :abbr:`FE
(Factura Electrónica)` with :abbr:`AFIP (Administración Federal de Ingresos Públicos)`-compliant
digital validation, XML with :abbr:`CAE (Código de Autorización Electrónico)` authorization for
real-time integration with :abbr:`AFIP (Administración Federal de Ingresos Públicos)`, and
digitally signed PDF invoices featuring :abbr:`CAE (Código de Autorización Electrónico)` and
- **Supported formats**: Odoo supports Argentina's authorized e-invoice formats, including {abbr}`FE
(Factura Electrónica)` with {abbr}`AFIP (Administración Federal de Ingresos Públicos)`-compliant
digital validation, XML with {abbr}`CAE (Código de Autorización Electrónico)` authorization for
real-time integration with {abbr}`AFIP (Administración Federal de Ingresos Públicos)`, and
digitally signed PDF invoices featuring {abbr}`CAE (Código de Autorización Electrónico)` and
QR codes for secure validation.
- **Secure storage and retrieval**: Complying with Argentinas ten-year storage requirement, Odoo
provides tamper-proof archiving and easy retrieval for audits or tax inspections.
@@ -42,13 +40,15 @@ features designed to ensure compliance:
regulations by automatically calculating VAT, incorporating it into invoices, and adhering to
legal reporting requirements for accurate tax submissions.
.. seealso::
:doc:`Argentinian fiscal localization documentation <../../../fiscal_localizations/argentina>`
:::{seealso}
{doc}`Argentinian fiscal localization documentation <../../../fiscal_localizations/argentina>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides a general overview of Argentine e-invoicing laws and how Odoos invoicing
module supports compliance with AFIP regulations and the Fiscal Code. It is not intended as legal
advice. We recommend consulting with a tax advisor or legal professional familiar with
Argentinian e-invoicing regulations to ensure compliance tailored to your specific business
needs.
:::
This page provides a general overview of Argentine e-invoicing laws and how Odoos invoicing
module supports compliance with AFIP regulations and the Fiscal Code. It is not intended as legal
advice. We recommend consulting with a tax advisor or legal professional familiar with
Argentinian e-invoicing regulations to ensure compliance tailored to your specific business
needs.
@@ -0,0 +1,51 @@
---
orphan: true
---
# Odoo electronic invoicing in Austria
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Austria's regulatory standards, and compatible with the European [Peppol](https://peppol.org/about/) framework.
## Legal framework for e-invoicing in Austria
In Austria, businesses must adhere to e-invoicing laws that ensure secure, authentic, and storable
transactions. The main regulation governing e-invoicing requirements in Austria is the [Austrian VAT
Act (UStG)](https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10004873)
and its related e-invoicing standards for public procurement ([BGBI. I Nr. 32/2019](https://360.lexisnexis.at/d/rechtsnorm-ris/32_bundesgesetz_mit_dem_das_beamten_dienstrechtsge/b_bgbl_2019_2019_I_32_46c550bf37)),
which aligns with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055).
These laws mandate that all businesses engaged in {abbr}`B2G (business-to-government)` transactions
must use e-invoicing, and increasingly, e-invoicing is encouraged for B2B transactions to improve
tax compliance and transparency.
## Compliance with Austrian e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Supported format**: Odoo supports standard e-invoice formats such as PDF with digital signatures
and XML in {abbr}`UBL (Universal Business Language)` format, which are fully compatible with
e-rechnung.gv.at, Austria's central electronic invoicing platform for public procurement
transactions. Any platform can be used if connected to the authentication services of the Federal
Service Portal ({abbr}`USP (Unternehmensserviceportal)`) e-rechnung.gv.at for e-invoicing
transmission.
- **Secure storage and retrieval**: In accordance with the Austrian requirement to store invoices
for a minimum of seven years, Odoo securely archives all invoices in a tamper-proof system,
ensuring that they can be easily retrieved during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing helps businesses stay in line with
Austrian VAT requirements by automatically calculating and including VAT in invoices and ensuring
that each invoice follows the legal format for B2B and {abbr}`B2G (business-to-government)`
transactions.
:::{seealso}
{doc}`Austria fiscal localization documentation <../../../fiscal_localizations/austria>`
:::
:::{admonition} Disclaimer
This page provides an overview of Austrian e-invoicing laws and how Odoo Invoicing supports
compliance with the Austrian VAT Act (UStG) and related regulations. It does does not constitute
legal advice. We recommend consulting with a tax advisor or legal professional familiar with
Austrian e-invoicing regulations to ensure full compliance tailored to your specific business
requirements.
:::
@@ -1,52 +0,0 @@
:orphan:
====================================
Odoo electronic invoicing in Austria
====================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Austria's regulatory standards, and compatible with the European `Peppol
<https://peppol.org/about/>`_ framework.
Legal framework for e-invoicing in Austria
==========================================
In Austria, businesses must adhere to e-invoicing laws that ensure secure, authentic, and storable
transactions. The main regulation governing e-invoicing requirements in Austria is the `Austrian VAT
Act (UStG) <https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10004873>`_
and its related e-invoicing standards for public procurement (`BGBI. I Nr. 32/2019 <https://360.lexisnexis.at/d/rechtsnorm-ris/32_bundesgesetz_mit_dem_das_beamten_dienstrechtsge/b_bgbl_2019_2019_I_32_46c550bf37>`_),
which aligns with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_.
These laws mandate that all businesses engaged in :abbr:`B2G (business-to-government)` transactions
must use e-invoicing, and increasingly, e-invoicing is encouraged for B2B transactions to improve
tax compliance and transparency.
Compliance with Austrian e-invoicing regulations
================================================
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Supported format**: Odoo supports standard e-invoice formats such as PDF with digital signatures
and XML in :abbr:`UBL (Universal Business Language)` format, which are fully compatible with
e-rechnung.gv.at, Austria's central electronic invoicing platform for public procurement
transactions. Any platform can be used if connected to the authentication services of the Federal
Service Portal (:abbr:`USP (Unternehmensserviceportal)`) e-rechnung.gv.at for e-invoicing
transmission.
- **Secure storage and retrieval**: In accordance with the Austrian requirement to store invoices
for a minimum of seven years, Odoo securely archives all invoices in a tamper-proof system,
ensuring that they can be easily retrieved during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing helps businesses stay in line with
Austrian VAT requirements by automatically calculating and including VAT in invoices and ensuring
that each invoice follows the legal format for B2B and :abbr:`B2G (business-to-government)`
transactions.
.. seealso::
:doc:`Austria fiscal localization documentation <../../../fiscal_localizations/austria>`
.. admonition:: Disclaimer
This page provides an overview of Austrian e-invoicing laws and how Odoo Invoicing supports
compliance with the Austrian VAT Act (UStG) and related regulations. It does does not constitute
legal advice. We recommend consulting with a tax advisor or legal professional familiar with
Austrian e-invoicing regulations to ensure full compliance tailored to your specific business
requirements.
@@ -1,27 +1,25 @@
:orphan:
---
orphan: true
---
===============================================
Odoo electronic invoicing in the Basque Country
===============================================
# Odoo electronic invoicing in the Basque Country
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Basque Country's regulatory standards.
Legal framework for e-invoicing in the Basque Country
=====================================================
## Legal framework for e-invoicing in the Basque Country
In the Basque Country, electronic invoicing is governed by Spanish national legislation and regional
implementations, including the `Ley de Facturación Electrónica <https://www.facturae.gob.es/face/Paginas/FACE.aspx>`_
and compliance with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_.
For :abbr:`B2G (business-to-government)` transactions, e-invoicing is mandatory, and suppliers must
implementations, including the [Ley de Facturación Electrónica](https://www.facturae.gob.es/face/Paginas/FACE.aspx)
and compliance with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055).
For {abbr}`B2G (business-to-government)` transactions, e-invoicing is mandatory, and suppliers must
submit e-invoices through the FACe platform or the regional system, e-Factura Euskadi, specifically
designed for the Basque Country. These platforms ensure the secure submission of invoices to public
administrations. While B2B e-invoicing is not yet mandatory, its use is growing, supported by the
implementation of the TicketBAI system, which is specific to the Basque Country and promotes tax
transparency.
Compliance with Basque e-invoicing regulations
==============================================
## Compliance with Basque e-invoicing regulations
Odoo Invoicing is fully prepared to help businesses meet the Basque Country's e-invoicing
requirements while complying with broader Spanish and EU standards. Here is how Odoo ensures
@@ -41,10 +39,11 @@ compliance:
invoices adhere to Basque Country VAT requirements for B2G and B2B transactions while facilitating
compliance with the SII (Immediate Supply of Information) system for real-time VAT reporting.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of e-invoicing laws in the Basque Country and how Odoo Invoicing
supports compliance with the Ley de Facturación Electrónica, e-Factura Euskadi, TicketBAI system,
and FACe platform. It is not intended as legal advice. We recommend consulting with a tax advisor
or legal professional familiar with e-invoicing regulations in the Basque Country to ensure
compliance tailored to your specific business needs.
:::
This page provides an overview of e-invoicing laws in the Basque Country and how Odoo Invoicing
supports compliance with the Ley de Facturación Electrónica, e-Factura Euskadi, TicketBAI system,
and FACe platform. It is not intended as legal advice. We recommend consulting with a tax advisor
or legal professional familiar with e-invoicing regulations in the Basque Country to ensure
compliance tailored to your specific business needs.
@@ -1,34 +1,31 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Belgium
====================================
# Odoo electronic invoicing in Belgium
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Belgium's regulatory standards, and compatible with the European `Peppol
<https://peppol.org/about/>`_ framework.
solutions tailored to Belgium's regulatory standards, and compatible with the European [Peppol](https://peppol.org/about/) framework.
Legal framework for e-invoicing in Belgium
==========================================
## Legal framework for e-invoicing in Belgium
In Belgium, businesses must adhere to e-invoicing laws that ensure secure, authentic, and storable
transactions. The primary regulation governing e-invoicing requirements in Belgium is the `Belgian
VAT Code <https://finances.belgium.be/fr/sur_le_spf/r%C3%A9glementation/r%C3%A9glementation-2023/tva>`_
and its related `e-invoicing standards for public procurement <https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&sum_date=&pd_search=2023-09-21&numac_search=2023045155&page=1&lg_txt=F&caller=list&2023045155=0&trier=promulgation&fr=f&nm_ecran=2023045155&choix1=et&choix2=et>`_,
which align with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_.
These laws mandate that all businesses engaged in :abbr:`B2G (business-to-government)` transactions
transactions. The primary regulation governing e-invoicing requirements in Belgium is the [Belgian
VAT Code](https://finances.belgium.be/fr/sur_le_spf/r%C3%A9glementation/r%C3%A9glementation-2023/tva)
and its related [e-invoicing standards for public procurement](https://www.ejustice.just.fgov.be/cgi_loi/article.pl?language=fr&sum_date=&pd_search=2023-09-21&numac_search=2023045155&page=1&lg_txt=F&caller=list&2023045155=0&trier=promulgation&fr=f&nm_ecran=2023045155&choix1=et&choix2=et),
which align with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055).
These laws mandate that all businesses engaged in {abbr}`B2G (business-to-government)` transactions
must use e-invoicing via Mercurius, Belgium's official electronic invoicing platform for public
procurement transactions. Additionally, Belgium is part of the Peppol network, which provides a
standardized framework for cross-border e-invoicing across Europe. Increasingly, e-invoicing is also
encouraged for B2B transactions to enhance tax compliance and transparency.
Compliance with Belgian e-invoicing regulations
===============================================
## Compliance with Belgian e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Peppol-compliant formats**: Odoo supports the standardized XML (:abbr:`UBL (Universal Business
- **Peppol-compliant formats**: Odoo supports the standardized XML ({abbr}`UBL (Universal Business
Language)`) format for Peppol, ensuring compliance with both Belgian and European e-invoicing
standards. This ensures your invoices meet the legal requirements for public procurement in
Belgium and other EU countries. Odoo enables businesses to send e-invoices directly to government
@@ -39,15 +36,17 @@ invoices. Here is how Odoo ensures compliance:
that they can be easily retrieved during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing helps businesses comply with Belgian
VAT requirements by automatically calculating and including VAT in invoices and ensuring that each
invoice follows the legal format for B2B and :abbr:`B2G (business-to-government)` transactions.
invoice follows the legal format for B2B and {abbr}`B2G (business-to-government)` transactions.
.. seealso::
:doc:`Belgium fiscal localization documentation <../../../fiscal_localizations/belgium>`
:::{seealso}
{doc}`Belgium fiscal localization documentation <../../../fiscal_localizations/belgium>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Belgian e-invoicing laws and how Odoo Invoicing supports
compliance with the Belgian VAT Code, Peppol standards, and related regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Belgian e-invoicing regulations to ensure full compliance tailored to your specific
business requirements.
:::
This page provides an overview of Belgian e-invoicing laws and how Odoo Invoicing supports
compliance with the Belgian VAT Code, Peppol standards, and related regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Belgian e-invoicing regulations to ensure full compliance tailored to your specific
business requirements.
@@ -0,0 +1,53 @@
---
orphan: true
---
# Odoo electronic invoicing in Brazil
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Brazil's regulatory standards and compatible with the requirements set
forth by the [Secretaria da Fazenda (SEFAZ)](https://www.gov.br/receitafederal/pt-br).
## Legal framework for e-invoicing in Brazil
In Brazil, e-invoicing is highly regulated and mandatory for most businesses to ensure tax
compliance and transparency. The key regulations governing e-invoicing include:
- {abbr}`NF-e (Nota Fiscal Eletrônica)`: A mandatory e-invoice for goods and services used in B2B
and {abbr}`B2G (business-to-government)` transactions.
- {abbr}`CT-e (Conhecimento de Transporte Eletrônico)`: Specific to freight and logistics services.
- {abbr}`NFS-e (Nota Fiscal de Serviços Eletrônica)`: Issued for service-based transactions, with
implementation varying by municipality.
- Integration with {abbr}`SEFAZ (Secretaria da Fazenda)`: Every electronic invoice must be
authorized by {abbr}`SEFAZ (Secretaria da Fazenda)` and issued with a unique authorization code
(Autorização de Uso).
## Compliance with Brazilian e-invoicing regulations
Odoo Invoicing simplifies the process of adhering to Brazils complex e-invoicing regulations,
offering features designed to ensure compliance:
- **Supported formats**: Odoo supports Brazil's authorized e-invoice formats, including {abbr}`NF-e
(Nota Fiscal Eletrônica)` for goods and services compliant with {abbr}`SEFAZ (Secretaria da
Fazenda)`, {abbr}`NFS-e (Nota Fiscal de Serviços Eletrônica)` customizable for municipal
requirements, {abbr}`CT-e (Conhecimento de Transporte Eletrônico)` for logistics and
transportation, and digital PDF invoices with {abbr}`SEFAZ (Secretaria da Fazenda)` authorization
codes and QR codes.
- **Secure storage and retrieval**: Complying with Brazil's five-year storage requirement, Odoo
offers tamper-proof archiving for easy retrieval during audits or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for ICMS, IPI, and
ISS, ensuring compliance with regional tax rules and generating reports compatible with
{abbr}`SEFAZ (Secretaria da Fazenda)` and municipal requirements.
:::{seealso}
{doc}`Brazilian fiscal localization documentation <../../../fiscal_localizations/brazil>`
:::
:::{admonition} Disclaimer
This page provides a general overview of Brazilian e-invoicing laws and how Odoos invoicing
module supports compliance with {abbr}`SEFAZ (Secretaria da Fazenda)` regulations. It is not
intended as legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Brazilian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
@@ -1,53 +0,0 @@
:orphan:
===================================
Odoo electronic invoicing in Brazil
===================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Brazil's regulatory standards and compatible with the requirements set
forth by the `Secretaria da Fazenda (SEFAZ) <https://www.gov.br/receitafederal/pt-br>`_.
Legal framework for e-invoicing in Brazil
=========================================
In Brazil, e-invoicing is highly regulated and mandatory for most businesses to ensure tax
compliance and transparency. The key regulations governing e-invoicing include:
- :abbr:`NF-e (Nota Fiscal Eletrônica)`: A mandatory e-invoice for goods and services used in B2B
and :abbr:`B2G (business-to-government)` transactions.
- :abbr:`CT-e (Conhecimento de Transporte Eletrônico)`: Specific to freight and logistics services.
- :abbr:`NFS-e (Nota Fiscal de Serviços Eletrônica)`: Issued for service-based transactions, with
implementation varying by municipality.
- Integration with :abbr:`SEFAZ (Secretaria da Fazenda)`: Every electronic invoice must be
authorized by :abbr:`SEFAZ (Secretaria da Fazenda)` and issued with a unique authorization code
(Autorização de Uso).
Compliance with Brazilian e-invoicing regulations
=================================================
Odoo Invoicing simplifies the process of adhering to Brazils complex e-invoicing regulations,
offering features designed to ensure compliance:
- **Supported formats**: Odoo supports Brazil's authorized e-invoice formats, including :abbr:`NF-e
(Nota Fiscal Eletrônica)` for goods and services compliant with :abbr:`SEFAZ (Secretaria da
Fazenda)`, :abbr:`NFS-e (Nota Fiscal de Serviços Eletrônica)` customizable for municipal
requirements, :abbr:`CT-e (Conhecimento de Transporte Eletrônico)` for logistics and
transportation, and digital PDF invoices with :abbr:`SEFAZ (Secretaria da Fazenda)` authorization
codes and QR codes.
- **Secure storage and retrieval**: Complying with Brazil's five-year storage requirement, Odoo
offers tamper-proof archiving for easy retrieval during audits or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for ICMS, IPI, and
ISS, ensuring compliance with regional tax rules and generating reports compatible with
:abbr:`SEFAZ (Secretaria da Fazenda)` and municipal requirements.
.. seealso::
:doc:`Brazilian fiscal localization documentation <../../../fiscal_localizations/brazil>`
.. admonition:: Disclaimer
This page provides a general overview of Brazilian e-invoicing laws and how Odoos invoicing
module supports compliance with :abbr:`SEFAZ (Secretaria da Fazenda)` regulations. It is not
intended as legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Brazilian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -0,0 +1,51 @@
---
orphan: true
---
# Odoo electronic invoicing in Chile
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Chile's regulatory requirements and compatible with standards set by the
[Servicio de Impuestos Internos (SII)](https://homer.sii.cl/).
## Legal framework for e-invoicing in Chile
Chile is a pioneer in mandatory electronic invoicing, with comprehensive regulations to ensure tax
compliance and enhance transparency. Key elements include:
- **Factura Electrónica**: Mandatory for most businesses to issue invoices digitally through the
{abbr}`SII (Servicio de Impuestos Internos)`'s system.
- **Boleta Electrónica**: Required for retail transactions to report sales and tax information.
- **Guía de Despacho Electrónica**: Necessary for tracking the transport of goods.
- **Integration with SII**: All electronic invoices must be validated by the {abbr}`SII (Servicio
de Impuestos Internos)`, assigned a unique Folio authorization code, and reported for tax
purposes.
## Compliance with Chilean e-invoicing regulations
Odoo Invoicing simplifies adherence to Chile's e-invoicing requirements with features designed to
ensure compliance:
- **Supported formats**: Odoo supports all major Chilean e-invoice formats, including Factura
Electrónica, Boleta Electrónica, and Guía de Despacho Electrónica, ensuring {abbr}`SII (Servicio
de Impuestos Internos)` compatibility with digital validation and Folio assignment.
- **Integration with SII**: Odoo seamlessly connects with {abbr}`SII (Servicio de Impuestos
Internos)`'s systems, automating invoice submission and ensuring real-time validation for
compliant issuance.
- **Secure storage and retrieval**: Complying with Chile's mandatory storage period of six years,
Odoo provides tamper-proof archiving for invoices, enabling easy access for audits or tax
inspections.
- **Automatic tax calculation and reporting**: Odoo automates calculations for VAT (IVA) and other
applicable taxes, ensuring accurate invoicing and adherence to Chile's tax reporting standards.
:::{seealso}
{doc}`Chilean fiscal localization documentation <../../../fiscal_localizations/chile>`
:::
:::{admonition} Disclaimer
This page provides a general overview of Chilean e-invoicing laws and how Odoo supports
compliance with {abbr}`SII (Servicio de Impuestos Internos)` regulations. It is not intended as
legal or tax advice. We recommend consulting a tax advisor or legal professional familiar with
Chilean e-invoicing regulations to ensure compliance tailored to your specific business needs.
:::
@@ -1,51 +0,0 @@
:orphan:
==================================
Odoo electronic invoicing in Chile
==================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Chile's regulatory requirements and compatible with standards set by the
`Servicio de Impuestos Internos (SII) <https://homer.sii.cl/>`_.
Legal framework for e-invoicing in Chile
========================================
Chile is a pioneer in mandatory electronic invoicing, with comprehensive regulations to ensure tax
compliance and enhance transparency. Key elements include:
- **Factura Electrónica**: Mandatory for most businesses to issue invoices digitally through the
:abbr:`SII (Servicio de Impuestos Internos)`'s system.
- **Boleta Electrónica**: Required for retail transactions to report sales and tax information.
- **Guía de Despacho Electrónica**: Necessary for tracking the transport of goods.
- **Integration with SII**: All electronic invoices must be validated by the :abbr:`SII (Servicio
de Impuestos Internos)`, assigned a unique Folio authorization code, and reported for tax
purposes.
Compliance with Chilean e-invoicing regulations
===============================================
Odoo Invoicing simplifies adherence to Chile's e-invoicing requirements with features designed to
ensure compliance:
- **Supported formats**: Odoo supports all major Chilean e-invoice formats, including Factura
Electrónica, Boleta Electrónica, and Guía de Despacho Electrónica, ensuring :abbr:`SII (Servicio
de Impuestos Internos)` compatibility with digital validation and Folio assignment.
- **Integration with SII**: Odoo seamlessly connects with :abbr:`SII (Servicio de Impuestos
Internos)`'s systems, automating invoice submission and ensuring real-time validation for
compliant issuance.
- **Secure storage and retrieval**: Complying with Chile's mandatory storage period of six years,
Odoo provides tamper-proof archiving for invoices, enabling easy access for audits or tax
inspections.
- **Automatic tax calculation and reporting**: Odoo automates calculations for VAT (IVA) and other
applicable taxes, ensuring accurate invoicing and adherence to Chile's tax reporting standards.
.. seealso::
:doc:`Chilean fiscal localization documentation <../../../fiscal_localizations/chile>`
.. admonition:: Disclaimer
This page provides a general overview of Chilean e-invoicing laws and how Odoo supports
compliance with :abbr:`SII (Servicio de Impuestos Internos)` regulations. It is not intended as
legal or tax advice. We recommend consulting a tax advisor or legal professional familiar with
Chilean e-invoicing regulations to ensure compliance tailored to your specific business needs.
@@ -0,0 +1,50 @@
---
orphan: true
---
# Odoo electronic invoicing in Colombia
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Colombia's regulatory requirements and fully compatible with the
guidelines established by the [Dirección de Impuestos y Aduanas Nacionales (DIAN)](https://www.dian.gov.co/).
## Legal framework for e-invoicing in Colombia
Colombia has implemented mandatory e-invoicing for most businesses to enhance tax compliance and
improve transparency. Key elements include:
- **Factura Electrónica**: Mandatory for B2B, B2C, and {abbr}`B2G (business-to-government)`
transactions, requiring compliance with {abbr}`DIAN (Dirección de Impuestos y Aduanas
Nacionales)`'s technical specifications.
- **Integration with DIAN**: All electronic invoices must be submitted to {abbr}`DIAN (Dirección de
Impuestos y Aduanas Nacionales)` for validation, where they are assigned a unique {abbr}`CUFE
(Código Único de Factura Electrónica)` authorization code.
- **Adoption of XML Standards**: Colombian e-invoicing uses XML as the standard format for
electronic invoices, ensuring interoperability and standardized reporting.
## Compliance with Colombian e-invoicing regulations
Odoo Invoicing simplifies the complexities of e-invoicing compliance in Colombia, offering tailored
features:
- **Supported formats**: Odoo supports Factura Electrónica in {abbr}`DIAN (Dirección de Impuestos y
Aduanas Nacionales)`-compliant XML formats, including legally required {abbr}`CUFE (Código Único
de Factura Electrónica)` codes and additional fields for B2B, B2C, and {abbr}`B2G
(business-to-government)` transactions.
- **Secure storage and retrieval**: In compliance with Colombia's six-year mandatory storage
requirement, Odoo provides tamper-proof invoice archiving, ensuring easy access for audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with DIAN's tax reporting standards.
:::{seealso}
{doc}`Colombian fiscal localization documentation <../../../fiscal_localizations/colombia>`
:::
:::{admonition} Disclaimer
This page provides a general overview of Colombian e-invoicing regulations and how Odoo supports
compliance with DIAN requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Colombian e-invoicing
regulations to ensure compliance tailored to your specific business needs.
:::
@@ -1,51 +0,0 @@
:orphan:
=====================================
Odoo electronic invoicing in Colombia
=====================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Colombia's regulatory requirements and fully compatible with the
guidelines established by the `Dirección de Impuestos y Aduanas Nacionales (DIAN)
<https://www.dian.gov.co/>`_.
Legal framework for e-invoicing in Colombia
===========================================
Colombia has implemented mandatory e-invoicing for most businesses to enhance tax compliance and
improve transparency. Key elements include:
- **Factura Electrónica**: Mandatory for B2B, B2C, and :abbr:`B2G (business-to-government)`
transactions, requiring compliance with :abbr:`DIAN (Dirección de Impuestos y Aduanas
Nacionales)`'s technical specifications.
- **Integration with DIAN**: All electronic invoices must be submitted to :abbr:`DIAN (Dirección de
Impuestos y Aduanas Nacionales)` for validation, where they are assigned a unique :abbr:`CUFE
(Código Único de Factura Electrónica)` authorization code.
- **Adoption of XML Standards**: Colombian e-invoicing uses XML as the standard format for
electronic invoices, ensuring interoperability and standardized reporting.
Compliance with Colombian e-invoicing regulations
=================================================
Odoo Invoicing simplifies the complexities of e-invoicing compliance in Colombia, offering tailored
features:
- **Supported formats**: Odoo supports Factura Electrónica in :abbr:`DIAN (Dirección de Impuestos y
Aduanas Nacionales)`-compliant XML formats, including legally required :abbr:`CUFE (Código Único
de Factura Electrónica)` codes and additional fields for B2B, B2C, and :abbr:`B2G
(business-to-government)` transactions.
- **Secure storage and retrieval**: In compliance with Colombia's six-year mandatory storage
requirement, Odoo provides tamper-proof invoice archiving, ensuring easy access for audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with DIAN's tax reporting standards.
.. seealso::
:doc:`Colombian fiscal localization documentation <../../../fiscal_localizations/colombia>`
.. admonition:: Disclaimer
This page provides a general overview of Colombian e-invoicing regulations and how Odoo supports
compliance with DIAN requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Colombian e-invoicing
regulations to ensure compliance tailored to your specific business needs.
@@ -1,35 +1,33 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Croatia
====================================
# Odoo electronic invoicing in Croatia
Odoo Invoicing is our trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Croatia's regulatory standards.
Legal framework for e-invoicing in Croatia
==========================================
## Legal framework for e-invoicing in Croatia
In Croatia, businesses must comply with e-invoicing regulations to ensure secure, authentic, and
storable transactions. The main legal framework governing e-invoicing in Croatia is the
Fiscalization Act and its related requirements for public procurement, which are aligned with `EU
Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_ on
e-invoicing in public procurement. Under these regulations, all businesses involved in :abbr:`B2G
(business-to-government)` transactions are required to use electronic invoicing via the :abbr:`CIS
Fiscalization Act and its related requirements for public procurement, which are aligned with [EU
Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055) on
e-invoicing in public procurement. Under these regulations, all businesses involved in {abbr}`B2G
(business-to-government)` transactions are required to use electronic invoicing via the {abbr}`CIS
(Central Invoice System)`, Croatias official platform for public sector e-invoicing. Croatia is
also part of the Peppol network, facilitating standardized cross-border e-invoicing within the
European Union. Furthermore, e-invoicing is increasingly encouraged for B2B transactions, promoting
greater transparency and tax compliance.
Compliance with Croatian e-invoicing regulations
================================================
## Compliance with Croatian e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports standard e-invoice formats, such as PDF with digital
signatures and XML in :abbr:`UBL (Universal Business Language)` format, which are fully compatible
with Croatia's :abbr:`CIS (Central Invoice System)` for public procurement transactions.
signatures and XML in {abbr}`UBL (Universal Business Language)` format, which are fully compatible
with Croatia's {abbr}`CIS (Central Invoice System)` for public procurement transactions.
Additionally, Odoo enables transmission of e-invoices through any platform connected to the Peppol
network, as the *Servis eRačun za državu* reached via Peppol, ensuring compliance with both
Croatian and EU standards.
@@ -38,13 +36,14 @@ invoices. Here is how Odoo ensures compliance:
they can be easily retrieved during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing helps businesses stay in line with
Croatian VAT requirements by automatically calculating and including VAT in invoices and ensuring
that each invoice follows the legal format for both B2B and :abbr:`B2G (business-to-government)`
that each invoice follows the legal format for both B2B and {abbr}`B2G (business-to-government)`
transactions.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Croatian e-invoicing laws and how Odoo Invoicing supports
compliance with the Fiscalization Act, Peppol standards, and other relevant regulations. It does
not constitute legal adviceWe recommend consulting with a tax advisor or legal professional
familiar with Croatian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
This page provides an overview of Croatian e-invoicing laws and how Odoo Invoicing supports
compliance with the Fiscalization Act, Peppol standards, and other relevant regulations. It does
not constitute legal adviceWe recommend consulting with a tax advisor or legal professional
familiar with Croatian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -1,26 +1,24 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Denmark
====================================
# Odoo electronic invoicing in Denmark
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Denmark's regulatory standards.
Legal framework for e-invoicing in Denmark
==========================================
## Legal framework for e-invoicing in Denmark
In Denmark, e-invoicing is governed by `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
mandating the use of e-invoicing for :abbr:`B2G (business-to-government)` transactions. Danish
In Denmark, e-invoicing is governed by [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
mandating the use of e-invoicing for {abbr}`B2G (business-to-government)` transactions. Danish
public sector entities require invoices to be submitted through NemHandel, the national e-invoicing
platform, using the OIOUBL format (a local version of :abbr:`UBL (Universal Business Language)` and
platform, using the OIOUBL format (a local version of {abbr}`UBL (Universal Business Language)` and
XML). Denmark is also a key member of the Peppol network, enabling streamlined, standardized, and
secure cross-border e-invoicing for transactions within the European Union. While e-invoicing is not
mandatory for B2B transactions, its adoption is growing as businesses seek greater efficiency and
compliance.
Compliance with Danish e-invoicing regulations
==============================================
## Compliance with Danish e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
@@ -38,10 +36,11 @@ invoices. Here is how Odoo ensures compliance:
ensures invoices are formatted to meet Denmarks legal requirements for B2G and B2B transactions,
helping businesses comply with local tax laws.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Danish e-invoicing laws and how Odoo Invoicing supports
compliance with NemHandel, OIOUBL standards, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Danish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
:::
This page provides an overview of Danish e-invoicing laws and how Odoo Invoicing supports
compliance with NemHandel, OIOUBL standards, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Danish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
@@ -1,36 +1,33 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Ecuador
====================================
# Odoo electronic invoicing in Ecuador
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Ecuador's regulatory requirements and fully compatible with the
guidelines established by the `Servicio de Rentas Internas (SRI)
<https://www.sri.gob.ec/web/intersri/home>`_.
guidelines established by the [Servicio de Rentas Internas (SRI)](https://www.sri.gob.ec/web/intersri/home).
Legal framework for e-invoicing in Ecuador
==========================================
## Legal framework for e-invoicing in Ecuador
Ecuador has implemented mandatory electronic invoicing for most businesses aimed to enhance tax
compliance and transparency. Key elements include:
- **Factura Electrónica**: All businesses must issue electronic invoices in XML format for B2B, B2C,
and :abbr:`B2G (business-to-government)` transactions, ensuring compliance with :abbr:`SRI
and {abbr}`B2G (business-to-government)` transactions, ensuring compliance with {abbr}`SRI
(Servicio de Rentas Internas)`'s technical specifications.
- **Transmission Requirements**: E-invoices must be transmitted to the SRI within 24 hours of
issuance.
- **Record Storage**: E-invoices, including the :abbr:`SRI (Servicio de Rentas Internas)`'s
- **Record Storage**: E-invoices, including the {abbr}`SRI (Servicio de Rentas Internas)`'s
acceptance messages, must be stored for a minimum of seven years.
Compliance with Ecuadorian e-invoicing regulations
==================================================
## Compliance with Ecuadorian e-invoicing regulations
Odoo Invoicing simplifies compliance with Ecuador's e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports the Ecuadorian e-invoice format (XML) and ensures
compatibility with the :abbr:`SRI (Servicio de Rentas Internas)`'s system for validation and
compatibility with the {abbr}`SRI (Servicio de Rentas Internas)`'s system for validation and
authorization, including the necessary digital signature.
- **Secure storage and retrieval**: In compliance with Ecuador's seven-year storage requirement,
Odoo offers tamper-proof archiving so that invoices can be easily accessed during audits or
@@ -39,12 +36,14 @@ features:
other applicable taxes, ensuring accurate invoicing and adherence to Ecuador's tax reporting
standards.
.. seealso::
:doc:`Ecuadorian fiscal localization documentation <../../../fiscal_localizations/ecuador>`
:::{seealso}
{doc}`Ecuadorian fiscal localization documentation <../../../fiscal_localizations/ecuador>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides a general overview of Ecuadorian e-invoicing regulations and how Odoo supports
compliance with SRI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Ecuador's e-invoicing
regulations to ensure compliance tailored to your specific business needs.
:::
This page provides a general overview of Ecuadorian e-invoicing regulations and how Odoo supports
compliance with SRI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Ecuador's e-invoicing
regulations to ensure compliance tailored to your specific business needs.
@@ -1,32 +1,30 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Estonia
====================================
# Odoo electronic invoicing in Estonia
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Estonia's regulatory standards.
Legal framework for e-invoicing in Estonia
==========================================
## Legal framework for e-invoicing in Estonia
In Estonia, businesses must comply with e-invoicing regulations to ensure secure, authentic, and
storable transactions. The main legal framework governing e-invoicing in Estonia is the `Accounting
Act <https://www.riigiteataja.ee/en/eli/ee/514052021001/consolide/current>`_ and its provisions
related to e-invoicing, which align with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_
on e-invoicing in public procurement. Since 2019, :abbr:`B2G (business-to-government)` transactions
storable transactions. The main legal framework governing e-invoicing in Estonia is the [Accounting
Act](https://www.riigiteataja.ee/en/eli/ee/514052021001/consolide/current) and its provisions
related to e-invoicing, which align with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055)
on e-invoicing in public procurement. Since 2019, {abbr}`B2G (business-to-government)` transactions
must use electronic invoices via Estonia's Rik's e-Invoicing System, the government's platform for
public sector e-invoicing. Estonia is also part of the Peppol network, which ensures standardized
cross-border e-invoicing across Europe. Additionally, the use of e-invoicing is encouraged for B2B
transactions, promoting better transparency, efficiency, and compliance with VAT requirements.
Compliance with Estonian e-invoicing regulations
================================================
## Compliance with Estonian e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports standard e-invoice formats, such as XML in :abbr:`UBL
- **Supported formats**: Odoo supports standard e-invoice formats, such as XML in {abbr}`UBL
(Universal Business Language)` format, which is fully compatible with Estonia's Riks e-Invoicing
System for public procurement transactions. Additionally, Odoo enables seamless transmission of
e-invoices through platforms connected to the Peppol network, ensuring compliance with Estonian
@@ -35,13 +33,14 @@ invoices. Here is how Odoo ensures compliance:
minimum of seven years, Odoo securely archives all invoices in a tamper-proof system, making them
easily retrievable during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
invoices are formatted to meet Denmarks legal requirements for :abbr:`B2G
invoices are formatted to meet Denmarks legal requirements for {abbr}`B2G
(business-to-government)` and B2B transactions, helping businesses compliant with local tax laws.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Estonian e-invoicing laws and how Odoo Invoicing supports
compliance with the Accounting Act, Peppol standards, and other relevant regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Estonian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
This page provides an overview of Estonian e-invoicing laws and how Odoo Invoicing supports
compliance with the Accounting Act, Peppol standards, and other relevant regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Estonian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -1,34 +1,32 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Finland
====================================
# Odoo electronic invoicing in Finland
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Finland's regulatory standards.
Legal framework for e-invoicing in Finland
==========================================
## Legal framework for e-invoicing in Finland
In Finland, businesses must comply with e-invoicing regulations to ensure secure, authentic, and
storable transactions. The primary legal framework governing e-invoicing is the `Act on Electronic
Invoicing (241/2019) <https://www.finlex.fi/fi/laki/alkup/2019/20190241#Pidp446241968>`_, which
aligns with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_
on electronic invoicing in public procurement. Under Finnish law, all :abbr:`B2G
storable transactions. The primary legal framework governing e-invoicing is the [Act on Electronic
Invoicing (241/2019)](https://www.finlex.fi/fi/laki/alkup/2019/20190241#Pidp446241968), which
aligns with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055)
on electronic invoicing in public procurement. Under Finnish law, all {abbr}`B2G
(business-to-government)` transactions require the use of electronic invoices via Apix Messaging or
other Peppol-connected platforms, Finlands standard for public sector e-invoicing. Finland is also
part of the Peppol network, ensuring interoperability and standardization for cross-border
e-invoicing within the EU. Additionally, e-invoicing is widely adopted for B2B transactions,
promoting efficient processes and improved tax compliance.
Compliance with Finnish e-invoicing regulations
===============================================
## Compliance with Finnish e-invoicing regulations
Odoo invoicing module makes it easy for businesses to adhere to Finland's e-invoicing regulations.
Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the e-invoicing formats widely used in Finland, including
TEAPPSXML, Finvoice, and the standardized XML in :abbr:`UBL (Universal Business Language)` format
TEAPPSXML, Finvoice, and the standardized XML in {abbr}`UBL (Universal Business Language)` format
required for Peppol compliance. This ensures compatibility with Finnish platforms such as Handi
for public sector invoicing and eKuitti for enhanced receipt management and e-invoicing.
- **Secure storage and retrieval**: In accordance with Finnish regulations requiring businesses to
@@ -36,12 +34,13 @@ Here is how Odoo ensures compliance:
system, allowing for easy retrieval during audits.
- **Automatic VAT calculation and reporting**: Odoo Invoicing ensures compliance with Finnish VAT
requirements by automatically calculating and including VAT in invoices and formatting them to
meet the legal standards for both B2B and :abbr:`B2G (business-to-government)` transactions.
meet the legal standards for both B2B and {abbr}`B2G (business-to-government)` transactions.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Finnish e-invoicing laws and how Odoo Invoicing supports
compliance with the Act on Electronic Invoicing, Peppol standards, and other relevant
regulations. It is not intended as legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Finnish e-invoicing regulations to ensure compliance tailored to
your specific business needs.
:::
This page provides an overview of Finnish e-invoicing laws and how Odoo Invoicing supports
compliance with the Act on Electronic Invoicing, Peppol standards, and other relevant
regulations. It is not intended as legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Finnish e-invoicing regulations to ensure compliance tailored to
your specific business needs.
@@ -1,32 +1,29 @@
:orphan:
---
orphan: true
---
===================================
Odoo electronic invoicing in France
===================================
# Odoo electronic invoicing in France
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to France's regulatory standards.
Legal framework for e-invoicing in France
=========================================
## Legal framework for e-invoicing in France
In France, electronic invoicing is regulated by the `Ordonnance n° 2019-359
<https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000038410002>`_, which is aligned with `EU Directive
2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_, and requires
mandatory :abbr:`B2G (business-to-government)` e-invoicing through the Chorus Pro platform. Starting
In France, electronic invoicing is regulated by the [Ordonnance n° 2019-359](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000038410002), which is aligned with [EU Directive
2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055), and requires
mandatory {abbr}`B2G (business-to-government)` e-invoicing through the Chorus Pro platform. Starting
in 2024, B2B e-invoicing will be progressively implemented, becoming mandatory for all businesses by
2026. This reform aims to combat tax fraud, improve VAT collection, and enhance business
2026\. This reform aims to combat tax fraud, improve VAT collection, and enhance business
transparency. The Factur-X hybrid format (a combination of PDF and XML data) is widely used in
France, ensuring compliance with both local and European e-invoicing standards.
Compliance with French e-invoicing regulations
==============================================
## Compliance with French e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the Factur-X hybrid format (PDF with embedded XML) required
for compliance with French e-invoicing standards. It is also compatible with :abbr:`UBL (Universal
for compliance with French e-invoicing standards. It is also compatible with {abbr}`UBL (Universal
Business Language)` XML for transactions via the Peppol network, facilitating both local and
international invoicing. Odoo enables businesses, through Chorus Pro Frances official e-invoicing
platform, to submit compliant e-invoices directly to public authorities and soon to private sector
@@ -38,13 +35,15 @@ invoices. Here is how Odoo ensures compliance:
invoices meet French VAT requirements and are formatted correctly for both B2G and B2B
transactions, supporting seamless compliance with evolving standards.
.. seealso::
:doc:`France fiscal localization documentation <../../../fiscal_localizations/france>`
:::{seealso}
{doc}`France fiscal localization documentation <../../../fiscal_localizations/france>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of French e-invoicing laws and how Odoo Invoicing supports
compliance with the Chorus Pro platform, Factur-X standard, Peppol network, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with French e-invoicing regulations to ensure compliance tailored to
your specific business needs.
:::
This page provides an overview of French e-invoicing laws and how Odoo Invoicing supports
compliance with the Chorus Pro platform, Factur-X standard, Peppol network, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with French e-invoicing regulations to ensure compliance tailored to
your specific business needs.
@@ -1,25 +1,23 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Germany
====================================
# Odoo electronic invoicing in Germany
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Germany's regulatory standards.
Legal framework for e-invoicing in Germany
==========================================
## Legal framework for e-invoicing in Germany
In Germany, e-invoicing is governed by the `E-Rechnungsgesetz <https://www.bgbl.de/xaver/bgbl/start.xav?start=%2F%2F*%5B%40attr_id%3D%27bgbl117s0770.pdf%27%5D#__bgbl__%2F%2F*%5B%40attr_id%3D%27bgbl117s0770.pdf%27%5D__1733401471138>`_,
which is aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
requiring e-invoicing for all :abbr:`B2G (business-to-government)` transactions. Invoices to public
In Germany, e-invoicing is governed by the [E-Rechnungsgesetz](https://www.bgbl.de/xaver/bgbl/start.xav?start=%2F%2F*%5B%40attr_id%3D%27bgbl117s0770.pdf%27%5D#__bgbl__%2F%2F*%5B%40attr_id%3D%27bgbl117s0770.pdf%27%5D__1733401471138),
which is aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
requiring e-invoicing for all {abbr}`B2G (business-to-government)` transactions. Invoices to public
sector entities must comply with the XRechnung format or the Peppol BIS Billing 3.0 standard.
Submission is typically handled through platforms like :abbr:`ZRE (Zentraler Rechnungseingang)` or
:abbr:`OZG-RE (Onlinezugangsgesetz-Rechnungseingang)`. While B2B e-invoicing is not yet mandatory,
Submission is typically handled through platforms like {abbr}`ZRE (Zentraler Rechnungseingang)` or
{abbr}`OZG-RE (Onlinezugangsgesetz-Rechnungseingang)`. While B2B e-invoicing is not yet mandatory,
its adoption is increasing as businesses seek to enhance compliance, efficiency, and transparency.
Compliance with German e-invoicing regulations
==============================================
## Compliance with German e-invoicing regulations
Odoo Invoicing makes it easy for businesses to send, store, and ensure the integrity of their
invoices. Here is how Odoo ensures compliance:
@@ -31,17 +29,19 @@ invoices. Here is how Odoo ensures compliance:
stored for at least ten years, Odoo securely archives all invoices in a tamper-proof system,
ensuring they are easily accessible for audits and compliance checks.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations, ensuring
compliance with German VAT requirements and proper formatting for both :abbr:`B2G
compliance with German VAT requirements and proper formatting for both {abbr}`B2G
(business-to-government)` and B2B transactions, supporting efficient reporting and legal
adherence.
.. seealso::
:doc:`Germany fiscal localization documentation <../../../fiscal_localizations/germany>`
:::{seealso}
{doc}`Germany fiscal localization documentation <../../../fiscal_localizations/germany>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of German e-invoicing laws and how Odoo Invoicing supports
compliance with E-Rechnungsgesetz, XRechnung, Peppol standards, and other relevant regulations.
It does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with German e-invoicing regulations to ensure compliance tailored to your
specific business needs.
:::
This page provides an overview of German e-invoicing laws and how Odoo Invoicing supports
compliance with E-Rechnungsgesetz, XRechnung, Peppol standards, and other relevant regulations.
It does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with German e-invoicing regulations to ensure compliance tailored to your
specific business needs.
@@ -1,26 +1,24 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Hungary
====================================
# Odoo electronic invoicing in Hungary
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Hungary's regulatory standards.
Legal framework for e-invoicing in Hungary
==========================================
## Legal framework for e-invoicing in Hungary
In Hungary, businesses must adhere to e-invoicing regulations to ensure secure, authentic, and
storable transactions. The primary legal framework is the Hungarian VAT Act (Act CXXVII of 2007),
which mandates real-time reporting of invoices to the NAV Online invoice system, Hungary's
government e-invoicing platform. As of 2021, all B2B and B2C invoices must be reported in real-time,
regardless of value. Hungary's regulations do not currently require :abbr:`B2G
regardless of value. Hungary's regulations do not currently require {abbr}`B2G
(business-to-government)` e-invoicing, but public sector invoicing is encouraged via the Peppol
network. Common formats for e-invoicing include XML for NAV submissions and other structured formats
to streamline compliance.
Compliance with Hungarian e-invoicing regulations
=================================================
## Compliance with Hungarian e-invoicing regulations
Odoo invoicing module is designed to help businesses meet Hungary's e-invoicing and VAT reporting
requirements. Here is how Odoo ensures compliance:
@@ -37,10 +35,11 @@ requirements. Here is how Odoo ensures compliance:
invoices meet the strict requirements of the Hungarian VAT Act, simplifying compliance for B2B and
B2C transactions.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Hungarian e-invoicing laws and how Odoo Invoicing supports
compliance with the Hungarian VAT Act, NAV Online Invoice System, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Hungarian e-invoicing regulations to ensure
compliance tailored to your specific business needs.
:::
This page provides an overview of Hungarian e-invoicing laws and how Odoo Invoicing supports
compliance with the Hungarian VAT Act, NAV Online Invoice System, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Hungarian e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -1,31 +1,29 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Ireland
====================================
# Odoo electronic invoicing in Ireland
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Ireland's regulatory standards.
Legal framework for e-invoicing in Ireland
==========================================
## Legal framework for e-invoicing in Ireland
In Ireland, businesses must comply with e-invoicing regulations to ensure secure, authentic, and
storable transactions. The legal framework for e-invoicing is primarily shaped by `EU Directive
2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_, which
mandates the use of electronic invoicing in :abbr:`B2G (business-to-government)` transactions. Irish
storable transactions. The legal framework for e-invoicing is primarily shaped by [EU Directive
2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055), which
mandates the use of electronic invoicing in {abbr}`B2G (business-to-government)` transactions. Irish
public sector bodies must accept electronic invoices that comply with the European Standard EN
16931. E-invoicing in the public sector is facilitated through the Peppol network, providing a
16931\. E-invoicing in the public sector is facilitated through the Peppol network, providing a
streamlined and standardized platform for invoicing. While not mandatory for B2B transactions,
e-invoicing is increasingly encouraged to enhance efficiency, transparency, and compliance.
Compliance with Irish e-invoicing regulations
=============================================
## Compliance with Irish e-invoicing regulations
Odoo Invoicing is equipped to meet Ireland's e-invoicing requirements, ensuring businesses
can operate with confidence. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the XML and :abbr:`UBL (Universal Business Language)` formats
- **Supported formats**: Odoo supports the XML and {abbr}`UBL (Universal Business Language)` formats
required for Peppol compliance and ensures compatibility with the European Standard EN 16931,
which is the basis for public sector e-invoicing in Ireland. Odoo seamlessly integrates with the
Peppol network, enabling businesses to send compliant e-invoices directly to Irish public sector
@@ -35,12 +33,13 @@ can operate with confidence. Here is how Odoo ensures compliance:
system, ensuring they can be easily accessed during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing ensures full compliance with Irish VAT
regulations by automatically calculating and including VAT in invoices, while formatting them to
meet the legal requirements for both B2B and :abbr:`B2G (business-to-government)` transactions.
meet the legal requirements for both B2B and {abbr}`B2G (business-to-government)` transactions.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Irish e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Irish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
:::
This page provides an overview of Irish e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Irish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
@@ -0,0 +1,50 @@
---
orphan: true
---
# Odoo electronic invoicing in Italy
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Italy's regulatory standards.
## Legal framework for e-invoicing in Italy
Italy has one of the most advanced e-invoicing frameworks in Europe, governed by the [Italian budget
law](https://www.gazzettaufficiale.it/eli/id/2022/12/29/22G00211/sg) and regulations issued by the
Agenzia delle Entrate. Since 2019, e-invoicing is mandatory for B2B, B2C, and {abbr}`B2G
(business-to-government)` transactions. All e-invoices must be submitted through the {abbr}`Sdi
(Sistema di Interscambio)`, the Italian government's centralized exchange system. The format for
e-invoices is FatturaPA, a structured XML format specifically designed for compliance with Italian
regulations. As part of its compliance with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
Italy also supports Peppol standards for cross-border e-invoicing.
## Compliance with Italian e-invoicing regulations
Odoo Invoicing is fully equipped to meet Italy's e-invoicing requirements. Here is how Odoo ensures
compliance:
- **Supported formats**: Odoo supports the FatturaPA XML format required by the {abbr}`Sdi (Sistema
di Interscambio)` for all domestic e-invoices, as well as {abbr}`UBL (Universal Business
Language)` XML for cross-border invoicing via the Peppol network, ensuring compliance with both
Italian and EU standards. Odoo has an easy access to the {abbr}`Sdi (Sistema di Interscambio)`
platform, allowing businesses to send, validate, and track invoices in real-time, ensuring
seamless compliance with Italian regulations.
- **Secure storage and retrieval**: In accordance with Italian law, which requires invoices to be
stored for a minimum of ten years, Odoo securely archives all invoices in a tamper-proof system,
ensuring they can be easily retrieved for audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
invoices adhere to the strict formatting and reporting requirements of Italian law for B2B, B2C,
and {abbr}`B2G (business-to-government)` transactions.
::::{seealso}
> {doc}`Italy fiscal localization documentation <../../../fiscal_localizations/italy>`
:::{admonition} Disclaimer
This page provides an overview of Italian e-invoicing laws and how Odoo Invoicing supports
compliance with the Italian Budget Law, {abbr}`Sdi (Sistema di Interscambio)`, FatturaPA format,
Peppol standards, and other relevant regulations. It does not constitute legal advice. We
recommend consulting with a tax advisor or legal professional familiar with Italian e-invoicing
regulations to ensure compliance tailored to your specific business needs.
:::
::::
@@ -1,50 +0,0 @@
:orphan:
==================================
Odoo electronic invoicing in Italy
==================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Italy's regulatory standards.
Legal framework for e-invoicing in Italy
========================================
Italy has one of the most advanced e-invoicing frameworks in Europe, governed by the `Italian budget
law <https://www.gazzettaufficiale.it/eli/id/2022/12/29/22G00211/sg>`_ and regulations issued by the
Agenzia delle Entrate. Since 2019, e-invoicing is mandatory for B2B, B2C, and :abbr:`B2G
(business-to-government)` transactions. All e-invoices must be submitted through the :abbr:`Sdi
(Sistema di Interscambio)`, the Italian government's centralized exchange system. The format for
e-invoices is FatturaPA, a structured XML format specifically designed for compliance with Italian
regulations. As part of its compliance with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
Italy also supports Peppol standards for cross-border e-invoicing.
Compliance with Italian e-invoicing regulations
===============================================
Odoo Invoicing is fully equipped to meet Italy's e-invoicing requirements. Here is how Odoo ensures
compliance:
- **Supported formats**: Odoo supports the FatturaPA XML format required by the :abbr:`Sdi (Sistema
di Interscambio)` for all domestic e-invoices, as well as :abbr:`UBL (Universal Business
Language)` XML for cross-border invoicing via the Peppol network, ensuring compliance with both
Italian and EU standards. Odoo has an easy access to the :abbr:`Sdi (Sistema di Interscambio)`
platform, allowing businesses to send, validate, and track invoices in real-time, ensuring
seamless compliance with Italian regulations.
- **Secure storage and retrieval**: In accordance with Italian law, which requires invoices to be
stored for a minimum of ten years, Odoo securely archives all invoices in a tamper-proof system,
ensuring they can be easily retrieved for audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
invoices adhere to the strict formatting and reporting requirements of Italian law for B2B, B2C,
and :abbr:`B2G (business-to-government)` transactions.
.. seealso::
:doc:`Italy fiscal localization documentation <../../../fiscal_localizations/italy>`
.. admonition:: Disclaimer
This page provides an overview of Italian e-invoicing laws and how Odoo Invoicing supports
compliance with the Italian Budget Law, :abbr:`Sdi (Sistema di Interscambio)`, FatturaPA format,
Peppol standards, and other relevant regulations. It does not constitute legal advice. We
recommend consulting with a tax advisor or legal professional familiar with Italian e-invoicing
regulations to ensure compliance tailored to your specific business needs.
@@ -1,29 +1,27 @@
:orphan:
---
orphan: true
---
===================================
Odoo electronic invoicing in Latvia
===================================
# Odoo electronic invoicing in Latvia
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Latvia's regulatory standards.
Legal framework for e-invoicing in Latvia
=========================================
## Legal framework for e-invoicing in Latvia
In Latvia, electronic invoicing is governed by the `Law on Accounting <https://eur-lex.europa.eu/legal-content/LV/TXT/PDF/?uri=CELEX:72014L0055LVA_270633>`_
and regulations aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
mandating the use of e-invoicing in :abbr:`B2G (business-to-government)` transactions. All public
In Latvia, electronic invoicing is governed by the [Law on Accounting](https://eur-lex.europa.eu/legal-content/LV/TXT/PDF/?uri=CELEX:72014L0055LVA_270633)
and regulations aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
mandating the use of e-invoicing in {abbr}`B2G (business-to-government)` transactions. All public
sector invoices must be sent in the European Standard EN 16931 format through platforms such as
eInvoicing.lv, Latvias official e-invoicing infrastructure. Latvia is also connected to the Peppol
network, facilitating standardized cross-border e-invoicing across the European Union.
Compliance with Latvian e-invoicing regulations
===============================================
## Compliance with Latvian e-invoicing regulations
Odoo Invoicing is designed to help businesses comply with Latvia's specific e-invoicing
requirements. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the XML :abbr:`UBL (Universal Business Language)` format,
- **Supported formats**: Odoo supports the XML {abbr}`UBL (Universal Business Language)` format,
compliant with European Standard EN 16931, which is required for public sector e-invoicing in
Latvia. Odoo also facilitates e-invoicing through the Peppol network, ensuring seamless
cross-border compatibility. Odoo integrates with Latvian e-invoicing platforms, such as
@@ -33,13 +31,14 @@ requirements. Here is how Odoo ensures compliance:
stored for a minimum of five years, Odoo securely archives all invoices in a tamper-proof system,
ensuring they can be easily accessed during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
invoices adhere to the legal requirements for :abbr:`B2G (business-to-government)` and B2B
invoices adhere to the legal requirements for {abbr}`B2G (business-to-government)` and B2B
transactions, helping businesses comply with Latvian VAT laws.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Latvian e-invoicing laws and how Odoo Invoicing supports
compliance with the Law on Accounting, European Standard EN 16931, eInvoicing.lv, Peppol
standards, and other relevant regulations. It does not constitute legal advice. We recommend
consulting with a tax advisor or legal professional familiar with Latvian e-invoicing regulations
to ensure compliance tailored to your specific business needs.
:::
This page provides an overview of Latvian e-invoicing laws and how Odoo Invoicing supports
compliance with the Law on Accounting, European Standard EN 16931, eInvoicing.lv, Peppol
standards, and other relevant regulations. It does not constitute legal advice. We recommend
consulting with a tax advisor or legal professional familiar with Latvian e-invoicing regulations
to ensure compliance tailored to your specific business needs.
@@ -1,26 +1,24 @@
:orphan:
---
orphan: true
---
======================================
Odoo electronic invoicing in Lithuania
======================================
# Odoo electronic invoicing in Lithuania
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Lithuania's regulatory standards.
Legal framework for e-invoicing in Lithuania
============================================
## Legal framework for e-invoicing in Lithuania
In Lithuania, e-invoicing is regulated under the `Law on Accounting <https://www.e-tar.lt/portal/lt/legalAct/207ad17030a011e78397ae072f58c508>`_
and aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_
for mandatory :abbr:`B2G (business-to-government)` e-invoicing. Businesses working with public
In Lithuania, e-invoicing is regulated under the [Law on Accounting](https://www.e-tar.lt/portal/lt/legalAct/207ad17030a011e78397ae072f58c508)
and aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055)
for mandatory {abbr}`B2G (business-to-government)` e-invoicing. Businesses working with public
sector entities must use e-invoicing, and invoices must be submitted through the E.sąskaita
platform, Lithuanias centralized invoicing system for public procurement. Lithuania also
participates in the Peppol network, enabling seamless cross-border e-invoicing. While B2B
e-invoicing is currently optional, its use is encouraged to enhance tax compliance and operational
efficiency.
Compliance with Lithuanian e-invoicing regulations
==================================================
## Compliance with Lithuanian e-invoicing regulations
Odoo invoicing module is fully equipped to meet Lithuania's e-invoicing requirements and ensure
compliance with local and EU standards. Here is how Odoo ensures compliance:
@@ -37,10 +35,11 @@ compliance with local and EU standards. Here is how Odoo ensures compliance:
invoices meet Lithuanias VAT requirements for both B2G and B2B transactions, reducing the risk of
non-compliance.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Lithuanian e-invoicing laws and how Odoo Invoicing supports
compliance with the Law on Accounting, E.sąskaita platform, Peppol standards, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Lithuanian e-invoicing regulations to ensure compliance tailored
to your specific business needs.
:::
This page provides an overview of Lithuanian e-invoicing laws and how Odoo Invoicing supports
compliance with the Law on Accounting, E.sąskaita platform, Peppol standards, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Lithuanian e-invoicing regulations to ensure compliance tailored
to your specific business needs.
@@ -1,30 +1,28 @@
:orphan:
---
orphan: true
---
=======================================
Odoo electronic invoicing in Luxembourg
=======================================
# Odoo electronic invoicing in Luxembourg
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Luxembourg's regulatory standards.
Legal framework for e-invoicing in Luxembourg
=============================================
## Legal framework for e-invoicing in Luxembourg
In Luxembourg, e-invoicing is regulated in accordance with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
requiring the use of electronic invoicing in :abbr:`B2G (business-to-government)` transactions.
In Luxembourg, e-invoicing is regulated in accordance with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
requiring the use of electronic invoicing in {abbr}`B2G (business-to-government)` transactions.
Public sector entities in Luxembourg must accept e-invoices in the European Standard EN 16931
format. The government supports e-invoicing through the Peppol network, ensuring streamlined
communication and compliance for cross-border transactions. While e-invoicing is not yet mandatory
for B2B transactions, its adoption is encouraged to promote operational efficiency and tax
compliance across industries.
Compliance with Luxembourgish e-invoicing regulations
=====================================================
## Compliance with Luxembourgish e-invoicing regulations
Odoo invoicing is equipped to support businesses in adhering to Luxembourg's e-invoicing standards.
Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the XML :abbr:`UBL (Universal Business Language)` format,
- **Supported formats**: Odoo supports the XML {abbr}`UBL (Universal Business Language)` format,
compliant with European Standard EN 16931, meeting the requirements for public sector e-invoicing
in Luxembourg. It also facilitates e-invoicing through the Peppol network, ensuring
interoperability for cross-border invoicing.
@@ -33,15 +31,17 @@ Here is how Odoo ensures compliance:
access during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing ensures full compliance with
Luxembourg's VAT regulations by automating VAT calculations and formatting invoices to meet the
legal standards for :abbr:`B2G (business-to-government)` and B2B transactions.
legal standards for {abbr}`B2G (business-to-government)` and B2B transactions.
.. seealso::
:doc:`Luxembourg fiscal localization documentation <../../../fiscal_localizations/luxembourg>`
:::{seealso}
{doc}`Luxembourg fiscal localization documentation <../../../fiscal_localizations/luxembourg>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Luxembourg's e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, European Standard EN 16931, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Luxembourgs e-invoicing regulations to ensure
compliance tailored to your specific business needs.
:::
This page provides an overview of Luxembourg's e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, European Standard EN 16931, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Luxembourgs e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -0,0 +1,57 @@
---
orphan: true
---
# Odoo electronic invoicing in Mexico
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Mexico's regulatory requirements and fully compatible with the guidelines
established by the {abbr}`SAT (Servicio de Administración Tributaria)`.
## Legal framework for e-invoicing in Mexico
Mexico has one of the most advanced e-invoicing systems globally, with electronic invoicing
{abbr}`CFDI (Comprobante Fiscal Digital por Internet)` being mandatory for most taxpayers. Key
elements include:
- **CFDI**: A mandatory electronic invoice format for B2B, B2C, and {abbr}`B2G
(business-to-government)` transactions, fully compliant with SAT requirements.
- **Digital tax receipt validation**: All {abbr}`CFDIs (Comprobante Fiscal Digital por Internet)`
must be digitally signed and validated by {abbr}`SAT (Servicio de Administración
Tributaria)`-authorized {abbr}`PACs (authorized certification providers)` before issuance.
- **Complementos**: Specific complements are required for certain transaction types, such as
payroll or foreign trade.
- **XML Format**: The XML format is mandatory, ensuring interoperability and compliance with
{abbr}`SAT (Servicio de Administración Tributaria)`'s technical standards.
## Compliance with Mexican e-invoicing regulations
Odoo Invoicing simplifies compliance with Mexicos e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports {abbr}`CFDI (Comprobante Fiscal Digital por Internet)` in
{abbr}`SAT (Servicio de Administración Tributaria)`-compliant XML formats, including all
mandatory fields, digital signatures, and complements for specialized transactions.
- **Integration with PACs**: Odoo integrates with {abbr}`SAT (Servicio de Administración
Tributaria)`-authorized {abbr}`PACs (authorized certification providers)` to automate the
validation, certification, and issuance of {abbr}`CFDIs (Comprobante Fiscal Digital por
Internet)`, ensuring real-time compliance.
- **Secure storage and retrieval**: In compliance with Mexico's five-year mandatory storage
requirement, Odoo provides tamper-proof archiving for easy access to invoices during audits
or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with {abbr}`SAT (Servicio de
Administración Tributaria)`'s tax reporting standards.
:::{seealso}
{doc}`Mexican fiscal localization documentation <../../../fiscal_localizations/mexico>`
:::
:::{admonition} Disclaimer
This page provides a general overview of Mexican e-invoicing regulations and how Odoo supports
compliance with {abbr}`SAT (Servicio de Administración Tributaria)` requirements. It is not
intended as legal or tax advice. We recommend consulting with a tax advisor or legal professional
familiar with Mexico's e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
@@ -1,57 +0,0 @@
:orphan:
===================================
Odoo electronic invoicing in Mexico
===================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Mexico's regulatory requirements and fully compatible with the guidelines
established by the :abbr:`SAT (Servicio de Administración Tributaria)`.
Legal framework for e-invoicing in Mexico
=========================================
Mexico has one of the most advanced e-invoicing systems globally, with electronic invoicing
:abbr:`CFDI (Comprobante Fiscal Digital por Internet)` being mandatory for most taxpayers. Key
elements include:
- **CFDI**: A mandatory electronic invoice format for B2B, B2C, and :abbr:`B2G
(business-to-government)` transactions, fully compliant with SAT requirements.
- **Digital tax receipt validation**: All :abbr:`CFDIs (Comprobante Fiscal Digital por Internet)`
must be digitally signed and validated by :abbr:`SAT (Servicio de Administración
Tributaria)`-authorized :abbr:`PACs (authorized certification providers)` before issuance.
- **Complementos**: Specific complements are required for certain transaction types, such as
payroll or foreign trade.
- **XML Format**: The XML format is mandatory, ensuring interoperability and compliance with
:abbr:`SAT (Servicio de Administración Tributaria)`'s technical standards.
Compliance with Mexican e-invoicing regulations
===============================================
Odoo Invoicing simplifies compliance with Mexicos e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` in
:abbr:`SAT (Servicio de Administración Tributaria)`-compliant XML formats, including all
mandatory fields, digital signatures, and complements for specialized transactions.
- **Integration with PACs**: Odoo integrates with :abbr:`SAT (Servicio de Administración
Tributaria)`-authorized :abbr:`PACs (authorized certification providers)` to automate the
validation, certification, and issuance of :abbr:`CFDIs (Comprobante Fiscal Digital por
Internet)`, ensuring real-time compliance.
- **Secure storage and retrieval**: In compliance with Mexico's five-year mandatory storage
requirement, Odoo provides tamper-proof archiving for easy access to invoices during audits
or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with :abbr:`SAT (Servicio de
Administración Tributaria)`'s tax reporting standards.
.. seealso::
:doc:`Mexican fiscal localization documentation <../../../fiscal_localizations/mexico>`
.. admonition:: Disclaimer
This page provides a general overview of Mexican e-invoicing regulations and how Odoo supports
compliance with :abbr:`SAT (Servicio de Administración Tributaria)` requirements. It is not
intended as legal or tax advice. We recommend consulting with a tax advisor or legal professional
familiar with Mexico's e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -1,30 +1,28 @@
:orphan:
---
orphan: true
---
============================================
Odoo electronic invoicing in the Netherlands
============================================
# Odoo electronic invoicing in the Netherlands
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to the Netherlands' regulatory standards.
Legal framework for e-invoicing in the Netherlands
==================================================
## Legal framework for e-invoicing in the Netherlands
In the Netherlands, e-invoicing is regulated under `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
requiring :abbr:`B2G (business-to-government)` transactions to adhere to the European Standard EN
16931. Public sector entities must accept e-invoices through platforms such as Digipoort, the Dutch
In the Netherlands, e-invoicing is regulated under [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
requiring {abbr}`B2G (business-to-government)` transactions to adhere to the European Standard EN
16931\. Public sector entities must accept e-invoices through platforms such as Digipoort, the Dutch
government's official gateway for electronic data exchange. The Netherlands is also a prominent
member of the Peppol network, which enables secure and standardized e-invoicing for cross-border
transactions across Europe. While e-invoicing is not yet mandatory for B2B transactions, it is
strongly encouraged to enhance transparency and efficiency in business processes.
Compliance with Dutch e-invoicing regulations
=============================================
## Compliance with Dutch e-invoicing regulations
Odoo invoicing is equipped to support businesses with the Netherlands' e-invoicing requirements.
Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports :abbr:`UBL (Universal Business Language)` XML, which is the
- **Supported formats**: Odoo supports {abbr}`UBL (Universal Business Language)` XML, which is the
standard format for e-invoicing in the Netherlands. It ensures compatibility with both Digipoort
for domestic B2G transactions and the Peppol network for international e-invoicing.
- **Secure storage and retrieval**: In accordance with Dutch regulations, which require businesses
@@ -32,15 +30,17 @@ Here is how Odoo ensures compliance:
tamper-proof system, ensuring they are accessible during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and formats
invoices to meet Dutch VAT requirements, ensuring compliance with legal standards for both
:abbr:`B2G (business-to-government)` and B2B transactions.
{abbr}`B2G (business-to-government)` and B2B transactions.
.. seealso::
:doc:`Netherlands fiscal localization documentation <../../../fiscal_localizations/netherlands>`
:::{seealso}
{doc}`Netherlands fiscal localization documentation <../../../fiscal_localizations/netherlands>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Dutch e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, Digipoort, Peppol standards, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Dutch e-invoicing regulations to ensure compliance tailored to
your specific business needs.
:::
This page provides an overview of Dutch e-invoicing laws and how Odoo Invoicing supports
compliance with EU Directive 2014/55/EU, Digipoort, Peppol standards, and other relevant
regulations. It does not constitute legal advice. We recommend consulting with a tax advisor or
legal professional familiar with Dutch e-invoicing regulations to ensure compliance tailored to
your specific business needs.
@@ -1,31 +1,29 @@
:orphan:
---
orphan: true
---
===================================
Odoo electronic invoicing in Norway
===================================
# Odoo electronic invoicing in Norway
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Norway's regulatory standards.
Legal framework for e-invoicing in Norway
=========================================
## Legal framework for e-invoicing in Norway
In Norway, e-invoicing is governed by regulations aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
requiring :abbr:`B2G (business-to-government)` transactions to comply with mandatory e-invoicing
In Norway, e-invoicing is governed by regulations aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
requiring {abbr}`B2G (business-to-government)` transactions to comply with mandatory e-invoicing
standards. Norwegian public sector entities mandate the use of the EHF (Elektronisk Handelsformat)
standard for e-invoices, ensuring uniformity and security. Norway is a member of the Peppol network,
which supports standardized and interoperable cross-border e-invoicing throughout Europe. Although
not mandatory for B2B transactions, e-invoicing is widely encouraged and adopted across the private
sector to boost efficiency, transparency, and compliance.
Compliance with Norwegian e-invoicing regulations
=================================================
## Compliance with Norwegian e-invoicing regulations
Odoo invoicing is designed to fully support businesses in meeting Norway's e-invoicing standards.
Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the EHF (Elektronisk Handelsformat) standard, which is
required for public sector e-invoicing in Norway. Odoo is also compatible with :abbr:`UBL
required for public sector e-invoicing in Norway. Odoo is also compatible with {abbr}`UBL
(Universal Business Language)` XML for transactions through the Peppol network, ensuring adherence
to both Norwegian and EU e-invoicing requirements.
- **Secure storage and retrieval**: In compliance with Norwegian regulations that mandate the
@@ -33,12 +31,13 @@ Here is how Odoo ensures compliance:
tamper-proof system, ensuring accessibility and security during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations, ensuring
that invoices meet Norwegian VAT requirements while adhering to the correct format for both
:abbr:`B2G (business-to-government)` and B2B transactions.
{abbr}`B2G (business-to-government)` and B2B transactions.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Norwegian e-invoicing laws and how Odoo Invoicing supports
compliance with the EHF standard, Peppol network, and other relevant regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Norwegian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
This page provides an overview of Norwegian e-invoicing laws and how Odoo Invoicing supports
compliance with the EHF standard, Peppol network, and other relevant regulations. It does not
constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Norwegian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -1,55 +1,54 @@
:orphan:
---
orphan: true
---
=================================
Odoo electronic invoicing in Peru
=================================
# Odoo electronic invoicing in Peru
Odoo Invoicing provides secure, efficient, and legally compliant e-invoicing solutions tailored to
meet Perus regulatory requirements and fully compatible with the guidelines established by the
`Superintendencia Nacional de Aduanas y de Administración Tributaria (SUNAT)
<https://www.sunat.gob.pe/>`_.
[Superintendencia Nacional de Aduanas y de Administración Tributaria (SUNAT)](https://www.sunat.gob.pe/).
Legal framework for e-invoicing in Peru
=======================================
## Legal framework for e-invoicing in Peru
Peru has mandated electronic invoicing for most taxpayers to enhance tax compliance, reduce fraud,
and improve transparency. Key elements include:
- **Comprobante de Pago Electrónico (CPE)**: A mandatory electronic document required for B2B, B2C,
and :abbr:`B2G (business-to-government)` transactions, fully compliant with :abbr:`SUNAT
and {abbr}`B2G (business-to-government)` transactions, fully compliant with {abbr}`SUNAT
(Superintendencia Nacional de Aduanas y de Administración Tributaria)`'s technical specifications.
- **Integration with SUNAT**: E-invoices must be submitted to :abbr:`SUNAT (Superintendencia
- **Integration with SUNAT**: E-invoices must be submitted to {abbr}`SUNAT (Superintendencia
Nacional de Aduanas y de Administración Tributaria)` for validation and authorization. Upon
approval, :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`
approval, {abbr}`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`
assigns a unique identification code to the invoice.
- **XML Format**: All electronic invoices must be issued in XML format, ensuring standardization and
interoperability.
- **Mandatory adoption timeline**: Electronic invoicing is mandatory for most businesses, with
specific deadlines for smaller entities.
Compliance with Peruvian e-invoicing regulations
================================================
## Compliance with Peruvian e-invoicing regulations
Odoo Invoicing simplifies compliance with Perus e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports the Peruvian :abbr:`CPE (Comprobante de Pago Electrónico` in
:abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`-compliant XML
- **Supported formats**: Odoo supports the Peruvian {abbr}`CPE (Comprobante de Pago Electrónico` in
{abbr}`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`-compliant XML
formats, including all required fields and authorization codes.
- **Secure storage and retrieval**: In compliance with Peru's five-year mandatory storage
requirement, Odoo offers tamper-proof archiving, ensuring easy access for audits or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for :abbr:`IGV
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for {abbr}`IGV
(Impuesto General a las Ventas) and other applicable taxes, ensuring accuracy and compliance
with :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`'s
reporting standards.
.. seealso::
:doc:`Peruvian fiscal localization documentation <../../../fiscal_localizations/peru>`
:::{seealso}
{doc}`Peruvian fiscal localization documentation <../../../fiscal_localizations/peru>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides a general overview of Peruvian e-invoicing regulations and how Odoo supports
compliance with {abbr}`SUNAT (Superintendencia Nacional de Aduanas y de Administración
Tributaria)` requirements. It is not intended as legal or tax advice. We recommend consulting
with a tax advisor or legal professional familiar with Peru's e-invoicing regulations to ensure
compliance tailored to your specific business needs.
:::
This page provides a general overview of Peruvian e-invoicing regulations and how Odoo supports
compliance with :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración
Tributaria)` requirements. It is not intended as legal or tax advice. We recommend consulting
with a tax advisor or legal professional familiar with Peru's e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -1,25 +1,23 @@
:orphan:
---
orphan: true
---
===================================
Odoo electronic invoicing in Poland
===================================
# Odoo electronic invoicing in Poland
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Poland's regulatory standards.
Legal framework for e-invoicing in Poland
=========================================
## Legal framework for e-invoicing in Poland
In Poland, e-invoicing is governed by the `Polish VAT Act <https://isap.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20230001598>`_
In Poland, e-invoicing is governed by the [Polish VAT Act](https://isap.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20230001598)
and the National e-Invoicing System (KSeF Krajowy System e-Faktur), which became operational in
2022. While :abbr:`B2G (business-to-government)` e-invoicing is mandatory under `EU Directive
2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_, B2B
2022\. While {abbr}`B2G (business-to-government)` e-invoicing is mandatory under [EU Directive
2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055), B2B
e-invoicing is mandatory for all businesses starting July 2024, following Poland's adoption of the
e-invoicing scheme. E-invoices must be issued in the FA_VAT (structured XML) format and transmitted
through the KSeF platform, ensuring compliance with tax reporting and transparency goals.
Compliance with Polish e-invoicing regulations
==============================================
## Compliance with Polish e-invoicing regulations
Odoo Invoicing is fully equipped to help businesses comply with Poland's evolving e-invoicing
requirements. Here is how Odoo ensures compliance:
@@ -36,10 +34,11 @@ requirements. Here is how Odoo ensures compliance:
invoices meet Polish VAT requirements for both B2G and B2B transactions, streamlining compliance
and tax reporting processes.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Polish e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Act, KSeF platform, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Polish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
:::
This page provides an overview of Polish e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Act, KSeF platform, Peppol standards, and other relevant regulations. It
does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Polish e-invoicing regulations to ensure compliance tailored to your
specific business needs.
@@ -1,31 +1,29 @@
:orphan:
---
orphan: true
---
=====================================
Odoo electronic invoicing in Portugal
=====================================
# Odoo electronic invoicing in Portugal
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Portugal's regulatory standards.
Legal framework for e-invoicing in Portugal
===========================================
## Legal framework for e-invoicing in Portugal
In Portugal, e-invoicing is regulated under the Portuguese VAT Code and in compliance with `EU
Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_ for
:abbr:`B2G (business-to-government)` transactions. E-invoicing has been mandatory for public sector
suppliers since 2021. Businesses must use structured e-invoices in the :abbr:`CIUS-PT (Customizable
In Portugal, e-invoicing is regulated under the Portuguese VAT Code and in compliance with [EU
Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055) for
{abbr}`B2G (business-to-government)` transactions. E-invoicing has been mandatory for public sector
suppliers since 2021. Businesses must use structured e-invoices in the {abbr}`CIUS-PT (Customizable
Invoice User Specification for Portugal)` format, which aligns with European standards. While B2B
e-invoicing is not yet mandatory, its adoption is encouraged to improve tax compliance and
efficiency. Additionally, e-invoices must be validated and certified under Portugal's SAF-T (PT)
system, which integrates with the tax authority for reporting.
Compliance with Portuguese e-invoicing regulations
==================================================
## Compliance with Portuguese e-invoicing regulations
Odoo Invoicing is fully equipped to meet Portugal's e-invoicing and tax reporting requirements. Here
is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the :abbr:`CIUS-PT (Customizable Invoice User Specification
- **Supported formats**: Odoo supports the {abbr}`CIUS-PT (Customizable Invoice User Specification
for Portugal)` format, ensuring compatibility with Portugal's public procurement e-invoicing
requirements. For cross-border transactions, Odoo also supports the Peppol BIS Billing 3.0 format,
facilitating seamless compliance with EU standards. Integration with SAF-T (PT) and Tax Authority
@@ -35,14 +33,15 @@ is how Odoo ensures compliance:
invoices to be stored for at least ten years, Odoo securely archives all invoices in a
tamper-proof system, ensuring they are accessible for audits and inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
that invoices meet Portuguese VAT requirements for both :abbr:`B2G (business-to-government)` and
that invoices meet Portuguese VAT requirements for both {abbr}`B2G (business-to-government)` and
B2B transactions, supporting efficient and accurate tax reporting.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Portuguese e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Code, {abbr}`CIUS-PT (Customizable Invoice User Specification for
Portugal)` format, SAF-T (PT) system, Peppol standards, and other relevant regulations. It does
not constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Portuguese e-invoicing regulations to ensure compliance tailored to your specific
business needs.
:::
This page provides an overview of Portuguese e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Code, :abbr:`CIUS-PT (Customizable Invoice User Specification for
Portugal)` format, SAF-T (PT) system, Peppol standards, and other relevant regulations. It does
not constitute legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Portuguese e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -1,31 +1,29 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Romania
====================================
# Odoo electronic invoicing in Romania
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Romania's regulatory standards.
Legal framework for e-invoicing in Romania
==========================================
## Legal framework for e-invoicing in Romania
In Romania, e-invoicing is regulated under the `Fiscal Code <http://www.dreptonline.ro/carti/start_carte.php?id_carte=324>`_
and aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
which mandates e-invoicing for :abbr:`B2G (business-to-government)` transactions. Romania has
In Romania, e-invoicing is regulated under the [Fiscal Code](http://www.dreptonline.ro/carti/start_carte.php?id_carte=324)
and aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
which mandates e-invoicing for {abbr}`B2G (business-to-government)` transactions. Romania has
implemented the RO e-Factura system, the national platform for issuing and receiving electronic
invoices in a standardized format. The use of RO e-Factura is mandatory for :abbr:`B2G
invoices in a standardized format. The use of RO e-Factura is mandatory for {abbr}`B2G
(business-to-government)` transactions and for specific high-risk B2B sectors, with further
expansion anticipated. Romania is also integrated with the Peppol network, facilitating cross-border
e-invoicing and compliance within the European Union.
Compliance with Romanian e-invoicing regulations
================================================
## Compliance with Romanian e-invoicing regulations
Odoo invoicing module is fully equipped to help businesses comply with Romanias specific
e-invoicing requirements. Heres how Odoo supports compliance:
- **Supported formats**: Odoo supports XML in :abbr:`UBL (Universal Business Language)` and the
- **Supported formats**: Odoo supports XML in {abbr}`UBL (Universal Business Language)` and the
structured formats required by RO e-Factura, ensuring compliance with Romania's e-invoicing
standards for B2G and high-risk B2B transactions. Additionally, Odoo supports formats compatible
with the Peppol network, enabling seamless cross-border invoicing. Odoo integrates with the RO
@@ -34,21 +32,23 @@ e-invoicing requirements. Heres how Odoo supports compliance:
with eTransport requirements by generating and managing the data necessary for reporting the
movement of high-fiscal risk goods. This includes shipment details such as the nature of the
goods, vehicle information, and delivery destinations, ensuring timely submission to the
:abbr:`ANAF (Romanian National Agency for Fiscal Administration)`.
{abbr}`ANAF (Romanian National Agency for Fiscal Administration)`.
- **Secure storage and retrieval**: In compliance with Romanian regulations, which require invoices
to be stored for a minimum of ten years, Odoo securely archives all invoices in a tamper-proof
system, ensuring accessibility during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and formats
invoices to comply with Romanian VAT requirements, ensuring accuracy and adherence to legal
standards for both :abbr:`B2G (business-to-government)` and B2B transactions.
standards for both {abbr}`B2G (business-to-government)` and B2B transactions.
.. seealso::
:doc:`Romania fiscal localization documentation <../../../fiscal_localizations/romania>`
:::{seealso}
{doc}`Romania fiscal localization documentation <../../../fiscal_localizations/romania>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Romanian e-invoicing laws and how Odoo Invoicing supports
compliance with the Fiscal Code, RO e-Factura, Peppol standards, and other relevant regulations.
It does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Romanian e-invoicing regulations to ensure compliance tailored to your
specific business needs.
:::
This page provides an overview of Romanian e-invoicing laws and how Odoo Invoicing supports
compliance with the Fiscal Code, RO e-Factura, Peppol standards, and other relevant regulations.
It does not constitute legal advice. We recommend consulting with a tax advisor or legal
professional familiar with Romanian e-invoicing regulations to ensure compliance tailored to your
specific business needs.
@@ -1,25 +1,23 @@
:orphan:
---
orphan: true
---
=====================================
Odoo electronic invoicing in Slovenia
=====================================
# Odoo electronic invoicing in Slovenia
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Slovenia's regulatory standards.
Legal framework for e-invoicing in Slovenia
===========================================
## Legal framework for e-invoicing in Slovenia
In Slovenia, e-invoicing is regulated under the `Slovenian VAT Act <https://www.uradni-list.si/glasilo-uradni-list-rs/vsebina/2019-01-2291?sop=2019-01-2291>`_
and complies with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
mandating the use of e-invoices for :abbr:`B2G (business-to-government)` transactions. Suppliers to
In Slovenia, e-invoicing is regulated under the [Slovenian VAT Act](https://www.uradni-list.si/glasilo-uradni-list-rs/vsebina/2019-01-2291?sop=2019-01-2291)
and complies with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
mandating the use of e-invoices for {abbr}`B2G (business-to-government)` transactions. Suppliers to
public sector entities must submit e-invoices in the e-SLOG XML format, which is the national
standard for e-invoicing. These invoices are transmitted via the UJP (Uradni list Republike
Slovenije - Agency for Public Payments) e-invoicing platform. While B2B e-invoicing remains
optional, its adoption is encouraged to promote transparency and tax compliance.
Compliance with Slovenian e-invoicing regulations
=================================================
## Compliance with Slovenian e-invoicing regulations
Odoo Invoicing is fully equipped to support businesses in meeting Slovenias e-invoicing
requirements. Here is how Odoo ensures compliance:
@@ -36,10 +34,11 @@ requirements. Here is how Odoo ensures compliance:
invoices meet Slovenian VAT requirements for both B2G and B2B transactions, simplifying tax
reporting and ensuring accuracy.
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Slovenian e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Act, e-SLOG XML format, UJP platform, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Slovenian e-invoicing regulations to ensure
compliance tailored to your specific business needs.
:::
This page provides an overview of Slovenian e-invoicing laws and how Odoo Invoicing supports
compliance with the VAT Act, e-SLOG XML format, UJP platform, Peppol standards, and other
relevant regulations. It does not constitute legal advice. We recommend consulting with a tax
advisor or legal professional familiar with Slovenian e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -1,32 +1,30 @@
:orphan:
---
orphan: true
---
==================================
Odoo electronic invoicing in Spain
==================================
# Odoo electronic invoicing in Spain
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to Spain's regulatory standards.
Legal framework for e-invoicing in Spain
========================================
## Legal framework for e-invoicing in Spain
In Spain, e-invoicing is governed by the `Ley de Facturación Electrónica <https://www.facturae.gob.es/face/Paginas/FACE.aspx>`_
and aligned with `EU Directive 2014/55/EU <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055>`_,
mandating e-invoicing for :abbr:`B2G (business-to-government)` transactions. All invoices to public
In Spain, e-invoicing is governed by the [Ley de Facturación Electrónica](https://www.facturae.gob.es/face/Paginas/FACE.aspx)
and aligned with [EU Directive 2014/55/EU](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0055),
mandating e-invoicing for {abbr}`B2G (business-to-government)` transactions. All invoices to public
sector entities must be submitted through the FACe platform, Spains official electronic invoicing
hub, using the required Facturae format. Additionally, the :abbr:`SII (Immediate Supply of
hub, using the required Facturae format. Additionally, the {abbr}`SII (Immediate Supply of
Information)` system mandates near real-time reporting of VAT-related invoice data for certain
companies, reinforcing transparency and compliance. While e-invoicing is not yet mandatory for B2B
transactions, its adoption is expected to expand in the near future.
Compliance with Spanish e-invoicing regulations
===============================================
## Compliance with Spanish e-invoicing regulations
Odoo Invoicing is fully equipped to help businesses meet Spain's e-invoicing and VAT reporting
requirements. Here is how Odoo ensures compliance:
- **Supported formats**: Odoo supports the Facturae (XML) format required by the FACe platform for
public sector e-invoicing in Spain. It is also compatible with XML in :abbr:`UBL (Universal
public sector e-invoicing in Spain. It is also compatible with XML in {abbr}`UBL (Universal
Business Language)` formats used within the Peppol network for cross-border transactions. Odoo
integrates with FACe, allowing businesses to submit e-invoices directly to Spanish public
authorities. Odoo also facilitates compliance with the SII system, enabling automated and near
@@ -35,16 +33,18 @@ requirements. Here is how Odoo ensures compliance:
stored for a minimum of four years, Odoo securely archives all invoices in a tamper-proof system,
ensuring easy access during audits or inspections.
- **Automatic VAT calculation and reporting**: Odoo Invoicing automates VAT calculations and ensures
invoices are formatted to meet Spanish requirements for both :abbr:`B2G (business-to-government)`
invoices are formatted to meet Spanish requirements for both {abbr}`B2G (business-to-government)`
and B2B transactions, helping businesses comply with national and EU standards.
.. seealso::
:doc:`Spain fiscal localization documentation <../../../fiscal_localizations/spain>`
:::{seealso}
{doc}`Spain fiscal localization documentation <../../../fiscal_localizations/spain>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides an overview of Spanish e-invoicing laws and how Odoo Invoicing supports
compliance with the Ley de Facturación Electrónica, FACe platform, SII system, Peppol standards,
and other relevant regulations. It does not constitute legal advice. We recommend consulting with
a tax advisor or legal professional familiar with Spanish e-invoicing regulations to ensure
compliance tailored to your specific business needs.
:::
This page provides an overview of Spanish e-invoicing laws and how Odoo Invoicing supports
compliance with the Ley de Facturación Electrónica, FACe platform, SII system, Peppol standards,
and other relevant regulations. It does not constitute legal advice. We recommend consulting with
a tax advisor or legal professional familiar with Spanish e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -1,26 +1,24 @@
:orphan:
---
orphan: true
---
====================================
Odoo electronic invoicing in Uruguay
====================================
# Odoo electronic invoicing in Uruguay
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Uruguay's regulatory requirements and fully compatible with the
guidelines established by the `Dirección General Impositiva (DGI)
<https://www.gub.uy/direccion-general-impositiva/>`_.
guidelines established by the [Dirección General Impositiva (DGI)](https://www.gub.uy/direccion-general-impositiva/).
Legal framework for e-invoicing in Uruguay
==========================================
## Legal framework for e-invoicing in Uruguay
Uruguay has mandated electronic invoicing under the :abbr:`CFE (Comprobante Fiscal Electrónico)`
Uruguay has mandated electronic invoicing under the {abbr}`CFE (Comprobante Fiscal Electrónico)`
system, which applies to most businesses to promote tax transparency and streamline financial
transactions. Key elements include:
- **Comprobante Fiscal Electrónico**: A mandatory e-invoice format required for B2B, B2C, and
:abbr:`B2G (business-to-government)` transactions, fully compliant with :abbr:`DGI (Dirección
{abbr}`B2G (business-to-government)` transactions, fully compliant with {abbr}`DGI (Dirección
General Impositiva)`'s technical standards.
- **Integration with DGI**: All :abbr:`CFE (Comprobante Fiscal Electrónico)` must be submitted to
the :abbr:`DGI (Dirección General Impositiva)` for validation. Upon approval, the :abbr:`CFE
- **Integration with DGI**: All {abbr}`CFE (Comprobante Fiscal Electrónico)` must be submitted to
the {abbr}`DGI (Dirección General Impositiva)` for validation. Upon approval, the {abbr}`CFE
(Comprobante Fiscal Electrónico)` receives a unique identification code and authorization for
issuance.
- **XML Format**: Uruguay mandates the use of XML as the standard format for e-invoices, ensuring
@@ -28,30 +26,31 @@ transactions. Key elements include:
- **Adoption Timeline**: E-invoicing is mandatory for most businesses, with specific deadlines for
smaller enterprises to transition into the system.
Compliance with Uruguayan e-invoicing regulations
=================================================
## Compliance with Uruguayan e-invoicing regulations
Odoo Invoicing simplifies the complexities of compliance with Uruguay's e-invoicing requirements by
offering tailored features:
- **Supported formats**: Odoo supports the :abbr:`CFE (Comprobante Fiscal Electrónico)` format in
:abbr:`DGI (Dirección General Impositiva)`-compliant XML, including all legally required fields,
- **Supported formats**: Odoo supports the {abbr}`CFE (Comprobante Fiscal Electrónico)` format in
{abbr}`DGI (Dirección General Impositiva)`-compliant XML, including all legally required fields,
such as the unique identification code, authorization number, and digital signature. Odoo allows
the automated submission, validation, and issuance through the :abbr:`DGI (Dirección General
the automated submission, validation, and issuance through the {abbr}`DGI (Dirección General
Impositiva)`'s e-invoicing platform to ensure compliance in real time.
- **Secure storage and retrieval**: In line with Uruguays mandatory five-year storage requirement,
Odoo provides tamper-proof archiving solutions, ensuring easy access to invoices for audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for IVA (Value-Added
Tax) and other applicable taxes, ensuring accuracy and compliance with :abbr:`DGI (Dirección
Tax) and other applicable taxes, ensuring accuracy and compliance with {abbr}`DGI (Dirección
General Impositiva)`'s reporting standards.
.. seealso::
:doc:`Uruguayan fiscal localization documentation <../../../fiscal_localizations/uruguay>`
:::{seealso}
{doc}`Uruguayan fiscal localization documentation <../../../fiscal_localizations/uruguay>`
:::
.. admonition:: Disclaimer
:::{admonition} Disclaimer
This page provides a general overview of Uruguayan e-invoicing regulations and how Odoo supports
compliance with DGI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Uruguay's e-invoicing
regulations to ensure full compliance tailored to your specific business requirements.
:::
This page provides a general overview of Uruguayan e-invoicing regulations and how Odoo supports
compliance with DGI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Uruguay's e-invoicing
regulations to ensure full compliance tailored to your specific business requirements.
@@ -0,0 +1,63 @@
# EPC QR codes
European Payments Council quick response codes, or **EPC QR codes**, are two-dimensional barcodes
that customers can scan with their **mobile banking applications** to initiate a **SEPA credit
transfer (SCT)** and pay their invoices instantly.
In addition to bringing ease of use and speed, it greatly reduces typing errors that would
potentially make for payment issues.
:::{note}
This feature is only available for companies in several European countries such as Austria,
Belgium, Finland, Germany, and the Netherlands.
:::
:::{seealso}
- {doc}`../bank`
- [Odoo Academy: QR Code on Invoices for European Customers](https://www.odoo.com/r/VuU)
:::
## Configuration
Go to {menuselection}`Accounting --> Configuration --> Settings` and activate the {guilabel}`QR
Codes` feature in the {guilabel}`Customer Payments` section.
### Configure your bank account's journal
Make sure that your {guilabel}`Bank Account` is correctly configured in Odoo with your IBAN and BIC.
To do so, go to {menuselection}`Accounting --> Configuration --> Journals`, open your bank journal,
then fill out the {guilabel}`Account Number` and {guilabel}`Bank` under the {guilabel}`Bank Account
Number` column.
```{image} epc_qr_code/bank-journal.png
:alt: Bank account number column in the bank journal
```
## Issue invoices with EPC QR codes
EPC QR codes are added automatically to your invoices. Customers whose bank supports making payments
via EPC QR codes will be able to scan the code and pay the invoice.
Go to {menuselection}`Accounting --> Customers --> Invoices`, and create a new invoice.
Before posting it, open the {guilabel}`Other Info` tab. Odoo automatically fills out the
{guilabel}`Recipient Bank` field with your IBAN.
:::{note}
In the {guilabel}`Other Info` tab, the account indicated in the {guilabel}`Recipient Bank` field
is used to receive your customer's payment. Odoo automatically populates this field with your
IBAN by default and uses it to generate the EPC QR code.
:::
When the invoice is printed or previewed, the QR code is included at the bottom.
```{image} epc_qr_code/invoice-qr-code.png
:alt: QR code on a customer invoice
```
:::{tip}
If you want to issue an invoice without an EPC QR code, remove the IBAN indicated in the
{guilabel}`Recipient Bank` field, under the {guilabel}`Other Info` tab of the invoice.
:::
@@ -1,61 +0,0 @@
============
EPC QR codes
============
European Payments Council quick response codes, or **EPC QR codes**, are two-dimensional barcodes
that customers can scan with their **mobile banking applications** to initiate a **SEPA credit
transfer (SCT)** and pay their invoices instantly.
In addition to bringing ease of use and speed, it greatly reduces typing errors that would
potentially make for payment issues.
.. note::
This feature is only available for companies in several European countries such as Austria,
Belgium, Finland, Germany, and the Netherlands.
.. seealso::
- :doc:`../bank`
- `Odoo Academy: QR Code on Invoices for European Customers <https://www.odoo.com/r/VuU>`_
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Settings` and activate the :guilabel:`QR
Codes` feature in the :guilabel:`Customer Payments` section.
Configure your bank account's journal
-------------------------------------
Make sure that your :guilabel:`Bank Account` is correctly configured in Odoo with your IBAN and BIC.
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open your bank journal,
then fill out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Bank Account
Number` column.
.. image:: epc_qr_code/bank-journal.png
:alt: Bank account number column in the bank journal
Issue invoices with EPC QR codes
================================
EPC QR codes are added automatically to your invoices. Customers whose bank supports making payments
via EPC QR codes will be able to scan the code and pay the invoice.
Go to :menuselection:`Accounting --> Customers --> Invoices`, and create a new invoice.
Before posting it, open the :guilabel:`Other Info` tab. Odoo automatically fills out the
:guilabel:`Recipient Bank` field with your IBAN.
.. note::
In the :guilabel:`Other Info` tab, the account indicated in the :guilabel:`Recipient Bank` field
is used to receive your customer's payment. Odoo automatically populates this field with your
IBAN by default and uses it to generate the EPC QR code.
When the invoice is printed or previewed, the QR code is included at the bottom.
.. image:: epc_qr_code/invoice-qr-code.png
:alt: QR code on a customer invoice
.. tip::
If you want to issue an invoice without an EPC QR code, remove the IBAN indicated in the
:guilabel:`Recipient Bank` field, under the :guilabel:`Other Info` tab of the invoice.
@@ -0,0 +1,58 @@
# Incoterms
{abbr}`Incoterms (International Commercial Terms)` are standardized trade terms used in
international transactions to define the rights and responsibilities of buyers and sellers. They
establish the obligations related to the delivery of goods, the transfer of risks, and the
distribution of costs between the parties involved. Incoterms specify important details, such as the
point at which the risk and costs transfer from the seller to the buyer, the responsibility for
transportation, insurance, customs clearance, and other relevant aspects of the transaction.
:::{note}
By default, all 11 Incoterms are available in Odoo:
- **EXW**: Ex works
- **FCA**: Free carrier
- **FAS**: Free alongside ship
- **FOB**: Free on board
- **CFR**: Cost and freight
- **CIF**: Cost, insurance and freight
- **CPT**: Carriage paid to
- **CIP**: Carriage and insurance paid to
- **DPU**: Delivered at place unloaded
- **DAP**: Delivered at place
- **DDP**: Delivered duty paid
:::
:::{seealso}
- {doc}`../reporting/intrastat`
- {doc}`../customer_invoices`
- {doc}`../vendor_bills`
:::
(incoterms-invoices)=
## Define an Incoterm
To define an Incoterm manually, create an invoice or bill, click the {guilabel}`Other Info` tab, and
select the {guilabel}`Incoterm`.
### Incoterm location
A location relevant to the chosen Incoterm can be added to the invoice or bill under
{guilabel}`Other Info` in the {guilabel}`Incoterm Location` field.
```{eval-rst}
.. example::
If the chosen Incoterm code is `CIF` (Cost, Insurance, Freight), the associated location might be
the destination port where the goods will be delivered.
```
(incoterms-default)=
## Default Incoterm configuration
You can set a default Incoterm rule to **automatically** populate the Incoterm field on all newly
created invoices and bills. Under {menuselection}`Accounting/Invoicing --> Configuration -->
Settings`, scroll down to the {guilabel}`Customer Invoices` section, and select an Incoterm in the
{guilabel}`Default Incoterm` field.
@@ -1,58 +0,0 @@
=========
Incoterms
=========
:abbr:`Incoterms (International Commercial Terms)` are standardized trade terms used in
international transactions to define the rights and responsibilities of buyers and sellers. They
establish the obligations related to the delivery of goods, the transfer of risks, and the
distribution of costs between the parties involved. Incoterms specify important details, such as the
point at which the risk and costs transfer from the seller to the buyer, the responsibility for
transportation, insurance, customs clearance, and other relevant aspects of the transaction.
.. note::
By default, all 11 Incoterms are available in Odoo:
- **EXW**: Ex works
- **FCA**: Free carrier
- **FAS**: Free alongside ship
- **FOB**: Free on board
- **CFR**: Cost and freight
- **CIF**: Cost, insurance and freight
- **CPT**: Carriage paid to
- **CIP**: Carriage and insurance paid to
- **DPU**: Delivered at place unloaded
- **DAP**: Delivered at place
- **DDP**: Delivered duty paid
.. seealso::
- :doc:`../reporting/intrastat`
- :doc:`../customer_invoices`
- :doc:`../vendor_bills`
.. _incoterms/invoices:
Define an Incoterm
==================
To define an Incoterm manually, create an invoice or bill, click the :guilabel:`Other Info` tab, and
select the :guilabel:`Incoterm`.
Incoterm location
-----------------
A location relevant to the chosen Incoterm can be added to the invoice or bill under
:guilabel:`Other Info` in the :guilabel:`Incoterm Location` field.
.. example::
If the chosen Incoterm code is `CIF` (Cost, Insurance, Freight), the associated location might be
the destination port where the goods will be delivered.
.. _incoterms/default:
Default Incoterm configuration
==============================
You can set a default Incoterm rule to **automatically** populate the Incoterm field on all newly
created invoices and bills. Under :menuselection:`Accounting/Invoicing --> Configuration -->
Settings`, scroll down to the :guilabel:`Customer Invoices` section, and select an Incoterm in the
:guilabel:`Default Incoterm` field.
@@ -1,6 +1,4 @@
===================
Invoicing processes
===================
# Invoicing processes
Depending on your business and the application you use, there are
different ways to automate the customer invoice creation in Odoo.
@@ -12,23 +10,19 @@ batch (by regular mail or email).
Depending on your business, you may opt for one of the following way to
create draft invoices:
Sales
=====
## Sales
Sales Order ‣ Invoice
---------------------
### Sales Order ‣ Invoice
In most companies, salespeople create quotations that become sales order
once they are validated. Then, draft invoices are created based on the
sales order. You have different options like:
- Invoice manually: use a button on the sale order to trigger the draft
invoice
- Invoice before delivery: invoice the full order before triggering the
delivery order
- Invoice based on delivery order: see next section
- Invoice manually: use a button on the sale order to trigger the draft
invoice
- Invoice before delivery: invoice the full order before triggering the
delivery order
- Invoice based on delivery order: see next section
Invoice before delivery is usually used by the eCommerce application
when the customer pays at the order and we deliver afterwards.
@@ -41,11 +35,11 @@ lines, invoice a fixed advance.
This process is good for both services and physical products.
.. seealso::
- :doc:`/applications/sales/sales/invoicing/proforma`
:::{seealso}
- {doc}`/applications/sales/sales/invoicing/proforma`
:::
Sales Order ‣ Delivery Order ‣ Invoice
--------------------------------------
### Sales Order ‣ Delivery Order ‣ Invoice
Retailers and eCommerce usually invoice based on delivery orders,
instead of sales order. This approach is suitable for businesses where
@@ -57,22 +51,20 @@ really delivered. If you do back orders (deliver partially and the rest
later), the customer will receive two invoices, one for each delivery
order.
.. seealso::
- :doc:`/applications/sales/sales/invoicing/invoicing_policy`
:::{seealso}
- {doc}`/applications/sales/sales/invoicing/invoicing_policy`
:::
eCommerce Order ‣ Invoice
-------------------------
### eCommerce Order ‣ Invoice
An eCommerce order will also trigger the creation of the order when it
is fully paid. If you allow paying orders by check or wire transfer,
Odoo only creates an order and the invoice will be triggered once the
payment is received.
Contracts
=========
## Contracts
Regular Contracts ‣ Invoices
----------------------------
### Regular Contracts ‣ Invoices
If you use contracts, you can trigger invoice based on time and material
spent, expenses or fixed lines of services/products. Every month, the
@@ -80,36 +72,35 @@ salesperson will trigger invoice based on activities on the contract.
Activities can be:
- fixed products/services, coming from a sale order linked to this contract
- materials purchased (that you will re-invoice)
- time and material based on timesheets or purchases (subcontracting)
- expenses like travel and accommodation that you re-invoice to the customer
- fixed products/services, coming from a sale order linked to this contract
- materials purchased (that you will re-invoice)
- time and material based on timesheets or purchases (subcontracting)
- expenses like travel and accommodation that you re-invoice to the customer
You can invoice at the end of the contract or trigger intermediate
invoices. This approach is used by services companies that invoice
mostly based on time and material. For services companies that invoice
on fix price, they use a regular sales order.
.. seealso::
- :doc:`/applications/sales/sales/invoicing/time_materials`
- :doc:`/applications/sales/sales/invoicing/expense`
- :doc:`/applications/sales/sales/invoicing/milestone`
:::{seealso}
- {doc}`/applications/sales/sales/invoicing/time_materials`
- {doc}`/applications/sales/sales/invoicing/expense`
- {doc}`/applications/sales/sales/invoicing/milestone`
:::
Recurring Contracts ‣ Invoices
------------------------------
### Recurring Contracts ‣ Invoices
For subscriptions, an invoice is triggered periodically, automatically.
The frequency of the invoicing and the services/products invoiced are
defined on the contract.
.. seealso::
- :doc:`/applications/sales/subscriptions`
:::{seealso}
- {doc}`/applications/sales/subscriptions`
:::
Others
======
## Others
Creating an invoice manually
----------------------------
### Creating an invoice manually
Users can also create invoices manually without using contracts or a
sales order. It's a recommended approach if you do not need to manage
@@ -119,37 +110,30 @@ services.
Even if you generate the invoice from a sales order, you may need to
create invoices manually in exceptional use cases:
- if you need to create a refund
- if you need to create a refund
- If you need to give a discount
- if you need to change an invoice created from a sales order
- if you need to invoice something not related to your core business
- If you need to give a discount
- if you need to change an invoice created from a sales order
- if you need to invoice something not related to your core business
Specific modules
----------------
### Specific modules
Some specific modules are also able to generate draft invoices:
- **membership**: invoice your members every year
- **membership**: invoice your members every year
- **repairs**: invoice your after-sale services
- **repairs**: invoice your after-sale services
Resequencing of the invoices
----------------------------
### Resequencing of the invoices
It remains possible to resequence the invoices but with some restrictions:
#. The feature does not work when entries are previous to a lock date.
#. The feature does not work if the sequence is inconsistent with the month of the entry.
#. It does not work if the sequence leads to a duplicate.
#. The order of the invoice remains unchanged.
#. It is useful for people who use a numbering from another software and who want to continue the
1. The feature does not work when entries are previous to a lock date.
2. The feature does not work if the sequence is inconsistent with the month of the entry.
3. It does not work if the sequence leads to a duplicate.
4. The order of the invoice remains unchanged.
5. It is useful for people who use a numbering from another software and who want to continue the
current year without starting over from the beginning.
Invoice digitization with optical character recognition (OCR)
-------------------------------------------------------------
### Invoice digitization with optical character recognition (OCR)
**Invoice digitization** is the process of automatically encoding traditional paper invoices into
invoices forms in your accounting.
@@ -158,5 +142,7 @@ Odoo uses OCR and artificial intelligence technologies to recognize the content
Vendor bills and customer invoices forms are automatically created and populated based on scanned
invoices.
.. seealso::
- :doc:`/applications/finance/accounting/vendor_bills/invoice_digitization`
:::{seealso}
- {doc}`/applications/finance/accounting/vendor_bills/invoice_digitization`
:::
@@ -1,6 +1,4 @@
===================================
Payment terms and installment plans
===================================
# Payment terms and installment plans
**Payment terms** specify all the conditions of a sale's payment to help ensure customers pay their
invoices correctly and on time.
@@ -15,6 +13,7 @@ vendor bills. Payment terms cover:
An **installment plan** allows the customers to pay an invoice in parts, with the amounts and
payment dates defined beforehand by the seller.
```{eval-rst}
.. example::
Immediate Payment
The full payment is due on the day of the invoice's issuance.
@@ -28,55 +27,65 @@ payment dates defined beforehand by the seller.
2% 10, Net 30 EOM
A 2% :doc:`cash discount <cash_discounts>` if the payment is received within ten days.
Otherwise, the full payment is due at the end of the month following the invoice date.
```
.. note::
- Payment terms are not to be confused with :doc:`down payment invoices
</applications/sales/sales/invoicing/down_payment>`. If, for a specific order, you issue
multiple invoices to your customer, that is neither a payment term nor an installment plan but
an invoicing policy.
- This page is about the *payment terms* feature, not :doc:`terms & conditions
<terms_conditions>`, which can be used to declare contractual obligations regarding content
use, return policies, and other policies surrounding the sale of goods and services.
:::{note}
- Payment terms are not to be confused with {doc}`down payment invoices
</applications/sales/sales/invoicing/down_payment>`. If, for a specific order, you issue
multiple invoices to your customer, that is neither a payment term nor an installment plan but
an invoicing policy.
- This page is about the *payment terms* feature, not {doc}`terms & conditions
<terms_conditions>`, which can be used to declare contractual obligations regarding content
use, return policies, and other policies surrounding the sale of goods and services.
:::
.. seealso::
- `Odoo Tutorials: payment terms <https://www.odoo.com/slides/slide/payment-terms-1679>`_
- :doc:`cash_discounts`
:::{seealso}
- [Odoo Tutorials: payment terms](https://www.odoo.com/slides/slide/payment-terms-1679)
- {doc}`cash_discounts`
:::
Configuration
=============
## Configuration
To create new payment terms, follow these steps:
#. Go to :menuselection:`Accounting --> Configuration --> Payment Terms` and click on
:guilabel:`New`.
#. Enter a name in the :guilabel:`Payment Terms` field. This field is the name displayed both
1. Go to {menuselection}`Accounting --> Configuration --> Payment Terms` and click on
{guilabel}`New`.
2. Enter a name in the {guilabel}`Payment Terms` field. This field is the name displayed both
internally and on sales orders.
#. Tick the :guilabel:`Early Discount` checkbox and fill out the discount percentage, discount days,
and :ref:`tax reduction <cash-discounts/tax-reductions>` fields to add a :doc:`cash discount
3. Tick the {guilabel}`Early Discount` checkbox and fill out the discount percentage, discount days,
and {ref}`tax reduction <cash-discounts/tax-reductions>` fields to add a {doc}`cash discount
<cash_discounts>`, if desired.
#. In the :guilabel:`Due Terms` section, add a set of rules (terms) to define what needs to be paid
4. In the {guilabel}`Due Terms` section, add a set of rules (terms) to define what needs to be paid
and by which due date(s). Defining terms automatically calculates the payments' due date(s). This
is particularly helpful for managing **installment plans** (:dfn:`payment terms with multiple
is particularly helpful for managing **installment plans** ({dfn}`payment terms with multiple
terms`).
To add a term, click on :guilabel:`Add a line`, define the discount's value and type in the
:guilabel:`Due` fields, then fill out the :guilabel:`After` fields to determine the due date.
#. Enter the text to be displayed on the document (sales order, invoice, etc.) in the gray textbox
in the :guilabel:`Preview` column.
#. Tick the :guilabel:`Show installment dates` checkbox to display a breakdown of each payment and
To add a term, click on {guilabel}`Add a line`, define the discount's value and type in the
{guilabel}`Due` fields, then fill out the {guilabel}`After` fields to determine the due date.
5. Enter the text to be displayed on the document (sales order, invoice, etc.) in the gray textbox
in the {guilabel}`Preview` column.
6. Tick the {guilabel}`Show installment dates` checkbox to display a breakdown of each payment and
its due date on the invoice report, if desired.
.. tip::
To instead specify a number of days *before the end of the month*, use a negative value in the
:guilabel:`After` field.
:::{tip}
To instead specify a number of days *before the end of the month*, use a negative value in the
{guilabel}`After` field.
:::
To test that your payment terms are configured correctly, enter an invoice date on the
:guilabel:`Example` line to generate the payments that would be due and their due dates
{guilabel}`Example` line to generate the payments that would be due and their due dates
using these payment terms.
.. important::
Terms are computed in the order of their due dates.
:::{important}
Terms are computed in the order of their due dates.
:::
```{eval-rst}
.. example::
In the following example, 30% is due on the day of issuance, and the remaining 70% is due at the
end of the following month.
@@ -84,40 +93,41 @@ using these payment terms.
.. image:: payment_terms/configuration.png
:alt: Example of Payment Terms. The first line is the 30% due immediately. The second line is
the remaining 70% due at the end of the following month.
```
Using payment terms
===================
## Using payment terms
Payment terms can be defined using the :guilabel:`Payment Terms` field on:
Payment terms can be defined using the {guilabel}`Payment Terms` field on:
- **Contacts:** To automatically set default payment terms on a contact's new sales orders,
invoices, and bills. This can be modified in the contact form, under the :guilabel:`Sales &
invoices, and bills. This can be modified in the contact form, under the {guilabel}`Sales &
Purchase` tab.
- **Quotations/Sales Orders:** To set specific payment terms automatically on all invoices generated
from a quotation or sales order.
Payment terms can be defined using the :guilabel:`Due Date` field, with the :guilabel:`Terms`
Payment terms can be defined using the {guilabel}`Due Date` field, with the {guilabel}`Terms`
drop-down list on:
- **Customer invoices:** To set specific payment terms on an invoice.
- **Vendor bills:** To set specific payment terms on a bill.
.. tip::
Setting payment terms on a vendor bill is mostly useful for managing vendor terms with multiple
installments or cash discounts. Otherwise, manually setting the **due date** is enough. If
payment terms are already defined, empty the field to select a date.
:::{tip}
Setting payment terms on a vendor bill is mostly useful for managing vendor terms with multiple
installments or cash discounts. Otherwise, manually setting the **due date** is enough. If
payment terms are already defined, empty the field to select a date.
:::
Journal entries
===============
## Journal entries
Invoices with specific payment terms generate different *journal entries*, with one *journal item*
for every computed *due date*.
This makes for easier :doc:`follow-ups </applications/finance/accounting/payments/follow_up>` and
:doc:`reconciliation </applications/finance/accounting/bank/reconciliation>` since Odoo takes each
This makes for easier {doc}`follow-ups </applications/finance/accounting/payments/follow_up>` and
{doc}`reconciliation </applications/finance/accounting/bank/reconciliation>` since Odoo takes each
due date into account, rather than just the balance due date. It also helps to get an accurate
:ref:`aged receivable report <accounting/invoices/aging-report>`.
{ref}`aged receivable report <accounting/invoices/aging-report>`.
```{eval-rst}
.. example::
.. image:: payment_terms/journal-entry.png
:alt: The amount debited to the account receivable is split into two journal items with
@@ -138,3 +148,5 @@ due date into account, rather than just the balance due date. It also helps to g
The $1000 debited to the account receivable is split into two distinct journal items. Both of
them have their own due date.
```
@@ -0,0 +1,74 @@
# Invoice sequence
When confirming an invoice, Odoo generates a unique invoice reference number. By default, Odoo uses
the following sequence format `INV/year/incrementing-number` (e.g., `INV/2025/00001`), which
restarts from `00001` each year.
However, it is possible to {ref}`change the sequence format <accounting/invoice/resequencing>` and
its periodicity, and to {ref}`mass-resequence invoices <accounting/invoice/mass-resequencing>`.
:::{note}
Changes made to reference numbers are logged in the chatter.
:::
(accounting-invoice-resequencing)=
## Changing the default sequence
To customize the default sequence, open the last confirmed invoice, click {guilabel}`Reset to
Draft`, and edit the invoice's reference number.
```{image} sequence/reference-number.png
:alt: Editing the reference number of an invoice.
```
Odoo then explains how the detected format will be applied to all future invoices. For example, if
the current invoice's month is added, the sequence's periodicity will change to every month instead
of every year.
```{image} sequence/sequence-dialog.png
:alt: Editing the reference number of an invoice.
```
:::{tip}
The sequence format can be edited directly when creating the first invoice of a given sequence
period.
:::
(accounting-invoice-mass-resequencing)=
## Mass-resequencing invoices
It can be helpful to resequence multiple invoice numbers. For example, when importing invoices from
another invoicing or accounting system and the reference originates from the previous software,
continuity for the current year must be maintained without restarting from the beginning.
:::{note}
This feature is only available to users with administrator or advisor access.
:::
Follow these steps to resequence invoice numbers:
1. Activate the {ref}`developer mode <developer-mode>`.
2. From the {guilabel}`Accounting Dashboard`, open the {guilabel}`Customer Invoices` journal.
3. Select the invoices that need a new sequence.
4. Click the {icon}`fa-cog` {guilabel}`Actions` menu and select {guilabel}`Resequence`.
5. In the {guilabel}`Ordering` field, choose to
- {guilabel}`Keep current order`: The order of the numbers remains the same.
- {guilabel}`Reorder by accounting date`: The number is reordered by accounting date.
6. Set the {guilabel}`First New Sequence`.
7. {guilabel}`Preview Modifications` and click {guilabel}`Confirm`.
The first invoice using the new sequence appears in red in the {guilabel}`Customer Invoices` list.
```{image} sequence/invoice-sequencing.png
:alt: Resequence options window
```
@@ -1,66 +0,0 @@
================
Invoice sequence
================
When confirming an invoice, Odoo generates a unique invoice reference number. By default, Odoo uses
the following sequence format `INV/year/incrementing-number` (e.g., `INV/2025/00001`), which
restarts from `00001` each year.
However, it is possible to :ref:`change the sequence format <accounting/invoice/resequencing>` and
its periodicity, and to :ref:`mass-resequence invoices <accounting/invoice/mass-resequencing>`.
.. note::
Changes made to reference numbers are logged in the chatter.
.. _accounting/invoice/resequencing:
Changing the default sequence
=============================
To customize the default sequence, open the last confirmed invoice, click :guilabel:`Reset to
Draft`, and edit the invoice's reference number.
.. image:: sequence/reference-number.png
:alt: Editing the reference number of an invoice.
Odoo then explains how the detected format will be applied to all future invoices. For example, if
the current invoice's month is added, the sequence's periodicity will change to every month instead
of every year.
.. image:: sequence/sequence-dialog.png
:alt: Editing the reference number of an invoice.
.. tip::
The sequence format can be edited directly when creating the first invoice of a given sequence
period.
.. _accounting/invoice/mass-resequencing:
Mass-resequencing invoices
==========================
It can be helpful to resequence multiple invoice numbers. For example, when importing invoices from
another invoicing or accounting system and the reference originates from the previous software,
continuity for the current year must be maintained without restarting from the beginning.
.. note::
This feature is only available to users with administrator or advisor access.
Follow these steps to resequence invoice numbers:
#. Activate the :ref:`developer mode <developer-mode>`.
#. From the :guilabel:`Accounting Dashboard`, open the :guilabel:`Customer Invoices` journal.
#. Select the invoices that need a new sequence.
#. Click the :icon:`fa-cog` :guilabel:`Actions` menu and select :guilabel:`Resequence`.
#. In the :guilabel:`Ordering` field, choose to
- :guilabel:`Keep current order`: The order of the numbers remains the same.
- :guilabel:`Reorder by accounting date`: The number is reordered by accounting date.
#. Set the :guilabel:`First New Sequence`.
#. :guilabel:`Preview Modifications` and click :guilabel:`Confirm`.
The first invoice using the new sequence appears in red in the :guilabel:`Customer Invoices` list.
.. image:: sequence/invoice-sequencing.png
:alt: Resequence options window
@@ -0,0 +1,54 @@
(customer-invoices-snailmail)=
# Snailmail
Sending direct mail can be an effective strategy for grabbing people's attention, especially when
their email inboxes are overflowing. With Odoo, you have the ability to send invoices and follow-up
reports through postal mail worldwide, all from within your database.
## Configuration
Go to {menuselection}`Accounting --> Configuration --> Settings --> Customer invoices` section to
activate {guilabel}`Snailmail`.
To make it a by-default feature, select {guilabel}`Send by Post` in the {guilabel}`Default Sending
Options` section.
```{image} snailmail/setup-snailmail.png
:align: center
:alt: Under settings enable the snailmail feature in Odoo Accounting
```
## Send invoices by post
Open your invoice, click on {guilabel}`Send & Print` and select {guilabel}`Send by Post`. Make sure
your customers address is set correctly, including the country, before sending the letter.
:::{important}
Your document must respect the following rules to pass the validation before being sent:
- Margins must be **5 mm** on all sides. As Odoo forces the outer margins by filling them with
white before sending the snailmail, it can results in the user's custom being cut off if it
protrudes into the margins. To check the margins, activate the {ref}`developer mode
<developer-mode>`, go to {menuselection}`General Settings --> Technical --> Reporting
section: Paper Format`.
- A square of **15mm by 15mm** on the bottom left corner has to stay clear.
- The postage area has to stay clear ({download}`download the snailmail PDF template
<snailmail/snailmail-template.pdf>` for more details).
- Pingen (Odoo Snailmail service provider) scans the area to process the address, so if something
gets written outside the area, it is not counted as part of the address.
:::
## Pricing
Snailmail is an {doc}`/applications/essentials/in_app_purchase` service that requires prepaid stamps
(=credits) to work. Sending one document consumes one stamp.
To buy stamps, go to {menuselection}`Accounting --> Configuration --> Settings --> Customer
invoices: Snailmail`, click on {guilabel}`Buy credits`, or go to {menuselection}`Settings --> In-App
Purchases: Odoo IAP`, and click on {guilabel}`View my Services`.
:::{seealso}
[Odoo's IAP Privacy Policy](https://iap.odoo.com/privacy#header_4)
:::
@@ -1,55 +0,0 @@
.. _customer_invoices/snailmail:
=========
Snailmail
=========
Sending direct mail can be an effective strategy for grabbing people's attention, especially when
their email inboxes are overflowing. With Odoo, you have the ability to send invoices and follow-up
reports through postal mail worldwide, all from within your database.
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Settings --> Customer invoices` section to
activate :guilabel:`Snailmail`.
To make it a by-default feature, select :guilabel:`Send by Post` in the :guilabel:`Default Sending
Options` section.
.. image:: snailmail/setup-snailmail.png
:align: center
:alt: Under settings enable the snailmail feature in Odoo Accounting
Send invoices by post
=====================
Open your invoice, click on :guilabel:`Send & Print` and select :guilabel:`Send by Post`. Make sure
your customers address is set correctly, including the country, before sending the letter.
.. important::
Your document must respect the following rules to pass the validation before being sent:
- Margins must be **5 mm** on all sides. As Odoo forces the outer margins by filling them with
white before sending the snailmail, it can results in the user's custom being cut off if it
protrudes into the margins. To check the margins, activate the :ref:`developer mode
<developer-mode>`, go to :menuselection:`General Settings --> Technical --> Reporting
section: Paper Format`.
- A square of **15mm by 15mm** on the bottom left corner has to stay clear.
- The postage area has to stay clear (:download:`download the snailmail PDF template
<snailmail/snailmail-template.pdf>` for more details).
- Pingen (Odoo Snailmail service provider) scans the area to process the address, so if something
gets written outside the area, it is not counted as part of the address.
Pricing
=======
Snailmail is an :doc:`/applications/essentials/in_app_purchase` service that requires prepaid stamps
(=credits) to work. Sending one document consumes one stamp.
To buy stamps, go to :menuselection:`Accounting --> Configuration --> Settings --> Customer
invoices: Snailmail`, click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> In-App
Purchases: Odoo IAP`, and click on :guilabel:`View my Services`.
.. seealso::
`Odoo's IAP Privacy Policy <https://iap.odoo.com/privacy#header_4>`_
@@ -0,0 +1,42 @@
# Default terms and conditions (T&C)
Specifying terms and conditions is essential to establish important contractual points, such as
return and refunds, warranty, and after-sale services.
You can add default terms and conditions at the bottom of all customer invoices, sales orders, and
quotations, either as text or a link to a web page.
:::{seealso}
[Odoo Tutorial: Terms & Conditions](https://www.odoo.com/slides/slide/terms-conditions-1680)
:::
## Configuration
Go to {menuselection}`Accounting --> Configuration --> Settings`. Under the {guilabel}`Customer
Invoices`, enable {guilabel}`Default Terms & Conditions`. By default, the {guilabel}`Add a Note`
option is selected, and the terms and conditions are displayed at the bottom of the document. Enter
the terms and conditions in the text box below.
```{image} terms_conditions/terms-note.png
:alt: Example of terms and conditions as a note
```
:::{tip}
You can also add a PDF version of your terms and conditions as an attachment when sending the
document via email. Edit the email templates if you want to include them by default.
:::
Alternatively, to display the terms and conditions on a web page, select the {guilabel}`Add a link
to a Web Page` option and click {guilabel}`Save`. Click {guilabel}`Update Terms`, edit the
content, and click {guilabel}`Save`. The link to that page is then added as a note in your document.
:::{note}
You can edit the layout and content of the page using the {doc}`Website
</applications/websites/website>` app. If the Website app is activated, the {guilabel}`Edit in
Website Builder` option then replaces {guilabel}`Update Terms`.
:::
```{image} terms_conditions/terms-webpage.png
:alt: Example of terms and conditions as a web page
```
@@ -1,39 +0,0 @@
==================================
Default terms and conditions (T&C)
==================================
Specifying terms and conditions is essential to establish important contractual points, such as
return and refunds, warranty, and after-sale services.
You can add default terms and conditions at the bottom of all customer invoices, sales orders, and
quotations, either as text or a link to a web page.
.. seealso::
`Odoo Tutorial: Terms & Conditions <https://www.odoo.com/slides/slide/terms-conditions-1680>`_
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
Invoices`, enable :guilabel:`Default Terms & Conditions`. By default, the :guilabel:`Add a Note`
option is selected, and the terms and conditions are displayed at the bottom of the document. Enter
the terms and conditions in the text box below.
.. image:: terms_conditions/terms-note.png
:alt: Example of terms and conditions as a note
.. tip::
You can also add a PDF version of your terms and conditions as an attachment when sending the
document via email. Edit the email templates if you want to include them by default.
Alternatively, to display the terms and conditions on a web page, select the :guilabel:`Add a link
to a Web Page` option and click :guilabel:`Save`. Click :guilabel:`Update Terms`, edit the
content, and click :guilabel:`Save`. The link to that page is then added as a note in your document.
.. note::
You can edit the layout and content of the page using the :doc:`Website
</applications/websites/website>` app. If the Website app is activated, the :guilabel:`Edit in
Website Builder` option then replaces :guilabel:`Update Terms`.
.. image:: terms_conditions/terms-webpage.png
:alt: Example of terms and conditions as a web page
@@ -0,0 +1,198 @@
---
show-content: true
---
# Get started
When you first open your Odoo Accounting app, the {guilabel}`Accounting Dashboard` welcomes you with
a step-by-step onboarding banner, a wizard that helps you get started. This onboarding banner is
displayed until you choose to close it.
The settings visible in the onboarding banner can still be modified later by going to
{menuselection}`Accounting --> Configuration --> Settings`.
:::{note}
Odoo Accounting automatically installs the appropriate **Fiscal Localization Package** for your
company, according to the country selected at the creation of the database. This way, the right
accounts, reports, and taxes are ready-to-go. {ref}`Click here <fiscal_localizations/packages>`
for more information about Fiscal Localization Packages.
:::
## Accounting onboarding banner
The step-by-step Accounting onboarding banner is composed of four steps:
```{image} get_started/accounting-onboarding-banner.png
:alt: Step-by-step onboarding banner in Odoo Accounting
```
1. {ref}`accounting-setup-periods`
2. {ref}`accounting-setup-bank`
3. {ref}`accounting-setup-taxes`
4. {ref}`accounting-setup-chart`
(accounting-setup-periods)=
### Accounting Periods
Define the **Fiscal Years** opening and closing dates, which are used to generate reports
automatically, and set your **Tax Return Periodicity**, along with a reminder to never miss a tax
return deadline.
By default, the opening date is set on the 1st of January and the closing date on the 31st of
December, as this is the most common use.
:::{note}
You can also change these settings by going to {menuselection}`Accounting --> Configuration -->
Settings --> Fiscal Periods` and updating the values.
:::
(accounting-setup-bank)=
### Bank Account
Connect your bank account to your database and have your bank statements synced automatically. To do
so, find your bank in the list, click {guilabel}`Connect`, and follow the instructions on-screen.
:::{note}
{doc}`Click here <bank/bank_synchronization>` for more information about this feature.
:::
If your Bank Institution cant be synchronized automatically, or if you prefer not to sync it with
your database, you can also configure your bank account manually by typing its name, clicking
{guilabel}`Create your Bank Account`, and filling out the form.
- {guilabel}`Name`: the bank account's name, as displayed in Odoo.
- {guilabel}`Account Number`: your bank account number (IBAN in Europe).
- {guilabel}`Bank`: click {guilabel}`Create and edit` to configure the bank's details. Add the
bank institution's {guilabel}`Name` and its {guilabel}`Identifier Code` (BIC or SWIFT).
- {guilabel}`Code`: this code is your Journal's {guilabel}`Short Code`, as displayed in Odoo.
By default, Odoo creates a new Journal with this short code.
- {guilabel}`Journal`: This field is displayed if you have an existing bank journal that is not
linked yet to a bank account. If so, then select the {guilabel}`Journal` you want to use to record
the financial transactions linked to this bank account or create a new one by clicking
{guilabel}`Create and Edit`.
:::{note}
- You can add as many bank accounts as needed with this tool by going to
{menuselection}`Accounting --> Configuration --> Add a Bank Account`.
- {doc}`Click here <bank>` for more information about Bank Accounts.
:::
(accounting-setup-taxes)=
### Taxes
This menu allows you to create new taxes, (de)activate, or modify existing taxes. Depending on the
{doc}`localization package <../fiscal_localizations>` installed on your database, taxes required for
your country are already configured.
:::{note}
{doc}`Click here <taxes>` for more information about taxes.
:::
(accounting-setup-chart)=
### Chart of Accounts
With this menu, you can add accounts to your **Chart of Accounts** and indicate their initial
opening balances.
Basic settings are displayed on this page to help you review your Chart of Accounts. To access all
the settings of an account, click on the {guilabel}`Setup` button at the end of the line.
```{image} get_started/setup_chart_of_accounts.png
:alt: Setup of the Chart of Accounts and their opening balances in Odoo Accounting
```
:::{note}
{doc}`Click here <get_started/chart_of_accounts>` for more information on how to configure your
Chart of Accounts.
:::
## Invoicing onboarding banner
There is another step-by-step onboarding banner that helps you take advantage of your Odoo Invoicing
and Accounting apps. The Invoicing onboarding banner is the one that welcomes you if you use the
Invoicing app rather than the Accounting app.
If you have Odoo Accounting installed on your database, you can reach it by going to
{menuselection}`Accounting --> Customers --> Invoices`.
The Invoicing onboarding banner consists of four main steps:
```{image} get_started/invoicing-onboarding-banner.png
:alt: Step-by-step onboarding banner in Odoo Invoicing
```
1. {ref}`invoicing-setup-company`
2. {ref}`invoicing-setup-layout`
3. {ref}`invoicing-setup-invoice`
4. {ref}`invoicing-setup-payments`
(invoicing-setup-company)=
### Company Data
Add your companys details, such as the name, address, logo, website, phone number, email address,
and Tax ID or VAT number. These details are then displayed on your documents, such as invoices.
:::{note}
You can also change the company's details by going to {menuselection}`Settings --> General
Settings`, scrolling down to the {guilabel}`Companies` section, and {guilabel}`Update Info`.
:::
(invoicing-setup-layout)=
### Documents Layout
Customize the {ref}`default invoice layout <studio/pdf-reports/default-layout>`.
:::{note}
You can also change the invoice layout by going to {menuselection}`Settings --> General
Settings`, scrolling down to the {guilabel}`Companies` section, and clicking {guilabel}`Configure
Document Layout`.
:::
(invoicing-setup-invoice)=
### Create Invoice
Create your first invoice.
:::{tip}
Add your **bank account number** and a link to your **General Terms & Condition** in the footer.
This way, your contacts can find the full content of your GT&C online without having to print
them on the invoices you issue.
:::
(invoicing-setup-payments)=
### Online Payments
Get started with Stripe and enable secure integrated credit and debit card payments within Odoo.
:::{tip}
To use other payment providers, go to
{guilabel}`Invoicing --> Configuration --> Payment Providers` and
{doc}`enable the desired providers <../payment_providers>`.
:::
:::{seealso}
- {doc}`bank`
- {doc}`get_started/chart_of_accounts`
- {doc}`bank/bank_synchronization`
- {doc}`../fiscal_localizations`
- [Odoo Tutorials: Accounting and Invoicing - Getting started [video]](https://www.odoo.com/slides/slide/getting-started-1692)
:::
```{toctree}
:titlesonly: true
get_started/cheat_sheet
get_started/chart_of_accounts
get_started/multi_currency
get_started/avg_price_valuation
get_started/tax_units
```
@@ -1,194 +0,0 @@
:show-content:
===========
Get started
===========
When you first open your Odoo Accounting app, the :guilabel:`Accounting Dashboard` welcomes you with
a step-by-step onboarding banner, a wizard that helps you get started. This onboarding banner is
displayed until you choose to close it.
The settings visible in the onboarding banner can still be modified later by going to
:menuselection:`Accounting --> Configuration --> Settings`.
.. note::
Odoo Accounting automatically installs the appropriate **Fiscal Localization Package** for your
company, according to the country selected at the creation of the database. This way, the right
accounts, reports, and taxes are ready-to-go. :ref:`Click here <fiscal_localizations/packages>`
for more information about Fiscal Localization Packages.
Accounting onboarding banner
============================
The step-by-step Accounting onboarding banner is composed of four steps:
.. image:: get_started/accounting-onboarding-banner.png
:alt: Step-by-step onboarding banner in Odoo Accounting
#. :ref:`accounting-setup-periods`
#. :ref:`accounting-setup-bank`
#. :ref:`accounting-setup-taxes`
#. :ref:`accounting-setup-chart`
.. _accounting-setup-periods:
Accounting Periods
------------------
Define the **Fiscal Years** opening and closing dates, which are used to generate reports
automatically, and set your **Tax Return Periodicity**, along with a reminder to never miss a tax
return deadline.
By default, the opening date is set on the 1st of January and the closing date on the 31st of
December, as this is the most common use.
.. note::
You can also change these settings by going to :menuselection:`Accounting --> Configuration -->
Settings --> Fiscal Periods` and updating the values.
.. _accounting-setup-bank:
Bank Account
------------
Connect your bank account to your database and have your bank statements synced automatically. To do
so, find your bank in the list, click :guilabel:`Connect`, and follow the instructions on-screen.
.. note::
:doc:`Click here <bank/bank_synchronization>` for more information about this feature.
If your Bank Institution cant be synchronized automatically, or if you prefer not to sync it with
your database, you can also configure your bank account manually by typing its name, clicking
:guilabel:`Create your Bank Account`, and filling out the form.
- :guilabel:`Name`: the bank account's name, as displayed in Odoo.
- :guilabel:`Account Number`: your bank account number (IBAN in Europe).
- :guilabel:`Bank`: click :guilabel:`Create and edit` to configure the bank's details. Add the
bank institution's :guilabel:`Name` and its :guilabel:`Identifier Code` (BIC or SWIFT).
- :guilabel:`Code`: this code is your Journal's :guilabel:`Short Code`, as displayed in Odoo.
By default, Odoo creates a new Journal with this short code.
- :guilabel:`Journal`: This field is displayed if you have an existing bank journal that is not
linked yet to a bank account. If so, then select the :guilabel:`Journal` you want to use to record
the financial transactions linked to this bank account or create a new one by clicking
:guilabel:`Create and Edit`.
.. note::
- You can add as many bank accounts as needed with this tool by going to
:menuselection:`Accounting --> Configuration --> Add a Bank Account`.
- :doc:`Click here <bank>` for more information about Bank Accounts.
.. _accounting-setup-taxes:
Taxes
-----
This menu allows you to create new taxes, (de)activate, or modify existing taxes. Depending on the
:doc:`localization package <../fiscal_localizations>` installed on your database, taxes required for
your country are already configured.
.. note::
:doc:`Click here <taxes>` for more information about taxes.
.. _accounting-setup-chart:
Chart of Accounts
-----------------
With this menu, you can add accounts to your **Chart of Accounts** and indicate their initial
opening balances.
Basic settings are displayed on this page to help you review your Chart of Accounts. To access all
the settings of an account, click on the :guilabel:`Setup` button at the end of the line.
.. image:: get_started/setup_chart_of_accounts.png
:alt: Setup of the Chart of Accounts and their opening balances in Odoo Accounting
.. note::
:doc:`Click here <get_started/chart_of_accounts>` for more information on how to configure your
Chart of Accounts.
Invoicing onboarding banner
===========================
There is another step-by-step onboarding banner that helps you take advantage of your Odoo Invoicing
and Accounting apps. The Invoicing onboarding banner is the one that welcomes you if you use the
Invoicing app rather than the Accounting app.
If you have Odoo Accounting installed on your database, you can reach it by going to
:menuselection:`Accounting --> Customers --> Invoices`.
The Invoicing onboarding banner consists of four main steps:
.. image:: get_started/invoicing-onboarding-banner.png
:alt: Step-by-step onboarding banner in Odoo Invoicing
#. :ref:`invoicing-setup-company`
#. :ref:`invoicing-setup-layout`
#. :ref:`invoicing-setup-invoice`
#. :ref:`invoicing-setup-payments`
.. _invoicing-setup-company:
Company Data
------------
Add your companys details, such as the name, address, logo, website, phone number, email address,
and Tax ID or VAT number. These details are then displayed on your documents, such as invoices.
.. note::
You can also change the company's details by going to :menuselection:`Settings --> General
Settings`, scrolling down to the :guilabel:`Companies` section, and :guilabel:`Update Info`.
.. _invoicing-setup-layout:
Documents Layout
----------------
Customize the :ref:`default invoice layout <studio/pdf-reports/default-layout>`.
.. note::
You can also change the invoice layout by going to :menuselection:`Settings --> General
Settings`, scrolling down to the :guilabel:`Companies` section, and clicking :guilabel:`Configure
Document Layout`.
.. _invoicing-setup-invoice:
Create Invoice
--------------
Create your first invoice.
.. tip::
Add your **bank account number** and a link to your **General Terms & Condition** in the footer.
This way, your contacts can find the full content of your GT&C online without having to print
them on the invoices you issue.
.. _invoicing-setup-payments:
Online Payments
---------------
Get started with Stripe and enable secure integrated credit and debit card payments within Odoo.
.. tip::
To use other payment providers, go to
:guilabel:`Invoicing --> Configuration --> Payment Providers` and
:doc:`enable the desired providers <../payment_providers>`.
.. seealso::
* :doc:`bank`
* :doc:`get_started/chart_of_accounts`
* :doc:`bank/bank_synchronization`
* :doc:`../fiscal_localizations`
* `Odoo Tutorials: Accounting and Invoicing - Getting started [video]
<https://www.odoo.com/slides/slide/getting-started-1692>`_
.. toctree::
:titlesonly:
get_started/cheat_sheet
get_started/chart_of_accounts
get_started/multi_currency
get_started/avg_price_valuation
get_started/tax_units
@@ -0,0 +1,432 @@
---
substitutions:
AVCO: '{abbr}`AVCO (Average Cost Valuation)`'
---
# Average price on returned goods
(inventory-avg-cost-definition)=
*Average cost valuation* (AVCO) is an inventory valuation method that evaluates cost based on the
total cost of goods bought or produced during a period, divided by the total number of items
on-hand. Inventory valuation is used to:
- reflect the value of a company's assets;
- keep track of the amount of unsold goods;
- account for monetary value in goods that have yet to generate profit;
- report on flow of goods throughout the quarter.
Because {{ AVCO }} uses the weighted average to evaluate the cost, it is a good fit for companies that
sell only a few different products in large quantities. In Odoo, this costing analysis is
*automatically updated* each time products are received.
Thus, when shipments are returned to their supplier, Odoo automatically generates accounting entries
to reflect the change in inventory valuation. However, Odoo does **not** automatically update the
{{ AVCO }} calculation, because {ref}`this can potentially create inconsistencies with inventory
valuation <inventory/avg_price/leaving_inventory>`.
:::{note}
This document addresses a specific use case for theoretical purposes. For instructions on how to
set up and use {{ AVCO }}, refer to the {doc}`inventory valuation configuration
<../../../inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config>`
doc.
:::
:::{seealso}
- {doc}`Using inventory valuation
<../../../inventory_and_mrp/inventory/product_management/inventory_valuation/using_inventory_valuation>`
- {ref}`Other inventory valuation methods <inventory/warehouses_storage/costing_methods>`
:::
## Configuration
To use average cost inventory valuation on a product, navigate to {menuselection}`Inventory -->
Configuration --> Product Categories` and select the category that will be using {{ AVCO }}. On the
product category page, set {guilabel}`Costing Method` to `Average Cost (AVCO)` and
{guilabel}`Inventory Valuation` to `Automated`.
:::{seealso}
{doc}`Inventory valuation configuration
<../../../inventory_and_mrp/inventory/product_management/inventory_valuation/inventory_valuation_config>`
:::
## Using average cost valuation
The average cost method adjusts the inventory valuation when products are received in the warehouse.
This section explains how it works, but if the explanation is unnecessary, skip to the {ref}`return
to supplier use case <inventory/avg_cost/return>` section.
(inventory-avg-cost-formula)=
### Formula
When new products arrive, the new average cost for each product is recomputed using the formula:
$$
Avg~Cost = \frac{(Old~Qty \times Old~Avg~Cost) + (Incoming~Qty \times Purchase~Price)}{Final~Qty}
$$
- **Old Qty**: product count in stock before receiving the new shipment;
- **Old Avg Cost**: calculated average cost for a single product from the previous inventory
valuation;
- **Incoming Qty**: count of products arriving in the new shipment;
- **Purchase Price**: estimated price of products at the reception of products (since vendor bills
may arrive later). The amount includes not only the price for the products, but also added costs,
such as shipping, taxes, and {doc}`landed costs
<../../../inventory_and_mrp/inventory/product_management/inventory_valuation/landed_costs>`. At
reception of the vendor bill, this price is adjusted;
- **Final Qty**: quantity of on-hand stock after the stock move.
(inventory-avg-cost-definite-rule)=
:::{important}
When products leave the warehouse, the average cost **does not** change. Read about why the
average cost valuation is **not** adjusted {ref}`here <inventory/avg_price/leaving_inventory>`.
:::
(inventory-avg-cost-math-table)=
### Compute average cost
To understand how the average cost of a product changes with each shipment, consider the following
table of warehouse operations and stock moves. Each is a different example of how the average cost
valuation is affected.
| Operation | Incoming Value | Inventory Value | Qty On Hand | Avg Cost |
| ----------------------------- | -------------- | --------------- | ----------- | -------- |
| | | \$0 | 0 | \$0 |
| Receive 8 tables at \$10/unit | 8 * \$10 | \$80 | 8 | \$10 |
| Receive 4 tables at \$16/unit | 4 * \$16 | \$144 | 12 | \$12 |
| Deliver 10 tables | -10 * \$12 | \$24 | 2 | \$12 |
(inventory-avg-cost-ex-1)=
```{eval-rst}
.. exercise::
Ensure comprehension of the above computations by reviewing the "Receive 8 tables at $10/unit"
example.
Initially, the product stock is 0, so all values are $0.
In the first warehouse operation, `8` tables are received at `$10` each. The average cost is
calculated using the :ref:`formula <inventory/avg_cost/formula>`:
.. math::
Avg~Cost = \frac{0 + 8 \times $10}{8} = \frac{$80}{8} = $10
- Since the *incoming quantity* of tables is `8` and the *purchase price* for each is `$10`,
- The inventory value in the numerator is evaluated to `$80`;
- `$80` is divided by the total amount of tables to store, `8`;
- `$10` is the average cost of a single table from the first shipment.
To verify this in Odoo, in the *Purchase* app, order `8` quantities of a new product, `Table`,
with no previous stock moves, for `$10` each.
In the table's :guilabel:`Product Category` field in the :guilabel:`General Information` tab of
the product form, click the :guilabel:`➡️ (arrow)` icon, to open an :guilabel:`External Link` to
edit the product category. Set the :guilabel:`Costing Method` to `Average Cost (AVCO)` and
:guilabel:`Inventory Valuation` to `Automated`.
Then, return to the purchase order. Click :guilabel:`Confirm Order`, and click :guilabel:`Receive
Products` to confirm receipt.
Next, check the inventory valuation record generated by the product reception by navigating to
:menuselection:`Inventory --> Reporting --> Inventory Valuation`. Select the drop-down for
`Table`, and view the :guilabel:`Total Value` column for the *valuation layer* (:dfn:`inventory
valuation at a specific point in time = on-hand quantity * unit price`). The 8 tables in-stock
are worth $80.
.. image:: avg_price_valuation/inventory-val-8-tables.png
:align: center
:alt: Show inventory valuation of 8 tables in Odoo.
```
:::{tip}
When the product category's {guilabel}`Costing Method` is set to {guilabel}`AVCO`, then the
average cost of a product is also displayed on the {guilabel}`Cost` field, under the
{guilabel}`General Information` tab, on the product page itself.
:::
#### Product delivery (use case)
For outgoing shipments, {ref}`outbound products have no effect on the average cost valuation
<inventory/avg_cost/definite_rule>`. Although the average cost valuation is not recalculated, the
inventory value still decreases because the product is removed from stock and delivered to the
customer location.
```{eval-rst}
.. exercise::
To demonstrate that the average cost valuation is not recalculated, examine the "Deliver 10
tables" example.
.. math::
Avg~Cost = \frac{12 \times $12 + (-10) \times $12}{12-10} = \frac{24}{2} = $12
#. Because 10 tables are being sent out to customers, the *incoming quantity* is `-10`. The
previous average cost (`$12`) is used in lieu of a vendor's *purchase price*;
#. The *incoming inventory value* is `-10 * $12 = -$120`;
#. The old *inventory value* (`$144`) is added to the *incoming inventory value* (`-$120`), so
`$144 + -$120 = $24`;
#. Only `2` tables remain after shipping out `10` tables from `12`. So the current *inventory
value* (`$24`) is divided by the on-hand quantity (`2`);
#. `$24 / 2 = $12`, which is the same average cost as the previous operation.
To verify this in Odoo, sell `10` tables in the *Sales* app, validate the delivery, and then
review the inventory valuation record by going to in :menuselection:`Inventory --> Reporting -->
Inventory Valuation`. In the topmost valuation layer, delivering `10` tables reduces the
product's value by `-$120`.
**Note**: What is not represented in this stock valuation record is the revenue made from this
sale, so this decrease is not a loss to the company.
.. image:: avg_price_valuation/inventory-val-send-10-tables.png
:align: center
:alt: Show how deliveries decrease inventory valuation.
```
(inventory-avg-cost-return)=
## Return items to supplier (use case)
Because the price paid to suppliers can differ from the price the product is valued at with the
{{ AVCO }} method, Odoo handles returned items in a specific way.
1. Products are returned to suppliers at the original purchase price, but;
2. The internal cost valuation remains unchanged.
The above {ref}`example table <inventory/avg_cost/math_table>` is updated as follows:
| Operation | Qty\*Avg Cost | Inventory Value | Qty On Hand | Avg Cost |
| ----------------------------- | ------------- | --------------- | ----------- | -------- |
| | | \$24 | 2 | \$12 |
| Return 1 table bought at \$10 | -1 * \$12 | \$12 | 1 | \$12 |
In other words, returns to vendors are perceived by Odoo as another form of a product exiting the
warehouse. To Odoo, because the table is valued at \$12 per unit, the inventory value is reduced by
`$12` when the product is returned; the initial purchase price of `$10` is unrelated to the table's
average cost.
```{eval-rst}
.. example::
To return a single table that was purchased for `$10`, navigate to the receipt in the *Inventory*
app for the :ref:`8 tables purchased in Exercise 1 <inventory/avg_cost/ex-1>` by going to the
:guilabel:`Inventory Overview`, clicking on :guilabel:`Receipts`, and selecting the desired
receipt.
Then, click :guilabel:`Return` on the validated delivery order, and modify the quantity to `1` in
the reverse transfer window. This creates an outgoing shipment for the table. Select
:guilabel:`Validate` to confirm the outgoing shipment.
Return to :menuselection:`Inventory --> Reporting --> Inventory Valuation` to see how the
outgoing shipment decreases the inventory value by $12.
.. image:: avg_price_valuation/inventory-valuation-return.png
:align: center
:alt: Inventory valuation for return.
```
(inventory-avg-price-leaving-inventory)=
### Eliminate stock valuation errors in outgoing products
Inconsistencies can occur in a company's inventory when the average cost valuation is recalculated
on outgoing shipments.
To demonstrate this error, the table below displays a scenario in which 1 table is shipped to a
customer and another is returned to a supplier at the purchased price.
| Operation | Qty\*Price | Inventory Value | Qty On Hand | Avg Cost |
| ----------------------------------------- | ---------- | --------------- | ----------- | -------- |
| | | \$24 | 2 | \$12 |
| Ship 1 product to customer | -1 * \$12 | \$12 | 1 | \$12 |
| Return 1 product initially bought at \$10 | -1 * \$10 | **\$2** | **0** | \$12 |
In the final operation above, the final inventory valuation for the table is `$2` even though there
are `0` tables left in stock.
:::{admonition} Correct method
Use the average cost to value the return. This does not mean the company gets \$12 back for a \$10
purchase; the item returned for \$10 is valued internally at \$12. The inventory value change
represents a product worth \$12 no longer being accounted for in company assets.
:::
## Anglo-Saxon accounting
In addition to using {{ AVCO }}, companies that use **Anglo-Saxon accounting** also keep a holding
account that tracks the amount to be paid to vendors. Once a vendor delivers an order, **inventory
value** increases based on the vendor price of the products that have entered the stock. The holding
account (called **stock input**) is credited and only reconciled once the vendor bill is received.
:::{seealso}
- {ref}`Anglo-Saxon vs. Continental <inventory/warehouses_storage/accounting-types>`
:::
The table below reflects journal entries and accounts. The *stock input* account stores the money
intended to pay vendors when the vendor bill has not yet been received. To balance accounts when
returning products that have a price difference between the price the product is **valued at** and
the price it was bought for, a *price difference* account is created.
(inventory-avg-price-price-table)=
| Operation | Stock Input | Price Diff | Inventory Value | Qty On Hand | Avg Cost |
| --------------------------------------- | ----------- | ---------- | --------------- | ----------- | -------- |
| | | | \$0 | 0 | \$0 |
| Receive 8 tables at \$10 | (\$80) | | \$80 | 8 | \$10 |
| Receive vendor bill \$80 | \$0 | | \$80 | 8 | \$10 |
| Receive 4 tables at \$16 | (\$64) | | \$144 | 12 | \$12 |
| Receive vendor bill \$64 | \$0 | | \$144 | 12 | \$12 |
| Deliver 10 tables to customer | \$0 | | \$24 | 2 | \$12 |
| Return 1 table initially bought at \$10 | **\$10** | **\$2** | **\$12** | 1 | \$12 |
| Receive vendor refund \$10 | \$0 | \$2 | \$12 | 1 | \$12 |
### Product reception
#### Summary
At product reception, Odoo ensures companies can pay for goods that were purchased by preemptively
moving an amount matching the price of received goods into the {doc}`liability account
</applications/finance/accounting/get_started/cheat_sheet>`, **Stock Input**. Then, once the bill
has been received, the amount in the holding account is transferred to *Accounts Payable*. Transfers
into this account means the bill has been paid. **Stock Input** is reconciled once the vendor bill
is received.
Inventory valuation is a method of calculating how much each in-stock product is worth internally.
Since there is a difference between the price the product is **valuated at** and the price the
product was actually **purchased for**, the **Inventory Valuation** account is unrelated to the
crediting and debiting operations of the **Stock Input** account.
To conceptualize all this, follow the breakdown below.
#### Accounts balanced at received products
In this example, a company starts with zero units of a product, `table`, in stock. Then, 8 tables
are received from the vendor:
1. The **Stock Input** account stores `$80` of credit owed to the vendor. The amount in this account
is unrelated to the inventory value.
2. `$80` worth of tables came **in** (**debit** the *Inventory Value* account `$80`), and
3. `$80` must be paid **out** for received goods (**credit** the *Stock Input* account `$80`).
##### In Odoo
Odoo generates an accounting journal entry when shipments that use {{ AVCO }} costing method are
received. Configure a {guilabel}`Price Difference Account` by selecting the {guilabel}`➡️ (arrow)`
icon next to the {guilabel}`Product Category` field on the product page.
Under {guilabel}`Account Properties`, create a new {guilabel}`Price Difference Account` by typing in
the name of the account and clicking {guilabel}`Create and Edit`. Then set the account
{guilabel}`Type` as `Expenses`, and click {guilabel}`Save`.
```{image} avg_price_valuation/create-price-difference.png
:align: center
:alt: Create price difference account.
```
Then, receive the shipment in the *Purchase* app or *Inventory* app, and navigate to the
{menuselection}`Accounting app --> Accounting --> Journal Entries`. In the list, find the
{guilabel}`Reference` that matches the warehouse reception operation for the relevant product.
```{image} avg_price_valuation/search-for-entry-of-tables.png
:align: center
:alt: Show accounting entry of 8 tables from the list.
```
Click on the line for 8 tables. This accounting journal entry shows that when the 8 tables were
received, the `Stock Valuation` account increased by `$80`. Conversely, the **Stock Input** account
(set as `Stock Interim (Received)` account by default) is credited `$80`.
```{image} avg_price_valuation/accounting-entry-8-tables.png
:align: center
:alt: Debit stock valuation and credit stock input 80 dollars.
```
#### Accounts balanced at received vendor bill
In this example, a company starts with zero units of a product, table, in stock. Then, 8 tables are
received from the vendor. When the bill is received from vendor for 8 tables:
1. Use `$80` in the **Stock Input** account to pay the bill. This cancels out and the account now
holds `$0`.
2. Debit **Stock Input** `$80` (to reconcile this account).
3. Credit **Accounts payable** `$80`. This account stores the amount the company owes others, so
accountants use the amount to write checks to vendors.
##### In Odoo
Once the vendor requests payment, navigate to the {menuselection}`Purchase app --> Orders -->
Purchase` and select the {abbr}`PO (Purchase Order)` for 8 tables. Inside the {abbr}`PO (Purchase
Order)`, select {guilabel}`Create Bill`.
Switch to the {guilabel}`Journal Items` tab to view how `$80` is transferred from the holding
account, `Stock Interim (Received)` to `Accounts Payable`. {guilabel}`Confirm` the bill to record
the payment to the vendor.
```{image} avg_price_valuation/receive-8-table-bill.png
:align: center
:alt: Show bill linked to the purchase order for 8 tables.
```
### On product delivery
In the {ref}`above example table <inventory/avg_price/price-table>`, when 10 products are delivered
to a customer, the **Stock Input** account is untouched because there are no new products coming in.
To put it simply:
1. **Inventory valuation** is credited `$120`. Subtracting from inventory valuation represents
`$120` worth of products exiting the company.
2. Debit **Accounts Receivable** to record revenue from the sale.
```{image} avg_price_valuation/sell-10-tables.png
:align: center
:alt: Show journal items linked to sale order.
```
```{eval-rst}
.. spoiler:: Understand Anglo-Saxon expensing
In the accounting journal entry invoicing a customer for 10 tables, the accounts **Product
Sales**, **Tax Received**, and **Accounts Receivable** all pertain to the sale of the product.
**Accounts Receivable** is the account where the customer payment will be received.
Anglo-Saxon accounting recognizes the cost of goods sold (COGS) once the sale is made. So, up
until the product is sold, scrapped, or returned, costs of keeping the product in stock are not
accounted for. The **Expense** account is debited `$120` to log the costs of storing 10 tables
during this period of time.
```
### On product return
In the {ref}`above example table <inventory/avg_price/price-table>`, when returning 1 product to a
vendor purchased at `$10`, a company expects `$10` in the **Accounts Payable** account from the
vendor. However, **Stock Input** account must be debited `$12` because the average cost is `$12` at
the time of the return. The missing `$2` is accounted for in the {guilabel}`Price Difference
Account`, which is set up in the product's {guilabel}`Product Category`.
:::{note}
Behavior of *price difference accounts* varies from localization. In this case, the account is
intended to store differences between vendor price and *automated* inventory valuation methods.
:::
Summary:
1. Debit **Stock Input** account `$10` to move the table from stock to stock input. This move is to
indicate that the table is to be processed for an outgoing shipment.
2. Debit **Stock Input** an additional `$2` to account for the **Price Difference**.
3. Credit **Stock Valuation** `$12` because the item is leaving the stock.
```{image} avg_price_valuation/expensing-price-difference-account.png
:align: center
:alt: 2 dollar difference expensed in Price Difference account.
```
Once the vendor's refund is received,
1. Credit **Stock Input** account `$10` to reconcile the price of the table.
2. Debit **Accounts Payable** `$10` to have the accountants collect and register the payment in
their journal.
```{image} avg_price_valuation/return-credit-note.png
:align: center
:alt: Return to get 10 dollars back.
```

Some files were not shown because too many files have changed in this diff Show More