TIP: You can type at any time to perform a new search.
AEAT Base
l10n_es_aeat · OCA/l10n-spain
🛠 Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `UPDATE account_move SET thirdparty_invoice = False` - re-check the table/column names still match after upgrading. migration-raw-sql-write
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `UPDATE account_journal SET thirdparty_invoice = False` - re-check the table/column names still match after upgrading. migration-raw-sql-write
Found by automated static analysis: patterns worth a look before/after upgrading this module to a newer Odoo version.
- Repository
- OCA/l10n-spain · module folder · Try on Runboat
- Module version
- Category
- Accounting & Finance
- Folder size
- 1.82 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/l10n-spain
- Last tracking update
- 2026-08-11 17:30:51
- Authors
- Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC, Tecnativa
- Maintainers
- Odoo Community Association (OCA), Pexego, Acysos S.L., AvanzOSC, Tecnativa
- Committers
- Pedro M. Baeza, Víctor Martínez, Emilio Pascual, Weblate, OCA-git-bot, Oihane Crucelaegui, oca-ci, Angel Rivas, Pablo Cortés, skanndar, Oscarbol09
- Odoo dependencies
- Python dependencies
- unidecode
- System dependencies
- None
- Required by
- l10n_es_account_asset, l10n_es_aeat_mod111, l10n_es_aeat_mod115, l10n_es_aeat_mod123, l10n_es_aeat_mod130, l10n_es_aeat_mod190, l10n_es_aeat_mod216, l10n_es_aeat_mod296, l10n_es_aeat_mod303, l10n_es_aeat_mod347, l10n_es_aeat_mod349, l10n_es_aeat_partner_check, l10n_es_aeat_sii_oca, l10n_es_facturae, l10n_es_intrastat_report, l10n_es_vat_book
- Description
Módulo base para declaraciones de la AEAT, que incluye: - Campos base para todo los modelos AEAT. - Vista base para todos los modelos. - Crea una secuencia automática para los registros diferenciando por modelo. - Exportación del BOE. Define una exportación básica, con los diferentes registros del fichero. - Generación del registro del declarante con los campos genéricos de los modelos. - Motor de exportación paramétrica basado en una configuración que puede ser introducida por datos XML o por interfaz. - Visor de archivos BOE asociados a la configuración de exportación. - Motor de cálculo de importes por impuestos. - Generador del asiento de regularización con cargo a un proveedor "Agencia Estatal de Administración Tributaria" creado al efecto. - Certificado para las declaraciones de la AEAT - Webservice AEAT SOAP
Code Analysis ⓘ
Views touched (28)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_tax_view_form |
account.tax | form | Inherits account.view_tax_form | |
account_tax_view_tree |
account.tax | tree | 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 | form | Inherits account.view_account_journal_form | |
view_company_aeat_form |
res.company.aeat.form | res.company | form | 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 | form | Inherits account.view_move_form | |
view_move_line_tree |
account.move.line | tree | Inherits account.view_move_line_tree | |
view_partner_form |
res.partner | form | 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 |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (26)
New fields (1)
-
aeat_activeBooleancopy=Falsedefault=Truehelp='Enable AEAT communication for this fiscal position?'string='AEAT Active'
No public methods.
New fields (2)
-
tax_agency_idMany2one → aeat.tax.agencycomodel_name='aeat.tax.agency'copy=Falsehelp='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_invoiceBooleancopy=Falsestring='Third-party invoice'
No public methods.
New fields (2)
-
thirdparty_invoiceBooleancompute='_compute_thirdparty_invoice'copy=Falsereadonly=Falsestore=Truestring='Third-party invoice' -
thirdparty_numberCharcopy=Falsehelp='Número de la factura emitida por un tercero.'index=Truestring='Third-party number'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
aeat_equivalent_tax_idMany2one → account.taxcomodel_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)'
-
copy_data(self, default=None) -
create(self, vals_list)@api.model_create_multiInvalidate 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_sentTextcopy=Falsereadonly=Truestring='AEAT last content sent' -
aeat_header_sentTextcopy=Falsereadonly=Truestring='AEAT last header sent' -
aeat_send_errorTextcopy=Falsereadonly=Truestring='AEAT Send Error' -
aeat_send_failedBooleancopy=Falsehelp='Indicates that the last attempt to communicate this document to the SII has failed. See SII return for details'string='SII send failed' -
aeat_stateSelectioncopy=Falsedefault='not_sent'help='Indicates the state of this document in relation with the presentation at the AEAT'readonly=Trueselection=AEAT_STATESstring='AEAT send state'
No public methods.
New fields (7)
-
activeBooleandefault=True -
config_line_idsOne2many → aeat.model.export.config.linecomodel_name='aeat.model.export.config.line'inverse_name='export_config_id'string='Lines' -
date_endDatestring='Ending date' -
date_startDatestring='Starting date' -
model_idMany2one → ir.modelcomodel_name='ir.model'string='Odoo model' -
model_numberCharsize=3 -
nameChar
No public methods.
New fields (21)
-
alignmentSelectioncompute='_compute_alignment'readonly=Falseselection=[('left', 'Left'), ('right', 'Right')]store=True -
apply_signBooleancompute='_compute_apply_sign'readonly=Falsestore=True -
bool_noChardefault=' 'size=1string='Value for no' -
bool_yesChardefault='X'size=1string='Value for yes' -
conditionalBooleancompute='_compute_conditional'store=True -
conditional_expressionCharhelp='If set, this expression will be used to evaluate if this line should be added' -
decimal_sizeIntegercompute='_compute_decimal_size'readonly=Falsestore=Truestring='Number of char for decimals' -
export_config_idMany2one → aeat.model.export.configcomodel_name='aeat.model.export.config'ondelete='cascade'required=Truestring='Config parent' -
export_typeSelectiondefault='string'required=Trueselection=[('string', 'Alphanumeric'), ('alphabetic', 'Alphabetic'), ('float', 'Number with decimals'), ('integer', 'Number without decimals'), ('boolean', 'Boolean'), ('subconfig', 'Sub-configuration')]string='Export field type' -
expressionChar -
fixed_valueChar -
nameCharrequired=True -
negative_signChardefault='N'size=1string='Negative sign character' -
positionIntegercompute='_compute_position' -
positive_signChardefault='0'size=1string='Positive sign character' -
repeatBooleancompute='_compute_repeat'store=True -
repeat_expressionCharhelp='If set, this expression will be used for getting the list of elements to iterate on' -
sequenceInteger -
sizeIntegerstring='Field size' -
subconfig_idMany2one → aeat.model.export.configcomodel_name='aeat.model.export.config'string='Sub-configuration' -
valueCharcompute='_compute_value'store=True
No public methods.
New fields (1)
-
nameCharrequired=True
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_idMany2one → res.companycomodel_name='res.company'default=<expr>required=Truestring='Company' -
date_endDatestring='End Date' -
date_startDatestring='Start Date' -
fileBinaryrequired=True -
folderCharrequired=Truestring='Folder Name' -
nameChar -
private_keyCharreadonly=True -
public_keyCharreadonly=True -
public_key_dataTextreadonly=Truestore=False -
public_key_fileBinaryattachment=Falsecompute='_compute_public_key'groups='l10n_es_aeat.group_account_aeat'readonly=Truestore=False -
public_key_filenameCharcompute='_compute_public_key'groups='l10n_es_aeat.group_account_aeat'readonly=Truestore=False -
show_public_keyBooleanstore=False -
stateSelectiondefault='draft'selection=[('draft', 'Draft'), ('active', 'Active')]
-
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)
-
passwordCharrequired=True
-
get_keys(self)
New fields (6)
-
date_fromDatestring='From Date' -
date_from_searchDatecompute='_compute_date_from_search'store=True -
date_toDatestring='To Date' -
date_to_searchDatecompute='_compute_date_to_search'store=True -
map_line_idsOne2many → l10n.es.aeat.map.tax.linecomodel_name='l10n.es.aeat.map.tax.line'inverse_name='map_parent_id'required=Truestring='Map lines' -
modelIntegerrequired=Truestring='AEAT Model'
No public methods.
New fields (11)
-
account_xmlid_idsMany2many → l10n.es.aeat.map.tax.line.accountcomodel_name='l10n.es.aeat.map.tax.line.account'string='Account Template' -
exigible_typeSelectiondefault='yes'required=Trueselection=[('yes', 'Only exigible amounts'), ('no', 'Only non-exigible amounts'), ('both', 'Both exigible and non-exigible amounts')]string='Exigibility' -
field_numberIntegerrequired=True -
field_typeSelectiondefault='amount'required=Trueselection=[('base', 'Base'), ('amount', 'Amount'), ('both', 'Both')] -
inverseBooleandefault=Falsestring='Inverse summarize sign' -
map_parent_idMany2one → l10n.es.aeat.map.taxcomodel_name='l10n.es.aeat.map.tax'required=True -
move_typeSelectiondefault='all'required=Trueselection=[('all', 'All'), ('regular', 'Regular'), ('refund', 'Refund')]string='Operation type' -
nameCharrequired=True -
sum_typeSelectiondefault='both'required=Trueselection=[('credit', 'Credit'), ('debit', 'Debit'), ('both', 'Both (Credit - Debit)')]string='Summarize type' -
tax_xmlid_idsMany2many → l10n.es.aeat.map.tax.line.taxcomodel_name='l10n.es.aeat.map.tax.line.tax'string='Taxes templates' -
to_regularizeBoolean
-
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)
-
nameChar
No public methods.
New fields (1)
-
nameChar
No public methods.
New fields (27)
-
allow_postingBooleancompute='_compute_allow_posting' -
calculation_dateDatetime -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>required=Truestring='Company' -
company_vatCharrequired=Truesize=9string='VAT number' -
contact_emailCharsize=50 -
contact_nameCharhelp='Must have name and surname.'readonly=Truerequired=Truesize=40string='Full Name' -
contact_phoneCharrequired=Truesize=9string='Phone' -
counterpart_account_idMany2one → account.accountcomodel_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_idMany2one → res.currencycomodel_name='res.currency'readonly=Truerelated='company_id.currency_id'string='Currency' -
date_endDatecompute='_compute_dates'required=Truestore=Truestring='Ending date' -
date_startDatecompute='_compute_dates'required=Truestore=Truestring='Starting date' -
error_countIntegercompute='_compute_error_count' -
export_config_idMany2one → aeat.model.export.configcomodel_name='aeat.model.export.config'compute='_compute_export_config_id'domain=<expr>readonly=Falsestore=Truestring='Export config' -
journal_idMany2one → account.journalcomodel_name='account.journal'default=<expr>domain="[('type', '=', 'general'), ('company_id', '=', company_id)]"help='Journal in which post the move.'string='Journal' -
move_idMany2one → account.movecomodel_name='account.move'domain=[('type', '=', 'entry')]readonly=Truestring='Account entry' -
nameCharcopy=Falsesize=13string='Report identifier' -
numberChardefault=<expr>readonly=Truerequired=Truesize=3string='Model number' -
partner_bank_idMany2one → res.partner.bankcomodel_name='res.partner.bank'domain="[('acc_type', '=', 'iban'), ('partner_id', '=', partner_id)]"help='Company bank account used for the presentation'string='Bank account' -
partner_idMany2one → res.partnercomodel_name='res.partner'readonly=Truerelated='company_id.partner_id'string='Partner' -
period_typeSelectiondefault=<expr>required=Trueselection='get_period_type_selection' -
previous_numberCharsize=13string='Previous declaration number' -
representative_vatCharcompute='_compute_representative_vat'help='Legal Representative VAT number.'readonly=Falsesize=9store=Truestring='L.R. VAT number' -
stateSelectiondefault='draft'readonly=Trueselection=[('draft', 'Draft'), ('calculated', 'Processed'), ('done', 'Done'), ('posted', 'Posted'), ('cancelled', 'Cancelled')]tracking=True -
statement_typeSelectiondefault='N'required=Trueselection=[('N', 'Normal'), ('C', 'Complementary'), ('S', 'Substitutive')] -
support_typeSelectiondefault='T'required=Trueselection=[('C', 'DVD'), ('T', 'Telematics')] -
tax_agency_idsMany2many → aeat.tax.agencystring='Tax Agency' args: 'aeat.tax.agency' -
yearIntegerdefault=<expr>required=True
-
button_calculate(self) -
button_cancel(self)Set report status to cancelled. -
button_confirm(self)Set report status to done. -
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.modelRender 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)
-
dataBinaryrequired=Truestring='File' -
line_idsOne2many → l10n.es.aeat.report.compare_boe_file.linecomodel_name='l10n.es.aeat.report.compare_boe_file.line'inverse_name='wizard_id'string='Lines' -
stateSelectiondefault='open'selection=[('open', 'open'), ('compare', 'compare')]
-
button_compare_file(self)Method that compares a file against a BOE export config. @return: Action dictionary for showing comparison.
New fields (6)
-
contentChar -
content_floatFloatcompute='_compute_content_float'string='Amount' -
export_line_idMany2one → aeat.model.export.config.linecomodel_name='aeat.model.export.config.line'ondelete='cascade'readonly=Truerequired=Truestring='Export line' -
nameCharreadonly=Truerelated='export_line_id.name'string='Name' -
sequenceIntegerreadonly=Truerelated='export_line_id.sequence'string='Sequence' -
wizard_idMany2one → l10n.es.aeat.report.compare_boe_filecomodel_name='l10n.es.aeat.report.compare_boe_file'ondelete='cascade'readonly=Truerequired=Truestring='Wizard'
No public methods.
New fields (3)
-
dataBinaryreadonly=Truestring='File' -
nameCharreadonly=Truestring='File name' -
stateSelectiondefault='open'selection=[('open', 'open'), ('get', 'get')]
-
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_idsOne2many → l10n.es.aeat.tax.linebypass_search_access=Truecomodel_name='l10n.es.aeat.tax.line'domain=<expr>inverse_name='res_id'readonly=Truestring='Tax lines' -
valued_tax_line_idsOne2many → l10n.es.aeat.tax.linebypass_search_access=Truecomodel_name='l10n.es.aeat.tax.line'domain=<expr>inverse_name='res_id'readonly=Truestring='Valued tax lines'
-
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)
-
amountFloatdigits='Account' -
field_numberIntegerreadonly=Truerelated='map_line_id.field_number'store=Truestring='Field number' -
map_line_idMany2one → l10n.es.aeat.map.tax.linecomodel_name='l10n.es.aeat.map.tax.line'ondelete='cascade'required=Truestring='Map line' -
modelCharindex=Truereadonly=Truerequired=Truestring='Model name' -
move_line_idsMany2many → account.move.linecomodel_name='account.move.line'string='Journal items' -
nameCharreadonly=Truerelated='map_line_id.name'store=Truestring='Name' -
res_idIntegerindex=Truerequired=Truestring='Resource ID' -
to_regularizeBooleanreadonly=Truerelated='map_line_id.to_regularize'
-
get_calculated_move_lines(self)
New fields (2)
-
representative_vatCharhelp='Legal Representative VAT number for all the AEAT reports of this company.'size=9string='L.R. VAT number' -
tax_agency_idMany2one → aeat.tax.agencystring='Tax Agency' args: 'aeat.tax.agency'
-
create(self, vals_list)@api.model_create_multiCreate immediately all the AEAT sequences when creating company.
New fields (5)
-
aeat_anonymous_cash_customerBooleanhelp='Check this for anonymous cash customer. AEAT communication'string='AEAT - Anonymous customer' -
aeat_identificationCharhelp='Identification for AEAT purposes' -
aeat_identification_typeSelectionhelp="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_enabledBooleancompute='_compute_aeat_sending_enabled' -
aeat_simplified_invoiceBooleanhelp='Checking this mark, invoices done to this partner will be sent to AEAT as simplified invoices.'string='Simplified invoices in AEAT?'
No public methods.
New fields (1)
-
acc_typeSelectionstore=True
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…