Compare commits

...

24 Commits

Author SHA1 Message Date
dces-odoo 7723d2e56e [IMP] accounting/l10n_ec: expense reimbursements
Co-authored-by: afma-odoo <afma@odoo.com>
2025-02-13 11:07:16 -05:00
mcsi-odoo 4b6e34efc5 [IMP] studio: automation rules correction
Task-3761784

closes odoo/documentation#12052

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-13 12:22:26 +00:00
Odoo Translation Bot 7368ad782b [I18N] *: fetch 18.0 translations 2025-02-13 09:33:25 +00:00
xpl-odoo c4bfeb9cae [IMP] website: remove slash in redirect rule expression
task-4113085

closes odoo/documentation#12049

X-original-commit: a00b6cf990
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-02-12 14:25:17 +00:00
Sam Lieber (sali) f4c16bc722 [IMP] data cleaning: field cleaning
closes odoo/documentation#12038

X-original-commit: 98b765babe
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-12 14:25:16 +00:00
jero-odoo aa5d9911b3 [IMP] Inventory: Adjustments edit
closes odoo/documentation#12034

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-11 21:14:38 +00:00
mcsi-odoo 5c72ee6f63 [IMP] studio: adding link about accessing studio
Task-3761784

closes odoo/documentation#11999

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-02-11 15:32:36 +00:00
jero-odoo 123ea24f91 [IMP] Calendar: Outlook calendar configuration
closes odoo/documentation#12021

X-original-commit: f1030c6e9f
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2025-02-10 20:29:33 +00:00
Paolo Gatti 8495357d6e [IMP] fiscal_localizations: Documentation for l10n_it_riba
Since the feature was released, lots of partners ask for
information/documentation about the RIBA feature.  Add a concise
documentation explaining what users should know.

Ref: odoo/enterprise#74097

task-4497749

closes odoo/documentation#12005

X-original-commit: e8305bad12
Related: odoo/enterprise#78927
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
2025-02-10 16:24:03 +00:00
afma-odoo 52d8565f02 [IMP] accounting: update payment matching feature
task-3518648

closes odoo/documentation#11923

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 16:23:53 +00:00
afma-odoo b6e6515fbf [IMP] accounting: Update customer invoices page for 18.0
task-3416326

closes odoo/documentation#11813

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:30 +00:00
Zuzanna Luczynska 49b75e3213 [IMP] project: project dashboard minor corrections
closes odoo/documentation#12009

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:27 +00:00
Meet Jivani [MEJI] bb69f01e71 [IMP] pos_urban_piper: clarify combo product handling
In this commit:
- Added a note explaining that UrbanPiper does not support combo products.
- Users need to create a new product and add combo items as variants to use them
with UrbanPiper.

task-4546712

closes odoo/documentation#11954

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-02-10 14:51:12 +00:00
Odoo Translation Bot c7fb228d91 [I18N] Update translation terms from Transifex 2025-02-09 02:41:57 +01:00
Felicious 75f0258d19 [IMP] inventory: CRL - replenishment & visibility days
closes odoo/documentation#11966

X-original-commit: 26f226c51b
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
2025-02-08 16:58:49 +00:00
jero-odoo 7e375cfd54 [IMP] Inventory: Adjustments 18.0
closes odoo/documentation#11930

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
2025-02-08 02:21:02 +00:00
Harsh Modi 853583b0ce [FIX] coding_guidelines: fix the alphabetic orders for the import
In odoo, as we suggest everyone to follow an alphebetic order.

The translator(`_`), ASCII is 95 and `a` ASCII value is 97
which '_' < 'a', the translator should be defined first in the
import before the `api` not at the end of the import

This commits adds an example to import static class `Command`
with a Capital alphabet with a ASCII value of `C` as 67
which will be before than the `_`
'C' < '_' < 'a'

This order of import should be followed while the import

closes odoo/documentation#11990

X-original-commit: c7a6b67a87
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Harsh Modi (hamo) <hamo@odoo.com>
2025-02-07 15:28:27 +00:00
Nicolas Viseur (vin) d7c0cdddbf [IMP] l10n_vn: SInvoice documentation
Recently, a new module released to support integration of Odoo with SInvoice to support e-invoicing for Vietnam.

task - 3631616

closes odoo/documentation#11974

X-original-commit: 4b123b8464
Signed-off-by: Anne-Françoise Marcq (afma) <afma@odoo.com>
Signed-off-by: Kim Dohyun (kido) <kido@odoo.com>
2025-02-07 03:58:47 +00:00
benderliz be14393043 [IMP] Inventory: Merged cycle count docs and updated for 17.0
closes odoo/documentation#11731

X-original-commit: 6852e4b980
Signed-off-by: Liz Bender (beli) <benderliz@users.noreply.github.com>
2025-02-06 21:12:24 +00:00
Anita (anko) 6ad97e2fea [IMP] applications/sales: prepare files for future Gelato documentation
task-3935688

closes odoo/documentation#11823

Related: odoo/odoo#193457
Related: odoo/enterprise#77839
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-02-06 19:56:54 +00:00
evtf-odoo 27acb59d79 [IMP] accounting/l10n_ar: purchase withholding automation
Add new section Withholding Management
Content based on v18

closes odoo/documentation#11770

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Liz Bender (beli) <beli@odoo.com>
Co-authored-by: samueljlieber <sali@odoo.com>
Co-authored-by: dade-odoo <87431108+dade-odoo@users.noreply.github.com>
2025-02-06 17:59:33 +00:00
dikd-odoo a94c8ed498 [IMP] sales: down payment intro
edits from FEKU

SALI edits

remove image

closes odoo/documentation#11943

Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-02-06 06:30:20 +00:00
jero-odoo b9e82b8c29 [IMP] Calendar: Google integration update
closes odoo/documentation#11963

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: pabr-odoo <pabr@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-06 06:30:18 +00:00
“Chiara 7d4f6dc77a [ADD] accounting: einvoicing for america
closes odoo/documentation#11765

Signed-off-by: Chiara Prattico (chpr) <chpr@odoo.com>
2025-02-05 11:19:47 +00:00
238 changed files with 17656 additions and 4935 deletions
@@ -120,6 +120,8 @@ You can edit the currency used to enter the transactions.
.. seealso::
:doc:`get_started/multi_currency`
.. _accounting/bank/account-number:
Account number
--------------
@@ -44,22 +44,31 @@ goods and services. Make sure the following fields are appropriately completed:
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`: Is automatically set and can be changed if needed.
- :doc:`Currency <get_started/multi_currency>`
- :guilabel:`Product`: Click :guilabel:`Add a line` to add a product.
- :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`, :doc:`Fiscal Positions
<taxes/fiscal_positions>`, :doc:`Incoterms <customer_invoices/incoterms>`, and more can be added or
modified in the :guilabel:`Other Info` tab.
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
@@ -73,9 +82,9 @@ modified in the :guilabel:`Other Info` tab.
Invoice confirmation
====================
Click :guilabel:`Confirm` when the document is completed. The document's status changes to
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 document a unique number from a defined
confirmation, Odoo assigns each invoice a unique number from a defined
:ref:`sequence <accounting/invoice/sequence>`.
.. note::
@@ -89,16 +98,56 @@ confirmation, Odoo assigns each document a unique number from a defined
Invoice sending
===============
To send the invoice to the customer, click :guilabel:`Send & Print`. A :guilabel:`Configure your
document layout` pop-up window will appear if a :ref:`default invoice layout
<studio/pdf-reports/default-layout>` hasn't been customized. Then, select how to send this invoice
to the customer in the :guilabel:`Send` window.
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.
To send and print multiple invoices, go to :menuselection:`Accounting --> Customers --> Invoices`
and select them. Then click the :icon:`fa-cog` :guilabel:`Actions` menu and select
:guilabel:`Send & Print`. A banner will appear on 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.
.. 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:
@@ -128,11 +177,11 @@ same customer, the actions are performed on the most overdue invoice.
Sequence
========
The sequence that Odoo assigns to each document is a unique number made up of a prefix and a number.
The prefix combines the journal code and the entry date and is used to group entries by period. The
number is unique for each period and is used to identify the entry. The default sequence on customer
invoices is INV/YYYY/number. In some specific cases,
:ref:`resequencing <accounting/invoice/resequencing>` invoices might be necessary.
Odoo assigns each document a unique sequence made up of a prefix and a number. The prefix combines
the journal code and the entry date and groups entries by period. The number is unique for each
period and is used to identify the entry. The default sequence on customer invoices is
INV/YYYY/number. In some specific cases, :ref:`resequencing <accounting/invoice/resequencing>`
invoices might be necessary.
.. _accounting/invoice/resequencing:
@@ -15,10 +15,15 @@ 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>`
@@ -29,14 +34,17 @@ Odoo supports e-invoicing in many countries. Refer to the country's page for mor
- :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>`
@@ -0,0 +1,54 @@
:orphan:
======================================
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/>`_.
Legal framework for e-invoicing in Argentina
============================================
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>`_
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
(Administración Federal de Ingresos Públicos)`, ensuring its validity and authenticity.
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
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.
- **Automatic VAT calculation and reporting**: Odoo ensures compliance with Argentina's VAT
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>`
.. 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.
@@ -0,0 +1,53 @@
: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:
==================================
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,51 @@
: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.
@@ -0,0 +1,50 @@
:orphan:
====================================
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>`_.
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
(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
acceptance messages, must be stored for a minimum of seven years.
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
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
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accurate invoicing and adherence to Ecuador's tax reporting
standards.
.. seealso::
:doc:`Ecuadorian fiscal localization documentation <../../../fiscal_localizations/ecuador>`
.. 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.
@@ -0,0 +1,57 @@
: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.
@@ -0,0 +1,55 @@
:orphan:
=================================
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/>`_.
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
(Superintendencia Nacional de Aduanas y de Administración Tributaria)`'s technical specifications.
- **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)`
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
================================================
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
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
(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>`
.. 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.
@@ -0,0 +1,57 @@
:orphan:
====================================
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/>`_.
Legal framework for e-invoicing in Uruguay
==========================================
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
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
(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
compatibility and interoperability with various systems.
- **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
=================================================
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,
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
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
General Impositiva)`'s reporting standards.
.. seealso::
:doc:`Uruguayan fiscal localization documentation <../../../fiscal_localizations/uruguay>`
.. 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.
@@ -20,39 +20,110 @@ for use at a later date:
- `Odoo Tutorials: Bank Configuration
<https://www.odoo.com/slides/slide/bank-configuration-6832>`_
.. _accounting/payments/payment-methods:
Payment methods
===============
Several payment methods are available in Odoo to allow different configurations for different types
of payments. Examples of payment methods include manual payments (such as cash), :doc:`checks
<payments/pay_checks>`, and batch payment files (such as :ref:`NACHA
<l10n_us/ach-electronic-transfers>` and :doc:`SEPA <payments/pay_sepa>`). Payment methods can be
configured in the :guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs of a bank or
cash journal.
.. seealso::
:doc:`../../sales/point_of_sale/payment_methods` for Point of Sale
.. _accounting/payments/preferred-payment-methods:
Preferred payment method
------------------------
A contact's preferred payment method can be set so that when a payment is created for that contact,
the payment method is automatically selected by default. Invoices and bills can be filtered by
:guilabel:`Payment Method` to simplify :ref:`group <accounting/payments/group-payments>` payments.
To set a preferred :guilabel:`Payment Method` for a customer or a vendor, go to
:menuselection:`Accounting --> Customers --> Customers` or :menuselection:`Accounting --> Vendors
--> Vendors` and select the customer or vendor. In the :guilabel:`Sales & Purchase` tab of the
contact form, select the preferred :guilabel:`Payment Method` in the :guilabel:`Sales` section for
invoice payments or for vendor bill payments in the :guilabel:`Purchase` section.
.. tip::
Access a full list of all contacts from the :guilabel:`Customers` or :guilabel:`Vendors` list
view by removing the :guilabel:`Customers` or :guilabel:`Vendors` filter. Alternatively, access
the full contact list through the Contacts app.
.. _accounting/payments/from-invoice-bill:
Registering payment from an invoice or bill
===========================================
When clicking :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a new
journal entry and changes the amount due according to the payment amount. The counterpart is
reflected in an :ref:`outstanding <accounting/bank/outstanding-accounts>` **receipts** or
**payments** account. At this point, the customer invoice or vendor bill is marked as :guilabel:`In
payment`. Then, when the outstanding account is reconciled with a bank transaction line, the invoice
or vendor bill changes to the :guilabel:`Paid` status.
To register a payment for an invoice or a bill, follow these steps:
The :icon:`fa-info-circle` information icon next to the payment line displays more
information about the payment. To access additional information, such as the related journal, click
:guilabel:`View`.
#. Click :guilabel:`Pay` on a customer invoice or vendor bill. In the :guilabel:`Pay` window, select
the :guilabel:`Journal` and the :guilabel:`Payment Date`.
#. If previously set, the contact's preferred :guilabel:`Payment Method` is automatically selected
by default but can be updated if necessary.
#. If using :doc:`payment terms <customer_invoices/payment_terms>`, the :guilabel:`Amount` is
automatically set based on the installment amounts defined by the payment term. To pay the full
amount instead, click :guilabel:`full amount`.
#. If necessary, edit the :guilabel:`Memo`.
#. Click :guilabel:`Create Payment`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment.
After the payment is registered, the customer invoice or vendor bill is marked as
:guilabel:`In payment`.
.. note::
- The customer invoice or vendor bill must be in the :guilabel:`Posted` status to register the
payment.
- If a payment is unreconciled, it still appears in the books but is no longer linked to the
invoice.
- If a payment is (un)reconciled in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If a payment is (un)reconciled and an invoice with cash-basis taxes, a journal entry is
automatically created to post the cash-basis tax (reversal) amount.
.. tabs::
.. tip::
If the main bank account is set as an :ref:`outstanding account
<accounting/bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a
related bank transaction), invoices and bills are directly registered as :guilabel:`Paid`.
.. group-tab:: Without outstanding accounts
If no :ref:`outstanding accounts <accounting/bank/outstanding-accounts>` are configured, no
journal entry is created. To display more information about the payment, click the
:guilabel:`Payments` smart button.
When the invoice or vendor bill is :doc:`reconciled <bank/reconciliation>` with a bank
transaction, its status is updated to :guilabel:`Paid`.
.. note::
- If a bank transaction is reconciled in a different currency, a journal entry is
automatically created to post the currency exchange gains/loss amount.
- When a bank transaction is reconciled with an invoice with cash-basis, a journal entry is
automatically created to post the cash-basis tax amount.
.. group-tab:: Using outstanding accounts
By default, payments in Odoo do not create journal entries, but they can easily be configured
to create journal entries using :ref:`outstanding accounts
<accounting/bank/outstanding-accounts>`.
Registering a payment on a customer invoice or vendor bill generates a new journal entry and
reduces the :guilabel:`Amount Due` based on the payment amount. The counterpart is
reflected in an :ref:`outstanding <accounting/bank/outstanding-accounts>` **receipts** or
**payments** account. At this point, the customer invoice or vendor bill is marked as
:guilabel:`In payment`. Then, when the payment is :doc:`reconciled <bank/reconciliation>` with
a bank transaction, the invoice or vendor bill status changes to :guilabel:`Paid`.
The :icon:`fa-info-circle` information icon next to the payment line displays more
information about the payment. To access additional information, such as the related journal,
click :guilabel:`View`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment.
.. note::
- Unreconciling a payment unlinks it from the invoice or bill but does not delete the
payment.
- If a payment is (un)reconciled in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If a payment is (un)reconciled on an invoice with cash-basis taxes, a journal entry is
automatically created to post the cash-basis tax (reversal) amount.
.. tip::
If the main bank account is set as the outstanding account on the bank journal's payment
method, registering the full payment on an invoice or bill moves the invoice/bill directly
to the :guilabel:`Paid` status without requiring bank reconciliation.
.. _accounting/payments/not-tied:
@@ -60,71 +131,185 @@ Registering payments not tied to an invoice or bill
===================================================
When a new payment is registered via :menuselection:`Customers / Vendors --> Payments`, it is not
directly linked to an invoice or bill. Instead, the account receivable or the account payable is
matched with the **outstanding account** until it is manually matched with its related invoice or
bill.
directly linked to an invoice or bill.
.. tabs::
.. group-tab:: Without outstanding accounts
Payments that are not linked to an invoice or bill should not be registered without using
:ref:`outstanding accounts <accounting/bank/outstanding-accounts>`, as there is no way to
associate the payment with the invoice or bill since no journal entry is created for the
payment. The amount paid or received is not reflected in the accounting and the
:guilabel:`Amount Due` is not updated based on the payment amount.
.. group-tab:: Using outstanding accounts
Instead, the payment's journal entry matches the :guilabel:`outstanding account` with the
account receivable or the account payable until the payment is manually matched with its
related invoice or bill. Then, :doc:`reconciling <bank/reconciliation>` the payment with the
bank transaction completes the payment workflow.
.. _accounting/payments/payments-matching:
Payments matching
-----------------
.. note::
During the :doc:`bank reconciliation <bank/reconciliation>` process, a remaining balance is
identified if the total debits and credits do not match when records are compared with bank
transactions. This balance must either be reconciled later or written off immediately.
.. _accounting/payments/matching-invoices-bills:
Matching invoices and bills with payments
-----------------------------------------
For a single invoice or bill
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A blue banner appears when validating a new invoice/bill and an **outstanding payment** exists for
this specific customer or vendor. To match it with the invoice or bill, click :guilabel:`ADD`
under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. tabs::
.. image:: payments/add-option.png
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment.
.. group-tab:: Without outstanding accounts
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with its
corresponding bank transaction.
By default, payments in Odoo do not create journal entries. As a result, there is no payment
to match.
.. group-tab:: Using outstanding accounts
A blue banner appears when validating a new invoice/bill and an **outstanding payment** exists
for this specific customer or vendor. To match it with the invoice or bill, click
:guilabel:`Add` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. image:: payments/add-option.png
:alt: Shows the Add option to reconcile an invoice or a bill with a payment.
The invoice or bill is then marked as :guilabel:`In payment` until the payment is
:doc:`reconciled <bank/reconciliation>` with its corresponding :doc:`bank transaction(s)
<bank/transactions>`.
.. _accounting/payments/auto-reconcile-tool:
For multiple invoices or bills
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. tabs::
.. group-tab:: Without outstanding accounts
By default, payments in Odoo do not create journal entries. As a result, there is no payment
to match, but this feature can still be used to match miscellaneous journal items.
.. group-tab:: Using outstanding accounts
The :guilabel:`Payments matching` or :guilabel:`Auto-reconcile` tool allows reconciling
journal items with each other (i.e., payments with customer invoices or vendor bills) either
individually or in batches. Access the :guilabel:`Accounting Dashboard`, click the
:icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) button from the :guilabel:`Customer
Invoices` or :guilabel:`Vendor Bills` journals, and select :guilabel:`Payments Matching`.
Alternatively, go to :menuselection:`Accounting --> Accounting --> Reconcile`.
To manually :guilabel:`Reconcile` journal items, select the individual items from the list
view and click :guilabel:`Reconcile`.
.. _accounting/payments/auto-reconcile-feature:
Auto-Reconcile Feature
**********************
.. tabs::
.. group-tab:: Without outstanding accounts
To use the :guilabel:`Auto-Reconcile` feature, follow these steps:
#. In the :guilabel:`Journal Items to reconcile` list view, click :guilabel:`Auto-Reconcile`
next to the receivable or payable account (or a specific contact's group of journal items
in that account).
#. In the :guilabel:`Reconcile automatically` window, click :guilabel:`Reconcile`.
.. group-tab:: Using outstanding accounts
To use the :guilabel:`Auto-Reconcile` feature, follow these steps:
#. In the :guilabel:`Journal Items to reconcile` list view, click :guilabel:`Auto-Reconcile`
next to the receivable or payable account (or a specific contact's group of journal items
in that account).
#. In the :guilabel:`Reconcile Automatically` window, set the
:guilabel:`Reconcile` field depending on how you want to match journal items:
- :guilabel:`Perfect Match`: Each debit journal item will be matched with
the corresponding credit journal item of the same value.
- :guilabel:`Clear Accounts`: All reconciled journal items will have the same
matching number, as they are selected from the same account.
#. Click :guilabel:`Reconcile`.
Invoices and bills are automatically matched to their corresponding payments and marked as
:guilabel:`In payment` until they are :doc:`reconciled <bank/reconciliation>` with their
corresponding :doc:`bank transactions <bank/transactions>`.
.. _accounting/payments/group-payments:
Group payments
--------------
Registering payments on multiple invoices/credit notes or bills/refunds (group payments)
========================================================================================
Group payments allow combining outgoing and incoming payments from the same contact into a single
payment to simplify the process and improve payment usability. To register a group payment:
To register payments on multiple invoices/credit notes or bills/refunds, follow these steps:
#. Go to :menuselection:`Accounting --> Customers --> Invoices/Credit Notes` or
:menuselection:`Accounting --> Vendors --> Bills/Refunds`.
#. Select the relevant invoices/credit notes or bills/refunds linked to a specific contact.
#. Click the :icon:`fa-cog` (:guilabel:`Action menu`) icon and select :guilabel:`Register Payment`.
#. In the :guilabel:`Register Payment` window, select the :guilabel:`Journal`, the
:guilabel:`Payment Method`, and the :guilabel:`Payment Date`.
#. Enable the :guilabel:`Group Payments` option and click :guilabel:`Create payment`.
#. In the list view, click into the search bar, group by :guilabel:`Payment Method`, select the
relevant invoices/credit notes or bills/refunds and click :guilabel:`Pay`.
#. In the :guilabel:`Pay` window, select the :guilabel:`Journal` and the :guilabel:`Payment Date`.
#. If previously set, the contact's preferred :guilabel:`Payment Method` is automatically selected
by default but can be updated if necessary.
#. If using :doc:`payment terms <customer_invoices/payment_terms>`, the :guilabel:`Amount` is
automatically set based on the installment amounts defined by the payment term. To pay the full
amount instead, click :guilabel:`full amount`.
#. To combine all payments from the same contact into a single payment, enable the :guilabel:`Group
Payments` option, or leave it unchecked to create separate payments.
#. Click :guilabel:`Create payment`.
The invoices or bills are now marked as :guilabel:`In payment` until they are reconciled with the
corresponding bank transactions. The credit notes or refunds are marked as :guilabel:`Paid`.
.. tabs::
.. group-tab:: Without outstanding accounts
The invoices or bills are then marked as :guilabel:`In payment` until they are
:doc:`reconciled <bank/reconciliation>` with the bank transactions.
.. group-tab:: Using outstanding accounts
The invoices or bills are then marked as :guilabel:`In payment` until the bank transactions
are :doc:`reconciled <bank/reconciliation>` with the payments.
.. _accounting/payments/batch-payments:
Batch payments
--------------
Registering a single payment for multiple customers or vendors (batch payments)
===============================================================================
Batch payments allow grouping payments from multiple contacts to ease
:doc:`reconciliation <bank/reconciliation>`. They are also useful when depositing :doc:`checks
<payments/checks>` to the bank or for :doc:`SEPA payments <payments/pay_sepa>`. To do so, go to
:menuselection:`Accounting --> Customers --> Batch Payments` or :menuselection:`Accounting -->
Vendors --> Batch Payments`. In the list view of payments, to group several payments in a
batch, select them and click :menuselection:`Action --> Create Batch Payment`.
Batch payments allow grouping payments from multiple contacts to ease :doc:`reconciliation
<bank/reconciliation>`. They are also useful when depositing :doc:`checks <payments/checks>` to the
bank or for generating bank payment files such as :doc:`SEPA <payments/pay_sepa>` or :ref:`NACHA
<l10n_us/nacha>`. To do so, go to :menuselection:`Accounting --> Customers --> Payments` or
:menuselection:`Accounting --> Vendors --> Payments`. In the payments list view, select the payments
to be grouped in a batch, click :icon:`fa-cog` :guilabel:`Actions`, and select :guilabel:`Create
Batch Payment`.
.. note::
All payments in a batch must have the same :ref:`payment method
<accounting/payments/payment-methods>`.
.. seealso::
- :doc:`payments/batch`
- :doc:`payments/batch_sdd`
- :doc:`payments/batch`
- :doc:`payments/batch_sdd`
.. _accounting/payments/matching:
Payments matching
-----------------
The :guilabel:`Payments matching` tool opens all unreconciled customer invoices or vendor bills and
allows them to be processed individually, matching all payments and invoices in one place. Go to the
:guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` (:guilabel:`dropdown menu`)
button from the :guilabel:`Customer Invoices` or :guilabel:`Vendor Bills` journals, and select
:guilabel:`Payments Matching`, or go to :menuselection:`Accounting --> Accounting -->
Reconciliation`.
The :guilabel:`Payments matching` tool opens all unreconciled journal items and allows them to be
processed individually, matching all payments and journal items. Go to the
:guilabel:`Accounting Dashboard`, go to :menuselection:`Accounting --> Accounting --> Reconcile` or
click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) button from the :guilabel:`Customer
Invoices` or :guilabel:`Vendor Bills` journals, and select :guilabel:`Payments Matching`.
.. image:: payments/payments-journal.png
:alt: Payments matching menu in the drop-down menu.
@@ -134,47 +319,56 @@ Reconciliation`.
not match, there is a remaining balance. This either needs to be reconciled at a later date or
written off directly.
.. _accounting/payments/batch-payments-matching:
Batch payments matching
-----------------------
Use the batch reconciliation feature to reconcile several outstanding payments or invoices
simultaneously for a specific customer or vendor. Go to :menuselection:`Accounting --> Reporting -->
Aged Receivable / Aged Payable`. All transactions that have not yet been reconciled for that
contact are visible, and when a customer or vendor is selected, the :guilabel:`Reconcile` option is
displayed.
.. image:: payments/reconcile-option.png
:alt: The batch payment reconcile option.
.. _accounting/payments/partial-payment:
Registering a partial payment
=============================
To register a partial payment, click on :guilabel:`Register Payment` from the related invoice or
bill. In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), the :guilabel:`Payment Difference` field displays the
outstanding balance. There are two options:
To register a partial payment, click on :guilabel:`Pay` from the related invoice or bill.
- :guilabel:`Keep open`: Keep the invoice or the bill open and mark it with a :guilabel:`Partial`
banner;
- :guilabel:`Mark as fully paid`: Select an account in the :guilabel:`Post Difference In` field and
change the :guilabel:`Label` if needed. A journal entry will be created to balance the accounts
payable or receivable with the selected account.
.. tabs::
.. image:: payments/partial-payment.png
:alt: register a partial payment
.. group-tab:: Without outstanding accounts
In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), fill in the :guilabel:`Amount` in the
:guilabel:`Pay` window.
.. group-tab:: Using outstanding accounts
In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), the :guilabel:`Payment Difference` field
displays the outstanding balance. There are two options:
- :guilabel:`Keep open`: Keep the invoice or the bill open and mark it with a
:guilabel:`Partial` banner;
- :guilabel:`Mark as fully paid`: Select an account in the :guilabel:`Post Difference In`
field and change the :guilabel:`Label` if needed. A journal entry will be created to balance
the accounts payable or receivable with the selected account.
.. image:: payments/partial-payment.png
:alt: register a partial payment
.. _accounting/payments/reconciling-payments:
Reconciling payments with bank transactions
===========================================
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The
next step is :doc:`reconciling <bank/reconciliation>` it with the related bank transaction line to
finalize the payment workflow and mark the invoice or bill as :guilabel:`Paid`.
.. tabs::
.. group-tab:: Without outstanding accounts
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In
payment`. The next step is :doc:`reconciling <bank/reconciliation>` the related :doc:`bank
transaction <bank/transactions>` line with the invoice or bill to finalize the payment
workflow and mark the invoice or bill as :guilabel:`Paid`.
.. group-tab:: Using outstanding accounts
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In
payment`. The next step is :doc:`reconciling <bank/reconciliation>` the payment with the
related :doc:`bank transaction <bank/transactions>` line to finalize the payment workflow and
mark the invoice or bill as :guilabel:`Paid`.
.. toctree::
:titlesonly:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

@@ -62,7 +62,7 @@ Then, to close the fiscal year:
<accounting/reporting/aged-payable>` reports.
- Audit all accounts, being sure to fully understand all transactions and their nature, making
sure to include loans and fixed assets.
- Optionally, run :ref:`payments matching <accounting/payments/matching>` to validate any open
- Optionally, :ref:`match payments <accounting/payments/auto-reconcile-tool>` to validate any open
vendor bills and customer invoices with their payments. While this step is optional, it could
assist the year-end closing process if all outstanding payments and invoices are reconciled,
potentially finding errors or mistakes in the system.
@@ -37,7 +37,7 @@ appropriately completed:
- :guilabel:`Vendor`: Odoo automatically fills some information based on the vendor's registered
information, previous purchase orders, or bills.
- :guilabel:`Bill Reference`: add the sales order reference provided by the vendor and is used to do
the :ref:`matching <accounting/payments/matching>` when you receive the products.
the :ref:`matching <accounting/payments/payments-matching>` when you receive the products.
- :guilabel:`Auto-Complete`: select a past bill/purchase order to automatically complete the
document. The :guilabel:`Vendor` field should be completed prior to completing this field.
- :guilabel:`Bill Date`: is the issuance date of the document.
@@ -11,7 +11,10 @@ Below you can find videos with a general description of the localization, and ho
- `eCommerce - Localización de Argentina <https://www.youtube.com/watch?v=5gUi2WWfRuI>`_.
.. seealso::
`Smart Tutorial - Localización de Argentina <https://www.odoo.com/slides/smart-tutorial-localizacion-de-argentina-130>`_
- `Smart Tutorial - Localización de Argentina
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-argentina-130>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Argentina
<../accounting/customer_invoices/electronic_invoicing/argentina>`
Configuration
=============
@@ -45,6 +48,9 @@ localization:
- `l10n_ar_website_sale`
- (optional) Allows the user to see Identification Type and AFIP Responsibility in the
eCommerce checkout form in order to create electronic invoices.
* - :ref:`Argentina - Payment Withholdings <l10n_ar/payment-withholdings>`
- `l10n_ar_withholding`
- Allows registering withholdings during the payment of an invoice.
.. _argentina/configure-your-company:
@@ -678,6 +684,147 @@ the invoice can then be validated.
:align: center
:alt: Enter the perception amount.
.. _l10n_ar/payment-withholdings:
Withholding management
----------------------
The Argentinean fiscal localization module is already loaded with the necessary withholdings
records, which can be seen by navigating to :menuselection:`Accounting app --> Configuration -->
Taxes` and removing the default :guilabel:`Sale or Purchase` filter. To verify these records, the
**Argentina Payment Withholdings** (`l10n_ar_withholding`) module must be :ref:`installed
<general/install>`:
Journal entries are *not* created when payments are posted unless :ref:`outstanding accounts
<accounting/bank/outstanding-accounts>` are set up. Thus, for this feature to work properly, it is
important to verify that *all* payment methods within the bank journals have an outstanding payment
and receipt account set.
.. image:: argentina/l10n-ar-outstanding-payments.png
:alt: An outstanding payment account must be set.
This configuration is crucial for the proper accounting of withholding transactions with clients
and vendors.
.. note::
In Argentina, withholdings represent the cancellation of a specific portion of the total debt
owed to a supplier or a reduction in the total payment to be collected from a customer.
Therefore, one or multiple withholdings can be recorded for each payment applied to an invoice.
Configuration
~~~~~~~~~~~~~
While Odoo already creates most of the required withholdings inside the :guilabel:`Taxes`
menu, in several cases, it is necessary to apply or modify certain configurations to correctly
calculate the withholding amount on vendor payments. The following withholding types are available:
- :ref:`Earnings <l10n_ar/earnings-withholdings>`
- :ref:`Earnings Scale <l10n_ar/earnings-scale-withholdings>`
- :ref:`IIBB Total Amount <l10n_ar/iib-total-amount-withholdings>`
- :ref:`IIBB Non-Taxable <l10n_ar/iib-nontax-withholdings>`
.. _l10n_ar/earnings-withholdings:
Earnings
********
For :guilabel:`Earnings` withholdings, Odoo already has a record for each regime group, which is
stated under the name of the tax and the AFIP code.
Each of these records are ready to be used. As a good practice, the configuration should be double
checked to make sure the configuration is updated and well-applied. The fields to validate are:
- :guilabel:`Amount`: This is the percentage of the total payment amount which is withheld.
- :guilabel:`Non-Taxable Amount`: Up to this amount, the withholding does not apply.
- :guilabel:`Minimum Withholding`: If the calculated withholding amount is smaller than this value,
the total withholding amount is set to `0.0`.
- :guilabel:`Withholding Sequence`: This field helps to automate the capture of a withholding number
under the payment line. If this field is not set, a number is manually captured while adding a
withholding to a payment.
.. image:: argentina/l10n-ar-earnings.png
:alt: Earnings withholding type.
.. _l10n_ar/earnings-scale-withholdings:
Earnings Scale
**************
In this particular case, a percentage does not need to be set. Instead, this withholding is
calculated based on the value of the :guilabel:`Scale` field.
To view, modify, or create new scales, navigate to :menuselection:`Accounting app --> Configuration
--> Earnings Scale`. By default, the Argentinian localization is preconfigured with two main scales.
However, scales should be created and updated as necessary to suit a business's needs.
.. note::
Earnings scales are cumulative, which means that Odoo keeps track of the different records
created for a bill and automatically calculates the proper withholding amount.
.. _l10n_ar/iib-total-amount-withholdings:
IIBB Total Amount
*****************
In this case, the necessary records related to the applicable province need to be created. The
withholding amount is calculated based on the percentage :guilabel:`Amount` set on the tax
configuration. Since Odoo does not automatically synchronize the percentages applicable to each
province, this information needs to be manually updated.
The recommendation, in this case, is to always duplicate and apply the different configurations for
each record to safeguard any technical configurations that allow the proper calculation and
accounting of the withholding.
.. _l10n_ar/iib-nontax-withholdings:
IIBB Untaxed
************
The configuration of non-taxable gross income withholdings is very similar to that of a :ref:`total
amount withholding <l10n_ar/iib-total-amount-withholdings>`, so the percentage :guilabel:`Amount` in
each of the records needs to be maintained. However, Odoo comes preconfigured with several records
that apply to different provinces. The difference, in this case, is that it is not necessary to
establish a non-taxable amount or minimum withholding for this record type.
Partner withholding assignation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once the proper configuration is set on each possible withholding for partners, the applicable
withholdings need to be assigned to each contact. To do this, open the :guilabel:`Contacts` app and
select the desired partner. In the :guilabel:`Accounting` tab, find the :guilabel:`Purchase
Withholdings` table.
By using the additional fields :guilabel:`From Date` and :guilabel:`To Date`, the applicability of
multiple withholdings can be automated across different date ranges. The :guilabel:`ref` field
allows you to apply an internal control number to each withholding line, which is just for internal
reference, so it does not affect any transactions and is not visible on them. These fields are
accessible from the :icon:`oi-settings-adjust` :guilabel:`(adjust settings)` menu.
- :guilabel:`From Date`: the start of the withholding date range.
- :guilabel:`To Date`: the end of the withholding date range.
- :guilabel:`ref`: apply an internal control number to each withholding line that is only visible
for internal reference and does not affect any transactions.
Automatic withholding calculation and application per payment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
By applying new payments to vendor bills, Odoo automatically applies and calculates the proper
withholding into the payment. Based on the record's configuration, it may be necessary to use a
reference number for each withholding line.
More withholdings can be added, or computed withholdings can be edited if necessary.
.. image:: argentina/l10n-ar-payment.png
:alt: Payment with applied withholdings.
.. important::
The total amount of the debt to be canceled is the total amount of the payment. However, Odoo
still captures the net amount (i.e. the amount to be reconciled with the bank), which will be
represented as the payment amount after the withholding application.
.. image:: argentina/l10n-ar-payment-registered.png
:alt: Payment registered form.
Check management
----------------
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@@ -34,6 +34,8 @@ needed.
<https://youtube.com/playlist?list=PL1-aSABtP6ADqexw4YNCbKPmpFggajxlX&si=RgmZR3Jco3223Np4>`_.
- `YouTube playlist - Tutoriais Odoo em Português
<https://youtube.com/playlist?list=PL1-aSABtP6ACGOW2UREePGjHQ2Bgdy-UZ&si=j6tiI36eB7BoKVQB>`_.
- :doc:`Documentation on e-invoicing's legality and compliance in Brazil
<../accounting/customer_invoices/electronic_invoicing/brazil>`
Configuration
=============
@@ -15,6 +15,8 @@ Chile
- `Chilean localization app tour <https://www.youtube.com/watch?v=3qYkgbmBYHw>`_
- `Chilean localization smart tutorial
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-chile-131>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Chile
<../accounting/customer_invoices/electronic_invoicing/chile>`
.. _chile/configuration:
@@ -24,9 +24,11 @@ solution with Odoo:
.. seealso::
- For more information on how to complete the certification process for the |DIAN| module, review
the following `webinar <https://www.youtube.com/watch?v=l0G6iDc7NQA>`_.
the following `webinar <https://www.youtube.com/watch?v=l0G6iDc7NQA>`_
- `Smart Tutorial - Colombian Localization
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-colombia-132>`_.
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-colombia-132>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Colombia
<../accounting/customer_invoices/electronic_invoicing/colombia>`
.. _localization/colombia/configuration:
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

@@ -705,3 +705,60 @@ Then, to ensure :doc:`Odoo Point of Sale </applications/sales/point_of_sale>` is
fiscal printer, go to :menuselection:`Point of Sale --> Configuration --> Settings`. In the
:guilabel:`Connected Devices` section, add the IP address in the :guilabel:`Italian Fiscal Printer
IP address` and enable :guilabel:`Use HTTPS`.
Ri.Ba. (Ricevuta Bancaria)
==========================
:abbr:`Ri.Ba. (Ricevuta Bancaria)` is a payment method widely used in Italy where vendors request
payments through their bank, which forwards the request to the customer's own bank and takes
responsibility for the collection. This enables payment automation and reduces risks for the vendor.
The vendor generally uploads a fixed-format text file with the list of payments to the bank's web
portal.
.. note::
- Ri.Ba. are exclusively for **domestic payments** in Italy. For recurring international
payments, please use `SEPA Direct Debt (SDD) <../accounting/payments/batch_sdd>`_
Configuration
-------------
#. Check that the `l10n_it_riba` module is :ref:`installed <general/install>`.
#. Go to :menuselection:`Settings --> Users & Companies --> Companies` and select the company that
will use Ri.Ba.
#. Fill out the required :guilabel:`SIA Code`.
.. image:: italy/sia-code.png
:alt: The company's SIA code
.. note::
The :guilabel:`SIA Code` identifies businesses within the Italian banking network and is used
to receive money through specific payment methods. It consists of one letter and four digits
(e.g., T1234) and can usually be found on the bank's portal or obtained by contacting the bank.
#. Ensure the Company's bank account has an Italian IBAN.
.. seealso::
How to configure :doc:`Bank Accounts <../accounting/bank>`
Accept Ri.Ba. for your invoices
-------------------------------
Payments of type :abbr:`Ri.Ba. (Ricevuta Bancaria)` can be registered from the :guilabel:`Invoices`
(:menuselection:`Accounting --> Customers --> Invoices`).
.. important::
Make sure that your invoice involves a Partner that has a bank account with an Italian IBAN.
Then, all Payments must be grouped in a **Batch Payment**.
.. seealso::
- :doc:`Batch Payments <../accounting/payments>`
- :doc:`Create a Batch Payment <../accounting/payments/batch>`
Once you press the :guilabel:`Validate` button for the Batch Payment, the :abbr:`Ri.Ba. (Ricevuta
Bancaria)` file is generated and attached to the Batch Payment, so you can download it and upload it
through your bank's web portal.
.. image:: italy/riba-attachment.png
:alt: The Ri.Ba. file attached
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -36,6 +36,10 @@ enables foreign trade, and the creation of delivery guides).
In order to electronically sign any documents in Odoo, ensure the *Sign* application is
installed.
.. seealso::
:doc:`Documentation on e-invoicing's legality and compliance in Mexico
<../accounting/customer_invoices/electronic_invoicing/mexico>`
Configuration
=============
@@ -81,6 +81,8 @@ Peruvian localization.
- `App Tour - Localización de Peru <https://youtu.be/Ic3mGovkf8Y>`_
- `Smart Tutorial - Localización de Peru (videos for workflows and configurations)
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-peru-133>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Peru
<../accounting/customer_invoices/electronic_invoicing/peru>`
Configuration
=============
@@ -25,6 +25,10 @@ The supported documents are:
The localization requires an Uruware account, which enables users to generate electronic documents
within Odoo.
.. seealso::
:doc:`Documentation on e-invoicing's legality and compliance in Uruguay
<../accounting/customer_invoices/electronic_invoicing/uruguay>`
Glossary
--------
@@ -2,55 +2,271 @@
Vietnam
=======
Add Vietnamese QR banking codes to invoices
===========================================
.. _SInvoice: https://www.sinvoice.vn/
.. _localizations/vietnam/modules:
Modules
=======
The following modules are installed automatically with the Vietnamese localization:
.. list-table::
:header-rows: 1
* - Name
- Technical name
- Description
* - :guilabel:`Vietnam - Accounting`
- `l10n_vn`
- This module includes the default
:ref:`fiscal localization package <fiscal_localizations/packages>`.
* - :guilabel:`Vietnam - E-invoicing`
- `l10n_vn_edi_viettel`
- This module includes the features required for integration with :ref:`SInvoice
<localizations/vietnam/sinvoice>`.
.. note::
In some cases, such as when upgrading to a version with additional modules, it is possible that
modules may not be installed automatically. Any missing modules can be manually :ref:`installed
<general/install>`.
.. _localizations/vietnam/company:
Company
=======
To use all the features of this fiscal localization, the following fields are required on the
:doc:`company record </applications/general/companies>`:
- :guilabel:`Name`
- :guilabel:`Address`, including the :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
and :guilabel:`Country`.
- In the :guilabel:`Street` field, enter the street name, number, and any additional address
information.
- In the :guilabel:`Street 2` field, enter the neighborhood.
- :guilabel:`Tax ID`: tax identification number.
.. _localizations/vietnam/sinvoice:
E-invoicing with SInvoice
=========================
SInvoice_ is an e-invoice service platform provided by Viettel, one of the biggest e-invoice service
providers in Vietnam. Odoo supports integration with SInvoice to submit invoices generated in Odoo.
Configuration
-------------
SInvoice platform
~~~~~~~~~~~~~~~~~
To send electronic invoices to SInvoice, the following must be created on SInvoice_:
- :ref:`SInvoice account <localizations/vietname/sinvoice-registration>`
- :ref:`Invoice template <localizations/vietname/sinvoice-template>`
- :ref:`Invoice symbol <localizations/vietname/sinvoice-symbol>`
- :ref:`Invoice issuance notice <localizations/vietname/sinvoice-notice>`
.. _localizations/vietname/sinvoice-registration:
SInvoice registration
*********************
To create an account, go to SInvoice_ and register for the desired plan. Fill in the form that
opens to be contacted by SInvoice_ to create an account.
Once you have an account, log into SInvoice_ using your :guilabel:`Username` and
:guilabel:`Password`.
.. _localizations/vietname/sinvoice-template:
Invoice template creation
*************************
#. On the left side of the overview page, in the :guilabel:`Release management` menu, click
:guilabel:`Create business information`.
#. In the :guilabel:`Update key information` step, fill in the following fields and other optional
information if needed: :guilabel:`Unit name`, :guilabel:`Address`, :guilabel:`Contact person`,
:guilabel:`Type of representative documents`.
#. Click :guilabel:`Update`.
#. In the :guilabel:`Look up digital certificate` step, click :guilabel:`Add new` to add a digital
certificate.
#. Select the :guilabel:`Branch/Enterprise` and the :guilabel:`Type of digital certificate`, then
fill in the required fields for each type:
- :guilabel:`Supplier`: CloudCA
- :guilabel:`Signer ID`: CloudCA
- :guilabel:`Digital Certificate`: CloudCA
- :guilabel:`How to download file`: HSM
- :guilabel:`File Upload`: HSM, USB-TOKEN
#. Click :guilabel:`Generate key pair` to generate encryption keys for authentication, and
:guilabel:`Save`.
#. In the :guilabel:`Manage invoice templates` step, add a new :guilabel:`Invoice template`.
#. Select the :guilabel:`Invoice type` and fill in the :guilabel:`Invoice template code`,
:guilabel:`Invoice template name`, and other optional information if needed.
#. Click :guilabel:`Update`.
.. seealso::
`SInvoice documentation on electronic invoice template creation
<https://www.sinvoice.vn/2021/02/hdsd-tai-lieu-nghiep-vu-tao-mau-hoa-don-dien-tu.html?debug=1>`_
.. _localizations/vietname/sinvoice-symbol:
Invoice symbol creation
***********************
On the left side of the main screen, in the :guilabel:`Release management` menu, click
:guilabel:`Invoice symbol` and follow these steps:
#. Click :guilabel:`Add new` and select the :guilabel:`Invoice template`.
#. Set the :guilabel:`Status` to :guilabel:`Active` to activate the symbol and fill in the
:guilabel:`Invoice symbol`.
#. Enable :guilabel:`Stop automatic sending to tax authorities` and :guilabel:`Default for built-in
API` based on preference.
#. Click :guilabel:`Save`.
.. _localizations/vietname/sinvoice-notice:
Invoice issuance notice
***********************
On the left side of the main screen, in the :guilabel:`Release management` menu, click
:guilabel:`Create issuance notice` and follow these steps:
#. Click :guilabel:`Add new`, select the :guilabel:`Name of the business unit to issue an e-invoice`
and the :guilabel:`Tax agency name`. Based on the business unit and tax agency selected, the
:guilabel:`Tax code`, :guilabel:`Address`, :guilabel:`Phone number`, and :guilabel:`Separator
used` are automatically filled and uneditable.
#. Click :guilabel:`Select the invoice type for issuance`, and then select and fill in the
following information :
- :guilabel:`Invoice type`: The invoice type on which to declare an issuance notice.
- :guilabel:`Invoice template`: Select from the list of templates available based on the invoice
type.
- :guilabel:`Symbol`: Select from the list of symbols available based on the invoice type.
- :guilabel:`Quantity`: Total number of invoices to issue for the selected type. Based on the
type and template selected, this field is filled in automatically. It can be changed if needed.
- :guilabel:`Start date of use`: The date from which the invoice template, range, and quantity
are used for the issuance notice.
#. Click :guilabel:`Save` and select more invoice types if necessary by repeating the steps above.
Click :guilabel:`Save` to finish drafting the notice.
#. Click :guilabel:`Send to tax authorities` for approval. Once approved, the notice's
:guilabel:`Status` is changed to :guilabel:`Active`.
.. _localizations/vietnam/sinvoice-odoo:
Odoo database
~~~~~~~~~~~~~
Link Odoo to SInvoice
*********************
To connect Odoo with SInvoice, go to :menuselection:`Accounting --> Configuration --> Settings`.
In the :guilabel:`Vietnamese Integration` section, fill in your SInvoice :guilabel:`Username` and
:guilabel:`Password`. Add a :guilabel:`Default symbol` to generate a prefix for the invoice number
managed in SInvoice if needed.
Invoice template
****************
To create SInvoice templates, go to :menuselection:`Accounting --> Configuration --> Templates`.
Click :guilabel:`New` and add a :guilabel:`Template code` and a :guilabel:`Template Invoice Type`.
The :guilabel:`Template code` is the initial sequence of digits in the name assigned by SInvoice.
For example, if the invoice template is `1/001 - Hóa đơn GTGT - ND123`, the :guilabel:`Template
code` is `1/001`. The SInvoice templates in Odoo must match the ones in SInvoice.
To add :guilabel:`Invoice Symbols`, click :guilabel:`Add a new line`.
Sending invoices to SInvoice
----------------------------
Invoices can be sent to SInvoice once they have been confirmed. To do so, follow the
:ref:`invoice sending <accounting/invoice/sending>` steps. In the :guilabel:`Send` popup, enable
:guilabel:`Send to SInvoice` and click :guilabel:`Send & Print`.
Once the invoice has been successfully submitted to SInvoice, the :guilabel:`SInvoice Status` field
in the :guilabel:`SInvoice` tab of the invoice is updated to :guilabel:`Sent`. The
:guilabel:`SInvoice Number`, :guilabel:`Issue Date`, :guilabel:`Secret Code` and :guilabel:`eInvoice
Number` fields are also updated. The same information is available on SInvoice.
Replacement or adjustment invoices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A replacement invoice is issued to correct an invoice that has **yet to be tax declared**, whereas
an adjustment invoice is issued to correct one that has **already been tax declared**. Follow these
steps to issue a replacement or adjustment invoice:
#. Open the invoice and click :guilabel:`Credit Note`.
#. In the :guilabel:`Credit Note` popup, fill in the following fields:
- :guilabel:`Reason displayed on Credit Note`
- :guilabel:`Adjustment type`
- :guilabel:`Agreement Name`
- :guilabel:`Agreement Date`
- :guilabel:`Journal`
- :guilabel:`Reversal date`
#. Click :guilabel:`Reverse and Create Invoice` to issue a replacement invoice, or
:guilabel:`Reverse` to issue an adjustment invoice.
The :guilabel:`SInvoice Status` in the :guilabel:`SInvoice` invoice tab is updated to
:guilabel:`Replaced` for a replacement invoice or :guilabel:`Adjusted` for an adjustment invoice.
Invoice cancellation
~~~~~~~~~~~~~~~~~~~~
If an invoice needs to be canceled, open the invoice and click :guilabel:`Request Cancel`. In the
:guilabel:`Invoice Cancellation` popup, enter the cancellation :guilabel:`Reason`,
:guilabel:`Agreement Name`, and :guilabel:`Agreement Date`, and click :guilabel:`Request
Cancellation`.
The :guilabel:`SInvoice Status` in the :guilabel:`SInvoice` invoice tab is updated to
:guilabel:`Canceled`.
.. _localizations/vietnam/qrcode:
QR banking codes
================
Vietnamese QR banking is a payment service platform that allows customers to make instant domestic
payments to individuals and merchants in Vietnamese dong via online and mobile banking.
Activate QR codes
-----------------
Configuration
-------------
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
Payments` section, activate the :guilabel:`QR Codes` feature.
To activate QR banking codes, go to :menuselection:`Accounting --> Configuration --> Settings` and
enable :guilabel:`QR Codes` in the :guilabel:`Customer Payments` section.
Vietnamese QR banking bank account configuration
------------------------------------------------
Bank account
~~~~~~~~~~~~
Go to :menuselection:`Contacts --> Configuration --> Bank Accounts` and select the bank account for
which you want to activate Vietnamese QR banking. Set the :guilabel:`Bank Identifier Code` on the
bank. Then set the :guilabel:`Proxy Type` and fill in the :guilabel:`Proxy Value` field depending on
the type you chose.
To activate QR banking for a bank account, go to :menuselection:`Contacts --> Configuration -->
Bank Accounts` and select the bank account. Fill in the :guilabel:`Bank Identifier Code`,
:guilabel:`Proxy Type` (based on the information used to identify the :guilabel:`Merchant Account`,
such as the card number and bank account numbers), and :guilabel:`Proxy Value` fields.
Enable :guilabel:`Include Reference` to include the invoice number in the QR code.
.. important::
- The account holder's country must be set to `Vietnam` on its contact form.
- The account holder's city is mandatory.
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
Reference` checkbox.
.. image:: vietnam/vn-paynow-bank-setting.png
:alt: Vietnamese QR banking bank account configuration
- The account holder's country must be set to `Vietnam`, and their city must be specified on the
contact form.
- The :ref:`account number <accounting/bank/account-number>` and bank must be set on the
:guilabel:`Bank` journal.
.. seealso::
:doc:`../accounting/bank`
Bank journal configuration
--------------------------
Generating QR codes on invoices
-------------------------------
Go to :menuselection:`Accounting --> Configuration --> Journals`, open the bank journal, then fill
out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Journal Entries` tab.
When creating a new invoice, open the :guilabel:`Other Info` tab and select :guilabel:`EMV
Merchant-Presented QR-code` in the :guilabel:`Payment QR-code` field.
.. image:: vietnam/vn-bank-account-journal-setting.png
:alt: Bank Account's journal configuration
Issue invoices with Vietnamese QR banking QR codes
--------------------------------------------------
When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment
QR-code` option to *EMV Merchant-Presented QR-code*.
.. image:: vietnam/vn-qr-code-invoice-setting.png
:alt: Select EMV Merchant-Presented QR-code option
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to
generate the Vietnamese QR banking QR code.
.. note::
Ensure the :guilabel:`Recipient Bank` is configured, as Odoo uses this field to generate QR
codes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

@@ -2,42 +2,56 @@
Inventory adjustments
=====================
.. |Ia| replace:: Inventory adjustments
.. |ia| replace:: inventory adjustments
In any warehouse management system, the recorded inventory counts in the database might not always
match the actual inventory counts in the warehouse. The discrepancy between the two counts can be
due to damages, human errors, theft, or other factors. As such, inventory adjustments must be made
to reconcile the differences, and ensure that the recorded counts in the database match the actual
match the actual inventory counts in the warehouse. Discrepancy between counts can be due to
damage, human error, theft, or other factors. As such, inventory adjustments must be made to
reconcile the differences, and ensure that the recorded counts in the database match the actual
counts in the warehouse.
Inventory Adjustments page
==========================
To view the *Inventory Adjustments* page, navigate to :menuselection:`Inventory app --> Operations
--> Inventory Adjustments`.
To view the :guilabel:`Inventory Adjustments` page, navigate to :menuselection:`Inventory app -->
Operations --> Physical Inventory`.
.. image:: count_products/inventory-adjustments-page.png
:align: center
:alt: In stock products listed on the Inventory adjustments page.
On the :guilabel:`Inventory Adjustments` page, all products that are currently in stock are listed,
with each product line containing the following information:
The :guilabel:`Inventory Adjustments` page lists all products that are currently in stock.
- :guilabel:`Location`: the specific location in the warehouse where a product is stored.
.. note::
Only products with a quantity greater than zero are listed on the :guilabel:`Inventory
Adjustments` page. To view product lines with zero current quantity, go to
:menuselection:`Inventory app --> Reporting --> Stock`.
For each product line, the following information is listed:
- :guilabel:`Location`: the specific location in the warehouse where a product is stored. This
column is **only** visible if :doc:`Storage Locations <use_locations>` are enabled.
- :guilabel:`Favorite`: identifies products that have been favorited.
- :guilabel:`Product`: the product whose quantity is listed on the inventory adjustment line.
- :guilabel:`Lot/Serial Number`: the tracking identifier assigned to the specific product listed. It
can contain letters, numbers, or a combination of both.
.. note::
If a specific product has a quantity of more than `1.00` in stock, and more than one serial
number (or lot number) assigned to it, each uniquely-identified product is displayed on its own
number, or lot number, assigned to it, each uniquely-identified product is displayed on its own
product line with its own lot/serial number, displayed under the :guilabel:`Lot/Serial Number`
column.
- :guilabel:`Expiration Date`: the date on which the goods with this serial number are due to
expire.
- :guilabel:`Last Count Date`: the last time the quantity was updated.
- :guilabel:`Package`: the package containing the quantity listed.
- :guilabel:`On Hand Quantity`: the quantity of the product currently recorded in the database.
- :guilabel:`UoM`: the *unit of measure* in which the product is measured. Unless otherwise
specified (i.e., in :guilabel:`Pounds` or :guilabel:`Ounces`), the default :abbr:`UoM (Unit of
- :guilabel:`Unit`: the *unit of measure* in which the product is measured. Unless otherwise
specified (e.g., in :guilabel:`Pounds` or :guilabel:`Ounces`), the default :abbr:`UoM (Unit of
Measure)` is :guilabel:`Units`.
- :guilabel:`Counted Quantity`: the real quantity counted during an inventory count. This field is
left blank by default, but can be changed, depending on if it matches the :guilabel:`On Hand
left blank by default but can be changed, depending on if it matches the :guilabel:`On Hand
Quantity` or not.
- :guilabel:`Difference`: the difference between the :guilabel:`On Hand Quantity` and
:guilabel:`Counted Quantity`, once an inventory adjustment is made. The difference is
@@ -46,47 +60,45 @@ with each product line containing the following information:
this date will default to the 31st of December of the current year.
- :guilabel:`User`: the person assigned to the count in the database. This can either be the person
physically counting the inventory, or applying the count in the database.
- :guilabel:`Product Category`: the category assigned internally to a specific product. Unless
otherwise specified (i.e., as :guilabel:`Consumable` or :guilabel:`Rental`), the default *Product
Category* is set to :guilabel:`All`.
- :guilabel:`Available Quantity`: the quantity of a specific product that is currently available,
based on any outstanding/uncompleted sales orders, purchase orders, or manufacturing orders that
might change the available quantity once fulfilled.
- :guilabel:`Accounting Date`: the date on which the adjustments will be accounted in the Odoo
*Accounting* app.
- :guilabel:`Company`: the company whose database these inventory adjustments are being made on. The
company is listed in the top right corner of the database, next to the user currently logged in.
.. tip::
Some columns are hidden by default. To reveal these columns, click the :guilabel:`additional
options` button (three dots icon) to the far right of the form's top row, and select any desired
column to reveal by clicking the checkbox next to that option.
Additional columns are hidden by default. To reveal these columns, click the
:icon:`oi-settings-adjust` :guilabel:`(adjust)` icon to the far right of the form's top row, and
reveal any desired column by ticking the checkbox next to that option.
.. _inventory/create-adjustment:
Create an inventory adjustment
------------------------------
To create a new inventory adjustment from the :menuselection:`Inventory Adjustments` page, click
:guilabel:`Create`. Doing so creates a new, blank inventory adjustment line at the bottom of the
page.
:guilabel:`New`. Doing so creates a new, blank inventory adjustment line at the bottom of the page.
.. tip::
|Ia| can also be created from the :guilabel:`Forecasted Report` on an individual
product record. To open the report, navigate to a product record and click the
:guilabel:`Forecasted` smart button. Then, at the top of the page, click :guilabel:`Update
Quantity`, then :guilabel:`New`.
.. image:: count_products/forecast-report.png
:alt: The Update Quantities button on a Forecast report in the Inventory app.
On this blank inventory adjustment line, click the drop-down menu under the :guilabel:`Product`
column, and select a product. If the selected product is tracked using either lots or serial
numbers, the desired lot or serial number can also be chosen from the drop-down menu under the
numbers, the desired lot or serial number needs to be chosen from the drop-down menu under the
:guilabel:`Lot/Serial Number` column.
.. tip::
The inventory adjustment line can also be used to create or record lots and serial numbers.
Next, set the value in the :guilabel:`Counted Quantity` column to the quantity counted for that
product during the inventory adjustment process.
.. note::
The :guilabel:`Counted Quantity` for new inventory adjustments is set to `0.00` by default. An
inventory move with `0.00` :guilabel:`Quantity Done` is recorded in the product's inventory
adjustment history, so it should be set to reflect the actual quantity counted.
To the right of the :guilabel:`Counted Quantity` column, the :guilabel:`Scheduled Date` and
:guilabel:`User` can also be changed via their respective drop-down menus. Changing the
:guilabel:`Scheduled Date` changes the date that the inventory adjustment should be processed on,
and selecting a responsible :guilabel:`User` assigns a user to the specific inventory adjustment
(for traceability purposes).
for traceability purposes.
Once all changes have been made to the new inventory adjustment line, click away from the line.
Doing so saves the adjustment, and moves the line to the top of the page.
@@ -94,25 +106,29 @@ Doing so saves the adjustment, and moves the line to the top of the page.
If the :guilabel:`Counted Quantity` is greater than the :guilabel:`On Hand Quantity`, the value in
the :guilabel:`Difference` column is **green**. If the :guilabel:`Counted Quantity` is less than the
:guilabel:`On Hand Quantity`, the value in the :guilabel:`Difference` column is **red**. If the
quantities match, and haven't been changed at all, no value appears in the :guilabel:`Difference`
quantities match, and have not been changed at all, no value appears in the :guilabel:`Difference`
column.
.. image:: count_products/difference-column.png
:align: center
:alt: Difference column on inventory adjustments page.
At this stage, the count (:dfn:`inventory adjustment`) is recorded, but not yet applied. This means
that the quantity on hand before the adjustment has not yet been updated to match the new, real
counted quantity.
There are two ways to apply the new inventory adjustment. The first way is to click the
:guilabel:`Apply` button on the line at the far right of the page. The second way is to click the
.. _inventory/apply-adjustment:
Apply adjusted count
--------------------
|Ia| can be completed in several ways. The first way is to click the
:guilabel:`Apply` button on the line at the far right of the page. The second way is to tick the
checkbox on the far left of the line. Doing so reveals new button options at the top of the page,
one of which is an :guilabel:`Apply` button. Clicking this button instead causes an
:guilabel:`Inventory Adjustment Reference / Reason` pop-up window to appear.
:guilabel:`Inventory Adjustment` pop-up window to appear.
From this pop-up menu, a reference or reason can be assigned to the inventory adjustment. By
default, the :guilabel:`Inventory Reference / Reason` field is pre-populated with the date the
default, the :guilabel:`Inventory Reason` field is pre-populated with today's date, the date the
adjustment is being made on, but can be changed to reflect whatever reference or reason is desired.
Once ready, click :guilabel:`Apply` to apply the inventory adjustment.
@@ -122,19 +138,49 @@ Once ready, click :guilabel:`Apply` to apply the inventory adjustment.
<../reporting/moves_history>` in the *Moves History* report for traceability.
.. image:: count_products/apply-inventory-adjustment.png
:align: center
:alt: Apply all option applies the inventory adjustment once a reason is specified.
Relocate products
=================
|Ia| can also be used to relocate products to different storage locations, or to
different packages. To relocate a product, tick the checkbox at the far left of the line for the
desired product. At the top of the page, click the :guilabel:`Relocate` button. Doing so opens a
pop-up.
.. image:: count_products/relocate-popup.png
:alt: The Relocate products pop-up on the Inventory Adjustments page.
On the resulting pop-up, enter the following information:
- :guilabel:`To Location`: the new location for the products.
- :guilabel:`To Package`: the new package for the products.
- :guilabel:`Reason for relocation`: the reason for the move.
.. important::
Product relocations **only** work on internal locations. Products **cannot** be moved between
companies.
Only users with *Administrator* rights can perform product relocations.
Set to zero
===========
|Ia| can also be used to clear inventory counts by setting the quantity to zero. To do this, tick
the checkbox at the far left of the line for the desired product. At the top of the page, click the
:icon:`fa-gear` :guilabel:`Actions` button to open a drop-down menu. Click :guilabel:`Set to 0`.
Once this is complete, :ref:`apply <inventory/apply-adjustment>` the adjusted count.
Count products
==============
Counting products is a recurring activity in a warehouse. Once a count is complete, go to
:menuselection:`Inventory app --> Operations --> Inventory Adjustments` to update the
:menuselection:`Inventory app --> Operations --> Physical Inventory` to update the
:guilabel:`Counted Quantity` column for each product line.
On each product line, identify whether the value in the :guilabel:`On Hand Quantity` column recorded
in the database matches the newly-counted value. If the recorded value and the counted value do
match, click the :guilabel:`Set` button (target icon) at the far right of the product line.
match, click the :icon:`fa-bullseye` :guilabel:`Set` icon at the far right of the product line.
Doing so copies the value from the :guilabel:`On Hand Quantity` column over to the
:guilabel:`Counted Quantity` column, and sets the value of the :guilabel:`Difference` column to
@@ -142,12 +188,11 @@ Doing so copies the value from the :guilabel:`On Hand Quantity` column over to t
recorded in the product's inventory adjustment history.
.. image:: count_products/zero-move.png
:align: center
:alt: Zero count inventory adjustment move.
If the newly-counted value for a given product does **not** match the value in the :guilabel:`On
Hand Quantity` recorded in the database, instead of clicking the :guilabel:`Set` button, record the
real value in the field in the :guilabel:`Counted Quantity` column.
Hand Quantity` recorded in the database, instead of clicking the :icon:`fa-bullseye` :guilabel:`Set`
icon, record the real value in the field in the :guilabel:`Counted Quantity` column.
To do so, click the field in the :guilabel:`Counted Quantity` column on the specific inventory
adjustment line for the product whose count is being changed. This automatically assigns a
@@ -160,16 +205,23 @@ away from the line. Doing so saves the adjustment, and automatically adjusts the
If the :guilabel:`Counted Quantity` is greater than the :guilabel:`On Hand Quantity`, the value in
the :guilabel:`Difference` column is **green**. If the :guilabel:`Counted Quantity` is less than the
:guilabel:`On Hand Quantity`, the value in the :guilabel:`Difference` column is **red**. If the
quantities match, and haven't been changed at all, no value appears in the :guilabel:`Difference`
quantities match, and have not been changed at all, no value appears in the :guilabel:`Difference`
column.
Subsequently, once applied, a move with the difference between the :guilabel:`On Hand Quantity` and
the :guilabel:`Counted Quantity` is recorded in the product's inventory adjustment history.
.. image:: count_products/history-inventory-adjustments.png
:align: center
:alt: Inventory Adjustments History dashboard detailing a list of prior product moves.
The :guilabel:`Actions` menu appears when one or more products' checkboxes are selected. The
:guilabel:`Actions` menu includes the option to :guilabel:`Set to quantity on hand`, which sets the
selected products' :guilabel:`Counted Quantity` to the :guilabel:`On Hand Quantity`, and
:guilabel:`Set to 0`, which sets the selected products' :guilabel:`Counted Quantity` to zero.
.. image:: count_products/inventory-adjustment-actions.png
:alt: Inventory Adjustments Actions menu.
.. important::
Sometimes a count occurs, but cannot be applied in the database right away. In the time between
the actual count and applying the inventory adjustment, product moves can occur. In that case,
@@ -177,23 +229,40 @@ the :guilabel:`Counted Quantity` is recorded in the product's inventory adjustme
quantity. As an extra precaution, Odoo asks for confirmation before applying the inventory
adjustment.
Revert an inventory adjustment
==============================
To revert the changes made in an inventory adjustment, navigate to :menuselection:`Inventory -->
Reporting --> Moves History`.
Tick the checkbox at the far left of the line for the desired product. At the top of the page, click
the :icon:`fa-gear` :guilabel:`Actions` button to open a drop-down menu, and click :guilabel:`Revert
Inventory Adjustment`.
.. note::
After an inventory adjustment is reverted, the line is not removed from the :guilabel:`Moves
History` report. Instead, an additional line is added, this time with the word `[reverted]` added
to the :guilabel:`Reference` column.
.. image:: count_products/reverted-adjustment.png
:alt: The reference fields on the Moves History report in the Inventory app.
Change inventory count frequency
================================
By default, the *scheduled date* for inventory adjustments are always scheduled for the 31st of
December of the current year. However, for some companies, it is crucial that they have an accurate
inventory count at all times. In such cases, the default scheduled date can be modified.
By default, the *scheduled date* for |ia| are always scheduled for the 31st of December of the
current year. However, for some companies, it is crucial that they have an accurate inventory count
at all times. In such cases, the default scheduled date can be modified.
To modify the default scheduled date, go to :menuselection:`Inventory app --> Configuration -->
Settings`. Then, in the :guilabel:`Operations` section, locate the :guilabel:`Annual Inventory Day
and Month` setting, which includes a drop-down menu that is set to `31 December` by default.
.. image:: count_products/annual-inventory.png
:align: center
:alt: Adjust the next inventory count date with the Annual Inventory Day and Month setting.
To change the day, click the :guilabel:`31`, and change it to a day within the range `1-31`,
depending on the desired month of the year.
To change the day, click the `31`, enter a number from `1-31`, depending on the desired month of the
year.
Then, to change the month, click :guilabel:`December` to reveal the drop-down menu, and select the
desired month.
@@ -204,23 +273,22 @@ Plan big inventory counts
-------------------------
To plan big inventory counts, such as a full count of everything currently in stock, first navigate
to :menuselection:`Inventory app --> Operations --> Inventory Adjustments`.
to :menuselection:`Inventory app --> Operations --> Physical Inventory`.
Then, select the desired products to be counted by clicking the checkbox on the far left of each
Then, select the desired products to be counted by ticking the checkbox on the far left of each
product line.
.. tip::
To request a count of **all** products currently in stock, click the checkbox at the very top of
the table, in the header row next to the :guilabel:`Location` label. This selects **all** product
To request a count of **all** products currently in stock, tick the checkbox at the top of the
table, in the header row next to the :guilabel:`Location` label. This selects **all** product
lines.
.. image:: count_products/count-popup.png
:align: center
:alt: Request a count popup on inventory adjustments page.
:alt: Request a count pop-up on inventory adjustments page.
Once all desired products have been selected, click the :guilabel:`Request a Count` button at the
top of the page. This causes a :guilabel:`Request a Count` pop-up window to appear. From this
pop-up, fill in the following information:
top of the page. Doing so opens the :guilabel:`Request a Count` pop-up window, where the following
information can be filled:
- :guilabel:`Inventory Date`: the planned date of the count.
- :guilabel:`User`: the user responsible for the count.
@@ -229,11 +297,50 @@ pop-up, fill in the following information:
:guilabel:`Leave Empty`. To pre-fill the on-hand quantity of each product line with the current
value recorded in the database, select :guilabel:`Set Current Value`.
.. note::
The :guilabel:`Leave Empty` option forces the employee conducting the audit to manually type in
the number they counted, while the :guilabel:`Set Current Value` option only requires the
employee to *verify* the counted quantity and click :guilabel:`Apply`.
Finally, once ready, click :guilabel:`Confirm` to request the count.
.. image:: count_products/count-popup.png
:alt: Request a count popup on inventory adjustments page.
.. important::
In the Odoo *Barcode* app, users can only view inventory counts that are assigned to **them**,
and are scheduled for **today** or **earlier**.
In the Odoo **Barcode** app, users can only view inventory counts that are assigned to *them*,
and are scheduled for *today* or *earlier*.
Sometimes a count occurs, but cannot be applied in the database right away. In the time between
the actual count and applying the inventory adjustment, product moves can occur. In that case,
the on-hand quantity in the database can change and no longer be consistent with the counted
quantity. As an extra precaution, Odoo asks for confirmation before applying the inventory
adjustment.
Adjustment history
==================
Details regarding inventory adjustment can be viewed by clicking the :icon:`fa-history`
:guilabel:`History` icon.
The user who performed the count is listed in parenthesis in the :guilabel:`Reference` field, while
the user who applied the count is listed in the :guilabel:`Done By`.
.. image:: count_products/adjustment-history.png
:alt: The history record for an inventory adjustment.
Inventory audit
---------------
An inventory audit can be accessed from the :guilabel:`Inventory Adjustment` page. This audit
includes an inventory record both before and after a count is completed, to track what changed.
On the :guilabel:`Inventory Adjustment` page, tick the checkbox at the top-left of the page to
select all of the lines. Then click the :guilabel:`Request a Count` button. On the pop-up, set
:guilabel:`Count` to :guilabel:`Set Current Value`, then click :guilabel:`Confirm`.
After returning to the :guilabel:`Inventory Adjustment` page, select all of the lines again. Click
:menuselection:`Print --> Count Sheet`. The :guilabel:`Count Sheet` exports in PDF form.
.. seealso::
:doc:`cycle_counts`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

@@ -8,35 +8,75 @@ Replenishment
.. |MTO| replace:: :abbr:`MTO (Make to Oder)`
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |SO| replace:: :abbr:`SO (Sales Order)`
In Odoo, there are two strategies for automatically replenishing inventory: *reordering rules* and
the *make to order (MTO)* route. Although these strategies differ slightly, they both have similar
consequences: triggering the automatic creation of a |PO| or |MO|. The choice of which strategy to
use depends on the business's manufacturing and delivery processes.
In Odoo, stock can be replenished one of three ways: *reordering rules*, the *make to order* (MTO)
route, or using the *master production schedule* (MPS).
Terminology
===========
Each replenishment mechanism triggers the creation or suggestion of a purchase order (PO) or
manufacturing order (MO), with the best choice depending on the business process.
.. cards::
.. card:: Reordering rules
:target: replenishment/reordering_rules
:tag: Recommended
:large:
Automatically suggest or generate POs or MOs when stock falls below a minimum level.
.. card:: MTO
:target: replenishment/mto
:tag: Beginner-friendly
Automatically generate POs or MOs when sales orders are confirmed.
.. card:: MPS
:target: ../../manufacturing/workflows/use_mps
Manage long-term replenishment based on inputted sales forecasts, via a dashboard.
Replenishment strategies
========================
Replenishment report and reordering rules
-----------------------------------------
The replenishment report is a list of all products that have a negative forecast quantity.
Reordering rules are rules that can be set up to maintain a minimum stock level. They are often
configured to support manufacturing or sales requirements. When a product's stock falls at or below
the minimum level, Odoo generates (or suggests) a purchase or manufacturing order to replenish stock
to the maximum level.
*Reordering rules* are used to ensure there's always a minimum amount of a product in-stock, in
order to manufacture products and/or fulfill sales orders. When the stock level of a product reaches
its minimum, Odoo automatically generates a purchase order with the quantity needed to reach the
maximum stock level.
When using automatic reordering rules, Odoo generates a new order. When using manual, Odoo suggests
orders on the replenishment report. For detailed guidance, refer to the :doc:`replenishment report
<replenishment/report>` and :doc:`reordering rules <replenishment/reordering_rules>`.
Reordering rules can be created and managed in the replenishment report, or from the product form.
Key points include:
- :ref:`Automatic reordering rules <inventory/warehouses_storage/auto-rr>`: Automatically create
|POs| or |MOs| when stock falls below the minimum level. While this is convenient, it is less
flexible.
- :ref:`Manual reordering rules <inventory/warehouses_storage/manual-rr>`: Generate suggestions in
the replenishment report for user review, allowing adjustments and batch orders while meeting
deadlines.
- :ref:`Just-in-time logic <inventory/warehouses_storage/just-in-time>`: A strategy to replenish
only what is needed to prevent overstocking.
.. seealso::
- :doc:`replenishment/reordering_rules`
- :doc:`replenishment/report`
.. _inventory/management/products/strategies:
Make to order
-------------
*Make to order (MTO)* is a procurement route that creates a draft purchase order (or manufacturing
order) each time a sales order is confirmed, **regardless of the current stock level**.
An |MTO| strategy means that procurement or production is triggered only after a sales order has
been confirmed. This strategy is recommended when products are customizable, demand is
unpredictable, there is limited storage capacity, and when products are high in value and low in
demand. In such cases, it does not make sense to keep on-hand inventory.
Unlike products replenished using reordering rules, Odoo automatically links the sales order to the
|PO| or |MO| generated by the |MTO| route.
@@ -51,158 +91,28 @@ as the |PO| or |MO| is not confirmed.
The |MTO| route is the best replenishment strategy for products that are customized, and/or for
products that have no stock kept on-hand.
.. seealso::
:doc:`replenishment/mto`
Configuration
=============
Master production schedule
--------------------------
Replenishment report and reordering rules
-----------------------------------------
The :abbr:`MPS (Master Production Schedule)` is a dashboard where products and their forecasted
quantities are entered. Based on confirmed manufacturing and purchase orders, the dashboard
recommends amounts to order or produce.
To access the replenishment report, go to :menuselection:`Inventory app --> Operations -->
Replenishment.`
This a useful **manual** tool for keeping track of quantities. The :abbr:`MPS (Master Production
Schedule)` **should absolutely not** be used alongside reordering rules, as the automated workflow
disrupts its manual replenishment method.
By default, the replenishment report dashboard shows every product that needs to be manually
reordered. If there is no specific rule for a product, Odoo assumes the :guilabel:`Min Quantity` and
:guilabel:`Max Quantity` stock are both `0.00`
.. note::
For products that don't have a set reordering rule, Odoo calculates the forecast based on
confirmed sales orders, deliveries, and receipts. For products that have a set reordering rule,
Odoo calculates the forecast normally, but also takes into account the purchase/manufacturing
lead time and security lead time.
.. important::
Before creating a new reordering rule, make sure the product has a *vendor* or a *bill of
materials* configured on the product form. To check this, go to :menuselection:`Inventory app
--> Products --> Products`, and select the product to open its product form. The vendor, if
configured, is listed in the :guilabel:`Purchase` tab, and the bill on materials, if configured,
is found in the :guilabel:`Bill of Materials` smart button at the top of the form.
The :guilabel:`Product Type`, located in the :guilabel:`General Information` tab on the product
form, **must** be set to :guilabel:`Storable Product`. By definition, a consumable product does
not have its inventory levels tracked, so Odoo cannot account for a consumable product in the
replenishment report.
.. image:: replenishment/replenishment/replenishment-report-dashboard.png
:align: center
:alt: Replenishment report listing all items needing to be purchased to meet current needs.
To create a new reordering rule from the replenishment report, go to :menuselection:`Inventory app
--> Operations --> Replenishment`, click :guilabel:`Create`, and select the desired product from the
drop-down menu in the :guilabel:`Product` column. If necessary, a :guilabel:`Min Quantity` and a
:guilabel:`Max Quantity` can be configured in the corresponding columns on the
:guilabel:`Replenishment` report page, as well.
To create a new reordering rule from the product form, go to :menuselection:`Inventory app -->
Products --> Products`, and select a product to open its product form. Click the
:guilabel:`Reordering Rules` smart button, click :guilabel:`Create`, and fill out the fields.
Replenishment report fields
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following fields are on the :guilabel:`Replenishment` report. If any of these fields are not
visible, click the :guilabel:`⋮ (additional options)` icon on the far right side of the report, then
click the checkbox next to a field to make it visible.
- :guilabel:`Product`: the product that requires a replenishment.
- :guilabel:`Location`: the specific location where the product is stored.
- :guilabel:`Warehouse`: the warehouse where the product is stored.
- :guilabel:`On Hand`: the amount of product currently available.
- :guilabel:`Forecast`: the amount of product available after all current orders (sales,
manufacturing, purchase, etc.) are taken into account.
- :guilabel:`Preferred Route`: how the product is procured, either :guilabel:`Buy`,
:guilabel:`Manufactured`, :guilabel:`Dropship`, etc.
- :guilabel:`Vendor`: the company from which the product is acquired.
- :guilabel:`Bill of Materials`: the bill of materials for the product (if one is configured).
- :guilabel:`Trigger`: how the replenishment is created, either :guilabel:`Auto` (automatically,
once the :guilabel:`On Hand` quantity goes below the :guilabel:`Min Quantity`) or
:guilabel:`Manual` (only when the replenishment is requested).
- :guilabel:`Procurement Group`: the reference number for how the product is being acquired, such as
a sales order, purchase order, or manufacturing order.
- :guilabel:`Min Quantity`: the minimum amount of product that should be available. When inventory
levels goes below this number, the replenishment is triggered.
- :guilabel:`Max Quantity`: the amount of product that should be available after replenishing the
product.
- :guilabel:`Multiple Quantity`: if the product should be ordered in specific quantities, enter the
number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`,
and only 3 are needed, 5 products are replenished.
- :guilabel:`To Order`: the amount of product that is currently needed, and will be ordered, if the
:guilabel:`Order Once` or :guilabel:`Automate Orders` button is clicked.
- :guilabel:`UoM`: the unit of measure used to acquire the product.
- :guilabel:`Company`: the company for which the product is acquired.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the set
:guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by clicking on
the field and changing the value. To replenish a product manually, click :guilabel:`Order Once`.
To automate a replenishment from the :guilabel:`Replenishment` page, click :guilabel:`Automate
Orders` on the right-side of the line, represented by a :guilabel:`🔄 (circular arrow)` icon.
When this button is clicked, Odoo will automatically generate a draft |PO|/|MO| every time the
forecasted stock level falls below the set :guilabel:`Min Quantity` of the reordering rule.
On the :guilabel:`Replenishment` page, a reordering rule or manual replenishment can be temporarily
deactivated for a given period, by clicking the :guilabel:`🔕 (snooze)` icon on the far-right of the
line.
.. image:: replenishment/replenishment/reordering-rule-snooze-settings.png
:align: center
:alt: Snooze options to turn off notifications for reordering for a period of time.
A |PO| or |MO| created by a manual replenishment has a :guilabel:`Replenishment Report` as the
source document. A |PO| or |MO| created by an automated reordering rule has the |SO| reference
number(s) that triggered the rule as the source document.
.. image:: replenishment/replenishment/rfq-source-document.png
:align: center
:alt: Quote request list shows which quotes are directly from the replenishment report.
Make to order (MTO) route
=========================
Since the |MTO| route is recommended for customized products, the route is hidden by default.
To activate the |MTO| route in Odoo:
#. Go to :menuselection:`Inventory app --> Configuration --> Settings`.
#. Activate the :guilabel:`Multi-Step Routes` setting, located under the :guilabel:`Warehouse`
section, and click :guilabel:`Save`.
#. Then, go to :menuselection:`Inventory app --> Configuration --> Routes`.
#. Click on :menuselection:`Filters --> Archived` to show archived routes.
#. Select the checkbox next to :guilabel:`Replenish on Order (MTO)`, and click on
:menuselection:`Action --> Unarchive`.
.. note::
Activating the :guilabel:`Multi-Step Routes` setting also activates :guilabel:`Storage
Locations`. If these features aren't applicable to the warehouse, disable these settings after
unarchiving the |MTO| route.
To set a product's procurement route to |MTO|, go to :menuselection:`Inventory app --> Products -->
Products`, and click on the desired product to open its product form.
Then, click the :guilabel:`Inventory` tab, and in the :guilabel:`Routes` section of options, select
:guilabel:`Replenish on Order (MTO)`.
For products purchased directly from a vendor, make sure the :guilabel:`Buy` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a vendor is configured
in the :guilabel:`Purchase` tab of the product form.
For products manufactured in-house, make sure the :guilabel:`Manufacture` route is selected, in
addition to the :guilabel:`Replenish on Order (MTO)` route. Also, make sure a bill of materials is
configured for the product, which is accessible via the :guilabel:`Bill of Materials` smart button
on the product form.
.. note::
The |MTO| route cannot be selected alone. |MTO| **only** works if the :guilabel:`Manufacture` or
:guilabel:`Buy` route is also selected.
.. image:: replenishment/replenishment/acoustic-block-screen-replenish.png
:align: center
:alt: Replenish on Order selected on the product form.
.. seealso::
:doc:`../../manufacturing/workflows/use_mps`
.. toctree::
:titlesonly:
replenishment/mto
replenishment/reordering_rules
replenishment/report
replenishment/lead_times
replenishment/resupply_warehouses
@@ -2,14 +2,15 @@
Lead times
==========
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |BoMs| replace:: :abbr:`BoMs (Bills of Materials)`
.. |RFQ| replace:: :abbr:`RFQ (Request for Quotation)`
Accurately forecasting delivery dates is vital for fulfilling customer expectations. In Odoo, the
*Inventory* app allows for comprehensive lead time configuration, allowing coordination and planning
of manufacturing orders, deliveries, and receptions.
**Inventory** app allows for comprehensive lead time configuration, allowing coordination and planning
of manufacturing orders, deliveries, and receipts.
Lead time types
===============
@@ -18,52 +19,50 @@ Different lead times for different operations can impact various stages of the o
process. Here's a summary of the types of lead times in Odoo:
.. image:: lead_times/all-lead-times.png
:align: center
:alt: Show graphic of all lead times working together.
- :ref:`Customer lead time <inventory/shipping_receiving/customer-lt>`: default time frame for
- :ref:`Customer lead time <inventory/warehouses_storage/customer-lt>`: default time frame for
fulfilling customer orders. The customer lead time is the number of days from the date the sales
order (SO) is confirmed to the date the products are shipped from the warehouse. This is also
known as *delivery lead time*.
- :ref:`Sales security lead time <inventory/shipping_receiving/sales-security-lt>`: moves the
- :ref:`Sales security lead time <inventory/warehouses_storage/sales-security-lt>`: moves the
*scheduled delivery date* forward by a specified number of days. This serves as a buffer to allow
ample time to prepare the outgoing shipment earlier, considering the possibility of delays in the
fulfillment process.
- :ref:`Purchase lead time <inventory/shipping_receiving/purchase-lt>`: number of days from the
- :ref:`Purchase lead time <inventory/warehouses_storage/purchase-lt>`: number of days from the
confirmation of a purchase order (PO) to the receipt of products. It provides insight on the time
it takes for products to arrive at the warehouse, facilitating effective scheduling and planning
of supplier deliveries.
- :ref:`Purchase security lead time <inventory/shipping_receiving/purchase-security-lt>`: advances
- :ref:`Purchase security lead time <inventory/warehouses_storage/purchase-security-lt>`: advances
the order deadline on a :abbr:`PO (Purchase Order)` by a specified number of days. This proactive
approach of placing orders earlier mitigates the risk of vendor or shipping delays. Thus, for
products that are set to replenish to order, the need appears on the *Replenishment report*
earlier, according to the specified number of days.
- :ref:`Days to Purchase <inventory/shipping_receiving/days-to-purchase>`: days needed for the
- :ref:`Days to Purchase <inventory/warehouses_storage/days-to-purchase>`: days needed for the
vendor to receive a request for quotation (RFQ) and confirm it. It advances the deadline to
schedule a |RFQ| by a specified number of days.
- :ref:`Manufacturing lead time <inventory/shipping_receiving/manuf-lt>`: number of days needed to
- :ref:`Manufacturing lead time <inventory/warehouses_storage/manuf-lt>`: number of days needed to
complete a manufacturing order (MO) from the date of confirmation. This lead time includes
weekends (non-working hours in Odoo), and is used to forecast an approximate production date for a
finished good.
- :ref:`Days to prepare manufacturing order
<inventory/shipping_receiving/prepare-manufacturing-order>`: number of days needed to replenish
<inventory/warehouses_storage/prepare-manufacturing-order>`: number of days needed to replenish
components, or manufacture sub-assemblies of the product. Either set one directly on the bill of
materials (BoM), or click *Compute* to sum up purchase and manufacturing lead times of components
in the |BoM|.
- :ref:`Manufacturing security lead time <inventory/shipping_receiving/manuf-security-lt>`: moves
the scheduled date of the :abbr:`MO (Manufacturing Order)` forward by a specified number of days.
When used in conjunction with :ref:`replenish to order
<inventory/management/products/strategies>`, the security lead time makes the need appear earlier
on the replenishment report.
- :ref:`Manufacturing security lead time <inventory/warehouses_storage/manuf-security-lt>`: moves
the scheduled date of the |MO| forward by a specified number of days. When used in conjunction
with :ref:`replenish to order <inventory/management/products/strategies>`, the security lead time
makes the need appear earlier on the replenishment report.
.. _inventory/shipping_receiving/customer-lt:
.. _inventory/warehouses_storage/customer-lt:
Sales lead times
================
@@ -81,7 +80,6 @@ not be feasible to fulfill the order by that time, which would impact other ware
1 day. Based on the lead time inputs, Odoo suggests a delivery date in 15 days, on July 26th.
.. image:: lead_times/scheduled-date.png
:align: center
:alt: Set *Delivery Date* in a sales order. Enables delivery lead times feature.
The following sections demonstrate how to automatically compute expected delivery dates.
@@ -100,10 +98,9 @@ in the number of calendar days required to fulfill the delivery order from start
Time` field.
.. image:: lead_times/customer.png
:align: center
:alt: Set *Customer Lead Time* on the product form.
.. _inventory/shipping_receiving/sales-security-lt:
.. _inventory/warehouses_storage/sales-security-lt:
Sales security lead time
------------------------
@@ -124,7 +121,6 @@ team to prepare for outgoing shipments earlier than the scheduled date.
the new scheduled date for the delivery order would be April 5th.
.. image:: lead_times/sales-security.png
:align: center
:alt: View of the security lead time for sales configuration from the sales settings.
Deliver several products
@@ -143,7 +139,6 @@ and set the :guilabel:`Shipping Policy` to:
date to the longest lead time among the products in the order.
.. image:: lead_times/shipping-policy.png
:align: center
:alt: Show *Shipping Policy* field in the *Other Info* tab of a quotation.
.. example::
@@ -154,7 +149,7 @@ and set the :guilabel:`Shipping Policy` to:
delivery date is 5 days from today: April 7th. On the other hand, selecting :guilabel:`When all
products are ready` configures the scheduled date to be 8 days from today: April 10th.
.. _inventory/shipping_receiving/purchase-lt:
.. _inventory/warehouses_storage/purchase-lt:
Purchase lead times
===================
@@ -171,11 +166,10 @@ This deadline is the date by which the order should be confirmed, in order to en
by the expected receipt date.
.. image:: lead_times/vendor-lead-times.png
:align: center
:alt: Visualization of PO deadline and receipt date used with vendor lead times.
.. seealso::
:ref:`PO scheduling with reordering rules <inventory/management/reordering_rules>`
:doc:`PO scheduling with reordering rules <reordering_rules>`
Vendor lead time
----------------
@@ -197,7 +191,6 @@ pricelist, click the :guilabel:`Add a line` button to add vendor details, such a
vendor is set to `10 days.`
.. image:: lead_times/set-vendor.png
:align: center
:alt: Add delivery lead times to vendor pricelist on a product.
By setting the vendor lead time, the expected arrival date of the item is automatically determined
@@ -212,14 +205,12 @@ timeframe.
from the :guilabel:`Receipt` smart button, located on the :guilabel:`PO (Purchase Order)`.
.. image:: lead_times/receipt-date.png
:align: center
:alt: Show expected *Receipt Date* of the product from the vendor.
.. image:: lead_times/scheduled-date-receipt.png
:align: center
:alt: Show expected *Scheduled Date* of arrival of the product from the vendor.
.. _inventory/shipping_receiving/purchase-security-lt:
.. _inventory/warehouses_storage/purchase-security-lt:
Purchase security lead time
---------------------------
@@ -240,24 +231,18 @@ set to account for potential delays in supplier deliveries. Then, click :guilabe
the receipt would be April 8th.
.. image:: lead_times/vendor-security.png
:align: center
:alt: Set security lead time for purchase from the Inventory > Configuration > Settings.
.. _inventory/shipping_receiving/days-to-purchase:
.. _inventory/warehouses_storage/days-to-purchase:
Days to purchase
----------------
Days to purchase lead time
--------------------------
To set up the *days to purchase* lead time, go to :menuselection:`Inventory app --> Configuration
--> Settings`. Under the :guilabel:`Advanced Scheduling` section, in the :guilabel:`Days to
Purchase` field, specify the number of days required for the vendor to confirm a |RFQ| after
receiving it from the company.
To set it up, go to :menuselection:`Inventory app --> Configuration --> Settings`. Under the
:guilabel:`Advanced Scheduling` section, in the :guilabel:`Days to Purchase` field, specify the
number of days required for the vendor to confirm a |RFQ| after receiving it from the company.
.. image:: lead_times/days-to-purchase.png
:align: center
:alt: Show "Days to Purchase" configuration in the Settings page.
.. _inventory/shipping_receiving/manuf-lt:
.. _inventory/warehouses_storage/manuf-lt:
Manufacturing lead times
========================
@@ -265,12 +250,11 @@ Manufacturing lead times
Lead times can help simplify the procurement process for consumable materials and components used in
manufactured products with bills of materials (BoMs).
The :abbr:`MO (Manufacturing Order)` deadline, which is the deadline to begin the manufacturing
process to complete the product by the scheduled delivery date, can be determined by configuring the
manufacturing lead times and manufacturing security lead times.
The |MO| deadline, which is the deadline to begin the manufacturing process to complete the product
by the scheduled delivery date, can be determined by configuring the manufacturing lead times and
manufacturing security lead times.
.. image:: lead_times/manuf-lead-times.png
:align: center
:alt: Visualization of the determination of planned MO date manufacturing lead times.
Manufacturing lead time
@@ -285,7 +269,6 @@ On the |BoM| form, click the :guilabel:`Miscellaneous` tab. Change the value (in
:guilabel:`Manuf. Lead Time` field to specify the calendar days needed to manufacture the product.
.. image:: lead_times/set-manufacturing.png
:align: center
:alt: Manuf. Lead Time value specified on a product's Bill of Material form.
.. note::
@@ -295,12 +278,11 @@ On the |BoM| form, click the :guilabel:`Miscellaneous` tab. Change the value (in
If the |BoM| product is subcontracted, the :guilabel:`Manuf. Lead Time` can be used to determine
the date at which components should be sent to the subcontractor.
Establish a :abbr:`MO (Manufacturing Order)` deadline, based on the *expected delivery date*,
indicated in the :guilabel:`Scheduled Date` field of the :abbr:`DO (Delivery Order)`.
Establish a |MO| deadline, based on the *expected delivery date*, indicated in the
:guilabel:`Scheduled Date` field of the :abbr:`DO (Delivery Order)`.
The :abbr:`MO (Manufacturing Order)` deadline, which is the :guilabel:`Scheduled Date` field on the
:abbr:`MO (Manufacturing Order)`, is calculated as the *expected delivery date* subtracted by the
manufacturing lead time.
The |MO| deadline, which is the :guilabel:`Scheduled Date` field on the |MO|, is calculated as the
*expected delivery date* subtracted by the manufacturing lead time.
This ensures the manufacturing process begins on time, in order to meet the delivery date.
@@ -317,7 +299,7 @@ performed at the work center simultaneously`).
product requires 14 days to manufacture. So, the latest date to start the :abbr:`MO
(Manufacturing Order)` to meet the commitment date is August 1st.
.. _inventory/shipping_receiving/prepare-manufacturing-order:
.. _inventory/warehouses_storage/prepare-manufacturing-order:
Days to prepare manufacturing order
-----------------------------------
@@ -343,7 +325,7 @@ manufacture semi-finished products.
purchase lead time of four days. The :guilabel:`Days to prepare Manufacturing Order` is four
days.
.. _inventory/shipping_receiving/manuf-security-lt:
.. _inventory/warehouses_storage/manuf-security-lt:
Manufacturing security lead time
--------------------------------
@@ -356,15 +338,13 @@ Next, enter the desired number of calendar days. By configuring the security lea
set to account for potential delays in the manufacturing process. Then, click :guilabel:`Save`.
.. image:: lead_times/manuf-security.png
:align: center
:alt: View of the security lead time for manufacturing from the manufacturing app settings.
.. example::
A product has a scheduled shipment date on the :abbr:`DO (Delivery Order)` set for August 15th.
The manufacturing lead time is 7 days, and manufacturing security lead time is 3 days. So, the
:guilabel:`Scheduled Date` on the :abbr:`MO (Manufacturing Order)` reflects the latest date to
begin the manufacturing order. In this example, the planned date on the :abbr:`MO (Manufacturing
Order)` is August 5th.
:guilabel:`Scheduled Date` on the |MO| reflects the latest date to begin the manufacturing order.
In this example, the planned date on the |MO| is August 5th.
Global example
==============
@@ -383,7 +363,6 @@ date from the warehouse is on September 20th. Odoo uses lead times and automated
schedule the necessary operations, based on the outgoing shipment delivery date, September 20th:
.. image:: lead_times/global-example.png
:align: center
:alt: Show timeline of how lead times work together to schedule warehouse operations.
- **September 1st**: Sales order created, confirmed by salesperson.
@@ -2,64 +2,106 @@
Reordering rules
================
.. _inventory/management/reordering_rules:
.. |SO| replace:: :abbr:`SO (sales order)`
.. |PO| replace:: :abbr:`PO (purchase order)`
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOs| replace:: :abbr:`SOs (Sales Orders)`
.. |RFQ| replace:: :abbr:`RFQ (Request for Quotation)`
.. |RFQs| replace:: :abbr:`RFQs (Requests for Quotations)`
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |BoMs| replace:: :abbr:`BoMs (Bills of Materials)`
.. |adjust| replace:: :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon
*Reordering rules* are used to keep forecasted stock levels above a certain threshold without
exceeding a specified upper limit. This is accomplished by specifying a minimum quantity that stock
should not fall below and a maximum quantity that stock should not exceed.
Reordering rules can be configured for each product based on the route used to replenish it. If a
product uses the *Buy* route, then a Request for Quotation (RFQ) is created when the reordering rule
is triggered. If a product uses the *Manufacture* route, then a Manufacturing Order (MO) is created
instead. This is the case regardless of the selected replenishment route.
product uses the *Buy* route, then a *request for quotation* (RFQ) is created when the reordering
rule is triggered. If a product uses the *Manufacture* route, then a *manufacturing order* (MO) is
created instead. This is the case regardless of the selected replenishment route.
.. seealso::
- `Odoo Tutorials: Automatic Reordering Rules <https://www.youtube.com/watch?v=XEJZrCjoXaU>`_
- `Odoo Tutorials: Manual Reordering Rules <https://www.youtube.com/watch?v=deIREJ1FFj4>`_
Configure products for reordering rules
=======================================
To set up reordering rules for the first time, refer to:
In order to use reordering rules for a product, it must first be correctly configured. Begin by
navigating to :menuselection:`Inventory app --> Products --> Products`, then select an existing
product, or create a new one by clicking :guilabel:`New`.
- :ref:`Reordering rules setup <inventory/warehouses_storage/configure-rr>`
- :ref:`Trigger <inventory/product_management/trigger>`
- :ref:`Preferred route <inventory/warehouses_storage/route>`
On the product form, under the :guilabel:`General Information` tab, make sure the
:guilabel:`Track Inventory` checkbox is ticked. This is necessary for Odoo to track the product's
stock levels and trigger reordering rules.
To understand and optimize replenishment using advanced features, see:
- :ref:`Just-in-time logic <inventory/warehouses_storage/just-in-time>`
- :ref:`Visibility days <inventory/product_management/visibility-days>`
.. _inventory/warehouses_storage/configure-rr:
Reordering rules setup
======================
To configure automatic and manual reordering rules, complete the following:
#. :ref:`Product type configuration <inventory/warehouses_storage/set-product-type>`
#. :ref:`Replenishment method <inventory/warehouses_storage/set-method>`
#. :ref:`Create rule <inventory/warehouses_storage/rr-fields>`
.. _inventory/warehouses_storage/set-product-type:
Product type configuration
--------------------------
A product must be configured correctly to use reordering rules. Begin by navigating to
:menuselection:`Inventory app --> Products --> Products`, then select an existing product, or create
a new one by clicking :guilabel:`New`.
On the product form, under the :guilabel:`General Information` tab, set the :guilabel:`Product Type`
to :guilabel:`Goods`, and make sure the :guilabel:`Track Inventory` checkbox is ticked. This is
necessary for Odoo to track the product's stock levels and trigger reordering rules.
.. image:: reordering_rules/product-type.png
:alt: Set the Product Type as Storable.
:alt: Product Type and Track Inventory configurations.
Next, click on the :guilabel:`Inventory` tab and select one or more routes from the
:guilabel:`Routes` section. Doing so tells Odoo which route to use to replenish the product.
.. _inventory/warehouses_storage/set-method:
.. image:: reordering_rules/select-routes.png
:alt: Select one or more routes on the Inventory tab.
Replenishment method
--------------------
If the product is reordered using the :guilabel:`Buy` route, confirm that the :guilabel:`Can be
Purchased` checkbox is enabled under the product name. This makes the :guilabel:`Purchase` tab
appear. Click on the :guilabel:`Purchase` tab, and specify at least one vendor, and the price that
they sell the product for, so that Odoo knows which company the product should be purchased from.
Next, configure the replenishment method (e.g., buy or manufacture) by going to the
:guilabel:`Inventory` tab and select one or more routes from the :guilabel:`Routes` section.
.. image:: reordering_rules/specify-vendor.png
:alt: Specify a vendor and price on the Purchase tab.
If the product is purchased, :ref:`install <general/install>` the **Purchase** app, and confirm that
the :guilabel:`Purchase` checkbox is enabled under the product name. In the :guilabel:`Purchase`
tab, add at least one vendor to the :doc:`vendor pricelist <../../../purchase/products/pricelist>`.
Odoo uses the vendor at the top of the list to generate |RFQs| when reordering rules are triggered.
If the product is replenished using the :guilabel:`Manufacture` route, it needs to have at least one
Bill of Materials (BoM) associated with it. This is necessary because Odoo only creates
manufacturing orders for products with a :abbr:`BoM (Bill of Materials)`.
In the :guilabel:`Inventory` tab's :guilabel:`Routes` field, tick the :guilabel:`Buy` checkbox.
If a :abbr:`BoM (Bill of Materials)` does not already exist for the product, select the
:guilabel:`Bill of Materials` smart button at the top of the product form, then click
:guilabel:`New` to configure a new :abbr:`BoM (Bill of Materials)`.
.. seealso::
- :doc:`Buy route <../../../purchase/manage_deals/rfq>`
- :doc:`Vendor pricelist <../../../purchase/products/pricelist>`
.. image:: reordering_rules/bom-smart-button.png
:alt: The Bill of Materials smart button on a product form.
If the product is manufactured, :ref:`install <general/install>` the **Manufacturing** app, and in
the :guilabel:`Inventory` tab's :guilabel:`Routes` field, tick the :guilabel:`Manufacture` checkbox.
Next, ensure at least one :doc:`bill of materials
<../../../manufacturing/basic_setup/bill_configuration>` (BoM) is displayed in the :guilabel:`Bill
of Materials` smart button at the top of the product form. This is necessary because Odoo only
creates manufacturing orders for products with a |BoM|.
If a |BoM| does not already exist for the product, click the :guilabel:`Bill of Materials` smart
button, then click :guilabel:`New` to configure a new |BoM|.
.. seealso::
- :doc:`Manufacture route <../../../manufacturing/basic_setup/bill_configuration>`
.. _inventory/warehouses_storage/rr-fields:
Create new reordering rules
===========================
---------------------------
To create a new reordering rule, navigate to :menuselection:`Inventory app --> Operations -->
Replenishment`, then click :guilabel:`New`, and fill out the following fields for the new reordering
@@ -71,36 +113,36 @@ rule line item:
triggered. When forecasted stock falls below this number, a replenishment order for the product is
created.
- :guilabel:`Max`: The maximum quantity at which the stock is replenished.
- :guilabel:`To Order`: The number of units, according to the *UoM*, that should be replenished for
this reordering rule (e.g., a product could be replenished in batches of 20).
- :guilabel:`UoM`: The unit of measure used for reordering the product. This value can simply be
`Units` or a specific unit of measurement for weight, length, etc.
- :guilabel:`Multiple Quantity`: If the product should be ordered in specific quantities, enter the
number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`,
and only 3 are needed, 5 products are replenished.
.. image:: reordering_rules/reordering-rule-form.png
.. figure:: reordering_rules/reordering-rule-form.png
:alt: The form for creating a new reordering rule.
.. note::
Two other fields are automatically populated: :guilabel:`On Hand` (the number of units currently
available in inventory) and :guilabel:`Forecast` (the number of units expected to be available in
inventory after all orders are taken into account). These numbers will only change when an
:doc:`inventory adjustment <../inventory_management/count_products>` is made.
Also, additional fields can be accessed by clicking the :icon:`oi-settings-adjust`
:guilabel:`(additional options slider icon)`. For example, :guilabel:`Multiple Quantity`
specifies if the product should be replenished in batches of a certain quantity (e.g., a product
could be replenished in batches of 20).
The form for creating a new reordering rule.
.. tip::
Reordering rules can also be created from each product form. To do so, navigate to
:menuselection:`Inventory app --> Products --> Products`, and select a product. Then, click the
:guilabel:`Reordering Rules` smart button, and click :guilabel:`New` to fill out the new line, as
detailed above.
Reordering rules can also be created from the :guilabel:`Reordering Rules` smart button on the
product form.
.. note::
To learn how the :guilabel:`On Hand`, :guilabel:`Forecast`, and :guilabel:`To Order` fields are
calculated using on-hand quantities and future demand, see the :ref:`Just-in-time logic
<inventory/warehouses_storage/just-in-time>` section.
For advanced usage of reordering rules, learn about the following reordering rule fields:
- :ref:`Trigger <inventory/product_management/trigger>`
- :ref:`Preferred route <inventory/warehouses_storage/route>`
- :ref:`Vendor <inventory/warehouses_storage/set-vendor>`
- :ref:`Bill of materials <inventory/warehouses_storage/set-bom-field>`
- :ref:`Procurement group <inventory/warehouses_storage/procurement-grp>`
- :ref:`Visibility days <inventory/product_management/visibility-days>`
- :ref:`Route <inventory/product_management/route>`
.. note::
The fields above are not available by default, and must be enabled by selecting the |adjust| in
the far-right corner and selecting the desired column from the drop-down menu.
.. _inventory/warehouses_storage/zero-zero:
@@ -169,40 +211,43 @@ quantity of the product to fall below the :guilabel:`Min Quantity` of `0.00`, th
Trigger
=======
When stock falls below the reordering rule's minimum, set the reordering rule's *trigger* to
*automatic* to automatically create purchase or manufacturing orders to replenish stock.
A reordering rule's *trigger* can be set to *automatic* or *manual*. While both function the same
way, the difference between the two types of reordering rules is how the rule is launched:
Alternatively, setting the reordering rule's trigger to *manual* displays the product and forecasted
stock on the *replenishment dashboard*, where the procurement manager can review the stock levels,
lead times, and forecasted dates of arrival.
- :ref:`Auto <inventory/warehouses_storage/auto-rr>`: A purchase or manufacturing order is
automatically created when the forecasted stock falls below the reordering rule's minimum
quantity. By default, the :guilabel:`Auto` trigger is selected.
- :ref:`Manual <inventory/warehouses_storage/manual-rr>`: The :doc:`Replenishment report <report>`
lists products needing replenishment, showing current/forecasted stock, lead times, and arrival
dates. Users can review forecasts before clicking *Order*.
.. seealso::
:doc:`../replenishment`
.. tip::
The replenishment dashboard is accessible by going to :menuselection:`Inventory app -->
Operations --> Replenishment`.
To enable the :guilabel:`Trigger` field, go to :menuselection:`Inventory app --> Configuration -->
Reordering Rules`. Then, click the :guilabel:`(slider)` icon, located to the far-right of the column
titles, and enable the :guilabel:`Trigger` option from the additional options drop-down menu that
appears.
.. image:: reordering_rules/enable-trigger.png
:alt: Enable the Trigger field by toggling it in the additional options menu
To enable the :guilabel:`Trigger` field, go to :menuselection:`Inventory app --> Operations -->
Replenishment`. Then, click the |adjust|, located to the far-right of the column titles, and tick
the :guilabel:`Trigger` checkbox.
In the :guilabel:`Trigger` column, select :guilabel:`Auto` or :guilabel:`Manual`. Refer to the
sections below to learn about the different types of reordering rules.
.. _inventory/warehouses_storage/auto-rr:
Auto
----
Automatic reordering rules, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Auto`, generates purchase or manufacturing orders when:
*Automatic reordering rules*, enabled by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Auto`, generate purchase or manufacturing orders when either:
#. the scheduler runs, and the *On Hand* quantity is below the minimum
#. a sales order is confirmed, and lowers the *Forecasted* quantity of the product below the
minimum
#. The scheduler runs, and the *Forecasted* quantity is below the minimum, or
#. A sales order is confirmed, and lowers the *Forecasted* quantity of the product below the
minimum.
If the :guilabel:`Buy` route is selected, then an |RFQ| is generated. To view and manage |RFQs|,
navigate to :menuselection:`Purchase app --> Orders --> Requests for Quotation`.
If the :guilabel:`Manufacture` route is selected, then an |MO| is generated. To view and manage
|MOs|, navigate to :menuselection:`Manufacturing app --> Operations --> Manufacturing Orders`.
When no route is selected, Odoo selects the :guilabel:`Route` specified in the :guilabel:`Inventory`
tab of the product form.
.. tip::
The scheduler is set to run once a day, by default.
@@ -222,112 +267,47 @@ Automatic reordering rules, configured by setting the reordering rule's :guilabe
.. image:: reordering_rules/auto.png
:alt: Show automatic reordering rule from the Reordering Rule page.
If the :guilabel:`Buy` route is selected, then an :abbr:`RFQ (Request for Quotation)` is generated.
To view and manage :abbr:`RFQs (Requests for Quotation)`, navigate to :menuselection:`Purchase app
--> Orders --> Requests for Quotation`.
If the :guilabel:`Manufacture` route is selected, then an :abbr:`MO (Manufacturing Order)` is
generated. To view and manage :abbr:`MOs (Manufacturing Orders)`, navigate to
:menuselection:`Manufacturing app --> Operations --> Manufacturing Orders`.
When no route is selected, Odoo selects the :guilabel:`Route` specified in the :guilabel:`Inventory`
tab of the product form.
.. _inventory/product_management/manual-rr:
.. _inventory/warehouses_storage/manual-rr:
Manual
------
Manual reordering rules, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Manual`, lists a product on the replenishment dashboard when the forecasted quantity
falls below a specified minimum. Products on this dashboard are called *needs*, because they are
needed to fulfill upcoming sales orders, but the forecasted quantity is not enough.
*Manual reordering rules*, configured by setting the reordering rule's :guilabel:`Trigger` field to
:guilabel:`Manual`, list a product on the :doc:`replenishment dashboard <report>` when the
forecasted quantity falls below a specified minimum. Products on this dashboard are called *needs*,
because they are needed to fulfill upcoming sales orders, for which the forecasted quantity is not
enough.
The replenishment dashboard, accessible by navigating to :menuselection:`Inventory app -->
Operations --> Replenishment`, considers sales order deadlines, forecasted stock levels, and vendor
lead times. It displays needs **only** when it is time to reorder items.
lead times. It displays needs **only** when it is time to reorder items, thanks to the :guilabel:`To
Reorder` filter.
.. note::
If the one-day window for ordering products is too short, skip to the :ref:`visibility days
<inventory/product_management/visibility-days>` section to make the need appear on the
replenishment dashboard a specified number of days in advance.
When a product appears on the replenishment dashboard, clicking the :guilabel:`Order Once` button
When a product appears on the replenishment dashboard, clicking the :guilabel:`Order` button
generates the purchase or manufacturing order with the specified amounts :guilabel:`To Order`.
.. image:: reordering_rules/manual.png
:alt: Click the Order Once button on the replenishment dashboard to replenish stock.
:alt: Click the Order button on the replenishment dashboard to replenish stock.
.. _inventory/product_management/visibility-days:
Visibility days
===============
.. important::
Ensure :doc:`lead times <lead_times>` are understood before proceeding with this section.
When :ref:`manual reordering rules <inventory/product_management/manual-rr>` are assigned to a
product, *visibility days* make the product appear on the replenishment dashboard
(:menuselection:`Inventory app --> Operations --> Replenishment`) a certain number of days in
advance.
.. example::
A product has a manual reordering rule set to trigger when the stock level falls below four
units. The current on-hand quantity is ten units.
The current date is February 20th, and the *delivery date* on a sales order (in the
:guilabel:`Other Info` tab) is March 3rd — twelve days from the current date.
The :ref:`vendor lead time <inventory/shipping_receiving/purchase-lt>` is four days, and the
:ref:`purchase security lead time <inventory/shipping_receiving/purchase-security-lt>` is one
day.
When the :guilabel:`Visibility Days` field of the reordering rule is set to zero, the product
appears on the replenishment dashboard five days before the delivery date, which, in this case,
is February 27th.
.. image:: reordering_rules/need-dates.png
:alt: Graphic representing when the need appears on the replenishment dashboard: Feb 27th.
To see the product on the replenishment dashboard for the current date, February 20, set the
:guilabel:`Visibility Days` to `7.00`.
To determine the amount of visibility days needed to see a product on the replenishment dashboard,
subtract *today's date* from the *date the need appears* on the replenishment dashboard.
.. math::
Visibility~days = Need~appears~date - Today's~date
.. example::
Referring to the example above, today's date is February 20th, and the need for the product
appears on February 27th.
(February 27 - February 20 = 7 days)
Incorrectly setting the :guilabel:`Visibility Days` fewer than seven days in this case results in
the need **not** appearing on the replenishment dashboard.
.. image:: reordering_rules/visibility-days.png
:alt: Show the replenishment dashboard with the correct and incorrect visibility days set.
.. _inventory/product_management/route:
.. _inventory/warehouses_storage/route:
Route
=====
Odoo allows for multiple routes to be selected under the :guilabel:`Inventory` tab on each product
form. For instance, it is possible to select both :guilabel:`Buy` and :guilabel:`Manufacture`, thus
enabling the functionality of both routes.
Odoo allows for multiple routes to be selected as replenishment methods under the
:guilabel:`Inventory` tab on each product form. For instance, it is possible to select both
:guilabel:`Buy` and :guilabel:`Manufacture`, indicating to Odoo that the product can be bought or
manufactured.
Odoo also enables users to set a preferred route for a product's reordering rule. This is the route
that the rule defaults to, if multiple are selected. To select a preferred route, begin by
navigating to :menuselection:`Inventory app --> Configuration --> Reordering Rules`.
Odoo also enables users to set a preferred route for a product's reordering rule. This is the
replenishment method (e.g., buying or manufacturing) that the rule defaults to, if multiple are
available.
By default, the :guilabel:`Route` column is hidden on the :guilabel:`Reordering Rules` page.
To specify a preferred route, begin by navigating to :menuselection:`Inventory app --> Operations
--> Replenishment`.
Reveal the :guilabel:`Route` column by selecting the :guilabel:`(slider)` icon to the far-right of
the column titles, and checking the :guilabel:`Route` option from the drop-down menu that appears.
By default, the :guilabel:`Route` column is hidden. To reveal it, select the |adjust| to the
far-right of the column titles, and ticking :guilabel:`Route` from the drop-down menu that appears.
Click inside of the column on the row of a reordering rule, and a drop-down menu shows all available
routes for that rule. Select one to set it as the preferred route.
@@ -337,5 +317,243 @@ routes for that rule. Select one to set it as the preferred route.
.. important::
If multiple routes are enabled for a product but no preferred route is set for its reordering
rule, the product is reordered using the selected route that is listed first on the
:guilabel:`Inventory` tab of the product form.
rule, the product is reordered using the *Buy* route, then *Manufacture*.
Advanced uses
-------------
Pairing :guilabel:`Route` with one of the following fields on the replenishment report unlocks
advanced configurations of reordering rules. Consider the following:
.. _inventory/warehouses_storage/set-vendor:
- :guilabel:`Vendor`: When the selected :guilabel:`Route` is :guilabel:`Buy`, setting the
:guilabel:`Vendor` field to one of the multiple vendors on the vendor pricelist indicates to Odoo
that the vendor is automatically populated on |RFQs| when a reordering rule triggers the creation
of a purchase order.
.. _inventory/warehouses_storage/set-bom-field:
- :guilabel:`Bill of Materials`: When the :guilabel:`Route` is set to :guilabel:`Manufacture`, and
there are multiple |BoMs| in use, specifying the desired |BoM| in the replenishment report, draft
manufacturing orders are created with this |BoM| in use.
.. _inventory/warehouses_storage/procurement-grp:
- :guilabel:`Procurement Group`: This is a way to group related |POs| or |MOs| that are tied to
fulfilling a specific demand, like an |SO| or a project. It helps organize and track which orders
are linked to a particular demand.
.. note::
Procurement groups link replenishment methods to demand, enabling smart buttons to appear when
using the :doc:`MTO route <mto>`.
.. figure:: reordering_rules/po-smartbutton.png
:alt: Showing smart button to PO.
Sales order (demand) with a linked purchase order (replenishment method).
In the context of reordering rules:
- Reordering rules do not automatically assign a procurement group, which is why there are no
smart buttons that link |SOs| to |POs|, unlike the :abbr:`MTO (Make to Order)` route.
- To enable smart buttons for products replenished by reordering rules (not :abbr:`MTO (Make to
Order)`), with specific quantities linked to specific demands (e.g. |SOs|), assign a procurement
group.
- Without a procurement group, demands for the same product can be combined into a single |RFQ|,
even if the reordering rule is executed multiple times for those demands. This allows for more
efficient procurement by consolidating demands into fewer orders.
Selecting a procurement group in the :guilabel:`Procurement Group` field on the replenishment
report ensures that all linked orders are grouped under the same demand, based on the defined
route.
.. exercise::
How can you set the *Procurement Group*, *Vendor*, and *Route* fields on the replenishment
report to generate a single |RFQ| for five different products in sales order SO35, given they
share the same vendor, Azure Interior, and ensure other demands for these products are handled
separately?
.. spoiler:: View the answer
#. Set the :guilabel:`Procurement Group` to `SO35`, in the reordering rule for all five
products. This groups the demands for `SO35` in the same |RFQ| or |MO|.
#. Set the :guilabel:`Vendor` to `Azure Interior` to ensure the |RFQ| is created for the
same supplier.
#. Set the :guilabel:`Route` to :guilabel:`Buy` to generate an |RFQ|.
#. Click the :guilabel:`Order` button to generate a single |RFQ| for the five products tied
to `SO35`.
| After placing the order, remove `SO35` from the :guilabel:`Procurement Group` field of the
five products' reordering rules. This ensures future demands for these products are
managed separately and assigned to different |RFQs| (the usual behavior).
.. _inventory/warehouses_storage/just-in-time:
Just-in-time logic
==================
*Just-in-time logic* in Odoo minimizes storage costs by placing orders precisely to meet deadlines.
This is achieved using the :ref:`forecasted date <inventory/warehouses_storage/forecasted-date>`,
which determines when replenishment is necessary to avoid overstocking.
The forecasted date is the **earliest possible date** to receive a product if the replenishment
process starts immediately. It is calculated by summing the lead times linked to the replenishment
process, such as :ref:`vendor lead times <inventory/warehouses_storage/purchase-lt>` and
:ref:`purchasing delays <inventory/warehouses_storage/purchase-security-lt>` for purchases, or
:ref:`manufacturing lead times <inventory/warehouses_storage/manuf-lt>` for production. Both
automatic and manual reordering rules work this way.
.. example::
For a product with a 5-day total lead time and a sales order delivery date in 10 days, Odoo waits
5 days to place the order, ensuring it arrives just in time for delivery.
Important considerations:
- **If this feels risky**, consider adding buffer time or :doc:`adjusting lead times <lead_times>`
for more flexibility.
- While lead times and just-in-time logic provide additional control, **reordering rules work
perfectly fine without them**. Keeping delivery dates on sales orders as their *creation date*
ensures purchases are immediately triggered when needed
.. _inventory/warehouses_storage/forecasted-date:
Forecasted date and To Order quantity
-------------------------------------
To view the *forecasted date*, go to the replenishment report and click the :icon:`fa-info-circle`
:guilabel:`(info)` icon for the desired reordering rule. The :guilabel:`Replenishment Information`
pop-up window displays the :guilabel:`Forecasted Date` and various lead times.
The *forecasted date* is the total time needed to procure a product in Odoo. It is calculated by
summing the lead times linked to the product's replenishment process. The total of these lead times,
added to the current date, determines when Odoo checks for demanded stock.
.. important::
The forecasted date is the **earliest possible date** the customer can receive the product if the
replenishment process began right **now**. It is calculated by adding all lead times related to
the product to the current date.
.. example::
A manual reordering rule is set up with no minimum or maximum quantities.
- Vendor lead time is 4 days, the purchase security lead time is 1 day, and the days to purchase
is 2 days.
- Today's date is November 26.
- These add up to 7 days, making the forecasted date, December 3rd.
A confirmed |SO| for 5 units has a delivery date of December 3rd (7 days from today). This demand
will appear on the replenishment report today, in the **To Order** field.
However, if the delivery date were later than December 3rd, it would not yet appear on the
report. Odoo only displays quantities to replenish when they fall within the forecasted date
window, ensuring orders are placed precisely when needed.
.. image:: reordering_rules/replenishment-info.png
:alt: Show forecasted date in Odoo.
The *just-in-time* logic ensures replenishment happens only when it's necessary for the forecasted
date's demand, helping avoid overstocking.
For example:
- If the forecasted quantity drops below the minimum **on** the forecasted date, replenishment must
begin immediately to avoid shortages.
- If the quantity drops below the minimum **after** the forecasted date, replenishment can wait.
The **To Order** quantity is the total demand on the forecasted date.
By timing purchase orders based on the combined lead times, Odoo optimizes stock levels, keeping
inventory minimal while ensuring future requirements are ordered at the last possible
moment—strategic procrastination without the stress!
Common confusion about forecasted quantities
--------------------------------------------
|SOs| due **after** the :guilabel:`Forecasted Date` are not accounted for in the
:guilabel:`Forecast` quantities of the reordering rule.
They are, however, accounted for on the forecasted report that is opened by clicking the
:icon:`fa-area-chart` :guilabel:`(graph)` icon on the replenishment report, as this one represents
the **long-term forecasted quantity**.
.. example::
.. figure:: report/zero-forecast.png
:alt: Forecast and To Order quantities is zero.
Continuing the above example, when the sales order's deadline is adjusted to December 4th, the
:guilabel:`Forecast` and :guilabel:`To Order` quantities are zero.
.. figure:: report/five-forecast.png
:alt: Show forecasted report.
Opening the :guilabel:`Forecasted Report` shows the :guilabel:`Forecasted` units is `5.00`.
.. _inventory/product_management/visibility-days:
Visibility days
===============
*Visibility days* enable the ability to determine if additional quantities should be added to the
planned replenishment. Odoo checks if forecasted stock on the forecasted date will drop below the
minimum in the reordering rule. **Only if** it is time to reorder, visibility days check additional
future demand by the specified number of days.
This feature helps consolidate orders by grouping immediate and near-future needs, reducing
transport costs and enabling supplier discounts for larger orders.
To set visibility days to incorporate orders for a specified number of days in the future, navigate
to :menuselection:`Inventory app --> Operations --> Replenishment`, or by clicking the *Reordering
Rules* smart button from the product form.
Next, enable the :guilabel:`Visibility Days` field by clicking the |adjust| to the far right and
choosing the feature from the drop-down menu. Then, enter the desired visibility days.
.. important::
The forecasted date is never pushed forward or extended; Odoo only checks the extra visibility
days if the stock falls below the minimum threshold on the forecasted date.
Example where visibility days is triggered
------------------------------------------
A product shipped from Asia has a combined vendor lead time of 30 days and a shipping cost of $100
(including :doc:`landed costs <../../product_management/inventory_valuation/landed_costs>` and
tariffs).
- November 4: Current date. The forecasted date is December 4 (30 days later).
- |SO| 1: Requires the product by Dec 4. Odoo places the order today, costing $100.
- |SO| 2: Requires the product by Dec 19. Normally, Odoo would order on Nov 19, costing an
additional $100.
- |SO| 3: Requires the product by Dec 25. Normally, Odoo would order on Nov 25, costing another
$100.
Ordering separately for these sales orders totals $300 in shipping costs.
.. image:: report/forecasted-date.png
:alt: Show forecasted date visualization.
Setting :guilabel:`Visibility Days` to `20.0` allows Odoo to "look ahead" 20 days from December 4
(|SO| 1's forecasted date) to December 24.
- It groups |SO| 2's order with |SO| 1, reducing shipping costs by consolidating orders.
- |SO| 3, which is due on Dec 25, is one day late and is not grouped with the other two orders.
.. image:: report/visibility-days.png
:alt: Visibility days visualization.
Counterexample where visibility days is not triggered
-----------------------------------------------------
Considering the example above, if |SO| 1 does not exist, then:
- **November 4**: Current date. The forecasted date is December 4 (30 days later).
- **November 5**: The forecasted date shifts to December 5.
- |SO| 2: Requires the product by December 19. Odoo will only trigger the order on November 19,
meaning the user will not see a replenishment notification until then.
This shows that visibility days complement just-in-time logic by optimizing it to balance
replenishment costs more effectively.
.. image:: reordering_rules/counterexample.png
:alt: Example where the visibility days does not trigger.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,52 @@
====================
Replenishment report
====================
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOs| replace:: :abbr:`SOs (Sales Orders)`
The *replenishment report* is an interactive dashboard that uses :doc:`manual reordering rules
<reordering_rules>`, lead times, and upcoming demands to forecast quantities of products that need
restocking.
Reordering rules used on this dashboard are normal reordering rules, but the user benefits from a
monitoring menu with extra options to manage suggestions for replenishment.
This enables users to anticipate future needs, keep less products on hand without the risk of
running out, plan and consolidate orders.
To access the replenishment report, go to :menuselection:`Inventory app --> Operations -->
Replenishment.`
The fields and features unique to the replenishment dashboard are displayed below. For definitions
of the other fields, go to the :ref:`Create reordering rules section
<inventory/warehouses_storage/rr-fields>`.
By default, the quantity in the :guilabel:`To Order` field is the quantity required to reach the set
:guilabel:`Max Quantity`. However, the :guilabel:`To Order` quantity can be adjusted by clicking on
the field and changing the value. To replenish a product manually, click :icon:`fa-truck`
:guilabel:`Order Once`.
Clicking :icon:`fa-bell-slash` :guilabel:`Snooze` temporarily deactivates the reordering rule for
the set period, hiding the entry from the replenishment dashboard, when it is supposed to appear.
.. tip::
Defining a :guilabel:`Vendor` allows filtering or grouping demands by the vendor. This simplifies
the process of identifying products to order and can reduce shipment costs.
.. image:: report/replenishment-dashboard.png
:alt: Replenishment report that displays recommended quantities to order.
.. note::
Automatic reordering rules appear on this menu, too but are hidden by default.
Replenishment information
=========================
In each line of the replenishment report, clicking the :icon:`fa-info-circle` :guilabel:`(info)`
icon opens the :guilabel:`Replenishment Information` pop-up window, which displays the *lead times*
and *forecasted date*.
For detailed information on how to use this feature for replenishment, go to the :ref:`Just in time
logic <inventory/warehouses_storage/just-in-time>` section.
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -144,7 +144,7 @@ Below is a list of commonly-used fields when importing vendor pricelists:
* - Quantity
- The minimum quantity required to receive the product at the specified price.
- :guilabel:`Quantity` field in the vendor pricelist. (If not visible, enable it by clicking
the :icon:`oi-settings-adjust` :guilabel:`(settings)` icon, and tick the :guilabel:`Quantity`
the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, and tick the :guilabel:`Quantity`
checkbox)
- `min_qty`
* - Unit Price
@@ -152,8 +152,8 @@ Below is a list of commonly-used fields when importing vendor pricelists:
- :guilabel:`Price` field in the vendor pricelist.
- `price`
* - Delivery Lead Time
- :ref:`Number of days <inventory/shipping_receiving/purchase-lt>` before receiving the
product after confirming a purchase order.
- :ref:`Number of days <inventory/warehouses_storage/purchase-lt>` before receiving the product
after confirming a purchase order.
- :guilabel:`Delivery Lead Time` field on the vendor pricelist.
- `delay`
* - Sequence
@@ -27,7 +27,6 @@ Next, click :guilabel:`Select a project` and select (or create) an API project t
in, and store credentials. Click :guilabel:`New Project`.
.. image:: google/new-api-project.png
:align: center
:alt: Create a new API project to store credentials.
.. tip::
@@ -40,14 +39,12 @@ Now, click on :guilabel:`Enabled APIs and Services` in the left menu. Select :gu
and Services` again if the :guilabel:`Search bar` doesn't appear.
.. image:: google/enable-apis-services.png
:align: center
:alt: Enable APIs and Services on the API Project.
After that, search for `Google Calendar API` using the search bar and select :guilabel:`Google
Calendar API` from the search results. Click :guilabel:`Enable`.
.. image:: google/enable-google-cal-api.png
:align: center
:alt: Enable the Google Calendar API.
OAuth consent screen
@@ -97,7 +94,6 @@ Under :menuselection:`Create OAuth Client ID`, select :guilabel:`Website applica
`/google_account/authentication`. Finally, click :guilabel:`Create`.
.. image:: google/uri.png
:align: center
:alt: Add the authorized JavaScript origins and the authorized redirect URIs.
A :guilabel:`Client ID` and :guilabel:`Client Secret` will appear, copy these to a notepad.
@@ -106,17 +102,21 @@ Setup in Odoo
=============
Once the *Client ID* and the *Client Secret* are located, open the Odoo database and go to
:menuselection:`Settings --> General Settings --> Integrations --> Google Calendar`. Check the box
next to :guilabel:`Google Calendar`.
:menuselection:`Settings --> Calendar` to find the :guilabel:`Google Calendar` feature. Tick the
checkbox labeled :guilabel:`Google Calendar`.
.. image:: google/settings-google-cal.png
:align: center
:alt: The Google Calendar checkbox in General Settings.
Next, copy and paste the *Client ID* and the *Client Secret* from the Google Calendar API
credentials page into their respective fields below the :guilabel:`Google Calendar` checkbox. Then,
click :guilabel:`Save`.
.. note::
Tick the :guilabel:`Pause Synchronization` checkbox to temporarily pause events from being
updated. This allows for testing and troubleshooting without removing credentials or uninstalling
the synchronization. To resume the sync, clear the checkbox and save.
Sync calendar in Odoo
=====================
@@ -124,7 +124,6 @@ Finally, open the :menuselection:`Calendar` app in Odoo and click on the :guilab
button to sync Google Calendar with Odoo.
.. image:: google/sync-google.png
:align: center
:alt: Click the Google sync button in Odoo Calendar to sync Google Calendar with Odoo.
.. note::
@@ -134,7 +133,6 @@ button to sync Google Calendar with Odoo.
give permission for the transfer of data)`.
.. image:: google/trust-odoo.png
:align: center
:alt: Give Odoo permission to access Google Calendar.
Now, Odoo Calendar is successfully synced with Google Calendar!
@@ -166,7 +164,6 @@ app --> Manage Users`. Then, select the user to modify the calendar, and click t
:guilabel:`Calendar` tab.
.. image:: google/google-reset.png
:align: center
:alt: Reset buttons highlighted on the calendar tab of the user.
Next, click :guilabel:`Reset Account` under the correct calendar.
@@ -177,7 +174,6 @@ Reset options
The following reset options are available for troubleshooting Google calendar sync with Odoo:
.. image:: google/reset-calendar.png
:align: center
:alt: Google calendar reset options in Odoo.
:guilabel:`User's Existing Events`:
@@ -201,9 +197,9 @@ synchronization.
Google OAuth FAQ
================
At times there can be misconfigurations that take place, and troubleshooting is needed to resolve
the issue. Below are the most common errors that may occur when configuring the *Google Calendar*
for use with Odoo.
At times there can be configuration errors that occur, and troubleshooting is needed to resolve the
issue. Below are the most common errors that may occur when configuring the *Google Calendar* for
use with Odoo.
Production vs. testing publishing status
----------------------------------------
@@ -225,7 +221,6 @@ If no test users are added to the :guilabel:`OAuth consent screen`, then an :gui
access_denied` populates.
.. image:: google/403-error.png
:align: center
:alt: 403 Access Denied Error.
To correct this error, return to the :guilabel:`OAuth consent screen`, under :guilabel:`APIs &
@@ -239,7 +234,6 @@ selected for the :guilabel:`Application Type`, an :guilabel:`Authorization Error
(:guilabel:`Error 400:redirect_uri_mismatch`).
.. image:: google/error-400.png
:align: center
:alt: Error 400 Redirect URI Mismatch.
To correct this error, delete the existing credentials, and create new credentials, by selecting
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 21 KiB

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