AEAT Base

l10n_es_aeat
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/19.0/l10n_es_aeat
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, Oihane Crucelaegui, oca-ci, Emilio Pascual, Pablo Cortés
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:10:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
    - account_edi_ubl_cii
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
account_tax_view_form account.tax field Inherits account.view_tax_form
account_tax_view_tree account.tax field Inherits account.view_tax_tree
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line list New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config list New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency list New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line list New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax list New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate list New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report list New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line list New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (26)

New fields (1)
  • aeat_active Boolean
    copy=False default=True help='Enable AEAT communication for this fiscal position?' string='AEAT Active'
Public methods (0)

No public methods.

New fields (2)
  • tax_agency_id Many2one → aeat.tax.agency
    comodel_name='aeat.tax.agency' copy=False help='You can select a tax agency other than the one defined in the company,so you can pay taxes at different agencies.' string='Tax Agency'
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • aeat_equivalent_tax_id Many2one → account.tax
    comodel_name='account.tax' help='This field is for manually created taxes in order to allow to map them for AEAT reports' string='Equivalent Tax (for AEAT mapping purposes)'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (5)
  • aeat_content_sent Text
    copy=False readonly=True string='AEAT last content sent'
  • aeat_header_sent Text
    copy=False readonly=True string='AEAT last header sent'
  • aeat_send_error Text
    copy=False readonly=True string='AEAT Send Error'
  • aeat_send_failed Boolean
    copy=False help='Indicates that the last attempt to communicate this document to the SII has failed. See SII return for details' string='SII send failed'
  • aeat_state Selection
    copy=False default='not_sent' help='Indicates the state of this document in relation with the presentation at the AEAT' readonly=True selection=AEAT_STATES string='AEAT send state'
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3
  • name Char
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
  • fixed_value Char
  • name Char
    required=True
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on'
  • sequence Integer
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • aeat_cancel_now(self)
  • aeat_do_now(self)
  • aeat_reschedule_sudo(self)

New fields (13)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True
  • folder Char
    required=True string='Folder Name'
  • name Char
  • private_key Char
    readonly=True
  • public_key Char
    readonly=True
  • public_key_data Text
    readonly=True store=False
  • public_key_file Binary
    attachment=False compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • public_key_filename Char
    compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • show_public_key Boolean
    store=False
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')]
Public methods (5)
  • action_active(self)
  • get_certificates(self, company=False)
  • get_public_key_pem(self)
  • load_password_wizard(self)
  • onchange_public_key_data(self)
    @api.onchange('show_public_key')

New fields (1)
  • password Char
    required=True
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (0)

No public methods.

New fields (11)
  • account_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.account
    comodel_name='l10n.es.aeat.map.tax.line.account' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')]
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
  • to_regularize Boolean
Public methods (2)
  • get_accounts_for_company(self, company)
    Obtain the accounts corresponding to the line according the given company.
  • get_taxes_for_company(self, company)
    Obtain the taxes corresponding to this line according the given company.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • company_vat Char
    required=True size=9 string='VAT number'
  • contact_email Char
    size=50
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 string='Full Name'
  • contact_phone Char
    required=True size=9 string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' required=True store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' required=True store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=<expr> domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' string='Journal'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=<expr> readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=<expr> required=True selection='get_period_type_selection'
  • previous_number Char
    size=13 string='Previous declaration number'
  • representative_vat Char
    compute='_compute_representative_vat' help='Legal Representative VAT number.' readonly=False size=9 store=True string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] tracking=True
  • statement_type Selection
    default='N' required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')]
  • support_type Selection
    default='T' required=True selection=[('C', 'DVD'), ('T', 'Telematics')]
  • tax_agency_ids Many2many → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
  • year Integer
    default=<expr> required=True
Public methods (15)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals_list)
    @api.model_create_multi
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')]
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')]
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (2)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    bypass_search_access=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
  • valued_tax_line_ids One2many → l10n.es.aeat.tax.line
    bypass_search_access=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Valued tax lines'
Public methods (3)
  • calculate(self)
  • create_regularization_move(self)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (8)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (2)
  • representative_vat Char
    help='Legal Representative VAT number for all the AEAT reports of this company.' size=9 string='L.R. VAT number'
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.

New fields (5)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to AEAT. Normally for sending national and export invoices to AEAT where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
  • aeat_sending_enabled Boolean
    compute='_compute_aeat_sending_enabled'
  • aeat_simplified_invoice Boolean
    help='Checking this mark, invoices done to this partner will be sent to AEAT as simplified invoices.' string='Simplified invoices in AEAT?'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/18.0/l10n_es_aeat
VERSION
VERSION 2.3.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, Enric Tobella, AaronHForgeFlow, Omar (Comunitea), Weblate, OCA-git-bot, Oihane Crucelaegui, oca-ci, Emilio Pascual, Luis Rodriguez, Carlos Sainz-Pardo
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:09:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (31)
XML IDNameModelTypeStatus
account_tax_view_form account.tax field Inherits account.view_tax_form
account_tax_view_tree account.tax field Inherits account.view_tax_tree
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line list New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config list New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency list New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line list New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax list New
l10n_es_aeat_real_estate_form l10n.es.aeat.real.estate.form l10n.es.aeat.real_estate form New
l10n_es_aeat_real_estate_search l10n.es.aeat.real.estate.search l10n.es.aeat.real_estate search New
l10n_es_aeat_real_estate_tree l10n.es.aeat.real.estate.tree l10n.es.aeat.real_estate list New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate list New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report list New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line list New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (28)

New fields (1)
  • aeat_active Boolean
    copy=False default=True help='Enable AEAT communication for this fiscal position?' string='AEAT Active'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_real_estate_id Many2one → l10n.es.aeat.real_estate
    comodel_name='l10n.es.aeat.real_estate' readonly=True string='Real Estate'
Public methods (0)

No public methods.

New fields (2)
  • tax_agency_id Many2one → aeat.tax.agency
    comodel_name='aeat.tax.agency' copy=False help='You can select a tax agency other than the one defined in the company,so you can pay taxes at different agencies.' string='Tax Agency'
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True string='Third-party number'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_real_estate_id Many2one → l10n.es.aeat.real_estate
    comodel_name='l10n.es.aeat.real_estate' domain="[('company_id', '=', company_id), ('partner_id', '=', partner_id)]" help='Real Estate related to this move line' string='Real Estate'
Public methods (0)

No public methods.

New fields (1)
  • aeat_equivalent_tax_id Many2one → account.tax
    comodel_name='account.tax' help='This field is for manually created taxes in order to allow to map them for AEAT reports' string='Equivalent Tax (for AEAT mapping purposes)'
Public methods (3)
  • copy_data(self, default=None)
    When duplicating a tax, if it does not contain an equivalent tax, takes itself as base.
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (5)
  • aeat_content_sent Text
    copy=False readonly=True string='AEAT last content sent'
  • aeat_header_sent Text
    copy=False readonly=True string='AEAT last header sent'
  • aeat_send_error Text
    copy=False readonly=True string='AEAT Send Error'
  • aeat_send_failed Boolean
    copy=False help='Indicates that the last attempt to communicate this document to the SII has failed. See SII return for details' string='SII send failed'
  • aeat_state Selection
    copy=False default='not_sent' help='Indicates the state of this document in relation with the presentation at the AEAT' readonly=True selection=AEAT_STATES string='AEAT send state'
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3
  • name Char
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
  • fixed_value Char
  • name Char
    required=True
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on'
  • sequence Integer
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • aeat_cancel_now(self)
  • aeat_do_now(self)
  • aeat_reschedule_sudo(self)

New fields (13)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True
  • folder Char
    required=True string='Folder Name'
  • name Char
  • private_key Char
    readonly=True
  • public_key Char
    readonly=True
  • public_key_data Text
    readonly=True store=False
  • public_key_file Binary
    attachment=False compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • public_key_filename Char
    compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • show_public_key Boolean
    store=False
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')]
Public methods (5)
  • action_active(self)
  • get_certificates(self, company=False)
  • get_public_key_pem(self)
  • load_password_wizard(self)
  • onchange_public_key_data(self)
    @api.onchange('show_public_key')

New fields (1)
  • password Char
    required=True
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (11)
  • account_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.account
    comodel_name='l10n.es.aeat.map.tax.line.account' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')]
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
  • to_regularize Boolean
Public methods (2)
  • get_accounts_for_company(self, company)
    Obtain the accounts corresponding to the line according the given company.
  • get_taxes_for_company(self, company)
    Obtain the taxes corresponding to this line according the given company.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (24)
  • active Boolean
    default=True
  • address Char
    required=True size=50
  • address_type Selection
    default='CALLE' help='Valid AEAT Address type' required=True selection=AEAT_ADDRESS_TYPES
  • block Char
    size=3
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    required=True size=30
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • country_id Many2one → res.country
    comodel_name='res.country' default=<expr> string='Country'
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • name Char
    required=True
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    default='NUM' required=True selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    help='Partner that owns this real estate' required=True string='Partner' args: 'res.partner'
  • portal Char
    size=3
  • real_estate_situation Selection
    compute='_compute_real_estate_situation' readonly=False store=True args: [('1', '01'), ('2', '02'), ('3', '03'), ('4', '04')]
  • reference Char
    size=25 string='Catastral Reference'
  • representative_vat Char
    compute='_compute_representative_vat' help='Legal Representative VAT number of the real estate' readonly=False size=32 store=True string='L.R. VAT number'
  • stairway Char
    size=3
  • state_id Many2one → res.country.state
    comodel_name='res.country.state'
  • zip Char
    readonly=False required=True size=5
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • company_vat Char
    required=True size=9 string='VAT number'
  • contact_email Char
    size=50
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 string='Full Name'
  • contact_phone Char
    required=True size=9 string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' required=True store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' required=True store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' string='Journal'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type required=True selection='get_period_type_selection'
  • previous_number Char
    size=13 string='Previous declaration number'
  • representative_vat Char
    compute='_compute_representative_vat' help='Legal Representative VAT number.' readonly=False size=9 store=True string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] tracking=True
  • statement_type Selection
    default='N' required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')]
  • support_type Selection
    default='T' required=True selection=[('C', 'DVD'), ('T', 'Telematics')]
  • tax_agency_ids Many2many → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
  • year Integer
    default=_default_year required=True
Public methods (15)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals_list)
    @api.model_create_multi
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')]
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')]
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (2)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
  • valued_tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Valued tax lines'
Public methods (3)
  • calculate(self)
  • create_regularization_move(self)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (8)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (2)
  • representative_vat Char
    help='Legal Representative VAT number for all the AEAT reports of this company.' size=9 string='L.R. VAT number'
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.

New fields (6)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to AEAT. Normally for sending national and export invoices to AEAT where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
  • aeat_sending_enabled Boolean
    compute='_compute_aeat_sending_enabled'
  • aeat_simplified_invoice Boolean
    help='Checking this mark, invoices done to this partner will be sent to AEAT as simplified invoices.' string='Simplified invoices in AEAT?'
  • real_estate_ids One2many → l10n.es.aeat.real_estate
    args: 'l10n.es.aeat.real_estate', 'partner_id'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/17.0/l10n_es_aeat
VERSION
VERSION 2.7.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, manu, sergio-teruel, Weblate, OCA-git-bot, Oihane Crucelaegui, valen, oca-ci, Emilio Pascual, EmilioPascual, Ignacio, Christian-RB, extrememicro
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:59:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
account_tax_view_form account.tax field Inherits account.view_tax_form
account_tax_view_tree account.tax field Inherits account.view_tax_tree
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (25)

New fields (1)
  • aeat_active Boolean
    copy=False default=True help='Enable AEAT communication for this fiscal position?' string='AEAT Active'
Public methods (0)

No public methods.

New fields (2)
  • tax_agency_id Many2one → aeat.tax.agency
    comodel_name='aeat.tax.agency' copy=False help='You can select a tax agency other than the one defined in the company,so you can pay taxes at different agencies.' string='Tax Agency'
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • aeat_equivalent_tax_id Many2one → account.tax
    comodel_name='account.tax' help='This field is for manually created taxes in order to allow to map them for AEAT reports' string='Equivalent Tax (for AEAT mapping purposes)'
Public methods (3)
  • copy_data(self, default=None)
    When duplicating a tax, if it does not contain an equivalent tax, takes itself as base.
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (5)
  • aeat_content_sent Text
    copy=False readonly=True string='AEAT last content sent'
  • aeat_header_sent Text
    copy=False readonly=True string='AEAT last header sent'
  • aeat_send_error Text
    copy=False readonly=True string='AEAT Send Error'
  • aeat_send_failed Boolean
    copy=False help='Indicates that the last attempt to communicate this document to the SII has failed. See SII return for details' string='SII send failed'
  • aeat_state Selection
    copy=False default='not_sent' help='Indicates the state of this document in relation with the presentation at the AEAT' readonly=True selection=AEAT_STATES string='AEAT send state'
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3
  • name Char
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
  • fixed_value Char
  • name Char
    required=True
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on'
  • sequence Integer
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True
  • folder Char
    required=True string='Folder Name'
  • name Char
  • private_key Char
    readonly=True
  • public_key Char
    readonly=True
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')]
Public methods (3)
  • action_active(self)
  • get_certificates(self, company=False)
  • load_password_wizard(self)

New fields (1)
  • password Char
    required=True
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (11)
  • account_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.account
    comodel_name='l10n.es.aeat.map.tax.line.account' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')]
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
  • to_regularize Boolean
Public methods (2)
  • get_accounts_for_company(self, company)
    Obtain the accounts corresponding to the line according the given company.
  • get_taxes_for_company(self, company)
    Obtain the taxes corresponding to this line according the given company.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (1)
  • name Char
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • company_vat Char
    required=True size=9 string='VAT number'
  • contact_email Char
    size=50
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 string='Full Name'
  • contact_phone Char
    required=True size=9 string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' required=True store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' required=True store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' string='Journal'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type required=True selection='get_period_type_selection'
  • previous_number Char
    size=13 string='Previous declaration number'
  • representative_vat Char
    compute='_compute_representative_vat' help='Legal Representative VAT number.' readonly=False size=9 store=True string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] tracking=True
  • statement_type Selection
    default='N' required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')]
  • support_type Selection
    default='T' required=True selection=[('C', 'DVD'), ('T', 'Telematics')]
  • tax_agency_ids Many2many → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
  • year Integer
    default=_default_year required=True
Public methods (15)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals_list)
    @api.model_create_multi
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')]
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')]
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (2)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
  • valued_tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Valued tax lines'
Public methods (3)
  • calculate(self)
  • create_regularization_move(self)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (8)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (2)
  • representative_vat Char
    help='Legal Representative VAT number for all the AEAT reports of this company.' size=9 string='L.R. VAT number'
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.

New fields (5)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to AEAT. Normally for sending national and export invoices to AEAT where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
  • aeat_sending_enabled Boolean
    compute='_compute_aeat_sending_enabled'
  • aeat_simplified_invoice Boolean
    help='Checking this mark, invoices done to this partner will be sent to AEAT as simplified invoices.' string='Simplified invoices in AEAT?'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/16.0/l10n_es_aeat
VERSION
VERSION 3.3.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Enric Tobella, Víctor Martínez, Hugo Santos, Weblate, OCA-git-bot, Rodrigo, oca-ci, Aritz Olea, Alejandro Ji Cheung, David Ramia, Emilio Pascual, Luis Rodriguez, Jose Zambudio, extrememicro, nicolasramos-com
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
account_tax_view_form account.tax field Inherits account.view_tax_form
account_tax_view_tree account.tax field Inherits account.view_tax_tree
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (23)

New fields (1)
  • aeat_active Boolean
    copy=False default=True help='Enable AEAT communication for this fiscal position?' string='AEAT Active'
Public methods (0)

No public methods.

New fields (1)
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True readonly=True states={'draft': [('readonly', False)]} string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • aeat_equivalent_tax_id Many2one → account.tax
    comodel_name='account.tax' help='This field is for manually created taxes in order to allow to map them for AEAT reports' string='Equivalent Tax (for AEAT mapping purposes)'
Public methods (3)
  • copy_data(self, default=None)
    When duplicating a tax, if it does not contain an equivalent tax, takes itself as base.
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (5)
  • aeat_content_sent Text
    copy=False readonly=True string='AEAT last content sent'
  • aeat_header_sent Text
    copy=False readonly=True string='AEAT last header sent'
  • aeat_send_error Text
    copy=False readonly=True string='AEAT Send Error'
  • aeat_send_failed Boolean
    copy=False help='Indicates that the last attempt to communicate this document to the SII has failed. See SII return for details' string='SII send failed'
  • aeat_state Selection
    copy=False default='not_sent' help='Indicates the state of this document in relation with the presentation at the AEAT' readonly=True selection=AEAT_STATES string='AEAT send state'
Public methods (0)

No public methods.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3
  • name Char
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
  • fixed_value Char
  • name Char
    required=True
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on'
  • sequence Integer
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (13)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True
  • folder Char
    required=True string='Folder Name'
  • name Char
  • private_key Char
    readonly=True
  • public_key Char
    readonly=True
  • public_key_data Text
    readonly=True store=False
  • public_key_file Binary
    attachment=False compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • public_key_filename Char
    compute='_compute_public_key' groups='l10n_es_aeat.group_account_aeat' readonly=True store=False
  • show_public_key Boolean
    store=False
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')]
Public methods (5)
  • action_active(self)
  • get_certificates(self, company=False)
  • get_public_key_pem(self)
  • load_password_wizard(self)
  • onchange_public_key_data(self)
    @api.onchange('show_public_key')

New fields (1)
  • password Char
    required=True
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (11)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')]
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]}
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]}
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    compute='_compute_representative_vat' help='Legal Representative VAT number.' readonly=False size=9 store=True string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] tracking=True
  • statement_type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]}
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]}
  • tax_agency_ids Many2many → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]}
Public methods (17)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals_list)
    @api.model_create_multi
  • get_account_from_template(self, account_template)
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')]
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')]
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (2)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
  • valued_tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Valued tax lines'
Public methods (4)
  • calculate(self)
  • create_regularization_move(self)
  • get_taxes_from_map(self, map_line)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (8)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (2)
  • representative_vat Char
    help='Legal Representative VAT number for all the AEAT reports of this company.' size=9 string='L.R. VAT number'
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.
  • get_account_from_template(self, account_template)
    Return company account that match the given account template.
  • get_taxes_from_templates(self, tax_templates)
    Return company taxes that match the given tax templates.

New fields (5)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to AEAT. Normally for sending national and export invoices to AEAT where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
  • aeat_sending_enabled Boolean
    compute='_compute_aeat_sending_enabled'
  • aeat_simplified_invoice Boolean
    help='Checking this mark, invoices done to this partner will be sent to AEAT as simplified invoices.' string='Simplified invoices in AEAT?'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/15.0/l10n_es_aeat
VERSION
VERSION 3.4.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Jairo Llopis, Enric Tobella, Lois Rilo, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Eduardo De Miguel, David Ramia, Emilio Pascual, Valentin Vinagre Urteaga, oca-git-bot, almumu, josep-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (21)

New fields (1)
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True readonly=True states={'draft': [('readonly', False)]} string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3
  • name Char
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
  • fixed_value Char
  • name Char
    required=True
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on'
  • sequence Integer
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True
  • folder Char
    required=True string='Folder Name'
  • name Char
  • private_key Char
    readonly=True
  • public_key Char
    readonly=True
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')]
Public methods (3)
  • action_active(self)
  • get_certificates(self, company=False)
  • load_password_wizard(self)

New fields (1)
  • password Char
    required=True
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (11)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')]
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]}
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]}
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] tracking=True
  • statement_type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]}
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]}
  • tax_agency_ids Many2many → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]}
Public methods (17)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_account_from_template(self, account_template)
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')]
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')]
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (2)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
  • valued_tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Valued tax lines'
Public methods (4)
  • calculate(self)
  • create_regularization_move(self)
  • get_taxes_from_map(self, map_line)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (8)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (1)
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.
  • get_account_from_template(self, account_template)
    Return company account that match the given account template.
  • get_taxes_from_templates(self, tax_templates)
    Return company taxes that match the given tax templates.

New fields (3)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to SII. Normally for sending national and export invoices to SII where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/14.0/l10n_es_aeat
VERSION
VERSION 3.0.5
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, Enric Tobella, Lois Rilo, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Eric Antones, Ethan Hildick, oca-ci, Jon Erik Ceberio, Eduardo De Miguel, Xavier Bouquiaux, Kevin Luna, oca-git-bot, KNVx, EmilioPascual
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography<39
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (21)

New fields (1)
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True readonly=True states={'draft': [('readonly', False)]} string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True string='Alignment'
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True string='File'
  • folder Char
    required=True string='Folder Name'
  • name Char
    string='Name'
  • private_key Char
    readonly=True string='Private Key'
  • public_key Char
    readonly=True string='Public Key'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')] string='State'
Public methods (3)
  • action_active(self)
  • get_certificates(self, company=False)
  • load_password_wizard(self)

New fields (1)
  • password Char
    required=True string='Password'
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (12)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] string='Field type'
  • fiscal_position_ids Many2many → account.fiscal.position.template
    comodel_name='account.fiscal.position.template' compute='_compute_fiscal_position_ids' compute_sudo=True help='Taxes mapped with different source tax on this Fiscal Position Templates' store=True string='Fiscal Position Templates'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]} string='Contact email'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain="[('type', '=', 'general'), ('company_id', '=', company_id)]" help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State' tracking=True
  • statement_type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (17)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_account_from_template(self, account_template)
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')] string='State'
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
    string='Content'
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')] string='State'
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
Public methods (4)
  • calculate(self)
  • create_regularization_move(self)
  • get_taxes_from_map(self, map_line)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model, settings=None)
  • connect_wsdl(self, service, wsdl, port_name, model, settings=None)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args, settings=None)

New fields (9)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (1)
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.
  • get_account_from_template(self, account_template)
    Return company account that match the given account template.
  • get_taxes_from_templates(self, tax_templates)
    Return company taxes that match the given tax templates.

New fields (3)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to SII. Normally for sending national and export invoices to SII where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/13.0/l10n_es_aeat
VERSION
VERSION 4.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, mreficent, Enric Tobella, Jordi Ballester Alomar, manu, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, valen, oca-ci, rolando, Olga Marco
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES pyOpenSSL
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_account_journal_form account.journal xpath Inherits account.view_account_journal_form
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_form account.move xpath Inherits account.view_move_form
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner notebook Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (20)

New fields (1)
  • thirdparty_invoice Boolean
    copy=False string='Third-party invoice'
Public methods (0)

No public methods.

New fields (2)
  • thirdparty_invoice Boolean
    compute='_compute_thirdparty_invoice' copy=False readonly=False store=True string='Third-party invoice'
  • thirdparty_number Char
    copy=False help='Número de la factura emitida por un tercero.' index=True readonly=True states={'draft': [('readonly', False)]} string='Third-party number'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Invalidate company cache that links templates with taxes as there are potential new taxes that can match.
  • unlink(self)
    Invalidate company cache that links templates with taxes for not returning a potential invalid tax that has been unlinked.

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    compute='_compute_alignment' readonly=False selection=[('left', 'Left'), ('right', 'Right')] store=True string='Alignment'
  • apply_sign Boolean
    compute='_compute_apply_sign' readonly=False store=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    compute='_compute_decimal_size' readonly=False store=True string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True string='File'
  • folder Char
    required=True string='Folder Name'
  • name Char
    string='Name'
  • private_key Char
    readonly=True string='Private Key'
  • public_key Char
    readonly=True string='Public Key'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('active', 'Active')] string='State'
Public methods (3)
  • action_active(self)
  • get_certificates(self, company=False)
  • load_password_wizard(self)

New fields (1)
  • password Char
    required=True string='Password'
Public methods (1)
  • get_keys(self)

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)

New fields (11)
  • account_id Many2one → account.account.template
    comodel_name='account.account.template' string='Account Template'
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] string='Field type'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (27)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]} string='Contact email'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' default=<expr> readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Ending date'
  • date_start Date
    compute='_compute_dates' readonly=True required=True states={'draft': [('readonly', False)]} store=True string='Starting date'
  • error_count Integer
    compute='_compute_error_count'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' compute='_compute_export_config_id' domain=<expr> readonly=False store=True string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' domain=[('type', '=', 'entry')] readonly=True string='Account entry'
  • name Char
    copy=False size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State' tracking=True
  • statement_type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (17)
  • button_calculate(self)
  • button_cancel(self)
    Set report status to cancelled.
  • button_confirm(self)
    Set report status to done.
  • button_export(self)
  • button_open_move(self)
  • button_post(self)
    Create any possible account move entry and set state to posted.
  • button_recalculate(self)
  • button_recover(self)
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    Remove created account move entry and set state to cancelled.
  • calculate(self)
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_account_from_template(self, account_template)
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • unlink(self)

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')] string='State'
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
    string='Content'
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')] string='State'
Public methods (2)
  • action_get_file(self)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True string='Tax lines'
Public methods (4)
  • calculate(self)
  • create_regularization_move(self)
  • get_taxes_from_map(self, map_line)
  • unlink(self)

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
  • connect_wsdl(self, service, wsdl, port_name, model)
  • get_test_mode(self, port_name, model)
  • send_soap(self, service, wsdl, port_name, model, operation, *args)

New fields (9)
  • amount Float
    digits='Account'
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True ondelete='cascade' required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)

New fields (1)
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Create immediately all the AEAT sequences when creating company.
  • get_account_from_template(self, account_template)
    Return company account that match the given account template.
  • get_taxes_from_templates(self, tax_templates)
    Return company taxes that match the given tax templates.

New fields (3)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
  • aeat_identification Char
    help='Identification for AEAT purposes'
  • aeat_identification_type Selection
    help="Used to specify an identification type to send to SII. Normally for sending national and export invoices to SII where the customer country is not Spain, it would calculate an identification type of 04 if the VAT field is filled and 06 if it was not. This field is to specify types of 03 through 05, in the event that the customer doesn't identify with a foreign VAT and instead with their passport or residential certificate. If there is no value it will work as before." selection=[('03', 'Passport'), ('05', 'Residential certificate'), ('06', 'Another document')] string='AEAT Identification type'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/12.0/l10n_es_aeat
VERSION
VERSION 3.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, mreficent, Carlos Dauden, Ignacio Ibeas - Acysos S.L, OCA Transbot, Sergio Teruel, oca-travis, Weblate, OCA-git-bot, Ethan Hildick, oca-ci, xAdrianC, Enrique
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - base_iban
    - l10n_es
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES OpenSSL
requests
unidecode
zeep
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_report_assets_backend aeat assets ir.ui.view qweb Inherits web.assets_backend
aeat_tax_agency_form_view aeat.tax.agency.form aeat.tax.agency form New
aeat_tax_agency_tree_view aeat.tax.agency.tree aeat.tax.agency tree New
l10n_es_aeat_certificate_form_view l10n.es.aeat.certificate.form l10n.es.aeat.certificate form New
l10n_es_aeat_certificate_password_wizard_view l10n.es.aeat.certificate.password.wizard l10n.es.aeat.certificate.password form New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
l10n_es_certificate_tree_view l10n.es.aeat.certificate.tree l10n.es.aeat.certificate tree New
view_company_aeat_form res.company.aeat.form res.company notebook Inherits base.view_company_form
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner group Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (17)

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' oldname='config_lines' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' oldname='model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    default='left' string='Alignment' args: [('left', 'Left'), ('right', 'Right')]
  • apply_sign Boolean
    default=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    default=0 string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' oldname='sign' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' oldname='sub_config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (2)
  • onchange_subconfig(self)
    @api.multi@api.onchange('subconfig_id')
  • onchange_type(self)
    @api.multi@api.onchange('export_type')

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Compañía'
  • date_end Date
    string='End Date'
  • date_start Date
    string='Start Date'
  • file Binary
    required=True string='File'
  • folder Char
    required=True string='Folder Name'
  • name Char
    string='Name'
  • private_key Char
    readonly=True string='Private Key'
  • public_key Char
    readonly=True string='Public Key'
  • state Selection
    default='draft' string='State' args: [('draft', 'Draft'), ('active', 'Active')]
Public methods (3)
  • action_active(self)
    @api.multi
  • get_certificates(self, company=False)
    @api.multi
  • load_password_wizard(self)
    @api.multi

New fields (1)
  • password Char
    required=True string='Password'
Public methods (1)
  • get_keys(self)
    @api.multi

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (10)
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] string='Field type'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (26)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company_id readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]} string='Contact email'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' oldname='counterpart_account' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Ending date'
  • date_start Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Starting date'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' default=_default_export_config_id domain=<expr> oldname='export_config' string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' oldname='model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Account entry'
  • name Char
    copy=False oldname='sequence' size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State' track_visibility='onchange'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (17)
  • button_calculate(self)
    @api.multi
  • button_cancel(self)
    @api.multi
    Set report status to cancelled.
  • button_confirm(self)
    @api.multi
    Set report status to done.
  • button_export(self)
    @api.multi
  • button_open_move(self)
    @api.multi
  • button_post(self)
    @api.multi
    Create any possible account move and set state to posted.
  • button_recalculate(self)
    @api.multi
  • button_recover(self)
    @api.multi
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    @api.multi
    Remove created account move and set state to cancelled.
  • calculate(self)
    @api.multi
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • onchange_period_type(self)
    @api.onchange('year', 'period_type')
  • unlink(self)
    @api.multi

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')] string='State'
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
    string='Content'
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Wizard'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')] string='State'
Public methods (2)
  • action_get_file(self)
    @api.multi
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)
    @api.multi

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' oldname='tax_lines' readonly=True string='Tax lines'
Public methods (4)
  • calculate(self)
    @api.multi
  • create_regularization_move(self)
    @api.multi
  • get_taxes_from_map(self, map_line)
  • unlink(self)
    @api.multi

New fields (0)

No new fields.

Public methods (4)
  • connect_soap(self, wsdl, model)
    @api.multi
  • connect_wsdl(self, service, wsdl, port_name, model)
    @api.multi
  • get_test_mode(self, port_name, model)
    @api.multi
  • send_soap(self, service, wsdl, port_name, model, operation, *args)
    @api.multi

New fields (9)
  • amount Float
    digits=dp.get_precision('Account')
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' oldname='map_line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True string='Model name'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' oldname='move_lines' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True ondelete='cascade' required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)
    @api.multi

New fields (1)
  • tax_agency_id Many2one → aeat.tax.agency
    string='Tax Agency' args: 'aeat.tax.agency'
Public methods (2)
  • create(self, values)
    @api.model
    Create immediately all the AEAT sequences when creating company.
  • get_taxes_from_templates(self, tax_templates)
    Return company taxes that match the given tax templates.

New fields (1)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Selection
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/11.0/l10n_es_aeat
VERSION
VERSION 3.1.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Carlos Dauden, Stéphane Bidoul (ACSONE), OCA Transbot, Hugo Santos, oca-travis, Weblate, OCA-git-bot, oihane, Luis J. Salvatierra, Rodrigo, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-ux:
    - date_range
odoo/odoo:
    - account_invoicing
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
    - base_iban
    - l10n_es
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_report_assets_backend aeat assets ir.ui.view qweb Inherits web.assets_backend
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner group Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (13)

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' oldname='config_lines' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' oldname='model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    default='left' string='Alignment' args: [('left', 'Left'), ('right', 'Right')]
  • apply_sign Boolean
    default=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    default=0 string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' oldname='sign' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' oldname='sub_config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (2)
  • onchange_subconfig(self)
    @api.multi@api.onchange('subconfig_id')
  • onchange_type(self)
    @api.multi@api.onchange('export_type')

New fields (6)
  • date_from Date
    string='From Date'
  • date_from_search Date
    compute='_compute_date_from_search' store=True
  • date_to Date
    string='To Date'
  • date_to_search Date
    compute='_compute_date_to_search' store=True
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (10)
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] string='Field type'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (26)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company_id readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_email Char
    readonly=True size=50 states={'draft': [('readonly', False)]} string='Contact email'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' oldname='counterpart_account' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Ending date'
  • date_start Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Starting date'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' default=_default_export_config_id domain=<expr> oldname='export_config' string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' oldname='model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Account entry'
  • name Char
    copy=False oldname='sequence' size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (17)
  • button_calculate(self)
    @api.multi
  • button_cancel(self)
    @api.multi
    Set report status to cancelled.
  • button_confirm(self)
    @api.multi
    Set report status to done.
  • button_export(self)
    @api.multi
  • button_open_move(self)
    @api.multi
  • button_post(self)
    @api.multi
    Create any possible account move and set state to posted.
  • button_recalculate(self)
    @api.multi
  • button_recover(self)
    @api.multi
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    @api.multi
    Remove created account move and set state to cancelled.
  • calculate(self)
    @api.multi
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_html(self)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • onchange_period_type(self)
    @api.onchange('year', 'period_type')
  • unlink(self)
    @api.multi

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')] string='State'
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
    string='Content'
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Name'
Public methods (0)

No public methods.

New fields (3)
  • data Binary
    readonly=True string='File'
  • name Char
    readonly=True string='File name'
  • state Selection
    default='open' selection=[('open', 'open'), ('get', 'get')] string='State'
Public methods (2)
  • action_get_file(self)
    @api.multi
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
  • action_get_file_from_config(self, report)
    @api.multi

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' oldname='tax_lines' readonly=True string='Tax lines'
Public methods (4)
  • calculate(self)
    @api.multi
  • create_regularization_move(self)
    @api.multi
  • get_taxes_from_map(self, map_line)
  • unlink(self)
    @api.multi

New fields (9)
  • amount Float
    digits=dp.get_precision('Account')
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' oldname='map_line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' oldname='move_lines' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True ondelete='cascade' required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • create(self, values)
    @api.model
    Create immediately all the AEAT sequences when creating company.

New fields (1)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Char
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/10.0/l10n_es_aeat
VERSION
VERSION 3.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, GitHub, Jairo Llopis, Jordi Ballester, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Marçal, Isaac Gallart Bochons, Abranes, rgarnau
WEBSITE
WEBSITEhttps://odoo-community.org/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-tools:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_search aeat.model.export.config search New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
aeat_report_assets_backend aeat assets ir.ui.view qweb Inherits web.assets_backend
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
view_partner_form res.partner group Inherits account.view_partner_property_form
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
wizard_compare_boe_file Compare BOE file wizard l10n.es.aeat.report.compare_boe_file form New
Models touched (12)

New fields (7)
  • active Boolean
    default=True
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' oldname='config_lines' string='Lines'
  • date_end Date
    string='Ending date'
  • date_start Date
    string='Starting date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' oldname='model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    default='left' string='Alignment' args: [('left', 'Left'), ('right', 'Right')]
  • apply_sign Boolean
    default=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    default=0 string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' oldname='sign' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' oldname='sub_config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (2)
  • onchange_subconfig(self)
    @api.multi@api.onchange('subconfig_id')
  • onchange_type(self)
    @api.multi@api.onchange('export_type')

New fields (4)
  • date_from Date
    string='From Date'
  • date_to Date
    string='To Date'
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (10)
  • exigible_type Selection
    default='yes' required=True selection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')] string='Exigibility'
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' required=True selection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] string='Field type'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' required=True selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' required=True selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (26)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company_id readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' oldname='counterpart_account' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Ending date'
  • date_start Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Starting date'
  • exception_msg Char
    compute='_compute_exception_msg' args: 'Exception message'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' default=_default_export_config_id domain=<expr> oldname='export_config' string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' oldname='model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Account entry'
  • name Char
    copy=False oldname='sequence' size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (17)
  • button_calculate(self)
    @api.multi
  • button_cancel(self)
    @api.multi
    Set report status to cancelled.
  • button_confirm(self)
    @api.multi
    Set report status to done.
  • button_export(self)
    @api.multi
  • button_open_move(self)
    @api.multi
  • button_post(self)
    @api.multi
    Create any possible account move and set state to posted.
  • button_recalculate(self)
    @api.multi
  • button_recover(self)
    @api.multi
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    @api.multi
    Remove created account move and set state to cancelled.
  • calculate(self)
    @api.multi
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_html(self, given_context=None)
    @api.model
    Render dynamic view from ir.action.client
  • get_period_type_selection(self)
  • get_taxes_from_templates(self, tax_templates)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • onchange_period_type(self)
    @api.onchange('year', 'period_type')
  • unlink(self)
    @api.multi

New fields (3)
  • data Binary
    required=True string='File'
  • line_ids One2many → l10n.es.aeat.report.compare_boe_file.line
    comodel_name='l10n.es.aeat.report.compare_boe_file.line' inverse_name='wizard_id' string='Lines'
  • state Selection
    default='open' selection=[('open', 'open'), ('compare', 'compare')] string='State'
Public methods (1)
  • button_compare_file(self)
    Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.

New fields (6)
  • content Char
    string='Content'
  • content_float Float
    compute='_compute_content_float' string='Amount'
  • export_line_id Many2one → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' ondelete='cascade' readonly=True required=True string='Export line'
  • name Char
    readonly=True related='export_line_id.name' string='Name'
  • sequence Integer
    readonly=True related='export_line_id.sequence' string='Sequence'
  • wizard_id Many2one → l10n.es.aeat.report.compare_boe_file
    comodel_name='l10n.es.aeat.report.compare_boe_file' ondelete='cascade' readonly=True required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' oldname='tax_lines' readonly=True string='Tax lines'
Public methods (3)
  • calculate(self)
    @api.multi
  • create_regularization_move(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (9)
  • amount Float
    digits=dp.get_precision('Account')
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' oldname='map_line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' oldname='move_lines' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True ondelete='cascade' required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • create(self, values)
    @api.model
    Create immediately all the AEAT sequences when creating company.

New fields (1)
  • aeat_anonymous_cash_customer Boolean
    help='Check this for anonymous cash customer. AEAT communication' string='AEAT - Anonymous customer'
Public methods (0)

No public methods.

New fields (1)
  • acc_type Char
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/9.0/l10n_es_aeat
VERSION
VERSION 1.0.7
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC, Acysos
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, cubells, Jordi Ballester, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://odoo-community.org/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/server-tools:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
l10n_es_aeat_map_tax_form l10n.es.aeat.map.tax form New
l10n_es_aeat_map_tax_line_form l10n.es.aeat.map.tax.line form New
l10n_es_aeat_map_tax_line_tree l10n.es.aeat.map.tax.line tree New
l10n_es_aeat_map_tax_tree l10n.es.aeat.map.tax tree New
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_form l10n.es.aeat.tax.line.form l10n.es.aeat.tax.line form New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
Models touched (8)

New fields (6)
  • config_line_ids One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' oldname='config_lines' string='Lines'
  • date_end Date
    string='End date'
  • date_start Date
    string='Start date'
  • model_id Many2one → ir.model
    comodel_name='ir.model' oldname='model' string='Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    default='left' string='Alignment' args: [('left', 'Left'), ('right', 'Right')]
  • apply_sign Boolean
    default=True string='Apply sign'
  • bool_no Char
    default=' ' size=1 string='Value for no'
  • bool_yes Char
    default='X' size=1 string='Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    default=0 string='Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    string='Expression'
  • fixed_value Char
    string='Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' oldname='sign' size=1 string='Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 string='Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    string='Sequence'
  • size Integer
    string='Field size'
  • subconfig_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' oldname='sub_config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (2)
  • onchange_subconfig(self)
    @api.multi@api.onchange('subconfig_id')
  • onchange_type(self)
    @api.multi@api.onchange('export_type')

New fields (4)
  • date_from Date
    string='From Date'
  • date_to Date
    string='To Date'
  • map_line_ids One2many → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (9)
  • field_number Integer
    required=True string='Field number'
  • field_type Selection
    default='amount' selection=[('base', 'Base'), ('amount', 'Amount')] string='Field type'
  • inverse Boolean
    default=False string='Inverse summarize sign'
  • map_parent_id Many2one → l10n.es.aeat.map.tax
    comodel_name='l10n.es.aeat.map.tax' required=True
  • move_type Selection
    default='all' selection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')] string='Operation type'
  • name Char
    required=True string='Name'
  • sum_type Selection
    default='both' selection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')] string='Summarize type'
  • tax_ids Many2many → account.tax.template
    comodel_name='account.tax.template' required=True string='Taxes templates'
  • to_regularize Boolean
    string='To regularize'
Public methods (0)

No public methods.

New fields (25)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company_id readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_name Char
    help='Must have name and surname.' readonly=True required=True size=40 states={'draft': [('readonly', False)]} string='Full Name'
  • contact_phone Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='Phone'
  • counterpart_account_id Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.' oldname='counterpart_account' string='Counterpart account'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='company_id.currency_id' string='Currency'
  • date_end Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Ending date'
  • date_start Date
    readonly=True required=True states={'draft': [('readonly', False)]} string='Starting date'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' default=_default_export_config_id domain=<expr> oldname='export_config' string='Export config'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' states={'done': [('readonly', True)]} string='Journal'
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model' oldname='model' string='Model'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Account entry'
  • name Char
    oldname='sequence' size=13 string='Report identifier'
  • number Char
    default=_default_number readonly=True required=True size=3 string='Model number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]" help='Company bank account used for the presentation' string='Bank account'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='company_id.partner_id' string='Partner'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' readonly=True size=9 states={'draft': [('readonly', False)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True selection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')] string='State'
  • support_type Selection
    default='T' readonly=True required=True selection=[('C', 'DVD'), ('T', 'Telematics')] states={'draft': [('readonly', False)]} string='Support Type'
  • type Selection
    default='N' readonly=True required=True selection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] states={'draft': [('readonly', False)]} string='Statement Type'
  • year Integer
    default=_default_year readonly=True required=True states={'draft': [('readonly', False)]} string='Year'
Public methods (15)
  • button_calculate(self)
    @api.multi
  • button_cancel(self)
    @api.multi
    Set report status to cancelled.
  • button_confirm(self)
    @api.multi
    Set report status to done.
  • button_export(self)
    @api.multi
  • button_open_move(self)
    @api.multi
  • button_post(self)
    @api.multi
    Create any possible account move and set state to posted.
  • button_recalculate(self)
    @api.multi
  • button_recover(self)
    @api.multi
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    @api.multi
    Remove created account move and set state to cancelled.
  • calculate(self)
    @api.multi
    To be overrided by inherit models
  • create(self, vals)
    @api.model
  • get_period_type_selection(self)
  • onchange_company_id(self)
    @api.onchange('company_id')
    Load some company data (the VAT number) when company changes.
  • onchange_period_type(self)
    @api.onchange('year', 'period_type')
  • unlink(self)
    @api.multi

New fields (1)
  • tax_line_ids One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' oldname='tax_lines' readonly=True string='Tax lines'
Public methods (3)
  • calculate(self)
    @api.multi
  • create_regularization_move(self)
    @api.multi
  • unlink(self)
    @api.multi

New fields (9)
  • amount Float
    digits=dp.get_precision('Account')
  • field_number Integer
    readonly=True related='map_line_id.field_number' store=True string='Field number'
  • map_line_id Many2one → l10n.es.aeat.map.tax.line
    comodel_name='l10n.es.aeat.map.tax.line' oldname='map_line' ondelete='cascade' required=True string='Map line'
  • model Char
    index=True readonly=True required=True
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_line_ids Many2many → account.move.line
    comodel_name='account.move.line' oldname='move_lines' string='Journal items'
  • name Char
    readonly=True related='map_line_id.name' store=True string='Name'
  • res_id Integer
    index=True ondelete='cascade' required=True string='Resource ID'
  • to_regularize Boolean
    readonly=True related='map_line_id.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)
    @api.multi

New fields (1)
  • acc_type Char
    store=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/8.0/l10n_es_aeat
VERSION
VERSION 1.9.4
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, AvanzOSC
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), cubells, OCA Transbot, Santi Argüeso, oca-travis, Roberto Lizana, Almudena, agaldona, Juan Carlos Montoya, Weblate, Antonio Espinosa, Gelu
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
aeat_mod_map_tax_code_form aeat.mod.map.tax.code.form aeat.mod.map.tax.code form New
aeat_mod_map_tax_code_line_form aeat.mod.map.tax.code.line.form aeat.mod.map.tax.code.line form New
aeat_mod_map_tax_code_line_tree aeat.mod.map.tax.code.line.tree aeat.mod.map.tax.code.line tree New
aeat_mod_map_tax_code_tree aeat.mod.map.tax.code.tree aeat.mod.map.tax.code tree New
aeat_model_export_config_form aeat.model.export.config.form aeat.model.export.config form New
aeat_model_export_config_line_form aeat.model.export.config.line.form aeat.model.export.config.line form New
aeat_model_export_config_line_tree aeat.model.export.config.line.tree aeat.model.export.config.line tree New
aeat_model_export_config_tree aeat.model.export.config.tree aeat.model.export.config tree New
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
view_l10n_es_aeat_tax_line_tree l10n.es.aeat.tax.line.tree l10n.es.aeat.tax.line tree New
view_move_line_tree account.move.line field Inherits account.view_move_line_tree
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
Models touched (7)

New fields (4)
  • date_from Date
    string='From Date'
  • date_to Date
    string='To Date'
  • map_lines One2many → aeat.mod.map.tax.code.line
    comodel_name='aeat.mod.map.tax.code.line' inverse_name='map_parent_id' required=True string='Map lines'
  • model Integer
    required=True string='AEAT Model'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (5)
  • field_number Integer
    required=True string='Field number'
  • map_parent_id Many2one → aeat.mod.map.tax.code
    required=True args: 'aeat.mod.map.tax.code'
  • name Char
    required=True
  • tax_codes Many2many → account.tax.code.template
    comodel_name='account.tax.code.template' required=True string='Tax codes'
  • to_regularize Boolean
Public methods (1)
  • get_taxes_amount(self, report, periods)

New fields (6)
  • config_lines One2many → aeat.model.export.config.line
    comodel_name='aeat.model.export.config.line' inverse_name='export_config_id' string='Lines'
  • date_end Date
    string='End date'
  • date_start Date
    string='Start date'
  • model Many2one → ir.model
    args: 'ir.model', 'Odoo model'
  • model_number Char
    size=3 string='Model number'
  • name Char
    string='Name'
Public methods (0)

No public methods.

New fields (21)
  • alignment Selection
    default='left' string='Alignment' args: [('left', 'Left'), ('right', 'Right')]
  • apply_sign Boolean
    default=True args: 'Apply sign'
  • bool_no Char
    default=' ' size=1 args: 'Value for no'
  • bool_yes Char
    default='X' size=1 args: 'Value for yes'
  • conditional Boolean
    compute='_compute_conditional' store=True
  • conditional_expression Char
    help='If set, this expression will be used to evaluate if this line should be added' string='Conditional expression'
  • decimal_size Integer
    default=0 args: 'Number of char for decimals'
  • export_config_id Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' ondelete='cascade' required=True string='Config parent'
  • export_type Selection
    default='string' required=True selection=[('string', 'Alphanumeric'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')] string='Export field type'
  • expression Char
    args: 'Expression'
  • fixed_value Char
    args: 'Fixed value'
  • name Char
    required=True string='Name'
  • negative_sign Char
    default='N' oldname='sign' size=1 args: 'Negative sign character'
  • position Integer
    compute='_compute_position'
  • positive_sign Char
    default='0' size=1 args: 'Positive sign character'
  • repeat Boolean
    compute='_compute_repeat' store=True
  • repeat_expression Char
    help='If set, this expression will be used for getting the list of elements to iterate on' string='Repeat expression'
  • sequence Integer
    args: 'Sequence'
  • size Integer
    args: 'Field size'
  • sub_config Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' string='Sub-configuration'
  • value Char
    compute='_compute_value' store=True
Public methods (2)
  • onchange_subconfig(self)
    @api.one@api.onchange('sub_config')
  • onchange_type(self)
    @api.one@api.onchange('export_type')

New fields (22)
  • allow_posting Boolean
    compute='_compute_allow_posting'
  • calculation_date Datetime
    string='Calculation date'
  • company_id Many2one → res.company
    default=_default_company readonly=True required=True states={'draft': [('readonly', False)]} string='Company' args: 'res.company'
  • company_vat Char
    readonly=True required=True size=9 states={'draft': [('readonly', False)]} string='VAT number'
  • contact_name Char
    help='Must have name and surname.' size=40 states={'calculated': [('required', True)], 'confirmed': [('readonly', True)]} string='Full Name'
  • contact_phone Char
    size=9 states={'calculated': [('required', True)], 'confirmed': [('readonly', True)]} string='Phone'
  • counterpart_account Many2one → account.account
    comodel_name='account.account' help='This account will be the counterpart for all the journal items that are regularized when posting the report.'
  • export_config Many2one → aeat.model.export.config
    comodel_name='aeat.model.export.config' domain="[('model', '=', model)]" string='Export config'
  • fiscalyear_id Many2one → account.fiscalyear
    readonly=True required=True states={'draft': [('readonly', False)]} string='Fiscal year' args: 'account.fiscalyear'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' default=_default_journal domain=[('type', '=', 'general')] help='Journal in which post the move.' string='Journal'
  • model Many2one → ir.model
    comodel_name='ir.model' compute='_compute_report_model'
  • move_id Many2one → account.move
    comodel_name='account.move' string='Account entry'
  • name Char
    oldname='sequence' size=13 string='Report identifier'
  • number Char
    readonly=True required=True size=13 string='Declaration number'
  • partner_bank_id Many2one → res.partner.bank
    comodel_name='res.partner.bank' domain="[('state', '=', 'iban'), ('company_id', '=', company_id)]" help='Company bank account used for the presentation' string='Bank account'
  • period_type Selection
    default=_default_period_type readonly=True required=True selection='get_period_type_selection' states={'draft': [('readonly', False)]} string='Period type'
  • periods Many2many → account.period
    comodel_name='account.period' readonly=True states={'draft': [('readonly', False)]} string='Period(s)'
  • previous_number Char
    size=13 states={'done': [('readonly', True)]} string='Previous declaration number'
  • representative_vat Char
    help='Legal Representative VAT number.' size=9 states={'confirmed': [('readonly', True)]} string='L.R. VAT number'
  • state Selection
    default='draft' readonly=True string='State' args: [('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')]
  • support_type Selection
    default='T' states={'calculated': [('required', True)], 'done': [('readonly', True)]} string='Support Type' args: [('C', 'DVD'), ('T', 'Telematics')]
  • type Selection
    default='N' readonly=True required=True states={'draft': [('readonly', False)]} string='Statement Type' args: [('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')]
Public methods (16)
  • button_calculate(self)
    @api.multi
  • button_cancel(self)
    @api.multi
    Set report status to cancelled.
  • button_confirm(self)
    @api.multi
    Set report status to done.
  • button_export(self)
    @api.multi
  • button_open_move(self)
    @api.multi
  • button_post(self)
    @api.multi
    Create any possible account move and set state to posted.
  • button_recalculate(self)
    @api.multi
  • button_recover(self)
    @api.multi
    Set report status to draft and reset calculation date.
  • button_unpost(self)
    @api.multi
    Remove created account move and set state to done.
  • calculate(self)
    @api.multi
  • create(self, vals)
    @api.model
  • get_period_type_selection(self)
  • init(self, cr)
  • on_change_company_id(self)
    @api.onchange('company_id')
    Loads some company data (the VAT number) when the selected company changes.
  • onchange_period_type(self)
    @api.onchange('period_type', 'fiscalyear_id')
  • unlink(self)
    @api.multi

New fields (1)
  • tax_lines One2many → l10n.es.aeat.tax.line
    auto_join=True comodel_name='l10n.es.aeat.tax.line' domain=<expr> inverse_name='res_id' readonly=True
Public methods (3)
  • calculate(self)
    @api.multi
  • create_regularization_move(self)
    @api.one
  • unlink(self)
    @api.multi

New fields (9)
  • amount Float
    digits=dp.get_precision('Account')
  • field_number Integer
    related='map_line.field_number' store=True string='Field number'
  • map_line Many2one → aeat.mod.map.tax.code.line
    comodel_name='aeat.mod.map.tax.code.line' ondelete='cascade' required=True
  • model Char
    index=True readonly=True required=True
  • model_id Many2one → ir.model
    comodel_name='ir.model' compute='_compute_model_id' store=True string='Model'
  • move_lines Many2many → account.move.line
    comodel_name='account.move.line' string='Journal items'
  • name Char
    related='map_line.name' store=True string='Name'
  • res_id Integer
    index=True required=True args: 'Resource ID'
  • to_regularize Boolean
    related='map_line.to_regularize'
Public methods (1)
  • get_calculated_move_lines(self)
    @api.multi
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/7.0/l10n_es_aeat
VERSION
VERSION 1.1
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Stéphane Bidoul (ACSONE), Alejandro Santana, Ignacio Ibeas - Acysos S.L., Omar (Pexego), OCA Transbot, Launchpad Translations on behalf of openerp-spain-team
WEBSITE
WEBSITEhttp://www.pexego.es, http://www.acysos.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo base para declaraciones de la AEAT.
    

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
view_l10n_es_aeat_report_form l10n_es.aeat.report.form l10n.es.aeat.report form New
view_l10n_es_aeat_report_search AEAT Model (search) l10n.es.aeat.report search New
view_l10n_es_aeat_report_tree l10n_es.aeat.report.tree l10n.es.aeat.report tree New
wizard_aeat_export Export AEAT BOE file l10n.es.aeat.report.export_to_boe form New
Models touched (2)

New fields (0)

No new fields.

Public methods (9)
  • button_calculate(self, cr, uid, ids, context=None)
  • button_cancel(self, cr, uid, ids, context=None)
    Set report status to cancelled.
  • button_confirm(self, cr, uid, ids, context=None)
    Set report status to done.
  • button_export(self, cr, uid, ids, context=None)
  • button_recalculate(self, cr, uid, ids, context=None)
  • button_recover(self, cr, uid, ids, context=None)
    Set report status to draft and reset calculation date.
  • calculate(self, cr, uid, ids, context=None)
  • on_change_company_id(self, cr, uid, ids, company_id)
    Loads some company data (the VAT number) when the selected company changes.
  • unlink(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • action_get_file(self, cr, uid, ids, context=None)
    Action that exports the data into a BOE formatted text file. @return: Action dictionary for showing exported file.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/6.1/l10n_es_aeat
VERSION
VERSION 1.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Iván Antón (Ozono), Omar (pexego), Alberto Martín
WEBSITE
WEBSITEhttp://www.pexego.es
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - product
    - process
    - decimal_precision
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (0)

No views found for this module.

Models touched (0)

No models found for this module.