AEAT modelo 347

l10n_es_aeat_mod347
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_mod347
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, sygel, Pablo Cortés
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
    - account_edi_ubl_cii
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
(Declaración Anual de Operaciones con Terceros) Basado en la Orden
EHA/3012/2008, de 20 de Octubre, por el que se aprueban los diseños
físicos y lógicos del 347.

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

- Todas aquellas personas físicas o jurídicas que no esten acogidas al
  régimen de módulos en el IRPF, de naturaleza pública o privada que
  desarrollen actividades empresariales o profesionales, siempre y
  cuando hayan realizado operaciones que, en su conjunto, respecto de
  otra persona o Entidad, cualquiera que sea su naturaleza o carácter,
  hayan superado la cifra de 3.005,06 € durante el año natural al que se
  refiere la declaración. Para el cálculo de la cifra de 3.005,06 € se
  computan de forma separada las entregas de biene y servicios y las
  adquisiciones de los mismos.
- En el caso de Sociedades Irregulares, Sociedades Civiles y Comunidad
  de Bienes no acogidas el regimen de módulos en el IRPF, deben incluir
  las facturas sin incluir la cuantía del IRPF.
- En el caso de facturas de proveedor con IRPF, no deben ser presentadas
  en este modelo. Se presentan en el modelo 190. Desactivar en la ficha
  del proveedor la opción de "Incluir en el informe 347".

De acuerdo con la normativa, no están obligados a presentar el modelo
347:

- Quienes realicen en España actividades empresariales o profesionales
  sin tener en territorio español la sede de su actividad, un
  establecimiento permanente o su domicilio fiscal.
- Las personas físicas y entidades en régimen de atribución de rentas en
  el IRPF, por las actividades que tributen en dicho impuesto por el
  régimen de estimación objetiva y, simultáneamente, en el IVA por los
  régimenes especiales simplificados o de la agricultura, ganadería y
  pesca o recargo de equivalencia, salvo las operaciones que estén
  excluidas de la aplicación de los expresados regímenes.
- Los obligados tributarios que no hayan realizado operaciones que en su
  conjunto superen la cifra de 3.005,06 €.
- Los obligados tributarios que hayan realizado exclusivamente
  operaciones no declarables.
- Los obligados tributarios que deban informar sobre las operaciones
  incluidas en los libros registro de IVA (modelo 340) salvo que
  realicen operaciones que expresamente deban incluirse en el modelo
  347.

(<http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf>)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record list New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record list New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner xpath Inherits l10n_es_aeat.view_partner_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=<expr> index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money."
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • error_text Char
    compute='_compute_check_ok' store=True
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')]
  • origin_year Integer
    help='Origin cash operation year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=<expr> ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] tracking=True
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (10)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50
  • address_type Char
    size=5
  • amount Float
    digits='Account'
  • 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
    size=30
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3
  • postal_code Char
    size=5
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=<expr> index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=<expr> help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3
  • state_code Char
    size=2
  • township Char
    size=30
  • township_code Char
    size=5
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • not_in_mod347 Boolean
    company_dependent=True default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.2.4
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, Jairo Llopis, Enric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Emilio Pascual, Andrii9090-tecnativa, david-s73, sygel, Andrii Kompaniiets
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - 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_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
(Declaración Anual de Operaciones con Terceros) Basado en la Orden
EHA/3012/2008, de 20 de Octubre, por el que se aprueban los diseños
físicos y lógicos del 347.

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

- Todas aquellas personas físicas o jurídicas que no esten acogidas al
  régimen de módulos en el IRPF, de naturaleza pública o privada que
  desarrollen actividades empresariales o profesionales, siempre y
  cuando hayan realizado operaciones que, en su conjunto, respecto de
  otra persona o Entidad, cualquiera que sea su naturaleza o carácter,
  hayan superado la cifra de 3.005,06 € durante el año natural al que se
  refiere la declaración. Para el cálculo de la cifra de 3.005,06 € se
  computan de forma separada las entregas de biene y servicios y las
  adquisiciones de los mismos.
- En el caso de Sociedades Irregulares, Sociedades Civiles y Comunidad
  de Bienes no acogidas el regimen de módulos en el IRPF, deben incluir
  las facturas sin incluir la cuantía del IRPF.
- En el caso de facturas de proveedor con IRPF, no deben ser presentadas
  en este modelo. Se presentan en el modelo 190. Desactivar en la ficha
  del proveedor la opción de "Incluir en el informe 347".

De acuerdo con la normativa, no están obligados a presentar el modelo
347:

- Quienes realicen en España actividades empresariales o profesionales
  sin tener en territorio español la sede de su actividad, un
  establecimiento permanente o su domicilio fiscal.
- Las personas físicas y entidades en régimen de atribución de rentas en
  el IRPF, por las actividades que tributen en dicho impuesto por el
  régimen de estimación objetiva y, simultáneamente, en el IVA por los
  régimenes especiales simplificados o de la agricultura, ganadería y
  pesca o recargo de equivalencia, salvo las operaciones que estén
  excluidas de la aplicación de los expresados regímenes.
- Los obligados tributarios que no hayan realizado operaciones que en su
  conjunto superen la cifra de 3.005,06 €.
- Los obligados tributarios que hayan realizado exclusivamente
  operaciones no declarables.
- Los obligados tributarios que deban informar sobre las operaciones
  incluidas en los libros registro de IVA (modelo 340) salvo que
  realicen operaciones que expresamente deban incluirse en el modelo
  347.

(<http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf>)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record list New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record list New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner xpath Inherits l10n_es_aeat.view_partner_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money."
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • error_text Char
    compute='_compute_check_ok' store=True
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')]
  • origin_year Integer
    help='Origin cash operation year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] tracking=True
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50
  • address_type Char
    size=5
  • amount Float
    digits='Account'
  • 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
    size=30
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3
  • postal_code Char
    size=5
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3
  • state_code Char
    size=2
  • township Char
    size=30
  • township_code Char
    size=5
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • not_in_mod347 Boolean
    company_dependent=True default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.7.3
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, Aritz Olea, David Ramia, Emilio Pascual, angel, Ignacio, Christian-RB, sygel
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
(Declaración Anual de Operaciones con Terceros) Basado en la Orden
EHA/3012/2008, de 20 de Octubre, por el que se aprueban los diseños
físicos y lógicos del 347.

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

- Todas aquellas personas físicas o jurídicas que no esten acogidas al
  régimen de módulos en el IRPF, de naturaleza pública o privada que
  desarrollen actividades empresariales o profesionales, siempre y
  cuando hayan realizado operaciones que, en su conjunto, respecto de
  otra persona o Entidad, cualquiera que sea su naturaleza o carácter,
  hayan superado la cifra de 3.005,06 € durante el año natural al que se
  refiere la declaración. Para el cálculo de la cifra de 3.005,06 € se
  computan de forma separada las entregas de biene y servicios y las
  adquisiciones de los mismos.
- En el caso de Sociedades Irregulares, Sociedades Civiles y Comunidad
  de Bienes no acogidas el regimen de módulos en el IRPF, deben incluir
  las facturas sin incluir la cuantía del IRPF.
- En el caso de facturas de proveedor con IRPF, no deben ser presentadas
  en este modelo. Se presentan en el modelo 190. Desactivar en la ficha
  del proveedor la opción de "Incluir en el informe 347".

De acuerdo con la normativa, no están obligados a presentar el modelo
347:

- Quienes realicen en España actividades empresariales o profesionales
  sin tener en territorio español la sede de su actividad, un
  establecimiento permanente o su domicilio fiscal.
- Las personas físicas y entidades en régimen de atribución de rentas en
  el IRPF, por las actividades que tributen en dicho impuesto por el
  régimen de estimación objetiva y, simultáneamente, en el IVA por los
  régimenes especiales simplificados o de la agricultura, ganadería y
  pesca o recargo de equivalencia, salvo las operaciones que estén
  excluidas de la aplicación de los expresados regímenes.
- Los obligados tributarios que no hayan realizado operaciones que en su
  conjunto superen la cifra de 3.005,06 €.
- Los obligados tributarios que hayan realizado exclusivamente
  operaciones no declarables.
- Los obligados tributarios que deban informar sobre las operaciones
  incluidas en los libros registro de IVA (modelo 340) salvo que
  realicen operaciones que expresamente deban incluirse en el modelo
  347.

(<http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf>)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner xpath Inherits l10n_es_aeat.view_partner_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money."
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • error_text Char
    compute='_compute_check_ok' store=True
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')]
  • origin_year Integer
    help='Origin cash operation year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] tracking=True
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50
  • address_type Char
    size=5
  • amount Float
    digits='Account'
  • 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
    size=30
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3
  • postal_code Char
    size=5
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3
  • state_code Char
    size=2
  • township Char
    size=30
  • township_code Char
    size=5
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • not_in_mod347 Boolean
    company_dependent=True default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.13.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Omar (Comunitea), Weblate, OCA-git-bot, oca-ci, Aritz Olea, David Ramia, Emilio Pascual, angel, EmilioPascual, Christian-RB, sygel, adrip-s73, Sergio Bustamante
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits l10n_es_aeat.view_partner_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money."
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • error_text Char
    compute='_compute_check_ok' store=True
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')]
  • origin_year Integer
    help='Origin cash operation year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] tracking=True
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50
  • address_type Char
    size=5
  • amount Float
    digits='Account'
  • 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
    size=30
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3
  • postal_code Char
    size=5
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3
  • state_code Char
    size=2
  • township Char
    size=30
  • township_code Char
    size=5
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • not_in_mod347 Boolean
    company_dependent=True default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.14.1
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Carlos Dauden, manu, OCA Transbot, Miquel Raïch, Omar (Comunitea), Weblate, OCA-git-bot, ferran-73, oca-ci, David Ramia, Carlos Roca, angel, Juan Pablo Garza
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/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits l10n_es_aeat.view_partner_form
Models touched (6)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money."
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • error_text Char
    compute='_compute_check_ok' store=True
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')]
  • origin_year Integer
    help='Origin cash operation year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] tracking=True
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50
  • address_type Char
    size=5
  • amount Float
    digits='Account'
  • 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
    size=30
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40
  • door Char
    size=3
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3
  • number Integer
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')]
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')]
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3
  • postal_code Char
    size=5
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3
  • state_code Char
    size=2
  • township Char
    size=30
  • township_code Char
    size=5
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 2.9.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, Omar (Comunitea), oca-travis, Weblate, OCA-git-bot, ferran-73, oca-ci, alvaro, angel, luciaavanzosc
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography<39
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move xpath Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits account.view_partner_property_form
Models touched (6)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True string='Amount'
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (34)
  • amount Float
    digits='Account' string='Operations amount' tracking=True
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • company_id Many2one → res.company
    comodel_name='res.company' related='report_id.company_id' string='Company'
  • error_text Char
    compute='_compute_check_ok' store=True string='Error text'
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' tracking=True
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' tracking=True
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' tracking=True
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] string='State'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' tracking=True
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' tracking=True
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits='Account' string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3 string='Floor'
  • number Integer
    string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 2.5.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Dauden, manu, OCA Transbot, Omar (Comunitea), oca-travis, Weblate, OCA-git-bot, oca-ci, alvaro, mof-landoo, angel
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/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES pyOpenSSL
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form_mod347 account.move.supplier.form.mod347 account.move field Inherits account.view_move_form
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits account.view_partner_property_form
Models touched (6)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    readonly=True string='Amount'
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Invoice / Journal entry'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (34)
  • amount Float
    digits='Account' string='Operations amount' track_visibility='onchange'
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits='Account' string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • company_id Many2one → res.company
    comodel_name='res.company' related='report_id.company_id' string='Company'
  • error_text Char
    compute='_compute_check_ok' store=True string='Error text'
  • first_quarter Float
    digits='Account' help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' track_visibility='onchange'
  • first_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits='Account' help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' track_visibility='onchange'
  • fourth_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits='Account' string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits='Account' help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' track_visibility='onchange'
  • second_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] string='State'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits='Account' help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' track_visibility='onchange'
  • third_quarter_real_estate_transmission Float
    digits='Account' help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' track_visibility='onchange'
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (25)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits='Account' string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • error_text Char
    compute='_compute_check_ok' store=True string='Errors'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits='Account' help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits='Account' help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 2.2.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Miguel Poyatos, munozm
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
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_vat
    - l10n_es
    - base_iban
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES OpenSSL
requests
unidecode
zeep
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
move_supplier_form_mod347 account.move.supplier.form.mod347 account.move field Inherits account.view_move_form
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits account.view_partner_property_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' readonly=True states={'draft': [('readonly', False)]} args: 'Not included in 347 report'
Public methods (1)
  • action_move_create(self)
    Propagate `not_in_347` field to the account move.

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (5)
  • amount Float
    readonly=True string='Amount'
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_id.line_ids.invoice_id' store=True string='Invoice'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Move'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (32)
  • amount Float
    digits=(13, 2) string='Operations amount' track_visibility='onchange'
  • bdns_number Char
    help='Reference of Call of the subsidy or assistance in National Grands Database (BDNS).' string='BDNS Call Number'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits=(13, 2) string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • first_quarter Float
    digits=dp.get_precision('Account') help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' track_visibility='onchange'
  • first_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of first quarter real estate transmissions for this partner' oldname='first_quarter_real_estate_transmission_amount' string='First quarter real estate'
  • fourth_quarter Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' track_visibility='onchange'
  • fourth_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter real estate transmissions for this partner' oldname='fourth_quarter_real_estate_transmission_amount' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits=(13, 2) string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits=dp.get_precision('Account') help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' track_visibility='onchange'
  • second_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of second quarter real estate transmissions for this partner' oldname='second_quarter_real_estate_transmission_amount' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] string='State'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits=dp.get_precision('Account') help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' track_visibility='onchange'
  • third_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of third quarter real estate transmissions for this partner' oldname='third_quarter_real_estate_transmission_amount' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' track_visibility='onchange'
  • visible_bdns_number Boolean
    compute='_compute_visible_bdns_number'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (24)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits=(13, 2) string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits=(13, 2) help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits=(13, 2) help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.5.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Carlos Dauden, OCA Transbot, angelmoya, oca-travis, OCA-git-bot, Francisco Ivan Anton Prieto
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/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
    - base_vat
    - l10n_es
    - base_iban
    - account_invoicing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
move_supplier_form_mod347 account.move.supplier.form.mod347 account.move field Inherits account.view_move_form
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits account.view_partner_property_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' readonly=True states={'draft': [('readonly', False)]} args: 'Not included in 347 report'
Public methods (1)
  • action_move_create(self)
    Propagate `not_in_347` field to the account move.

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (7)
  • amount Float
    readonly=True string='Amount'
  • amount_signed Float
    compute='_compute_amount_signed' string='Amount signed'
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_id.line_ids.invoice_id' store=True string='Invoice'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Move'
  • move_type Selection
    readonly=True related='move_id.move_type' store=True
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (30)
  • amount Float
    digits=(13, 2) string='Operations amount' track_visibility='onchange'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits=(13, 2) string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • first_quarter Float
    digits=dp.get_precision('Account') help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' track_visibility='onchange'
  • first_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of first quarter real estate transmissions for this partner' oldname='first_quarter_real_estate_transmission_amount' string='First quarter real estate'
  • fourth_quarter Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' track_visibility='onchange'
  • fourth_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter real estate transmissions for this partner' oldname='fourth_quarter_real_estate_transmission_amount' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits=(13, 2) string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits=dp.get_precision('Account') help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' track_visibility='onchange'
  • second_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of second quarter real estate transmissions for this partner' oldname='second_quarter_real_estate_transmission_amount' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] string='State'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits=dp.get_precision('Account') help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' track_visibility='onchange'
  • third_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of third quarter real estate transmissions for this partner' oldname='third_quarter_real_estate_transmission_amount' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' track_visibility='onchange'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (24)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits=(13, 2) string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    oldname='state_code' size=2 string='State Code'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits=(13, 2) help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits=(13, 2) help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), PESOL
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), PESOL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, OCA-git-bot, Abraham Anes, javierjcf, Pedro Montagud
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es
    - l10n_es_aeat
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_vat
    - base_iban
    - l10n_es
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (15)
XML IDNameModelTypeStatus
communication_failed 347 communication failed ir.ui.view qweb New
communication_success 347 communication success ir.ui.view qweb New
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
move_supplier_form_mod347 account.move.supplier.form.mod347 account.move field Inherits account.view_move_form
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
report_347_partner report_347_partner ir.ui.view qweb New
report_347_partner_document report_347_partner_document ir.ui.view qweb New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner group Inherits account.view_partner_property_form
Models touched (7)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' readonly=True states={'draft': [('readonly', False)]} args: 'Not included in 347 report'
Public methods (1)
  • action_move_create(self)
    Propagate `not_in_347` field to the account move.

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Force not included in 347 report'
Public methods (0)

No public methods.

New fields (7)
  • amount Float
    readonly=True string='Amount'
  • amount_signed Float
    compute='_compute_amount_signed' string='Amount signed'
  • date Date
    readonly=True related='move_id.date' store=True string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_id.line_ids.invoice_id' store=True string='Invoice'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='restrict' string='Move'
  • move_type Selection
    readonly=True related='move_id.move_type' store=True
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record index=True ondelete='cascade' required=True string='Partner record'
Public methods (0)

No public methods.

New fields (30)
  • amount Float
    digits=(13, 2) string='Operations amount' track_visibility='onchange'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits=(13, 2) string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids Many2many → account.move.line
    comodel_name='account.move.line' readonly=True string='Cash payments'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • first_quarter Float
    digits=dp.get_precision('Account') help='Total amount of first quarter in, out and refund invoices for this partner' string='First quarter operations' track_visibility='onchange'
  • first_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of first quarter real estate transmissions for this partner' oldname='first_quarter_real_estate_transmission_amount' string='First quarter real estate'
  • fourth_quarter Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter in, out and refund invoices for this partner' string='Fourth quarter operations' track_visibility='onchange'
  • fourth_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter real estate transmissions for this partner' oldname='fourth_quarter_real_estate_transmission_amount' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • move_record_ids One2many → l10n.es.aeat.mod347.move.record
    comodel_name='l10n.es.aeat.mod347.move.record' inverse_name='partner_record_id' string='Move records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_transmissions_amount Float
    digits=(13, 2) string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits=dp.get_precision('Account') help='Total amount of second quarter in, out and refund invoices for this partner' string='Second quarter operations' track_visibility='onchange'
  • second_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of second quarter real estate transmissions for this partner' oldname='second_quarter_real_estate_transmission_amount' string='Second quarter real estate'
  • state Selection
    default='pending' selection=[('pending', 'Pending'), ('sent', 'Sent'), ('confirmed', 'Confirmed'), ('exception', 'Exception')] string='State'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits=dp.get_precision('Account') help='Total amount of third quarter in, out and refund invoices for this partner' string='Third quarter operations' track_visibility='onchange'
  • third_quarter_real_estate_transmission Float
    digits=dp.get_precision('Account') help='Total amount of third quarter real estate transmissions for this partner' oldname='third_quarter_real_estate_transmission_amount' string='Third quarter real estate'
  • user_id Many2one → res.users
    comodel_name='res.users' copy=False default=<expr> string='Salesperson' track_visibility='onchange'
Public methods (11)
  • action_confirm(self)
  • action_exception(self)
  • action_pending(self)
  • action_send(self)
  • button_print(self)
  • button_recompute(self)
  • calculate_quarter_totals(self)
    @api.depends('move_record_ids.move_id.date', 'report_id.year')
  • get_confirm_url(self)
  • get_reject_url(self)
  • message_get_suggested_recipients(self)
    Add the invoicing partner to the suggested recipients sending an email.
  • send_email_direct(self)

New fields (24)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits=(13, 2) string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_vat Char
    size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (0)

No public methods.

New fields (11)
  • number Char
    default='347'
  • operations_limit Float
    default=3005.06 digits=(13, 2) help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits=(13, 2) help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' store=True string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' store=True string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' store=True string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' store=True string='Real Estate Transmissions Amount'
Public methods (4)
  • btn_list_records(self)
  • button_confirm(self)
    Different check out in report
  • button_send_mails(self)
  • calculate(self)

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, ASR-OSS, Acysos, NaN·tic
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, ASR-OSS, Acysos, NaN·tic
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-tools:
    - date_range
odoo/odoo:
    - base_vat
    - 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 (10)
XML IDNameModelTypeStatus
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
partner_record_search_view l10n.es.aeat.mod347.partner_record search New
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n.es.aeat.mod347.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner field Inherits base_vat.view_partner_form
Models touched (7)

New fields (2)
  • amount_total_wo_irpf Float
    compute='_compute_amount_total_wo_irpf' store=True string='Total amount without IRPF taxes'
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Not included in 347 report'
Public methods (0)

No public methods.

New fields (4)
  • amount Float
    string='Amount'
  • date Date
    string='Date'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' ondelete='cascade' required=True string='Account move line'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record ondelete='cascade' required=True select=1 string='Partner record'
Public methods (0)

No public methods.

New fields (5)
  • amount Float
    readonly=True related='invoice_id.amount_total_wo_irpf' store=True string='Amount'
  • date Date
    readonly=True related='invoice_id.date_invoice' store=True string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' ondelete='cascade' required=True string='Invoice'
  • invoice_type Selection
    readonly=True related='invoice_id.type' store=True
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record ondelete='cascade' required=True select=1 string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    digits=(13, 2) string='Operations amount'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." string='Bussiness Real Estate Rent'
  • cash_amount Float
    digits=(13, 2) string='Received cash amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids One2many → l10n.es.aeat.mod347.cash_record
    comodel_name='l10n.es.aeat.mod347.cash_record' inverse_name='partner_record_id' string='Payment records'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' readonly=True store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • first_quarter Float
    digits=dp.get_precision('Account') help='Total amount of first quarter in, out and refund invoices for this partner' readonly=True string='First quarter operations'
  • first_quarter_cash_amount Float
    digits=dp.get_precision('Account') help='Total amount of first quarter cash movements for this partner' readonly=True string='First quarter cash movements'
  • first_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of first quarter real estate transmissions for this partner' string='First quarter real estate'
  • fourth_quarter Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter in, out and refund invoices for this partner' readonly=True string='Fourth quarter operations'
  • fourth_quarter_cash_amount Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter cash movements for this partner' readonly=True string='Fourth quarter cash movements'
  • fourth_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter real estate transmissions for this partner' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • invoice_record_ids One2many → l10n.es.aeat.mod347.invoice_record
    comodel_name='l10n.es.aeat.mod347.invoice_record' inverse_name='partner_record_id' string='Invoice records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_year Integer
    help='Origin cash operation year' string='Origin year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_record_ids Many2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' compute='_compute_real_estate_record_ids' string='Real Estate Records'
  • real_estate_transmissions_amount Float
    digits=(13, 2) string='Real Estate Transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    digits=dp.get_precision('Account') help='Total amount of second quarter in, out and refund invoices for this partner' readonly=True string='Second quarter operations'
  • second_quarter_cash_amount Float
    digits=dp.get_precision('Account') help='Total amount of second quarter cash movements for this partner' readonly=True string='Second quarter cash movements'
  • second_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of second quarter real estate transmissions for this partner' string='Second quarter real estate'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    digits=dp.get_precision('Account') help='Total amount of third quarter in, out and refund invoices for this partner' readonly=True string='Third quarter operations'
  • third_quarter_cash_amount Float
    digits=dp.get_precision('Account') help='Total amount of third quarter cash movements for this partner' readonly=True string='Third quarter cash movements'
  • third_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of third quarter real estate transmissions for this partner' string='Third quarter real estate'
Public methods (3)
  • calculate_quarter_cash_totals(self)
    @api.multi
  • calculate_quarter_totals(self)
    @api.multi@api.depends('invoice_record_ids.invoice_id.date', 'report_id.year')
  • onchange_partner_id(self)
    @api.onchange('partner_id')
    Loads some partner data (country, state and vat) when the selected partner changes.

New fields (24)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits=(13, 2) string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' default=_default_partner_id required=True string='Partner'
  • partner_vat Char
    default=_default_partner_vat size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id index=1 ondelete='cascade' string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (1)
  • on_change_partner_id(self)
    @api.onchange('partner_id')
    Loads some partner data (vat) when the selected partner changes.

New fields (14)
  • charges_obtp_limit Float
    default=300.51 digits=(13, 2) help='The declaration will include partners from which we received payments, on behalf of third parties, over this limit' string='Charges on behalf of third parties Limit (3)'
  • group_by_vat Boolean
    oldname='group_by_cif' string='Group by VAT number'
  • number Char
    default='347'
  • only_supplier Boolean
    string='Only Suppliers'
  • operations_limit Float
    default=3005.06 digits=(13, 2) help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' oldname='real_state_record_ids' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits=(13, 2) help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_compute_totals' string='Amount'
  • total_cash_amount Float
    compute='_compute_totals' string='Cash Amount'
  • total_partner_records Integer
    compute='_compute_totals' string='Partners records'
  • total_real_estate_amount Float
    compute='_compute_totals_real_estate' oldname='total_real_state_amount' string='Real Estate Amount'
  • total_real_estate_records Integer
    compute='_compute_totals_real_estate' oldname='total_real_state_records' string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_compute_totals' oldname='total_real_state_transmissions_amount' string='Real Estate Transmissions Amount'
Public methods (3)
  • btn_list_records(self)
    @api.multi
  • button_confirm(self)
    @api.multi
    Different check out in report
  • calculate(self)
    @api.multi

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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_mod347
VERSION
VERSION 1.5.1
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego, ASR-OSS, Acysos, Antiun Ingeniería S.L., Serv. Tecnol. Avanzados - Pedro M. Baeza, NaN·tic
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego, ASR-OSS, Acysos, Antiun Ingeniería S.L., Serv. Tecnol. Avanzados - Pedro M. Baeza, NaN·tic
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE), Alejandro Santana, cubells, OCA Transbot, Hugo Santos, oca-travis, agaldona, Weblate, Omar, Jose Maria Alzaga, Enrique Martín Zabalza
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_invoice_currency
OCA/l10n-spain:
    - l10n_es_aeat
odoo/odoo:
    - base_vat
    - 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 (12)
XML IDNameModelTypeStatus
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
partner_record_search_view l10n.es.aeat.mod347.partner_record.search l10n.es.aeat.mod347.partner_record search New
view_account_period_quarter_form account.period.quarter.form account.period field Inherits account.view_account_period_form
view_account_period_quarter_tree account.period.quarter.tree account.period field Inherits account.view_account_period_tree
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record.form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record.tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_estate_record_form l10n.es.aeat.mod347.real_estate_record.form l10n.es.aeat.mod347.real_estate_record form New
view_l10n_es_aeat_mod347_real_estate_record_tree l10n.es.aeat.mod347.real_estate_record.tree l10n.es.aeat.mod347.real_estate_record tree New
view_l10n_es_aeat_mod347_report_form l10n_es.aeat.mod347.report.form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n_es.aeat.mod347.report.tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner field Inherits base_vat.view_partner_form
Models touched (10)

New fields (0)

No new fields.

Public methods (3)
  • create_period(self, cr, uid, ids, context=None, interval=1)
    @api.v7
  • create_period(self, interval=1)
    @api.v8
  • create_period3(self)
    @api.multi

New fields (2)
  • amount_total_wo_irpf Float
    compute='_compute_amount_total_wo_irpf' readonly=True store=True string='Total amount without IRPF taxes'
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this invoice will not be included in any AEAT 347 model report.' args: 'Not included in 347 report'
Public methods (0)

No public methods.

New fields (1)
  • quarter Selection
    args: [('first', 'First'), ('second', 'Second'), ('third', 'Third'), ('fourth', 'Fourth')], 'Quarter'
Public methods (1)
  • assign_quarter(self)
    @api.multi

New fields (4)
  • amount Float
    digits=dp.get_precision('Account') string='Amount'
  • date Date
    string='Date'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' ondelete='cascade' required=True string='Account move line'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record ondelete='cascade' required=True select=1 string='Partner record'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • amount Float
    digits=dp.get_precision('Account') readonly=True related='invoice_id.amount_total_wo_irpf' string='Amount'
  • date Date
    readonly=True related='invoice_id.date_invoice' store=True string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' ondelete='cascade' required=True string='Invoice'
  • invoice_type Selection
    readonly=True related='invoice_id.type'
  • partner_record_id Many2one → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' default=_default_partner_record ondelete='cascade' required=True select=1 string='Partner record'
Public methods (0)

No public methods.

New fields (33)
  • amount Float
    compute='_get_quarter_invoice_totals' digits=dp.get_precision('Account') help='Total amount of fiscal year in, out and refund invoices for this partner' readonly=True store=True string='Anual operations amount'
  • bussiness_real_estate_rent Boolean
    help="Set to identify real estate rent operations aside from the rest. You'll need to fill in the real estate info only when you are the one that receives the money." oldname='bussiness_real_state_rent' string='Bussiness Real Estate Rent'
  • cash_amount Float
    compute='_get_quarter_cash_totals' digits=dp.get_precision('Account') help='Total amount of fiscal year cash movements for this partner' readonly=True store=True string='Anual cash movements amount'
  • cash_basis_operation Boolean
    help='Only for cash basis operations. Set to identify cash basis operations aside from the rest.' string='Cash Basis Operation'
  • cash_record_ids One2many → l10n.es.aeat.mod347.cash_record
    comodel_name='l10n.es.aeat.mod347.cash_record' inverse_name='partner_record_id' string='Payment records'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' readonly=True store=True string='Record is OK'
  • community_vat Char
    help='VAT number for professionals established in other state member without national VAT' size=17 string='Community vat number'
  • first_quarter Float
    compute='_get_quarter_invoice_totals' digits=dp.get_precision('Account') help='Total amount of first quarter in, out and refund invoices for this partner' readonly=True store=True string='First quarter operations'
  • first_quarter_cash_amount Float
    compute='_get_quarter_cash_totals' digits=dp.get_precision('Account') help='Total amount of first quarter cash movements for this partner' readonly=True store=True string='First quarter cash movements'
  • first_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of first quarter real estate transmissions for this partner' oldname='first_quarter_real_state_transmission_amount' string='First quarter real estate'
  • fourth_quarter Float
    compute='_get_quarter_invoice_totals' digits=dp.get_precision('Account') help='Total amount of fourth quarter in, out and refund invoices for this partner' readonly=True store=True string='Fourth quarter operations'
  • fourth_quarter_cash_amount Float
    compute='_get_quarter_cash_totals' digits=dp.get_precision('Account') help='Total amount of fourth quarter cash movements for this partner' readonly=True store=True string='Fourth quarter cash movements'
  • fourth_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of fourth quarter real estate transmissions for this partner' oldname='fourth_quarter_real_state_transmission_amount' string='Fourth quarter real estate'
  • insurance_operation Boolean
    help='Only for insurance companies. Set to identify insurance operations aside from the rest.' string='Insurance Operation'
  • invoice_record_ids One2many → l10n.es.aeat.mod347.invoice_record
    comodel_name='l10n.es.aeat.mod347.invoice_record' inverse_name='partner_record_id' string='Invoice records'
  • operation_key Selection
    selection=[('A', 'A - Adquisiciones de bienes y servicios superiores al límite (1)'), ('B', 'B - Entregas de bienes y servicios superiores al límite (1)'), ('C', 'C - Cobros por cuenta de terceros superiores al límite (3)'), ('D', 'D - Adquisiciones efectuadas por Entidades Públicas (...) superiores al límite (1)'), ('E', 'E - Subvenciones, auxilios y ayudas satisfechas por Ad. Públicas superiores al límite (1)'), ('F', 'F - Ventas agencia viaje'), ('G', 'G - Compras agencia viaje')] string='Operation Key'
  • origin_fiscalyear_id Many2one → account.fiscalyear
    comodel_name='account.fiscalyear' help='Origin cash operation fiscal year' string='Origin fiscal year'
  • partner_country_code Char
    size=2 string='Country Code'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_state_code Char
    size=2 string='State Code'
  • partner_vat Char
    size=9 string='VAT number'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' compute='_get_real_estate_record_ids' oldname='real_state_record_ids' store=False string='Real Estate Records'
  • real_estate_transmissions_amount Float
    compute='_get_quarter_real_state_totals' digits=dp.get_precision('Account') help='Total amount of fiscal year real estate transmissions for this partner' oldname='real_state_transmissions_amount' readonly=True store=True string='Real estate transmisions amount'
  • related_goods_operation Boolean
    help='Only for related goods operations. Set to identify related goods operations aside from the rest.' string='Related Goods Operation'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' select=1 string='AEAT 347 Report'
  • representative_vat Char
    help='Legal Representative VAT number' size=9 string='L.R. VAT number'
  • second_quarter Float
    compute='_get_quarter_invoice_totals' digits=dp.get_precision('Account') help='Total amount of second quarter in, out and refund invoices for this partner' readonly=True store=True string='Second quarter operations'
  • second_quarter_cash_amount Float
    compute='_get_quarter_cash_totals' digits=dp.get_precision('Account') help='Total amount of second quarter cash movements for this partner' readonly=True store=True string='Second quarter cash movements'
  • second_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of second quarter real estate transmissions for this partner' oldname='second_quarter_real_state_transmission_amount' string='Second quarter real estate'
  • tax_person_operation Boolean
    help='Only for taxable person operations. Set to identify taxable person operations aside from the rest.' string='Taxable Person Operation'
  • third_quarter Float
    compute='_get_quarter_invoice_totals' digits=dp.get_precision('Account') help='Total amount of third quarter in, out and refund invoices for this partner' readonly=True store=True string='Third quarter operations'
  • third_quarter_cash_amount Float
    compute='_get_quarter_cash_totals' digits=dp.get_precision('Account') help='Total amount of third quarter cash movements for this partner' readonly=True store=True string='Third quarter cash movements'
  • third_quarter_real_estate_transmission_amount Float
    digits=dp.get_precision('Account') help='Total amount of third quarter real estate transmissions for this partner' oldname='third_quarter_real_state_transmission_amount' string='Third quarter real estate'
Public methods (1)
  • on_change_partner_id(self)
    @api.multi@api.onchange('partner_id')
    Load some partner data country, state and vat when the selected partner changes.

New fields (24)
  • address Char
    size=50 string='Address'
  • address_type Char
    size=5 string='Address type'
  • amount Float
    digits=dp.get_precision('Account') required=True string='Amount'
  • block Char
    size=3 string='Block'
  • check_ok Boolean
    compute='_compute_check_ok' help='Checked if this record is OK' readonly=True store=True string='Record is OK'
  • city Char
    size=30 string='City'
  • complement Char
    help='Complement (urbanization, industrial park...)' size=40 string='Complement'
  • door Char
    size=3 string='Door'
  • floor Char
    size=3 string='Floor'
  • number Integer
    size=5 string='Number'
  • number_calification Selection
    selection=[('BIS', 'Bis'), ('MOD', 'Mod'), ('DUP', 'Dup'), ('ANT', 'Ant')] string='Number calification'
  • number_type Selection
    selection=[('NUM', 'Number'), ('KM.', 'Kilometer'), ('S/N', 'Without number')] string='Number type'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' default=_default_partner_id required=True string='Partner'
  • partner_vat Char
    default=_default_partner_vat size=32 string='VAT number'
  • portal Char
    size=3 string='Portal'
  • postal_code Char
    size=5 string='Postal code'
  • reference Char
    required=True size=25 string='Catastral Reference'
  • report_id Many2one → l10n.es.aeat.mod347.report
    comodel_name='l10n.es.aeat.mod347.report' default=_default_record_id ondelete='cascade' select=1 string='AEAT 347 Report'
  • representative_vat Char
    default=_default_representative_vat help='Legal Representative VAT number' size=32 string='L.R. VAT number'
  • situation Selection
    required=True selection=[('1', '1 - Spain but Basque Country and Navarra'), ('2', '2 - Basque Country and Navarra'), ('3', '3 - Spain, without catastral reference'), ('4', '4 - Foreign')] string='Real estate Situation'
  • stairway Char
    size=3 string='Stairway'
  • state_code Char
    size=2 string='State Code'
  • township Char
    size=30 string='Township'
  • township_code Char
    size=5 string='Township Code'
Public methods (1)
  • on_change_partner_id(self)
    @api.onchange('partner_id')
    Load some partner data (vat) when the selected partner changes.

New fields (14)
  • charges_obtp_limit Float
    default=300.51 digits=dp.get_precision('Account') help='The declaration will include partners from which we received payments, on behalf of third parties, over this limit' string='Charges on behalf of third parties Limit (3)'
  • group_by_vat Boolean
    oldname='group_by_cif' string='Group by VAT number'
  • number Char
    default='347'
  • only_supplier Boolean
    string='Only Suppliers'
  • operations_limit Float
    default=3005.06 digits=dp.get_precision('Account') help='The declaration will include partners with the total of operations over this limit' string='Invoiced Limit (1)'
  • partner_record_ids One2many → l10n.es.aeat.mod347.partner_record
    comodel_name='l10n.es.aeat.mod347.partner_record' inverse_name='report_id' string='Partner Records'
  • real_estate_record_ids One2many → l10n.es.aeat.mod347.real_estate_record
    comodel_name='l10n.es.aeat.mod347.real_estate_record' inverse_name='report_id' oldname='real_state_record_ids' string='Real Estate Records'
  • received_cash_limit Float
    default=6000.0 digits=dp.get_precision('Account') help='The declaration will show the total of cash operations over this limit' string='Received cash Limit (2)'
  • total_amount Float
    compute='_get_partner_totals' digits=dp.get_precision('Account') readonly=True store=True string='Operations amount'
  • total_cash_amount Float
    compute='_get_partner_totals' digits=dp.get_precision('Account') readonly=True store=True string='Cash movements amount'
  • total_partner_records Integer
    compute='_get_partner_totals' readonly=True store=True string='Partners records'
  • total_real_estate_amount Float
    compute='_get_real_state_totals' digits=dp.get_precision('Account') oldname='total_real_state_amount' readonly=True store=True string='Real estate amount'
  • total_real_estate_records Integer
    compute='_get_real_state_totals' oldname='total_real_state_records' readonly=True store=True string='Real estate records'
  • total_real_estate_transmissions_amount Float
    compute='_get_partner_totals' digits=dp.get_precision('Account') oldname='total_real_state_transmissions_amount' readonly=True store=True string='Real estate transmissions amount'
Public methods (4)
  • button_confirm(self)
    @api.multi
    Different check out in report
  • button_list_partner_records(self)
    @api.multi
  • button_list_real_estate_records(self)
    @api.multi
  • calculate(self)
    @api.multi

New fields (1)
  • not_in_mod347 Boolean
    default=False help='If you mark this field, this partner will not be included in any AEAT 347 model report, independently from the total amount of its operations.' args: 'Not included in 347 report'
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/7.0/l10n_es_aeat_mod347
VERSION
VERSION 1.2
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Spanish Localization Team
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Spanish Localization Team
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Stéphane Bidoul (ACSONE), Alejandro Santana, Ignacio Ibeas - Acysos S.L., Omar (Pexego), cubells, OCA Transbot, Launchpad Translations on behalf of openerp-spain-team, Hugo Santos, Joaquin Gutierrez, pedro, PabloCM
WEBSITE
WEBSITEhttps://launchpad.net/openerp-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_invoice_currency
OCA/l10n-spain:
    - l10n_es_aeat
odoo/odoo:
    - base_vat
    - 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
Presentación del Modelo AEAT 347
================================

(Declaración Anual de Operaciones con Terceros)
Basado en la Orden EHA/3012/2008, de 20 de Octubre, por el que se aprueban los
diseños físicos y lógicos del 347.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 347:
-------------------------------------------------------------------------------
* Todas aquellas personas físicas o jurídicas que no esten acogidas al regimen
  de módulos en el IRPF, de naturaleza pública o privada que desarrollen
  actividades empresariales o profesionales, siempre y cuando hayan realizado
  operaciones que, en su conjunto, respecto de otra persona o Entidad,
  cualquiera que sea su naturaleza o carácter, hayan superado la cifra de
  3.005,06 € durante el año natural al que se refiere la declaración. Para el
  cálculo de la cifra de 3.005,06 € se computan de forma separada las entregas
  de biene y servicios y las adquisiciones de los mismos.
* En el caso de Sociedades Irregulares, Sociedades Civiles y Comunidad de
  Bienes no acogidas el regimen de módulos en el IRPF, deben incluir las
  facturas sin incluir la cuantía del IRPF.
* En el caso de facturas de proveedor con IRPF, no deben ser presentadas en
  este modelo. Se presentan en el modelo 190. Desactivar en la ficha del
  proveedor la opción de "Incluir en el informe 347".

De acuerdo con la normativa no están obligados a presentar el modelo 347:
-------------------------------------------------------------------------
* Quienes realicen en España actividades empresariales o profesionales sin
  tener en territorio español la sede de su actividad, un establecimiento
  permanente o su domicilio fiscal.
* Las personas físicas y entidades en régimen de atribución de rentas en
  el IRPF, por las actividades que tributen en dicho impuesto por el
  régimen de estimación objetiva y, simultáneamente, en el IVA por los
  régimenes especiales simplificados o de la agricultura, ganadería
  y pesca o recargo de equivalencia, salvo las operaciones que estén
  excluidas de la aplicación de los expresados regímenes.
* Los obligados tributarios que no hayan realizado operaciones que en su
  conjunto superen la cifra de 3.005,06 €.
* Los obligados tributarios que hayan realizado exclusivamente operaciones
  no declarables.
* Los obligados tributarios que deban informar sobre las operaciones
  incluidas en los libros registro de IVA (modelo 340) salvo que realicen
  operaciones que expresamente deban incluirse en el modelo 347.

(http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf)

**AVISO:** Este módulo requiere el módulo *account_invoice_currency*,
disponible en:

https://github.com/OCA/account-financial-tools
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
invoice_form_mod347 account.invoice.form.mod347 account.invoice field Inherits account.invoice_form
invoice_supplier_form_mod347 account.invoice.supplier.form.mod347 account.invoice field Inherits account.invoice_supplier_form
partner_record_search_view l10n.es.aeat.mod347.partner_record.search l10n.es.aeat.mod347.partner_record search New
view_account_period_quarter_form account.period.quarter.form account.period field Inherits account.view_account_period_form
view_account_period_quarter_tree account.period.quarter.tree account.period field Inherits account.view_account_period_tree
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record.form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record.tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_state_record_form l10n.es.aeat.mod347.real_state_record.form l10n.es.aeat.mod347.real_state_record form New
view_l10n_es_aeat_mod347_real_state_record_tree l10n.es.aeat.mod347.real_state_record.tree l10n.es.aeat.mod347.real_state_record tree New
view_l10n_es_aeat_mod347_report_form l10n_es.aeat.mod347.report.form l10n.es.aeat.mod347.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod347_report_tree l10n_es.aeat.mod347.report.tree l10n.es.aeat.mod347.report field Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_partner_form_mod347 Partners - Add 'include in 347' res.partner field Inherits base_vat.view_partner_form
Models touched (10)

New fields (0)

No new fields.

Public methods (1)
  • create_period(self, cr, uid, ids, context=None, interval=1)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • assign_quarter(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

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 (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • on_change_partner_id(self, cr, uid, ids, partner_id)
    Loads some partner data (country and vat) when the selected partner changes.

New fields (0)

No new fields.

Public methods (1)
  • on_change_partner_id(self, cr, uid, ids, partner_id)
    Loads some partner data (country and vat) when the selected partner changes.

New fields (0)

No new fields.

Public methods (3)
  • btn_list_records(self, cr, uid, ids, context=None)
  • button_confirm(self, cr, uid, ids, context=None)
    Different check out in report
  • calculate(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

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/6.1/l10n_es_aeat_mod347
VERSION
VERSION 1.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego, ASR-OSS, Acysos, NaN·tic
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego, ASR-OSS, Acysos, NaN·tic
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Omar (pexego), Alberto Martín, Alejandro Santana, Mikel, dani-ds, Ignacio Ibeas - Acysos S.L., Omar (Pexego), alberto-martin, cubells
WEBSITE
WEBSITEhttp://www.pexego.es, www.asr-oss.com, www.nan-tic.com, www.acysos.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-spain:
    - l10n_es_aeat
odoo/odoo:
    - base_vat
    - 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
    Módulo para la presentación del Modelo AEAT 347 (Declaración Anual de Operaciones con Terceros)

Basado en la Orden EHA/3012/2008, de 20 de Octubre, por el que se aprueban los diseños físicos y lógicos del 347.

De acuerdo con la normativa de la Hacienda Española, están obligados a presentar el modelo 347:
    * Todas aquellas personas físicas o jurídicas que no esten acogidas al regimen
        de módulos en el IRPF, de naturaleza pública o privada que desarrollen
        actividades empresariales o profesionales, siempre y cuando hayan
        realizado operaciones que, en su conjunto, respecto de otra persona
        o Entidad, cualquiera que sea su naturaleza o carácter, hayan superado
        la cifra de 3.005,06€ durante el año natural al que se refiere la
        declaración. Para el cálculo de la cifra de 3.005,06 € se computan de
        forma separada las entregas de biene y servicios y las adquisiciones
        de los mismos.
    * En el caso de Sociedades Irregulares, Sociedades Civiles y Comunidad de Bienes
        no acogidas el regimen de módulos en el IRPF, deben incluir las facturas sin
        incluir la cuantía del IRPF.
    * En el caso de facturas de proveedor con IRPF, no deben ser presentadas en este
        modelo. Se presentan en el modelo 190. Desactivar en la ficha del proveedor
        la opción de "Incluir en el informe 347".

De acuerdo con la normativa no están obligados a presentar el modelo 347:
    * Quienes realicen en España actividades empresariales o profesionales sin
        tener en territorio español la sede de su actividad, un establecimiento
        permanente o su domicilio fiscal.
    * Las personas físicas y entidades en régimen de atribución de rentas en
        el IRPF, por las actividades que tributen en dicho impuesto por el
        régimen de estimación objetiva y, simultáneamente, en el IVA por los
        régimenes especiales simplificados o de la agricultura, ganadería
        y pesca o recargo de equivalencia, salvo las operaciones que estén
        excluidas de la aplicación de los expresados regímenes.
    * Los obligados tributarios que no hayan realizado operaciones que en su
        conjunto superen la cifra de 3.005,06€
    * Los obligados tributarios que hayan realizado exclusivamente operaciones
        no declarables.
    * Los obligados tributarios que deban informar sobre las operaciones
        incluidas en los libros registro de IVA (modelo 340) salvo que realicen
        operaciones que expresamente deban incluirse en el modelo 347.

(http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf)
    

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
view_account_journal_form__add_cash_journal Account journal - Add cash journal (form) account.journal field Inherits account.view_account_journal_form
view_account_period_quarter_form account.period.quarter.form account.period field Inherits account.view_account_period_form
view_account_period_quarter_tree account.period.quarter.tree account.period field Inherits account.view_account_period_tree
view_l10n_es_aeat_mod347_partner_record_form l10n.es.aeat.mod347.partner_record.form l10n.es.aeat.mod347.partner_record form New
view_l10n_es_aeat_mod347_partner_record_tree l10n.es.aeat.mod347.partner_record.tree l10n.es.aeat.mod347.partner_record tree New
view_l10n_es_aeat_mod347_real_state_record_form l10n.es.aeat.mod347.real_state_record.form l10n.es.aeat.mod347.real_state_record form New
view_l10n_es_aeat_mod347_real_state_record_tree l10n.es.aeat.mod347.real_state_record.tree l10n.es.aeat.mod347.real_state_record tree New
view_l10n_es_aeat_mod347_report_form AEAT Model 347 (form) l10n.es.aeat.mod347.report form New
view_l10n_es_aeat_mod347_report_search AEAT Model 347 (search) l10n.es.aeat.mod347.report search New
view_l10n_es_aeat_mod347_report_tree AEAT Model 347 (tree) l10n.es.aeat.mod347.report tree New
view_partner_form_mod347 Partners - Add 'include in 347' res.partner field Inherits base_vat.view_partner_form
Models touched (0)

No models found for this module.