-
Notifications
You must be signed in to change notification settings - Fork 10k
[IMP] accounting: vendor bill digitization & update PO matching #14332
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 18.0
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -1,101 +1,215 @@ | ||||||||
================================ | ||||||||
AI-powered document digitization | ||||||||
================================ | ||||||||
===================== | ||||||||
Document digitization | ||||||||
===================== | ||||||||
|
||||||||
**Invoice digitization** is the process of converting paper documents into vendor bill and customer | ||||||||
invoice forms in your accounting. | ||||||||
Document digitization refers to the process of converting paper or digital documents into records | ||||||||
in a database. Using :abbr:`OCR (optical character recognition)` and artificial intelligence | ||||||||
technologies, Odoo reads the content and automatically creates and fills in the record's details. | ||||||||
This process is mainly used for vendor bills (or refunds). | ||||||||
|
||||||||
Odoo uses :abbr:`OCR (optical character recognition)` and artificial intelligence technologies to | ||||||||
recognize the content of the documents. Vendor bill and customer invoice forms are automatically | ||||||||
created and populated based on the scanned invoices. | ||||||||
.. note:: | ||||||||
Although less common, this digitization process can also be applied to customer invoices and | ||||||||
credit notes. The :ref:`settings <accounting/bill-digitization/configuration>` need to be | ||||||||
adjusted accordingly. | ||||||||
|
||||||||
.. seealso:: | ||||||||
- `Test Odoo's invoice digitization <https://www.odoo.com/app/invoice-automation>`_ | ||||||||
- `Odoo Tutorials: Vendor Bill Digitization | ||||||||
<https://www.odoo.com/slides/slide/vendor-bill-digitization-7065>`_ | ||||||||
- :doc:`/applications/essentials/in_app_purchase` | ||||||||
|
||||||||
.. _accounting/bill-digitization/configuration: | ||||||||
|
||||||||
Configuration | ||||||||
============= | ||||||||
|
||||||||
In :menuselection:`Accounting --> Configuration --> Settings --> Digitization`, check the box | ||||||||
:guilabel:`Document Digitization` and choose whether :guilabel:`Vendor Bills` and | ||||||||
:guilabel:`Customer Invoices` (this includes customer credit notes) should be processed | ||||||||
automatically or on demand. | ||||||||
Go to :menuselection:`Accounting --> Configuration --> Settings` and navigate to the | ||||||||
:guilabel:`Digitization` section. Enable the :guilabel:`Document Digitization` option and choose | ||||||||
whether :guilabel:`Vendor Bills` should be processed automatically or on demand. | ||||||||
|
||||||||
.. note:: | ||||||||
If the :guilabel:`Single Invoice Line Per Tax` option is enabled, only one line is created per | ||||||||
tax in the new vendor bill, regardless of the number of lines on it. | ||||||||
|
||||||||
.. _accounting/bill-digitization/vendor-bills-upload: | ||||||||
|
||||||||
If you enable the :guilabel:`Single Invoice Line Per Tax` option, only one line is created per tax | ||||||||
in the new bill, regardless of the number of lines on the invoice. | ||||||||
Vendor bills upload | ||||||||
=================== | ||||||||
|
||||||||
Invoice upload | ||||||||
============== | ||||||||
Vendor bills are :ref:`uploaded manually <accounting/bill-digitization/manual-upload>` or sent to a | ||||||||
:ref:`designated email alias <accounting/bill-digitization/email-alias>` to be digitized. They can | ||||||||
also be :ref:`automatically posted <accounting/bill-digitization/auto-post-bills>` for selected | ||||||||
vendors. | ||||||||
|
||||||||
Upload invoices manually | ||||||||
------------------------ | ||||||||
.. note:: | ||||||||
Once the bill is uploaded, the document preview appears on the right side of the screen. | ||||||||
|
||||||||
.. seealso:: | ||||||||
:doc:`Vendor bills <../vendor_bills>` | ||||||||
|
||||||||
From the :guilabel:`Accounting Dashboard`, click on the :guilabel:`Upload` button of your vendor | ||||||||
bills journal. | ||||||||
Alternatively, go to :menuselection:`Accounting --> Customers --> Invoices` or | ||||||||
:menuselection:`Accounting --> Vendors --> Bills` and select :guilabel:`Upload`. | ||||||||
.. _accounting/bill-digitization/manual-upload: | ||||||||
|
||||||||
.. _invoice-digitization/email-alias: | ||||||||
Manual upload | ||||||||
------------- | ||||||||
|
||||||||
Upload invoices using an email alias | ||||||||
------------------------------------ | ||||||||
In the Accounting dashboard, drag and drop vendor bills into the desired purchase journal or click | ||||||||
:guilabel:`Upload` on the purchase journal. | ||||||||
|
||||||||
You can configure your connected scanner to send scanned documents to an email alias. Emails sent to | ||||||||
these aliases are converted into new draft customer invoices or vendor bills. | ||||||||
.. _accounting/bill-digitization/email-alias: | ||||||||
|
||||||||
You can modify the email alias of a journal. To do so, go to the :guilabel:`Settings` app. Under | ||||||||
:guilabel:`General Settings: Discuss`, enable :guilabel:`Custom Email Servers`, add an | ||||||||
:guilabel:`Alias Domain`, and :guilabel:`Save`. | ||||||||
Upload via email alias | ||||||||
---------------------- | ||||||||
|
||||||||
The email alias is now available in the :guilabel:`Advanced Settings` tab of the journal. Emails | ||||||||
sent to this address will be converted automatically into new invoices or bills. | ||||||||
Vendor bills can be uploaded via an email alias associated with the relevant journal in two ways: | ||||||||
|
||||||||
- scanned from a connected scanner configured to send email to an email alias; | ||||||||
- sent directly to an email alias. | ||||||||
|
||||||||
Each PDF attached to the email is automatically converted into a new draft vendor bill. | ||||||||
|
||||||||
.. note:: | ||||||||
If you use the :doc:`Documents </applications/productivity/documents>` app, you can automatically | ||||||||
send your scanned invoices to the :guilabel:`Finance` workspace (e.g., | ||||||||
`[email protected]`). | ||||||||
- Only PDF and XML formats are processed via an email alias associated with a journal. | ||||||||
- JPEG files must be processed via :ref:`email alias in the Documents app | ||||||||
<documents/email-aliases>`. | ||||||||
|
||||||||
The default email aliases `vendor-bills@` and `customer-invoices@` followed by the | ||||||||
:guilabel:`Alias Domain` you set are automatically created for the :guilabel:`Vendor Bills` and | ||||||||
:guilabel:`Customer Invoices` journals, respectively. Emails sent to these addresses are converted | ||||||||
automatically into new invoices or bills. | ||||||||
To add an email alias to a journal, follow these steps: | ||||||||
|
||||||||
To change a default email alias, go to | ||||||||
:menuselection:`Accounting --> Configuration --> Accounting: Journals`. Select the journal you want | ||||||||
to edit, click on the :guilabel:`Advanced Settings` tab, and edit the `Email Alias`. | ||||||||
#. Make sure an :doc:`alias domain <../../../websites/website/configuration/domain_names>` has been | ||||||||
configured. | ||||||||
#. The default email alias `vendor-bills@` followed by the alias domain is automatically created | ||||||||
and available in the :guilabel:`Advanced Settings` tab of the :guilabel:`Vendor Bills` journal. | ||||||||
#. To change a default email alias, go to :menuselection:`Accounting --> Configuration --> | ||||||||
Journals`, select the corresponding journal, and edit the :guilabel:`Email Alias` in the | ||||||||
:guilabel:`Advanced Settings` tab. | ||||||||
#. Configure the connected scanner to send scanned documents to the email alias, if needed. | ||||||||
|
||||||||
Invoice digitization | ||||||||
==================== | ||||||||
.. note:: | ||||||||
Alternatively, an :ref:`email alias in the Documents app <documents/email-aliases>` can be used | ||||||||
to automatically send vendor bills to the :guilabel:`Finance` :ref:`folder | ||||||||
<documents/folders>` (e.g., `[email protected]`). | ||||||||
|
||||||||
According to your settings, the document is either processed automatically, or you need to click on | ||||||||
:guilabel:`Send for digitization` to do it manually. | ||||||||
.. _accounting/bill-digitization/auto-post-bills: | ||||||||
|
||||||||
Once the data is extracted from the PDF, you can correct it if necessary by clicking on the | ||||||||
respective tags (available in :guilabel:`Edit` mode) and selecting the proper information instead. | ||||||||
Auto-post bills | ||||||||
--------------- | ||||||||
|
||||||||
Data recognition with AI | ||||||||
======================== | ||||||||
To set an auto-post bills option for a vendor, go to :menuselection:`Accounting --> Vendors --> | ||||||||
Vendors`. In the :guilabel:`Accounting` tab of the contact form, select an :guilabel:`Auto-post | ||||||||
bills` option in the :guilabel:`Automation` section: | ||||||||
|
||||||||
It is essential to review and correct (if needed) the information uploaded during digitization. | ||||||||
Then, you have to post the document by clicking on :guilabel:`Confirm`. In this manner, the AI | ||||||||
learns, and the system identifies the correct data for future digitizations. | ||||||||
- :guilabel:`Always` | ||||||||
- :guilabel:`Ask after 3 validations without edits`: When the third uploaded bill is confirmed | ||||||||
without any edits, an :guilabel:`Autopost Bills` window appears. The following options can be | ||||||||
chosen: :guilabel:`Activate auto-validation`, :guilabel:`Ask me later`, or :guilabel:`Never for | ||||||||
this vendor`. | ||||||||
- :guilabel:`Never` | ||||||||
|
||||||||
.. tip:: | ||||||||
The following conditions must be met for bills to be auto-posted: | ||||||||
|
||||||||
- The :guilabel:`Digitize automatically` option in the :guilabel:`Document Digitization` section | ||||||||
must be enabled for vendor bills. | ||||||||
- Since automation is triggered after three validated bills without edits, the contact name must | ||||||||
already exist in the database, and each uploaded vendor bill must include a bill date. | ||||||||
Comment on lines
+107
to
+113
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since these are pre-requisites for the feature, I wouldn't have them in a tip:
|
||||||||
|
||||||||
.. _accounting/bill-digitization/digitization: | ||||||||
|
||||||||
Digitization and data recognition with AI | ||||||||
========================================= | ||||||||
|
||||||||
Depending on the :ref:`settings <accounting/bill-digitization/configuration>`, documents are either | ||||||||
automatically digitized or require manual processing if digitization is set to on-demand only. | ||||||||
|
||||||||
To manually digitize an :ref:`uploaded document | ||||||||
<accounting/bill-digitization/vendor-bills-upload>`, click :guilabel:`Digitize document`. | ||||||||
|
||||||||
Once the document has been digitized, a blue banner appears; click :icon:`oi-arrow-right` | ||||||||
:guilabel:`Refresh` if needed. Review and correct any information uploaded during digitization: | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
click on the related field(s) to edit them, or click :guilabel:`Reload AI data` to refresh the data. | ||||||||
|
||||||||
Then, click :guilabel:`Confirm` to post the document. | ||||||||
|
||||||||
.. tip:: | ||||||||
Once a document has been digitized, the :guilabel:`Vendor` field remains empty if the vendor | ||||||||
doesn't exist in the database. To add it, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` | ||||||||
in the :guilabel:`Vendor` field; the vendor name appears highlighted in the document preview on | ||||||||
the right. Click it to open a new vendor form with the name pre-filled. | ||||||||
|
||||||||
.. note:: | ||||||||
The following vendor bill fields are recognized by OCR: | ||||||||
|
||||||||
- :guilabel:`Vendor`, :guilabel:`Bill Reference`, :guilabel:`Bill Date`, :guilabel:`Payment | ||||||||
Reference` (only in the Belgian +++xxx/xxxx/xxxxx+++ format), :guilabel:`Recipient Bank`, | ||||||||
:guilabel:`Due Date`, and the currency (in a :doc:`multi-currency | ||||||||
<../get_started/multi_currency>` environment and if the currency is activated). | ||||||||
- From the :guilabel:`Invoices Lines` tab: :guilabel:`Product` description/label, | ||||||||
:guilabel:`Quantity`, unit :guilabel:`Price`, :guilabel:`Taxes` (if the :ref:`tax is activated | ||||||||
<taxes/list_activation>`; this field is not recognized by OCR for the :doc:`Indian | ||||||||
localization <../../fiscal_localizations/india>`), :guilabel:`Untaxed Amount`, and | ||||||||
:guilabel:`Total`. | ||||||||
|
||||||||
.. _accounting/bill-digitization/vendor-bills-matching-po: | ||||||||
|
||||||||
Purchase matching | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm curious to know why you decided to change this heading (compared to the 17.0 version)? I think I would at least write "Purchase order matching" here instead, what do you think? |
||||||||
================= | ||||||||
|
||||||||
When a digitized vendor bill is recognized by :abbr:`OCR (optical character recognition)`, Odoo | ||||||||
searches the database for a matching purchase order. If found, the vendor bill can be manually | ||||||||
matched with the existing open purchase order lines. | ||||||||
|
||||||||
Once a vendor bill has been :ref:`uploaded <accounting/bill-digitization/vendor-bills-upload>` and | ||||||||
:ref:`digitized <accounting/bill-digitization/digitization>`, click the :guilabel:`Purchase | ||||||||
matching` smart button to access the :guilabel:`Purchase matching` list view, displaying all | ||||||||
purchase orders linked to the corresponding vendor. Then, select the relevant lines from the | ||||||||
purchase order and the draft vendor bill (shown in grey), and click :guilabel:`Match`. | ||||||||
Comment on lines
+163
to
+164
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
|
||||||||
.. tip:: | ||||||||
In the :guilabel:`Purchase Matching` list view, update the :guilabel:`Quantity` and | ||||||||
:guilabel:`Price` in the purchase order lines, if necessary. | ||||||||
|
||||||||
If there is no existing purchase order related to the uploaded vendor bill, a new purchase order | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
can be directly created from the vendor bill lines. To do so, follow these steps: | ||||||||
|
||||||||
#. Once the vendor bill is uploaded, make sure the :guilabel:`Vendor` field is filled in. | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
(to be improved) |
||||||||
#. Click the :guilabel:`Purchase matching` smart button, select the corresponding draft vendor bill | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
(since there's only one?) |
||||||||
(shown in grey), and click :guilabel:`Add to PO`. | ||||||||
#. In the :guilabel:`Add to Purchase Order` window, start typing in the :guilabel:`Purchase Order` | ||||||||
field and select :guilabel:`Create and edit`. | ||||||||
#. In the :guilabel:`Create Purchase Order` window, complete all :ref:`required fields | ||||||||
<purchase/manage_deals/create-new-rfq>` in the purchase order form and click :guilabel:`Confirm | ||||||||
Comment on lines
+178
to
+179
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
(feel free to improve this! I removed purchase order form since you said "in the Create purchase order window" at the beginning of the sentence) |
||||||||
order`. | ||||||||
#. In the :guilabel:`Purchase Matching` list view, select the relevant lines from the purchase order | ||||||||
and the lines from the draft vendor bill (shown in grey), and click :guilabel:`Match`. | ||||||||
Comment on lines
+181
to
+182
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
since there's only one line for the vendor bill? |
||||||||
|
||||||||
.. Note:: | ||||||||
If any information required for the purchase order fields is missing, click :guilabel:`Save and | ||||||||
Close` in the :guilabel:`Create Purchase Order` window. Then, open the Purchase app to fill in | ||||||||
the fields and confirm the purchase order. | ||||||||
Comment on lines
+186
to
+187
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we add a doc link for the Purchase app, just for good measure? |
||||||||
|
||||||||
.. tip:: | ||||||||
- Electronic vendor bills with embedded XML ensure more accurate and efficient processing. | ||||||||
- Alternatively, the :ref:`Auto-complete <accounting/vendor_bills/bill-completion>` feature | ||||||||
can transfer information from the purchase order to the vendor bill, without requiring OCR. | ||||||||
|
||||||||
.. _accounting/bill-digitization/pricing: | ||||||||
|
||||||||
Pricing | ||||||||
======= | ||||||||
|
||||||||
The **invoice digitization** is an In-App Purchase (IAP) service that requires prepaid credits to | ||||||||
work. Digitizing one document consumes one credit. | ||||||||
The document digitization feature is an In-App Purchase (IAP) service requiring prepaid credits. | ||||||||
Digitizing one document uses one credit. | ||||||||
|
||||||||
To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings --> Digitization` | ||||||||
and click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> Odoo IAP` and click on | ||||||||
:guilabel:`View My Services`. | ||||||||
To buy credits, :ref:`go to the Settings app <iap/buying_credits>` or :menuselection:`Accounting --> | ||||||||
Configuration --> Settings`, navigate to the :guilabel:`Digitization` section, and click | ||||||||
:guilabel:`Buy credits`. | ||||||||
|
||||||||
.. note:: | ||||||||
Enterprise Odoo users with a valid subscription get free credits to test IAP features before | ||||||||
deciding to purchase more credits for the database. This includes demo/training databases, | ||||||||
educational databases, and one-app-free databases. | ||||||||
- Odoo Enterprise users with a valid subscription get free credits to test IAP features before | ||||||||
purchasing more credits for the database. This includes demo/training databases, educational | ||||||||
databases, and one-app-free databases. | ||||||||
- XML files don't require OCR credits because they contain structured data that can be processed | ||||||||
directly, without OCR. | ||||||||
|
||||||||
.. seealso:: | ||||||||
- `Our Privacy Policy <https://iap.odoo.com/privacy#header_6>`_ | ||||||||
- `Odoo In-App Purchase Privacy Policy <https://iap.odoo.com/privacy#header_6>`_ | ||||||||
- :doc:`/applications/essentials/in_app_purchase` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.