Repository
OCA/l10n-spain · module folder · Try on Runboat
Module version
1.1.2
Category
Localisation/Accounting
Folder size
1.26 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/l10n-spain
Last tracking update
2026-08-07 09:06:22
Authors
Odoo Community Association (OCA), Tecnativa, ForgeFlow
Maintainers
Odoo Community Association (OCA), Tecnativa, ForgeFlow
Committers
Pedro M. Baeza, Víctor Martínez, Emilio Pascual, Weblate, OCA-git-bot, sergio, Oihane Crucelaegui, oca-ci
Odoo dependencies
OCA/account-financial-reporting:
OCA/l10n-spain:
OCA/server-ux:
odoo/odoo:
- web
- bus
- uom
Python dependencies
unidecode
System dependencies
None
Required by
None
Description
Módulo para la presentación del Modelo AEAT 349 (Declaración
Recapitulativa de Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños
físicos y lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 349:

> - Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido
>   que hayan realizado las operaciones previstas en el artículo 79 del
>   Reglamento del Impuesto sobre el Valor Añadido, es decir, quienes
>   adquieran o vendan bienes a empresas situadas en países miembros de
>   la UE, sino también aquellos que presten servicios a miembros de la
>   UE y cumplan con las siguientes condiciones:
>
> > - Que conforme a las reglas de la localización aplicables a las
> >   mismas, no se entiendan prestadas en el territorio de aplicación
> >   del impuesto.
> >
> > - Que estén sometidas efectivamente a gravamen de otro Estado
> >   miembro.
> >
> > - Que su destinatario sea un empresario o profesional actuando como
> >   tal y radique en dicho Estado miembro la sede de su actividad
> >   económica, o tenga en el mismo un establecimiento permanente o, en
> >   su defecto, el lugar de su domicilio o residencia habitual, o que
> >   dicho destinatario sea una persona jurídica que no actúe como
> >   empresario o profesional pero tenga asignado un número de
> >   identificación a efectos del Impuesto suministrado por ese Estado
> >   miembro.
> >
> > - Que el sujeto pasivo sea dicho destinatario.
> >
> >   El período de declaración comprenderá, con carácter general las
> >   operaciones realizadas en cada mes natural, y se presentará
> >   durante los veinte primeros días naturales del mes inmediato
> >   siguiente al correspondiente período mensual. No obstante, la
> >   presentación podrá ser bimestral, trimestral o anual en los
> >   siguientes supuestos:
>
> - Bimestral: Si al final del segundo mes de un trimestre natural el
>   importe total de las entregas de bienes y prestaciones de servicios
>   que deban consignarse en la declaración recapitulativa supera
>   100.000 euros (a partir de 2012, el umbral se fija en 50.000 euros).
> - Trimestral: Cuando ni durante el trimestre de referencia ni en cada
>   uno de los cuatro trimestres naturales anteriores el importe total
>   de las entregas de bienes y prestaciones de servicios que deban
>   consignarse en la declaración recapitulativa sea superior a 100.000
>   euros.
> - Anual: En los treinta primeros días de enero del año siguiente ( la
>   primera sería en enero de 2011) si el importe total de las entregas
>   de bienes o prestaciones de servicios del año ( excluido IVA), no
>   supera los 35.000 € y el importe total de las entregas de bienes a
>   otro Estado Miembro (salvo medios de transporte nuevos) exentas de
>   IVA no sea superior a 15.000 €.

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.list aeat.349.map.line list New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax form Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (list) l10n.es.aeat.mod349.partner_record_detail list New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (list) l10n.es.aeat.mod349.partner_record list New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (list) l10n.es.aeat.mod349.partner_refund_detail list New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (list) l10n.es.aeat.mod349.partner_refund list New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report form Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.list l10n.es.aeat.mod349.report list Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move form Inherits account.view_move_form
view_move_line_form account.move.line form Inherits account.view_move_line_form
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (9)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…