OdooWiki OCA HUB
Accounting & Finance License: AGPL-3

Módulo base para declaraciones de la AEAT, que incluye:

  • Campos base para todo los modelos AEAT.
  • Vista base para todos los modelos.
  • Crea una secuencia automática para los registros diferenciando por modelo.
  • Exportación del BOE. Define una exportación básica, con los diferentes registros del fichero.
  • Generación del registro del declarante con los campos genéricos de los modelos.
  • Motor de exportación paramétrica basado en una configuración que puede ser introducida por datos XML o por interfaz.
  • Visor de archivos BOE asociados a la configuración de exportación.
  • Motor de cálculo de importes por impuestos.
  • Generador del asiento de regularización con cargo a un proveedor "Agencia Estatal de Administración Tributaria" creado al efecto.
  • Certificado para las declaraciones de la AEAT
  • Webservice AEAT SOAP
  • Gestión de Inmuebles.

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Provides the shared foundation for Spanish AEAT tax declarations in Odoo: report records with automatic numbering, BOE file export, tax mapping, certificates and SOAP connection to the AEAT, plus real-estate data used in those declarations.

This module is a technical base that other Spanish tax-declaration modules build on. Users do not file a specific tax here, but they get the screens and rules that every AEAT declaration uses.

  • A generic declaration record (l10n.es.aeat.report) holds company, VAT number, model number, previous declaration number, contact details, year and statement type. It has buttons to calculate, confirm, post, cancel, recover, recalculate and open the resulting journal entry, and it numbers records automatically per model.
  • Export configurations (aeat.model.export.config and its lines) describe, field by field, how to build the official BOE file: fixed values or expressions, field size, alignment, signs, decimals, repeats and sub-configurations.
  • Tax mappings (l10n.es.aeat.map.tax and lines) link taxes and accounts to declaration fields, with date ranges that may not overlap, operation type, base/amount, credit/debit summing and exigibility.
  • A real-estate register stores cadastral reference, address type, number, city and situation; it validates the cadastral reference and flags missing province.
  • Certificates (l10n.es.aeat.certificate) store the public/private key pair used to sign and connect to AEAT; only one certificate per company can be active, and a password wizard loads it.
  • A SOAP helper connects to AEAT web services using the active certificate.
  • Journals can be flagged as third-party invoices and can point to a different tax agency; invoices inherit the third-party flag and carry a third-party number. Taxes get an equivalent-tax field for mapping, fiscal positions get an AEAT active flag, and companies store a tax agency and legal-representative VAT.
  • Scheduled-job triggers can be moved to run now, cancelled or rescheduled for AEAT sending.

Depends on

Menus it adds

Certificates AEATBOE export configurationTax mappingAEATTax AgencyReal Estates
Models and fields (28)
  • aeat.mixin · new modelaeat_state (AEAT send state), aeat_send_error (AEAT Send Error), aeat_header_sent (AEAT last header sent), aeat_send_failed (SII send failed), aeat_content_sent (AEAT last content sent)
  • account.tax · extends an existing modelaeat_equivalent_tax_id (Equivalent Tax (for AEAT mapping purposes))
  • res.company · extends an existing modeltax_agency_id (Tax Agency), representative_vat (L.R. VAT number)
  • res.partner · extends an existing modelreal_estate_ids, aeat_identification, aeat_sending_enabled, aeat_simplified_invoice (Simplified invoices in AEAT?), aeat_identification_type (AEAT Identification type), aeat_anonymous_cash_customer (AEAT - Anonymous customer)
  • account.move · extends an existing modelthirdparty_number (Third-party number), thirdparty_invoice (Third-party invoice)
  • account.journal · extends an existing modeltax_agency_id (Tax Agency), thirdparty_invoice (Third-party invoice)
  • aeat.tax.agency · new modelname
  • ir.cron.trigger · extends an existing model
  • res.partner.bank · extends an existing modelacc_type
  • account.move.line · extends an existing modell10n_es_aeat_real_estate_id (Real Estate)
  • l10n.es.aeat.soap · new model
  • l10n.es.aeat.report · new modelname (Report identifier), year, state, number (Model number), move_id (Account entry), date_end (Ending date), company_id (Company), date_start (Starting date), journal_id (Journal), partner_id (Partner), company_vat (VAT number), currency_id (Currency), error_count, period_type, contact_name (Full Name), support_type, allow_posting, contact_email, contact_phone (Phone), statement_type, tax_agency_ids (Tax Agency), partner_bank_id (Bank account), previous_number (Previous declaration number), calculation_date, export_config_id (Export config), representative_vat (L.R. VAT number), counterpart_account_id (Counterpart account)
  • l10n.es.aeat.map.tax · new modelmodel (AEAT Model), date_to (To Date), date_from (From Date), map_line_ids (Map lines), date_to_search, date_from_search
  • l10n.es.aeat.tax.line · new modelname (Name), model (Model name), amount, res_id (Resource ID), map_line_id (Map line), field_number (Field number), move_line_ids (Journal items), to_regularize
  • account.invoice.report · extends an existing modell10n_es_aeat_real_estate_id (Real Estate)
  • account.fiscal.position · extends an existing modelaeat_active (AEAT Active)
  • aeat.model.export.config · new modelname, active, date_end (Ending date), model_id (Odoo model), date_start (Starting date), model_number, config_line_ids (Lines)
  • l10n.es.aeat.certificate · new modelfile, name, state, folder (Folder Name), date_end (End Date), company_id (Company), date_start (Start Date), public_key, private_key, public_key_data, public_key_file, show_public_key, public_key_filename
  • l10n.es.aeat.real_estate · new modelzip, city, door, name, block, floor, active, number, portal, address, check_ok (Record is OK), stairway, state_id, reference (Catastral Reference), company_id (Company), complement, country_id (Country), error_text (Errors), partner_id (Partner), number_type, address_type, representative_vat (L.R. VAT number), number_calification, real_estate_situation
  • l10n.es.aeat.map.tax.line · new modelname, inverse (Inverse summarize sign), sum_type (Summarize type), move_type (Operation type), field_type, field_number, exigible_type (Exigibility), map_parent_id, tax_xmlid_ids (Taxes templates), to_regularize, account_xmlid_ids (Account Template)
  • aeat.model.export.config.line · new modelname, size (Field size), value, repeat, bool_no (Value for no), bool_yes (Value for yes), position, sequence, alignment, apply_sign, expression, conditional, export_type (Export field type), fixed_value, decimal_size (Number of char for decimals), subconfig_id (Sub-configuration), negative_sign (Negative sign character), positive_sign (Positive sign character), export_config_id (Config parent), repeat_expression, conditional_expression
  • l10n.es.aeat.map.tax.line.tax · new modelname
  • l10n.es.aeat.report.tax.mapping · new modeltax_line_ids (Tax lines), valued_tax_line_ids (Valued tax lines)
  • l10n.es.aeat.certificate.password · new modelpassword
  • l10n.es.aeat.map.tax.line.account · new modelname
  • l10n.es.aeat.report.export_to_boe · new modeldata (File), name (File name), state
  • l10n.es.aeat.report.compare_boe_file · new modeldata (File), state, line_ids (Lines)
  • l10n.es.aeat.report.compare_boe_file.line · new modelname (Name), content, sequence (Sequence), wizard_id (Wizard), content_float (Amount), export_line_id (Export line)

Text generated by AI (DeepSeek) from reading the Odoo 19.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-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 8 confirmed, 1 with no information of 9 versions.

Sources · Odoo 17.0

Confirmed on 2026-11-03 in branch 17.0 of OCA/l10n-spain.

terminal Installation and usage

OCA documentation · Odoo 19.0

Este módulo requiere del módulo account_tax_balance, que está en OCA/account-financial-reporting y de date_range, en OCA/server-ux.

Todos aquellos modelos que se especifiquen en los módulos adicionales y hereden el AEAT base, deberán definir una variable interna que se llame '_aeat_number' asignándole como valor, el número del modelo (130, 340, 347...).

Para poder utilizar el motor genérico de cálculo de casillas por impuestos (como el 303), hay que heredar del modelo "l10n.es.aeat.report.tax.mapping" en lugar de "l10n.es.aeat.report". Para la vista, hay que añadir el campo a mano, ya que la herencia de vistas no permite una doble herencia de AbstractModel, pero lo que es la vista tree ya está definida.

Para activar la creación del asiento de regularización en un modelo, hay que poner en el modelo correspondiente el campo allow_posting a True, y establecer en la configuración de impuestos los conceptos que se regularizarán con el flag "to_regularize". Esto sólo es posible sobre los modelos que utilicen el cálculo de casillas por códigos de impuestos.

ADVERTENCIA: Debido a que se utiliza una sola tabla para almacenar las líneas de los impuestos de todos los modelos, hay una limitación en el ORM de Odoo cuando se coloca el campo one2many de dichas líneas (tax_line_ids) como dependencia en la definición del cálculo de un campo (entrada con @api.depends), que recalcula los campos calculados de todos los modelos con el mismo ID que el del registro en curso, lo que puede ser un problema en entornos multi-compañía. Una solución a ello (aunque no evita el recálculo), es poner en esos campos calculados compute_sudo=True.

Se ha creado el campo base computado error_count en el modelo l10n.es.aeat.report, cuyo valor dependerá de sus herencias, que heredarán la función _compute_error_count para indicar cuantas líneas con errores hay en el informe. Si el valor es 0, no se mostrará ningún aviso; si el valor es mayor a 0, se mostrará un aviso en la parte superior de la vista formulario del informe.

Para poder visualizar un archivo BOE, hay que:

  • Entrar en Facturación \> Configuración \> AEAT \> Configuración de exportación a BOE.
  • Entrar en el detalle de la configuración de exportación principal para el modelo.
  • Pulsar en el smart-button "Comparar archivo".
  • Seleccionar el archivo correspondiente y pulsar en "Comparar".
  • Aparecerá una ventana con cada una de las líneas de exportación, la cadena correspondiente a dicha línea, y si es un importe numérico, su cifra asociada.

Para importar el certificado, hay que:

  • Entrar en Facturación \> Configuración \> AEAT \> Certificados
  • Crear uno nuevo. Rellenas los datos del formulurio y subir el archivo p12
  • Pulsar obtener claves e introducir la contraseña del certificado

Para gestionar inmuebles, hay que:

  • Entrar en Facturación \> Configuración \> AEAT \> Inmuebles
  • Crear uno nuevo, rellenando los datos del formulario.
  • Ya se podrá añadir un inmueble en el campo Inmueble de las lineas de factura.
info

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.