Módulo para la presentación inmediata de la facturación.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Connects Odoo invoicing to the Spanish VERI*FACTU tax system, sending sales invoices and refunds to the tax agency automatically and adding the required QR and hash chain to each invoice.
This module makes Odoo ready for the Spanish VERI*FACTU obligation for immediate invoice reporting. Once enabled on a company, sales invoices and refunds get a registration key, a tax key, a description and a hash that links each document to the previous one, and they are sent to the tax agency through a scheduled job.
Where it appears: - New VERI*FACTU settings on the company, on sales journals, on fiscal positions and on the tax agency. - Extra fields on invoices, including a refund specific type for article 80 cases. - A cancellation wizard and buttons to resend invoices that were rejected or accepted with errors. - A QR code and legal text on the printed invoice report. - Log screens for invoice entries, send responses and chaining records.
Business rules and automatic behaviour: - Sales journals of a VERI*FACTU company are forced into restricted hash mode and cannot be switched off. - Invoices are only eligible from the company start date, on sales journals, and when the fiscal position is active for the agency. - Posting an invoice checks the configuration and taxes; unmapped taxes or inconsistent taxes block the process. - Invoices already sent cannot be cancelled, reset to draft, or have their number or date changed. - A scheduled job sends pending entries in batches and creates activities when there are connection errors or incorrect responses.
It touches invoicing, journals, companies, partners, fiscal positions and the Spanish tax agency configuration.
Depends on
Required by other modules
Menus it adds
Models and fields (18)
- res.company · extends an existing modelverifactu_test (VERI*FACTU test environment?), verifactu_enabled (VERI*FACTU enabled), verifactu_start_date (VERI*FACTU start date), verifactu_chaining_id (VERI*FACTU chaining), verifactu_description (VERI*FACTU description), verifactu_developer_id (VERI*FACTU developer)
- res.partner · extends an existing modelverifactu_enabled (VERI*FACTU enabled)
- account.move · new modelverifactu_refund_specific_type (VERI*FACTU refund specific type)
- verifactu.map · new modelname (Model), date_to, date_from, map_lines (Lines)
- account.journal · extends an existing modelverifactu_enabled (VERI*FACTU enabled), restrict_mode_hash_table, company_verifactu_enabled (VERI*FACTU company enabled), restrict_mode_hash_table_readonly
- aeat.tax.agency · extends an existing modelverifactu_wsdl_out (VERI*FACTU WSDL), verifactu_qr_base_url (VERI*FACTU QR Base URL), verifactu_wsdl_out_test_address (VERI*FACTU Test Address), verifactu_qr_base_url_test_address (VERI*FACTU QR Base URL Test)
- verifactu.mixin · new modelaeat_state, verifactu_qr (VERI*FACTU QR), verifactu_csv (VERI*FACTU CSV), verifactu_hash (VERI*FACTU hash), verifactu_qr_url (VERI*FACTU URL), verifactu_return (VERI*FACTU return), verifactu_enabled (VERI*FACTU enabled), verifactu_tax_key (VERI*FACTU tax key), verifactu_macrodata (VERI*FACTU macrodata?), verifactu_send_date (VERI*FACTU send date), verifactu_description (VERI*FACTU description), verifactu_hash_string (VERI*FACTU hash string), verifactu_refund_type (VERI*FACTU refund type), verifactu_cancel_reason (VERI*FACTU cancel reason), verifactu_registration_key (VERI*FACTU registration key), verifactu_invoice_entry_ids (VERI*FACTU invoice entries), verifactu_registration_date (VERI*FACTU registration date), verifactu_response_line_ids (VERI*FACTU response lines), last_verifactu_invoice_entry_id (VERI*FACTU last invoice entry), last_verifactu_response_line_id (VERI*FACTU response line), verifactu_registration_key_code (VERI*FACTU key code)
- verifactu.chaining · new modelname, sif_id (SIF ID), installation_number, last_verifactu_invoice_entry_id (Last invoice entry)
- verifactu.map.line · new modelcode, name, tax_xmlid_ids (Taxes templates), verifactu_map_id (Parent mapping)
- verifactu.developer · new modelvat (Developer VAT), name (Developer Name), version, sif_name (SIF Name), file_name, responsibility_declaration
- account.move.reversal · extends an existing model
- account.chart.template · extends an existing model
- account.fiscal.position · extends an existing modelverifactu_enabled, verifactu_tax_key (VERI*FACTU tax key), verifactu_registration_key (VERI*FACTU registration key)
- verifactu.invoice.entry · new modelmodel, company_id (Company), entry_type, send_state, document_id (Document), send_attempt, document_hash, document_name, previous_hash (Previous Hash), aeat_json_data (AEAT JSON Data), last_error_code, response_line_ids (Responses), last_response_line_id (Last Response Line), verifactu_chaining_id (Chaining), previous_invoice_entry_id (Previous Invoice Entry)
- verifactu.registration.key · new modelcode, name, verifactu_tax_key (VERI*FACTU tax key)
- verifactu.cancel.invoice.wizard · new modelinvoice_id (Invoice), cancel_reason (Cancellation reason)
- verifactu.invoice.entry.response · new modelname, header, response, invoice_data, date_response, verifactu_csv (VERI*FACTU CSV), activity_type_id (Activity Type), response_line_ids (Response lines)
- verifactu.invoice.entry.response.line · new modelmodel, entry_id, response, error_code, send_state (VERI*FACTU send state), document_id (Document), document_name, verifactu_csv, is_cancellation (Is cancellation), entry_response_id
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 5 confirmed, 4 with no information of 9 versions.
Sources · Odoo 15.0
Confirmed on 2026-11-03 in branch 15.0 of OCA/l10n-spain.
terminal Installation and usage
OCA documentation · Odoo 18.0Installation
Source · Odoo 18.0Para instalar esté módulo necesita:
- Libreria Python Zeep, se puede instalar con el comando 'pip install zeep'
- Libreria Python Requests, se puede instalar con el comando 'pip install requests'
Configuration
Source · Odoo 18.0Para configurar este módulo es necesario:
- Acceder a Facturación/Contabilidad -\> Configuración -\> AEAT -\> Agencia Tributaria, podrás consultar las URLs del servicio SOAP de Hacienda. Estas URLs pueden cambiar según comunidades
- El certificado enviado por la FMNT es en formato p12, este certificado no se puede usar directamente con Zeep. Accede a Facturación/Contabilidad -\> Configuración -\> AEAT -\> Certificados AEAT, y allí podrás: Subir el certificado p12 y extraer las claves públicas y privadas con el botón "Obtener claves"
- Debes tener en cuenta que los certificados se alojan en una carpeta accesible por la instalación de Odoo.
- Completar los datos de desarrollador y del encadenamiento a nivel de compañía en la pestaña de VERI*FACTU.
En caso de que la obtención de claves no funcione y uses Linux, cuentas con los siguientes comandos para tratar de solucionarlo:
- Clave pública: "openssl pkcs12 -in Certificado.p12 -nokeys -out publicCert.crt -nodes"
- Clave privada: "openssl pkcs12 -in Certificado.p12 -nocerts -out privateKey.pem -nodes"
- Establecer en las posiciones fiscales la clave de impuestos y la clave de registro VERI*FACTU.
- Para aplicar las claves ejecute el asistente de actualización del módulo accountchart_update.
Usage
Source · Odoo 18.0Cuando se valida una factura, automáticamente genera el registro de envío para verifactu. Cada minuto se enviarán todos aquellos registros pendientes de enviar mediante un cron.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.