From the customer's purchase order to your quotation
Your customer sends a purchase order. You upload it, the document is read for you, you check the result, and Odoo creates the draft quotation. The module accepts PDF files, scans and photos, spreadsheets (xlsx, xls, ods, csv), text files and the plain body of an e-mail.
It runs on the standard Odoo 19 AI module with your own provider key: no OCR service, no metered credits, no extra software to install.
How it works
| Step | What happens |
|---|---|
| 1. Upload | Attach the purchase order received from the customer and, if useful, paste the text of the e-mail. |
| 2. Reading | The document is read in one pass and returns the header, the two companies involved and the order lines. |
| 3. Review | You see the customer, the references, the dates, the delivery address and every line with its own status. Anything uncertain is flagged. |
| 4. Creation | The draft quotation is created, the source document is attached to it, and a note in the chatter says exactly what deserves a second look. |
Every line carries one of three statuses you can act on at a glance: matched, to confirm, or to complete.
It tells your customer from yourself
A purchase order is written by the buyer but addressed to the seller, so the most prominent address block on the page is usually yours, not your customer's. Getting this wrong means booking the quotation on the wrong account, so the decision is never left to the language model: the model only reports where each company name is printed, and the module decides the roles from those observations.
- A company the document labels as the supplier is excluded outright.
- Your own company can never end up as the customer.
- Company names are compared ignoring the legal form, so a document printing BIANCHI INDUSTRIALE S.p.A. finds the customer recorded as Bianchi Industriale SpA — but only when the match is unambiguous.
It learns your customers' codes
Each line is resolved in cascade: the article code already learnt for that customer, then your own internal reference or barcode, then the exact description, then a similar description as a suggestion to be confirmed. What is left unresolved falls back to a placeholder product of your choice, keeping the wording of the customer document.
Every product you pick by hand is stored against the article code of that customer, so the next order maps itself. Two limits keep that table trustworthy: a suggestion is never learnt until you confirm it, and only lines carrying an article code are learnt at all. The learnt codes stay visible and editable under Sales, Configuration, Customer Article Codes.
What it will never do
- Confirm a quotation on its own: the order is always left as a draft.
- Invent master data: an unknown customer or an unrecognised delivery address is reported, never created on a guess.
- Overwrite the terms and conditions of your quotation: the instructions found on the customer document are posted in the chatter instead.
- Lose the evidence: the original document is attached to the quotation.
Configuration
| Setting | Purpose |
|---|---|
| Reading model | Which AI model reads the documents. |
| Fallback product | Product proposed for the lines whose article was not identified. Can be changed at every import. |
| Maximum PDF pages | How many pages are sent for long purchase orders. |
| Suggestion threshold | How similar a description must be before a product is suggested. |
Requirements
Odoo 19 Enterprise with the Sales application and the standard AI module, plus an AI provider key configured in the system parameters. Interface and messages available in Italian and English.
Credits
STeSI Consulting — Francesco Moccia — moccia.f@stesi.consulting