Sistema de comprobación y contraste de facturas enviadas al SII

l10n_es_aeat_sii_match
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_sii_match
VERSION
VERSION 2.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Studio73
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Studio73
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, FernandoRomera
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:09:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat_sii_oca
    - 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
    - l10n_es
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES deepdiff<8
requests
zeep
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
invoice_sii_match_form account.invoice.sii.match.form account.move field Inherits l10n_es_aeat_sii_oca.invoice_sii_form
view_account_invoice_sii_match_filter account.invoice.sii.match.filter account.move xpath Inherits account.view_account_invoice_filter
view_invoice_tree account.invoice.sii.match.list account.move field Inherits account.view_invoice_tree
view_l10n_es_aeat_sii_match_report_filter l10n_es.aeat.sii.match.report.filter l10n.es.aeat.sii.match.report search New
view_l10n_es_aeat_sii_match_report_form l10n_es.aeat.sii.match.report.form l10n.es.aeat.sii.match.report form New
view_l10n_es_aeat_sii_match_report_tree l10n_es.aeat.sii.match.report.list l10n.es.aeat.sii.match.report list New
view_l10n_es_aeat_sii_match_result_filter l10n_es.aeat.sii.match.result.filter l10n.es.aeat.sii.match.result search New
view_l10n_es_aeat_sii_match_result_form l10n_es.aeat.sii.match.result.form l10n.es.aeat.sii.match.result form New
view_l10n_es_aeat_sii_match_result_tree l10n_es.aeat.sii.match.result.list l10n.es.aeat.sii.match.result list New
Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • contrast_aeat(self)

New fields (6)
  • invoice_id Many2oneReference
    index=True model_field='model' readonly=True string='Document'
  • model Char
    default='account.move'
  • report_id Many2one → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' index=True ondelete='cascade' string='Related SII match report'
  • sii_field Char
    copy=False string='SII field name'
  • sii_return_field_value Char
    copy=False string='SII return field value'
  • sii_sent_field_value Char
    copy=False string='SII sent field value'
Public methods (0)

No public methods.

New fields (20)
  • calculate_date Datetime
    string='Calculate date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • fiscalyear Integer
    default=fields.Date.today().year required=True string='Fiscal year'
  • invoice_type Selection
    required=True selection=[('out', 'Out invoice/refund'), ('in', 'In invoice/refund')] string='Invoice type'
  • name Char
    required=True string='Report identifier'
  • number_records Integer
    readonly=True string='Total records'
  • number_records_both Integer
    readonly=True string='Records in Odoo and SII'
  • number_records_contrasted Integer
    readonly=True string='Records contrasted'
  • number_records_correct Integer
    readonly=True string='Records correctly contrasted'
  • number_records_in_process Integer
    readonly=True string='Records in process of contrast'
  • number_records_no_exist Integer
    readonly=True string='Records without contrast'
  • number_records_no_test Integer
    readonly=True string='Records no testables'
  • number_records_not_contrasted Integer
    readonly=True string='Records not contasted'
  • number_records_odoo Integer
    readonly=True string='Records only in Odoo'
  • number_records_partially Integer
    readonly=True string='Records partially correct'
  • number_records_partially_contrasted Integer
    readonly=True string='Records partially contrasted'
  • number_records_sii Integer
    readonly=True string='Records only in SII'
  • period_type Selection
    required=True selection=[('01', '01 - January'), ('02', '02 - February'), ('03', '03 - March'), ('04', '04 - April'), ('05', '05 - May'), ('06', '06 - June'), ('07', '07 - July'), ('08', '08 - August'), ('09', '09 - September'), ('10', '10 - October'), ('11', '11 - November'), ('12', '12 - December')] string='Period type'
  • result_ids One2many → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' inverse_name='report_id' readonly=True string='SII Match Result'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('calculated', 'Calculated'), ('done', 'Done'), ('error', 'Error'), ('cancelled', 'Cancelled')]
Public methods (5)
  • button_calculate(self)
  • button_cancel(self)
  • button_confirm(self)
  • button_recover(self)
  • open_result(self)

New fields (9)
  • csv Char
    string='CSV'
  • invoice Char
  • invoice_id Many2oneReference
    index=True model_field='model' readonly=True required=True string='Document'
  • invoice_location Selection
    copy=False readonly=True selection=[('both', 'Invoice in Odoo and SII'), ('odoo', 'Invoice in Odoo'), ('sii', 'Invoice in SII')] string='Invoice location'
  • model Char
    default='account.move' required=True
  • report_id Many2one → l10n.es.aeat.sii.match.report
    comodel_name='l10n.es.aeat.sii.match.report' ondelete='cascade' string='AEAT SII Match Report ID'
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='report_id' readonly=True string='SII match differences'
  • sii_match_state Selection
    copy=False readonly=True selection='_get_selection_sii_match_state' string='Match state'
Public methods (0)

No public methods.

New fields (5)
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False domain=<expr> inverse_name='invoice_id' readonly=True string='SII match differences'
  • sii_match_return Text
    copy=False readonly=True string='SII match return'
  • sii_match_sent Text
    copy=False readonly=True string='SII match sent'
  • sii_match_state Selection
    copy=False help='- No testable: The counterpart is not subscribed to SII the record will not be contrasted.\n- In process of contrast: AEAT is processing the data soon will be a result.\n- Not contrasted: The counterpart has not sent the invoice to SII, AEAT gives up to 4 months in order to contrast the information.\n- Partially contrasted: A invoice has been found but some data is different.\n- Contrasted: The counterpart has send the invoice to SII, all is OK.' readonly=True selection=[('1', 'No testable'), ('2', 'In process of contrast'), ('3', 'Not contrasted'), ('4', 'Partially contrasted'), ('5', 'Contrasted')] string='Match state'
Public methods (1)
  • contrast_aeat(self)
    Overridable hook for raising any error or filtering out records if needed.
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_sii_match
VERSION
VERSION 1.0.5
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Studio73
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Studio73
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, Ignacio, david-banon-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:59:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat_sii_oca
    - 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
    - l10n_es
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES deepdiff<8
requests
zeep
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
invoice_sii_match_form account.invoice.sii.match.form account.move field Inherits l10n_es_aeat_sii_oca.invoice_sii_form
view_account_invoice_sii_match_filter account.invoice.sii.match.filter account.move xpath Inherits account.view_account_invoice_filter
view_invoice_tree account.invoice.sii.match.tree account.move field Inherits account.view_invoice_tree
view_l10n_es_aeat_sii_match_report_filter l10n_es.aeat.sii.match.report.filter l10n.es.aeat.sii.match.report search New
view_l10n_es_aeat_sii_match_report_form l10n_es.aeat.sii.match.report.form l10n.es.aeat.sii.match.report form New
view_l10n_es_aeat_sii_match_report_tree l10n_es.aeat.sii.match.report.tree l10n.es.aeat.sii.match.report tree New
view_l10n_es_aeat_sii_match_result_filter l10n_es.aeat.sii.match.result.filter l10n.es.aeat.sii.match.result search New
view_l10n_es_aeat_sii_match_result_form l10n_es.aeat.sii.match.result.form l10n.es.aeat.sii.match.result form New
view_l10n_es_aeat_sii_match_result_tree l10n_es.aeat.sii.match.result.tree l10n.es.aeat.sii.match.result tree New
Models touched (4)

New fields (5)
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='invoice_id' readonly=True string='SII match differences'
  • sii_match_return Text
    copy=False readonly=True string='SII match return'
  • sii_match_sent Text
    copy=False readonly=True string='SII match sent'
  • sii_match_state Selection
    copy=False help='- No testable: The counterpart is not subscribed to SII the record will not be contrasted.\n- In process of contrast: AEAT is processing the data soon will be a result.\n- Not contrasted: The counterpart has not sent the invoice to SII, AEAT gives up to 4 months in order to contrast the information.\n- Partially contrasted: A invoice has been found but some data is different.\n- Contrasted: The counterpart has send the invoice to SII, all is OK.' readonly=True selection=[('1', 'No testable'), ('2', 'In process of contrast'), ('3', 'Not contrasted'), ('4', 'Partially contrasted'), ('5', 'Contrasted')] string='Match state'
Public methods (1)
  • contrast_aeat(self)

New fields (5)
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Related invoice'
  • report_id Many2one → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' string='Related SII match report'
  • sii_field Char
    copy=False string='SII field name'
  • sii_return_field_value Char
    copy=False string='SII return field value'
  • sii_sent_field_value Char
    copy=False string='SII sent field value'
Public methods (0)

No public methods.

New fields (20)
  • calculate_date Datetime
    string='Calculate date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • fiscalyear Integer
    default=fields.Date.today().year required=True string='Fiscal year'
  • invoice_type Selection
    required=True selection=[('out', 'Out invoice/refund'), ('in', 'In invoice/refund')] string='Invoice type'
  • name Char
    required=True string='Report identifier'
  • number_records Integer
    readonly=True string='Total records'
  • number_records_both Integer
    readonly=True string='Records in Odoo and SII'
  • number_records_contrasted Integer
    readonly=True string='Records contrasted'
  • number_records_correct Integer
    readonly=True string='Records correctly contrasted'
  • number_records_in_process Integer
    readonly=True string='Records in process of contrast'
  • number_records_no_exist Integer
    readonly=True string='Records without contrast'
  • number_records_no_test Integer
    readonly=True string='Records no testables'
  • number_records_not_contrasted Integer
    readonly=True string='Records not contasted'
  • number_records_odoo Integer
    readonly=True string='Records only in Odoo'
  • number_records_partially Integer
    readonly=True string='Records partially correct'
  • number_records_partially_contrasted Integer
    readonly=True string='Records partially contrasted'
  • number_records_sii Integer
    readonly=True string='Records only in SII'
  • period_type Selection
    required=True selection=[('01', '01 - January'), ('02', '02 - February'), ('03', '03 - March'), ('04', '04 - April'), ('05', '05 - May'), ('06', '06 - June'), ('07', '07 - July'), ('08', '08 - August'), ('09', '09 - September'), ('10', '10 - October'), ('11', '11 - November'), ('12', '12 - December')] string='Period type'
  • sii_match_result One2many → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' inverse_name='report_id' readonly=True string='SII Match Result'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('calculated', 'Calculated'), ('done', 'Done'), ('error', 'Error'), ('cancelled', 'Cancelled')]
Public methods (5)
  • button_calculate(self)
  • button_cancel(self)
  • button_confirm(self)
  • button_recover(self)
  • open_result(self)

New fields (8)
  • csv Char
    string='CSV'
  • invoice Char
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Odoo invoice'
  • invoice_location Selection
    copy=False readonly=True selection=[('both', 'Invoice in Odoo and SII'), ('odoo', 'Invoice in Odoo'), ('sii', 'Invoice in SII')] string='Invoice location'
  • report_id Many2one → l10n.es.aeat.sii.match.report
    comodel_name='l10n.es.aeat.sii.match.report' ondelete='cascade' string='AEAT SII Match Report ID'
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='report_id' readonly=True string='SII match differences'
  • sii_match_state Selection
    copy=False readonly=True selection='_get_selection_sii_match_state' string='Match state'
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_sii_match
VERSION
VERSION 2.0.2
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Studio73
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Studio73
COMMITTERS
COMMITTERSPedro M. Baeza, Jairo Llopis, Weblate, OCA-git-bot, Ethan Hildick, oca-ci, Carlos, Jose Zambudio, extrememicro
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/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat_sii_oca
    - l10n_es_aeat
OCA/queue:
    - queue_job
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
    - l10n_es
    - base_iban
    - base_vat
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES deepdiff<8
unidecode
requests
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
invoice_sii_match_form account.invoice.sii.match.form account.move field Inherits l10n_es_aeat_sii_oca.invoice_sii_form
view_account_invoice_sii_match_filter account.invoice.sii.match.filter account.move xpath Inherits account.view_account_invoice_filter
view_invoice_tree account.invoice.sii.match.tree account.move field Inherits account.view_invoice_tree
view_l10n_es_aeat_sii_match_report_filter l10n_es.aeat.sii.match.report.filter l10n.es.aeat.sii.match.report search New
view_l10n_es_aeat_sii_match_report_form l10n_es.aeat.sii.match.report.form l10n.es.aeat.sii.match.report form New
view_l10n_es_aeat_sii_match_report_tree l10n_es.aeat.sii.match.report.tree l10n.es.aeat.sii.match.report tree New
view_l10n_es_aeat_sii_match_result_filter l10n_es.aeat.sii.match.result.filter l10n.es.aeat.sii.match.result search New
view_l10n_es_aeat_sii_match_result_form l10n_es.aeat.sii.match.result.form l10n.es.aeat.sii.match.result form New
view_l10n_es_aeat_sii_match_result_tree l10n_es.aeat.sii.match.result.tree l10n.es.aeat.sii.match.result tree New
Models touched (4)

New fields (5)
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='invoice_id' readonly=True string='SII match differences'
  • sii_match_return Text
    copy=False readonly=True string='SII match return'
  • sii_match_sent Text
    copy=False readonly=True string='SII match sent'
  • sii_match_state Selection
    copy=False help='- No testable: The counterpart is not suscribed to SII the record will not be contrasted.\n- In process of contrast: AEAT is processing the data soon will be a result.\n- Not contrasted: The counterpart has not sent the invoice to SII, AEAT gives up to 4 months in order to contrast the information.\n- Partially contrasted: A invoice has been found but some data is different.\n- Contrasted: The counterpart has send the invoice to SII, all is OK.' readonly=True selection=[('1', 'No testable'), ('2', 'In process of contrast'), ('3', 'Not contrasted'), ('4', 'Partially contrasted'), ('5', 'Contrasted')] string='Match state'
Public methods (3)
  • contrast_aeat(self)
  • contrast_one_invoice(self)
  • direct_contrast_aeat(self)

New fields (5)
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Related invoice'
  • report_id Many2one → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' string='Related SII match report'
  • sii_field Char
    copy=False string='SII field name'
  • sii_return_field_value Char
    copy=False string='SII return field value'
  • sii_sent_field_value Char
    copy=False string='SII sent field value'
Public methods (0)

No public methods.

New fields (21)
  • calculate_date Datetime
    readonly=True states={'draft': [('readonly', False)]} string='Calculate date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • fiscalyear Integer
    default=fields.Date.today().year readonly=True required=True states={'draft': [('readonly', False)]} string='Fiscal year'
  • invoice_type Selection
    readonly=True required=True selection=[('out', 'Out invoice/refund'), ('in', 'In invoice/refund')] states={'draft': [('readonly', False)]} string='Invoice type'
  • name Char
    required=True string='Report identifier'
  • number_records Integer
    readonly=True string='Total records'
  • number_records_both Integer
    readonly=True string='Records in Odoo and SII'
  • number_records_contrasted Integer
    readonly=True string='Records contrasted'
  • number_records_correct Integer
    readonly=True string='Records correctly contrasted'
  • number_records_in_process Integer
    readonly=True string='Records in process of contrast'
  • number_records_no_exist Integer
    readonly=True string='Records without contrast'
  • number_records_no_test Integer
    readonly=True string='Records no testables'
  • number_records_not_contrasted Integer
    readonly=True string='Records not contasted'
  • number_records_odoo Integer
    readonly=True string='Records only in Odoo'
  • number_records_partially Integer
    readonly=True string='Records partially correct'
  • number_records_partially_contrasted Integer
    readonly=True string='Records partially contrasted'
  • number_records_sii Integer
    readonly=True string='Records only in SII'
  • period_type Selection
    readonly=True required=True selection=[('01', '01 - January'), ('02', '02 - February'), ('03', '03 - March'), ('04', '04 - April'), ('05', '05 - May'), ('06', '06 - June'), ('07', '07 - July'), ('08', '08 - August'), ('09', '09 - September'), ('10', '10 - October'), ('11', '11 - November'), ('12', '12 - December')] states={'draft': [('readonly', False)]} string='Period type'
  • sii_match_jobs_ids Many2many → queue.job
    column1='sii_match_id' column2='job_id' comodel_name='queue.job' copy=False string='Connector Jobs'
  • sii_match_result One2many → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' inverse_name='report_id' readonly=True string='SII Match Result'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('calculated', 'Calculated'), ('done', 'Done'), ('error', 'Error'), ('cancelled', 'Cancelled')]
Public methods (6)
  • button_calculate(self)
  • button_cancel(self)
  • button_confirm(self)
  • button_recover(self)
  • get_invoice_aeat(self)
  • open_result(self)

New fields (8)
  • csv Char
    string='CSV'
  • invoice Char
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Odoo invoice'
  • invoice_location Selection
    copy=False readonly=True selection=[('both', 'Invoice in Odoo and SII'), ('odoo', 'Invoice in Odoo'), ('sii', 'Invoice in SII')] string='Invoice location'
  • report_id Many2one → l10n.es.aeat.sii.match.report
    comodel_name='l10n.es.aeat.sii.match.report' ondelete='cascade' string='AEAT SII Match Report ID'
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='report_id' readonly=True string='SII match differences'
  • sii_match_state Selection
    copy=False readonly=True selection='_get_selection_sii_match_state' string='Match state'
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_sii_match
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Studio73
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Studio73
COMMITTERS
COMMITTERSJairo Llopis, Víctor Martínez, Weblate, OCA-git-bot, oca-ci
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/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat_sii_oca
    - l10n_es_aeat
OCA/queue:
    - queue_job
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
    - l10n_es
    - base_iban
    - base_vat
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES deepdiff<8
zeep
requests
cryptography
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
invoice_sii_match_form account.invoice.sii.match.form account.move field Inherits l10n_es_aeat_sii_oca.invoice_sii_form
view_account_invoice_sii_match_filter account.invoice.sii.match.filter account.move xpath Inherits account.view_account_invoice_filter
view_invoice_tree account.invoice.sii.match.tree account.move field Inherits account.view_invoice_tree
view_l10n_es_aeat_sii_match_report_filter l10n_es.aeat.sii.match.report.filter l10n.es.aeat.sii.match.report search New
view_l10n_es_aeat_sii_match_report_form l10n_es.aeat.sii.match.report.form l10n.es.aeat.sii.match.report form New
view_l10n_es_aeat_sii_match_report_tree l10n_es.aeat.sii.match.report.tree l10n.es.aeat.sii.match.report tree New
view_l10n_es_aeat_sii_match_result_filter l10n_es.aeat.sii.match.result.filter l10n.es.aeat.sii.match.result search New
view_l10n_es_aeat_sii_match_result_form l10n_es.aeat.sii.match.result.form l10n.es.aeat.sii.match.result form New
view_l10n_es_aeat_sii_match_result_tree l10n_es.aeat.sii.match.result.tree l10n.es.aeat.sii.match.result tree New
Models touched (4)

New fields (5)
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='invoice_id' readonly=True string='SII match differences'
  • sii_match_return Text
    copy=False readonly=True string='SII match return'
  • sii_match_sent Text
    copy=False readonly=True string='SII match sent'
  • sii_match_state Selection
    copy=False help='- No testable: The counterpart is not suscribed to SII the record will not be contrasted.\n- In process of contrast: AEAT is processing the data soon will be a result.\n- Not contrasted: The counterpart has not sent the invoice to SII, AEAT gives up to 4 months in order to contrast the information.\n- Partially contrasted: A invoice has been found but some data is different.\n- Contrasted: The counterpart has send the invoice to SII, all is OK.' readonly=True selection=[('1', 'No testable'), ('2', 'In process of contrast'), ('3', 'Not contrasted'), ('4', 'Partially contrasted'), ('5', 'Contrasted')] string='Match state'
Public methods (3)
  • contrast_aeat(self)
  • contrast_one_invoice(self)
  • direct_contrast_aeat(self)

New fields (5)
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Related invoice'
  • report_id Many2one → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' string='Related SII match report'
  • sii_field Char
    copy=False string='SII field name'
  • sii_return_field_value Char
    copy=False string='SII return field value'
  • sii_sent_field_value Char
    copy=False string='SII sent field value'
Public methods (0)

No public methods.

New fields (21)
  • calculate_date Datetime
    readonly=True states={'draft': [('readonly', False)]} string='Calculate date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • fiscalyear Integer
    default=fields.Date.from_string(fields.Date.today()).year readonly=True required=True states={'draft': [('readonly', False)]} string='Fiscal year'
  • invoice_type Selection
    readonly=True required=True selection=[('out', 'Out invoice/refund'), ('in', 'In invoice/refund')] states={'draft': [('readonly', False)]} string='Invoice type'
  • name Char
    required=True string='Report identifier'
  • number_records Integer
    readonly=True string='Total records'
  • number_records_both Integer
    readonly=True string='Records in Odoo and SII'
  • number_records_contrasted Integer
    readonly=True string='Records contrasted'
  • number_records_correct Integer
    readonly=True string='Records correctly contrasted'
  • number_records_in_process Integer
    readonly=True string='Records in process of contrast'
  • number_records_no_exist Integer
    readonly=True string='Records without contrast'
  • number_records_no_test Integer
    readonly=True string='Records no testables'
  • number_records_not_contrasted Integer
    readonly=True string='Records not contasted'
  • number_records_odoo Integer
    readonly=True string='Records only in Odoo'
  • number_records_partially Integer
    readonly=True string='Records partially contrasted'
  • number_records_partially_contrasted Integer
    readonly=True string='Records partially contrasted'
  • number_records_sii Integer
    readonly=True string='Records only in SII'
  • period_type Selection
    readonly=True required=True selection=[('01', '01 - January'), ('02', '02 - February'), ('03', '03 - March'), ('04', '04 - April'), ('05', '05 - May'), ('06', '06 - June'), ('07', '07 - July'), ('08', '08 - August'), ('09', '09 - September'), ('10', '10 - October'), ('11', '11 - November'), ('12', '12 - December')] states={'draft': [('readonly', False)]} string='Period type'
  • sii_match_jobs_ids Many2many → queue.job
    column1='sii_match_id' column2='job_id' comodel_name='queue.job' copy=False string='Connector Jobs'
  • sii_match_result One2many → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' inverse_name='report_id' readonly=True string='SII Match Result'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('calculated', 'Calculated'), ('done', 'Done'), ('error', 'Error'), ('cancelled', 'Cancelled')]
Public methods (6)
  • button_calculate(self)
  • button_cancel(self)
  • button_confirm(self)
  • button_recover(self)
  • get_invoice_aeat(self)
  • open_result(self)

New fields (8)
  • csv Char
    string='CSV'
  • invoice Char
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Odoo invoice'
  • invoice_location Selection
    copy=False readonly=True selection=[('both', 'Invoice in Odoo and SII'), ('odoo', 'Invoice in Odoo'), ('sii', 'Invoice in SII')] string='Invoice location'
  • report_id Many2one → l10n.es.aeat.sii.match.report
    comodel_name='l10n.es.aeat.sii.match.report' ondelete='cascade' string='AEAT SII Match Report ID'
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='report_id' readonly=True string='SII match differences'
  • sii_match_state Selection
    copy=False readonly=True selection='_get_selection_sii_match_state' string='Match state'
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_sii_match
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAccounting & Finance
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Studio73
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Studio73
COMMITTERS
COMMITTERSOCA-git-bot, Ethan Hildick, oca-ci, Carlos
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/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat_sii_oca
    - l10n_es_aeat
OCA/queue:
    - queue_job
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
    - l10n_es
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES deepdiff
pyOpenSSL
requests
zeep
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
invoice_sii_match_form account.invoice.sii.match.form account.move field Inherits l10n_es_aeat_sii_oca.invoice_sii_form
view_account_invoice_sii_match_filter account.invoice.sii.match.filter account.move xpath Inherits account.view_account_invoice_filter
view_invoice_tree account.invoice.sii.match.tree account.move field Inherits account.view_invoice_tree
view_l10n_es_aeat_sii_match_report_filter l10n_es.aeat.sii.match.report.filter l10n.es.aeat.sii.match.report search New
view_l10n_es_aeat_sii_match_report_form l10n_es.aeat.sii.match.report.form l10n.es.aeat.sii.match.report form New
view_l10n_es_aeat_sii_match_report_tree l10n_es.aeat.sii.match.report.tree l10n.es.aeat.sii.match.report tree New
view_l10n_es_aeat_sii_match_result_filter l10n_es.aeat.sii.match.result.filter l10n.es.aeat.sii.match.result search New
view_l10n_es_aeat_sii_match_result_form l10n_es.aeat.sii.match.result.form l10n.es.aeat.sii.match.result form New
view_l10n_es_aeat_sii_match_result_tree l10n_es.aeat.sii.match.result.tree l10n.es.aeat.sii.match.result tree New
Models touched (4)

New fields (5)
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='invoice_id' readonly=True string='SII match differences'
  • sii_match_return Text
    copy=False readonly=True string='SII match return'
  • sii_match_sent Text
    copy=False readonly=True string='SII match sent'
  • sii_match_state Selection
    copy=False help='- No testable: The counterpart is not suscribed to SII the record will not be contrasted.\n- In process of contrast: AEAT is processing the data soon will be a result.\n- Not contrasted: The counterpart has not sent the invoice to SII, AEAT gives up to 4 months in order to contrast the information.\n- Partially contrasted: A invoice has been found but some data is different.\n- Contrasted: The counterpart has send the invoice to SII, all is OK.' readonly=True selection=[('1', 'No testable'), ('2', 'In process of contrast'), ('3', 'Not contrasted'), ('4', 'Partially contrasted'), ('5', 'Contrasted')] string='Match state'
Public methods (3)
  • contrast_aeat(self)
  • contrast_one_invoice(self)
    @job(default_channel='root.invoice_validate_sii')
  • direct_contrast_aeat(self)

New fields (5)
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Related invoice'
  • report_id Many2one → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' string='Related SII match report'
  • sii_field Char
    copy=False string='SII field name'
  • sii_return_field_value Char
    copy=False string='SII return field value'
  • sii_sent_field_value Char
    copy=False string='SII sent field value'
Public methods (0)

No public methods.

New fields (21)
  • calculate_date Datetime
    readonly=True states={'draft': [('readonly', False)]} string='Calculate date'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company_id readonly=True required=True states={'draft': [('readonly', False)]} string='Company'
  • fiscalyear Integer
    default=fields.Date.from_string(fields.Date.today()).year lenght=4 readonly=True required=True states={'draft': [('readonly', False)]} string='Fiscal year'
  • invoice_type Selection
    readonly=True required=True selection=[('out', 'Out invoice/refund'), ('in', 'In invoice/refund')] states={'draft': [('readonly', False)]} string='Invoice type'
  • name Char
    required=True string='Report identifier'
  • number_records Integer
    readonly=True string='Total records'
  • number_records_both Integer
    readonly=True string='Records in Odoo and SII'
  • number_records_contrasted Integer
    readonly=True string='Records contrasted'
  • number_records_correct Integer
    readonly=True string='Records correctly contrasted'
  • number_records_in_process Integer
    readonly=True string='Records in process of contrast'
  • number_records_no_exist Integer
    readonly=True string='Records without contrast'
  • number_records_no_test Integer
    readonly=True string='Records no testables'
  • number_records_not_contrasted Integer
    readonly=True string='Records not contasted'
  • number_records_odoo Integer
    readonly=True string='Records only in Odoo'
  • number_records_partially Integer
    readonly=True string='Records partially contrasted'
  • number_records_partially_contrasted Integer
    readonly=True string='Records partially contrasted'
  • number_records_sii Integer
    readonly=True string='Records only in SII'
  • period_type Selection
    readonly=True required=True selection=[('01', '01 - January'), ('02', '02 - February'), ('03', '03 - March'), ('04', '04 - April'), ('05', '05 - May'), ('06', '06 - June'), ('07', '07 - July'), ('08', '08 - August'), ('09', '09 - September'), ('10', '10 - October'), ('11', '11 - November'), ('12', '12 - December')] states={'draft': [('readonly', False)]} string='Period type'
  • sii_match_jobs_ids Many2many → queue.job
    column1='sii_match_id' column2='job_id' comodel_name='queue.job' copy=False string='Connector Jobs'
  • sii_match_result One2many → l10n.es.aeat.sii.match.result
    comodel_name='l10n.es.aeat.sii.match.result' inverse_name='report_id' readonly=True string='SII Match Result'
  • state Selection
    default='draft' selection=[('draft', 'Draft'), ('calculated', 'Calculated'), ('done', 'Done'), ('error', 'Error'), ('cancelled', 'Cancelled')] string='State'
Public methods (6)
  • button_calculate(self)
  • button_cancel(self)
  • button_confirm(self)
  • button_recover(self)
  • get_invoice_aeat(self)
    @job(default_channel='root.invoice_validate_sii')
  • open_result(self)

New fields (8)
  • csv Char
    string='CSV'
  • invoice Char
    string='Invoice'
  • invoice_id Many2one → account.move
    comodel_name='account.move' string='Odoo invoice'
  • invoice_location Selection
    copy=False readonly=True selection=[('both', 'Invoice in Odoo and SII'), ('odoo', 'Invoice in Odoo'), ('sii', 'Invoice in SII')] string='Invoice location'
  • report_id Many2one → l10n.es.aeat.sii.match.report
    comodel_name='l10n.es.aeat.sii.match.report' ondelete='cascade' string='AEAT SII Match Report ID'
  • sii_contrast_state Selection
    copy=False readonly=True selection=[('correct', 'Correct'), ('no_exist', "Doesn't exist"), ('partially', 'Partially correct')] string='AEAT contrast state'
  • sii_match_difference_ids One2many → l10n.es.aeat.sii.match.difference
    comodel_name='l10n.es.aeat.sii.match.difference' copy=False inverse_name='report_id' readonly=True string='SII match differences'
  • sii_match_state Selection
    copy=False readonly=True selection='_get_selection_sii_match_state' string='Match state'
Public methods (0)

No public methods.