Account Invoice Import Invoice2data
Este módulo es una extensión del módulo account_invoice_import: añade soporte para facturas PDF normales, es decir, facturas PDF que no tienen un archivo XML incrustado. Utiliza la librería invoice2data que se encarga de extraer el texto de la factura PDF, encontrar una plantilla de factura existente y ejecutar la plantilla de factura para extraer la información útil de la factura.
Para conocer la historia completa detrás del desarrollo de este módulo, lea esta entrada de blog.
Se puede encontrar más información para crear las plantillas en el tutorial de la librería invoice2data. Las plantillas tienen que crearse manualmente. Un creador gráfico de plantillas para odoo es un trabajo en curso.
ADVERTENCIA: un módulo alternativo account_invoice_import_simple_pdf desarrollado en julio de 2021 proporciona características similares pero tiene una gran ventaja: el contable puede añadir soporte para un nuevo proveedor por sí mismo, ya no se necesitan plantillas de factura que requieren conocimientos técnicos. El módulo account_invoice_import_simple_pdf proporciona funcionalidad básica, pero no admite contabilidad a nivel de línea.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 14.0Este módulo permite importar facturas de proveedor desde archivos PDF normales (sin XML incrustado) leyendo el texto del PDF con la librería invoice2data. Solo funciona cuando existe una plantilla de factura coincidente para ese proveedor.
Este módulo amplía el asistente de importación de facturas de proveedor para que también pueda leer facturas en PDF simples, es decir, PDF que no contienen un archivo XML incrustado. Cuando subes un PDF de este tipo, Odoo intenta extraer la información útil (proveedor, número de factura, fechas, importes, impuestos, líneas, datos bancarios, etc.) utilizando la librería invoice2data, que lee el texto del PDF y aplica una plantilla para ese proveedor.
- La pantalla del asistente de importación muestra una línea adicional en la lista de formatos admitidos que explica que los archivos PDF normales se aceptan mediante invoice2data.
- Si el análisis normal del PDF falla, el módulo puede recurrir al OCR (Tesseract) para leer PDF escaneados, siempre que estén instaladas las herramientas de sistema necesarias.
- Los datos extraídos se convierten en la misma estructura que utiliza la importación estándar de facturas, incluidos los datos del partner, la moneda, los importes, las fechas, las referencias de pago y las líneas de factura con cantidades, precios, descuentos, unidades de medida e impuestos.
- Los impuestos se construyen a partir del porcentaje o del importe fijo encontrado en cada línea; si solo se encuentra un precio total, el impuesto se trata como incluido en el precio.
- Si ninguna plantilla coincide y el OCR no está disponible, la importación simplemente no devuelve nada y no se crea ninguna factura.
Afecta al asistente account.invoice.import y a la vista de formulario de importación de facturas. Las plantillas deben crearse manualmente fuera de Odoo.
Depende de
Modelos y campos (1)
- account.invoice.import · amplía un modelo existente
Texto generado por IA (DeepSeek) al leer el código de la versión 14.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 2 confirmadas, 7 sin información de 9 versiones.
Fuentes · Odoo 12.0
Confirmado el 2026-11-03 en la rama 12.0 de OCA/edi.
terminal Instalación y uso
Documentación de OCA · Odoo 14.0Instalación
Fuente · Odoo 14.0Este módulo requiere la librería Python invoice2data disponible en Github con una versión >= 0.2.74 (febrero de 2018).
Para instalar la última versión de esta librería, ejecute:
sudo pip3 install --upgrade invoice2dataSi utiliza Ubuntu 16.04 LTS o superior, puede usar la versión 0.41.0 de pdftotext que está empaquetada en la distribución:
sudo apt install poppler-utilsSi desea que la librería invoice2data admita PDF de tipo mixto o recurra al OCR si el PDF no contiene texto (solo una minoría muy pequeña de las facturas PDF están basadas en imágenes y requieren OCR) como los recibos escaneados, también debe instalar Ocrmypdf
pip install -U ocrmypdfSi desea que la librería invoice2data recurra al OCR si el PDF no contiene texto (solo una minoría muy pequeña de las facturas PDF están basadas en imágenes y requieren OCR) como los recibos escaneados, también debe instalar Imagemagick (para obtener la utilidad convert que convierte PDF a TIFF) y Tesseract OCR :
sudo apt install imagemagick tesseract-ocrSi desea usar plantillas de factura personalizadas para la librería invoice2data (además de las plantillas proporcionadas por la librería invoice2data), debe añadir una línea en su archivo de configuración del servidor Odoo como:
invoice2data_templates_dir = /opt/invoice2data_local_templatesy almacenar sus plantillas de factura en formato YAML (extensión .yml) o formato json en el directorio que haya configurado anteriormente. Si añade plantillas de factura en este directorio, no tiene que reiniciar Odoo, se usarán automáticamente en la siguiente importación de facturas.
Si desea usar solo sus plantillas de factura personalizadas e ignorar las plantillas proporcionadas por la librería invoice2data, debe tener en su archivo de configuración del servidor Odoo:
invoice2data_templates_dir = /opt/invoice2data_local_templates
invoice2data_exclude_built_in_templates = TrueLas plantillas yaml se cargan con pyyaml, que es una implementación de python puro. (por lo tanto, bastante lenta) Como alternativa, se pueden usar plantillas json. Que son soportadas de forma nativa mejor por python. El rendimiento con plantillas yaml puede aumentarse enormemente 10x usando libyaml. Se puede instalar en la mayoría de las distribuciones mediante:
sudo apt-get libyaml-devLos usuarios franceses también deben instalar el módulo l10n_fr_business_document_import disponible en la localización francesa. Los usuarios neerlandeses también deben instalar el módulo l10n_nl_business_document_import disponible en la localización de los Países Bajos.
Dependencies | Name | Requirement | Installation | Description | | -------------- | :---------: | :---------: | :-------------------------------------- | | invoice2data | required | pip install invoice2data | La dependencia principal de este módulo de importación de facturas | | poppler-utils | required | apt install poppler-utils | El Input-reader predeterminado para la librería invoice2data | | dateparser | required | pip install dateparser | Requisito para analizar las fechas de las facturas, es probable que odoo ya cumpla con este requisito | | libyaml | optional | apt install libyaml-dev | Cargador de plantillas, recomendado para acelerar enormemente la carga de plantillas yaml | | imagemagick | optional | apt install imagemagick | inputreader: Preprocesa el pdf antes de introducirlo en tesseract-ocr | | tesseract-ocr | optional | apt install tesseract-ocr | inputreader: para ocr de archivos pdf solo de imagen | | tesseract-ocr- lang | optional | apt install tesseract-ocr- ver documentación | inputreader: Paquete de idioma para tesseract ocr, mejora enormemente la detección de caracteres | | ocrmypdf | optional | apt install ocrmypdf | inputreader: Para pdf solo de imagen o de tipo mixto. Usa tesseract-ocr internamente, pero proporciona optimizaciones que mejoran enormemente los resultados |
Configuración
Fuente · Odoo 14.0Vaya a la vista de formulario del proveedor y configúrela con los siguientes parámetros:
- el VAT está establecido (el número de VAT se utiliza por defecto al buscar el proveedor en la base de datos de contactos de Odoo)
- en la pestaña Invoicing, cree una Invoice Import Configuration.
Para la factura PDF de su proveedor que no tenga un archivo XML incrustado, tendrá que crear un archivo de plantilla en formato YAML en la librería Python invoice2data. Es bastante fácil de hacer; si está familiarizado con las regexp, no debería llevar más de 10 minutos por cada proveedor.
Aquí tiene algunas pistas para ayudarle a añadir una plantilla para su proveedor:
- Hay un tutorial en el repo de la librería invoice2data
- Tome el archivo de plantilla de Free SAS como ejemplo. Encontrará una factura PDF de ejemplo de este proveedor en invoice2data/test/pdf/invoice_free_fiber_201507.pdf
- Intente ejecutar la librería invoice2data manualmente sobre la factura de ejemplo de Free:
% python -m invoice2data.main --debug invoice2data/test/pdf/invoice_free_fiber_201507.pdfEn la salida, obtendrá primero el texto del PDF, luego algo de información de depuración sobre el análisis de la factura y las regexps y, en la última línea, tendrá el dict que contiene el resultado del análisis.
- si el número de VAT del proveedor está presente en el texto de la factura PDF, creo que es una buena idea utilizarlo como palabra clave. Es una buena práctica añadir otras 2 palabras clave: una para el idioma (por ejemplo, coincidir con la palabra Invoice en el idioma de la factura) y otra para la moneda, para coincidir solo con las facturas de ese proveedor en ese idioma y moneda concretos.
- la lista de campos debe contener las siguientes entradas:
- 'vat' con el número de VAT del proveedor (si el número de VAT del proveedor no está en el texto del archivo PDF, añada una clave 'partner_name')
- 'amount' ('amount' es el importe total con impuestos)
- 'amount_untaxed' o 'amount_tax' (uno u otro, no hacen falta ambos)
- 'date': la fecha de la factura
- 'invoice_number'
- 'date_due', si esta información está disponible en el texto del archivo PDF.
La librería invoice2data es bastante potente. Admite múltiples métodos de entrada (pdftotext, ocrmypdf, tesseract ocr, google cloud vision). Incluso las líneas de factura se pueden importar y mapear a productos en la base de datos. La librería invoice2data no tiene un estándar estricto sobre los nombres de los campos. Esto hace que el módulo sea muy flexible, pero también difícil de crear plantillas reutilizables.
Si quiere hacer uso de las funciones avanzadas, se ha implementado el soporte para los siguientes campos.
Campos soportados
(nota: la columna fieldname contiene el nombre que se debe utilizar en el archivo de plantilla).
Campos del contacto | fieldname | type | Description | | -------------- | :---------: | :-------------------------------------- | | vat | char | El código de vat es único para cada contacto, tiene la máxima prioridad para la coincidencia del contacto | | partner_name | char | se explica por sí mismo | | partner_street | char | se explica por sí mismo | | partner_street2 | char | se explica por sí mismo | | partner_street3 | char | se explica por sí mismo | | partner_city | char | se explica por sí mismo | | partner_zip | char | se explica por sí mismo | | country_code | char | utilice el formato iso fr o nl | | state_code | char | utilice el formato iso NY (para Nueva York) | | partner_email | char | se explica por sí mismo | | partner_website | char | se explica por sí mismo | | telephone | char | se puede utilizar para la coincidencia del contacto con la ayuda de módulos de soporte | | mobile | char | se puede utilizar para la coincidencia del contacto del contacto con la ayuda de módulos de soporte | | partner_ref | char | el nombre o número de referencia se puede utilizar para la coincidencia del contacto | | siren | char | código empresarial francés, se puede utilizar para la coincidencia del contacto | | partner_coc | char | número identificador general de empresa, se puede utilizar para la coincidencia del contacto |
Campos de la factura (a nivel de documento) | fieldname | type | Description | | -------------- | :---------: | :-------------------------------------- | | currency | char | La moneda de la factura en formato iso (EUR, USD) | | currency_symbol | char | El símbolo de la moneda de la factura (€, $) | | bic | char | Bank Identifier Code | | iban | char | International Bank Account Number | | amount | float | El importe total de la factura (incluidos los impuestos) | | amount_untaxed | float | El importe total de la factura (excluidos los impuestos) | | amount_tax | float | La suma del importe de los impuestos de la factura | | date | date | La fecha de la factura | | invoice_number | char | se explica por sí mismo | | date_due | date | La fecha de vencimiento de la factura | | date_start | date | La fecha de inicio del periodo de la factura cuando se prestan los servicios. | | date_end | date | La fecha de inicio del periodo de la factura cuando se prestan los servicios. | | note | char | El contenido de este campo se importará en el chatter. | | narration | char | El contenido de este campo se importará en el campo narration. (en la parte inferior de la factura.) | | payment_reference | char | Si la factura está prepagada se puede utilizar una referencia para la conciliación de pagos | | payment_unece_code | char | El código unece del medio de pago según la lista de códigos 4461 | | incoterm | char | La abreviatura del Incoterm 2000 | | company_vat | char | El número de vat de la empresa a la que se dirige la factura. Se utiliza para comprobar si la factura está realmente dirigida a la empresa que quiere procesarla. (Muy útil en configuraciones multiempresa) | | mandate_id | char | Un mandato bancario está vinculado a una cuenta bancaria y representa una autorización que el titular de la cuenta bancaria da a una empresa para una operación específica (como una domiciliación bancaria). |
Campos de la línea de factura | fieldname | type | Description | | -------------- | :---------: | :-------------------------------------- | | name | char | El nombre del producto, se puede utilizar para la coincidencia de productos | | barcode | char | El código de barras del producto o del paquete de producto, se utiliza para la coincidencia de productos | | code | char | El código (interno) del producto, se utiliza para la coincidencia de productos | | qty | float | La cantidad de artículos/unidades | | unece_code | char | Se puede pasar el código unece de las unidades de medida de los productos | | uom | char | El nombre de la unidad de medida, internamente se mapeará al código unece. Por ejemplo, L se mapeará al unece_code LTR | | price_unit | float | El precio unitario del artículo. (excluidos los impuestos) | | discount | float | El importe del descuento para esta línea. Ej. 20 para un 20% de descuento o 0.0 para ningún descuento | | price_total | float | El importe total de la línea de factura incluidos los impuestos. Se puede utilizar para seleccionar la etiqueta de impuesto correcta. | | price_subtotal | float | El importe total de la línea de factura excluidos los impuestos. Se puede utilizar para crear líneas de ajuste cuando la precisión decimal es insuficiente. | | line_tax_percent | float | El porcentaje de impuesto | | line_tax_amount | float | El importe fijo de impuesto aplicado a la línea | | line_note | char | Se pueden importar notas sobre la factura, Hay una vista especial disponible. | | sectionheader | char | Hay una vista especial disponible para los encabezados de sección. | | date_start | date | La fecha de inicio del periodo de la factura cuando se prestan los servicios. | | date_end | date | La fecha de inicio del periodo de la factura cuando se prestan los servicios. |
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Uso.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.