Saudi Arabia - E-invoicing

l10n_sa_edi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/l10n_sa_edi
VERSION
VERSION 0.3
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSOdoo Translation Bot, Josse Colpaert, qdp-odoo, Laurent Smet, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Gorash, william-andre, jbw-odoo, Pedram (PEBR), Maximilien (malb), Mahamadasif Ansari, Gauthier Wala (gawa), Yosua Nicolaus, Dylan Kiss (dyki), khfa, Sarah Bellefroid, sesn-odoo, AMZIL Ayoub, Louis Gobert, Harsh Shah, Mathieu Coutant, Khumam Alzagim, Yousef Alnashef (alny), Claire (clbr), Hammad Arif, Antoine Dupuis, Hesham Saleh, abwa, khsr-odoo, Anton Romanova (roan), Corentin Lombard, AKR, dvsh-odoo, bhra-odoo, Earth Patel, Ayush Modi, Jacob Was (jacw), khom-odoo, Omar Khalid, Nesma Harraz (neha), MohsinAli Masi, matd-odoo, Adnan Sabbir, yush-odoo, Farah (ahmfa), Ahmad Khater, amml
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_edi_ubl_cii
    - l10n_sa
    - l10n_gcc_invoice
    - account_debit_note
    - base_vat
    - certificate
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-invoice implementation for Saudi Arabia; Integration with ZATCA
    

Code Analysis

Views touched (18)
XML IDNameModelTypeStatus
export_sa_zatca_ubl_extensions export_sa_zatca_ubl_extensions ir.ui.view qweb New
export_sa_zatca_ubl_signed_properties export_sa_zatca_ubl_signed_properties ir.ui.view qweb New
l10n_sa_edi_external_layout_bold l10n_sa_edi_external_layout_bold ir.ui.view qweb Inherits web.external_layout_bold
l10n_sa_edi_external_layout_boxed l10n_sa_edi_external_layout_boxed ir.ui.view qweb Inherits web.external_layout_boxed
l10n_sa_edi_external_layout_bubble l10n_sa_edi_external_layout_bubble ir.ui.view qweb Inherits web.external_layout_bubble
l10n_sa_edi_external_layout_folder l10n_sa_edi_external_layout_folder ir.ui.view qweb Inherits web.external_layout_folder
l10n_sa_edi_external_layout_standard l10n_sa_edi_external_layout_standard ir.ui.view qweb Inherits web.external_layout_standard
l10n_sa_edi_external_layout_striped l10n_sa_edi_external_layout_striped ir.ui.view qweb Inherits web.external_layout_striped
l10n_sa_edi_external_layout_wave l10n_sa_edi_external_layout_wave ir.ui.view qweb Inherits web.external_layout_wave
l10n_sa_edi_otp_wizard_view_form l10n_sa_edi.otp.wizard.form l10n_sa_edi.otp.wizard form New
l10n_sa_edi_report_invoice_document l10n_sa_edi_report_invoice_document ir.ui.view qweb Inherits l10n_sa.l10n_sa_report_invoice_document
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_sa_edi res.config.settings xpath Inherits account.res_config_settings_view_form
sa_partner_address_form sa.partner.form.address res.partner form New
view_account_form_inherit account.move.form.inherit account.move xpath Inherits account.view_move_form
view_account_journal_form account.journal.form.l10n_sa_edi account.journal xpath Inherits account.view_account_journal_form
view_company_form res.company.l10n_sa_edi.form res.company xpath Inherits base.view_company_form
view_partner_form res.partner.l10n_sa_edi.form res.partner xpath Inherits base.view_partner_form
view_tax_form account.tax.form.zatca account.tax xpath Inherits account.view_tax_form
Models touched (15)

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

No public methods.

New fields (10)
  • l10n_sa_chain_sequence_id Many2one → ir.sequence
    copy=False readonly=True string='ZATCA account.move chain sequence' args: 'ir.sequence'
  • l10n_sa_compliance_checks_passed Boolean
    copy=False default=False help='Specifies if the Compliance Checks have been completed successfully' args: 'Compliance Checks Done'
  • l10n_sa_compliance_csid_certificate_id Many2one → certificate.certificate
    comodel_name='certificate.certificate' domain=[('is_valid', '=', True)] string='CCSID certificate'
  • l10n_sa_compliance_csid_json Char
    copy=False groups='base.group_system' help='Compliance CSID data received from the Compliance CSID API in dumped json format' args: 'CCSID JSON'
  • l10n_sa_csr Binary
    attachment=True copy=False groups='base.group_system' help='The Certificate Signing Request that is submitted to the Compliance API'
  • l10n_sa_csr_errors Html
    copy=False args: 'Onboarding Errors'
  • l10n_sa_latest_submission_hash Char
    copy=False help='Hash of the latest submitted invoice to be used as the Previous Invoice Hash (KSA-13)' args: 'Latest Submission Hash'
  • l10n_sa_production_csid_certificate_id Many2one → certificate.certificate
    comodel_name='certificate.certificate' domain=[('is_valid', '=', True)] string='PCSID Certificate'
  • l10n_sa_production_csid_json Char
    copy=False groups='base.group_system' help='Production CSID data received from the Production CSID API in dumped json format' args: 'PCSID JSON'
  • l10n_sa_production_csid_validity Datetime
    related='l10n_sa_production_csid_certificate_id.date_end'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_chain_index Integer
    copy=False help='Invoice index in chain, set if and only if an in-chain XML was submitted and did not error' readonly=True string='ZATCA chain index'
  • l10n_sa_edi_chain_head_id Many2one → account.move
    copy=False help='Technical field to know if the chain has been stopped by a previous invoice' readonly=True string='ZATCA chain stopping move' args: 'account.move'
  • l10n_sa_invoice_signature Char
    copy=False args: 'Unsigned XML Signature'
  • l10n_sa_uuid Char
    copy=False help='Universally unique identifier of the Invoice' string='Document UUID (SA)'
Public methods (2)
  • action_show_chain_head(self)
    Action to show the chain head of the invoice
  • button_draft(self)

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 (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (1)
  • onchange_amount(self)
    @api.onchange('amount')

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 (3)
  • journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal'
  • l10n_sa_otp Char
    copy=False help='OTP required to get a CCSID. Can only be acquired through the Fatoora portal.' args: 'OTP'
  • l10n_sa_renewal Boolean
    default=False help='Used to decide whether we should call the PCSID renewal API or the CCSID API' args: 'PCSID Renewal'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate(self)

New fields (7)
  • l10n_sa_api_mode Selection
    copy=False default='sandbox' help='Specifies which API the system should use' required=True args: [('sandbox', 'Sandbox'), ('preprod', 'Simulation (Pre-Production)'), ('prod', 'Production')]
  • l10n_sa_edi_additional_identification_number Char
    readonly=False related='partner_id.l10n_sa_edi_additional_identification_number'
  • l10n_sa_edi_additional_identification_scheme Selection
    readonly=False related='partner_id.l10n_sa_edi_additional_identification_scheme'
  • l10n_sa_edi_building_number Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_building_number'
  • l10n_sa_edi_is_production Boolean
    copy=False string='Is Production'
  • l10n_sa_edi_plot_identification Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_plot_identification'
  • l10n_sa_private_key_id Many2one → certificate.key
    comodel_name='certificate.key' copy=False domain=[('public', '=', False)] help='The private key used to generate the CSR and obtain certificates' string='ZATCA Private key'
Public methods (1)
  • write(self, vals)

New fields (1)
  • l10n_sa_api_mode Selection
    readonly=False related='company_id.l10n_sa_api_mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_edi_additional_identification_number Char
    help='Additional Identification Number for the Seller/Buyer' args: 'Identification Number (SA)'
  • l10n_sa_edi_additional_identification_scheme Selection
    default='OTH' help='Additional Identification Scheme for the Seller/Buyer' string='Identification Scheme' args: [('TIN', 'Tax Identification Number'), ('CRN', 'Commercial Registration Number'), ('MOM', 'Momra License'), ('MLS', 'MLSD License'), ('700', '700 Number'), ('SAG', 'Sagia License'), ('NAT', 'National ID'), ('GCC', 'GCC ID'), ('IQA', 'Iqama Number'), ('PAS', 'Passport ID'), ('OTH', 'Other ID')]
  • l10n_sa_edi_building_number Char
    args: 'Building Number'
  • l10n_sa_edi_plot_identification Char
    args: 'Plot Identification'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_sa_edi
VERSION
VERSION 0.3
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Josse Colpaert, Xavier Morel, Yannick Tivisse, Laurent Smet, Christophe Monniez, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Tiffany Chang (tic), odoo, Florian(flg), Vincent Larcin, Louis Wicket (wil), Maximilien (malb), Mahamadasif Ansari, Gauthier Wala (gawa), Pieter Claeys (clpi), Yosua Nicolaus, Dylan Kiss (dyki), hupo-odoo, khfa, Sarah Bellefroid, sesn-odoo, guva-odoo, yosa-odoo, kcv-odoo, mega, Mehdi (mebe), mebe-odoo, Louis Gobert, Louis (wil), mano-odoo, Harsh Shah, Yousef Alnashef (alny), Claire (clbr), Hammad Arif, Antoine Dupuis, Hesham Saleh, abwa, Corentin Lombard, nape-odoo, dvsh-odoo, bhra-odoo, Ayush Modi, Jacob Was (jacw), khom-odoo, Omar Khalid, Nesma Harraz (neha), MohsinAli Masi, Megaaaaaa, yush-odoo, Farah (ahmfa), Ahmad Khater
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_edi_ubl_cii
    - account_debit_note
    - l10n_sa
    - l10n_gcc_invoice
    - base_vat
    - certificate
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-invoice implementation for Saudi Arabia; Integration with ZATCA
    

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
arabic_english_invoice arabic_english_invoice ir.ui.view qweb Inherits l10n_sa.arabic_english_invoice
export_sa_zatca_ubl_extensions export_sa_zatca_ubl_extensions ir.ui.view qweb New
export_sa_zatca_ubl_signed_properties export_sa_zatca_ubl_signed_properties ir.ui.view qweb New
l10n_sa_edi_otp_wizard_view_form l10n_sa_edi.otp.wizard.form l10n_sa_edi.otp.wizard form New
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_sa_edi res.config.settings xpath Inherits account.res_config_settings_view_form
sa_partner_address_form sa.partner.form.address res.partner form New
ubl_21_AddressType_zatca ubl_21_AddressType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_AddressType
ubl_21_CreditNoteLineType_zatca ubl_21_CreditNoteLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_CreditNoteLineType
ubl_21_CreditNoteType_zatca ubl_21_CreditNoteType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_CreditNoteType
ubl_21_DebitNoteLineType_zatca ubl_21_DebitNoteLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_DebitNoteLineType
ubl_21_DebitNoteType_zatca ubl_21_DebitNoteType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_DebitNoteType
ubl_21_InvoiceLineType_zatca ubl_21_InvoiceLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_21_InvoiceType_zatca ubl_21_InvoiceType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
ubl_21_PartyType_zatca ubl_21_PartyType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PartyType
ubl_21_PaymentMeansType_zatca ubl_21_PaymentMeansType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PaymentMeansType
ubl_21_TaxTotalType_zatca ubl_21_TaxTotalType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_TaxTotalType
view_account_journal_form account.journal.form.l10n_sa_edi account.journal xpath Inherits account.view_account_journal_form
view_account_move_reversal_inherit_l10n_sa_edi account.move.reversal.form.inherit.l10n_sa_edi account.move.reversal field Inherits account.view_account_move_reversal
view_company_form res.company.l10n_sa_edi.form res.company xpath Inherits base.view_company_form
view_partner_form res.partner.l10n_sa_edi.form res.partner xpath Inherits base.view_partner_form
view_tax_form account.tax.form.zatca account.tax xpath Inherits account.view_tax_form
Models touched (17)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_debit(self)

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 (11)
  • l10n_sa_chain_sequence_id Many2one → ir.sequence
    copy=False readonly=True string='ZATCA account.move chain sequence' args: 'ir.sequence'
  • l10n_sa_compliance_checks_passed Boolean
    copy=False default=False help='Specifies if the Compliance Checks have been completed successfully' args: 'Compliance Checks Done'
  • l10n_sa_compliance_csid_certificate_id Many2one → certificate.certificate
    comodel_name='certificate.certificate' domain=[('is_valid', '=', True)] string='CCSID certificate'
  • l10n_sa_compliance_csid_json Char
    copy=False groups='base.group_system' help='Compliance CSID data received from the Compliance CSID API in dumped json format' args: 'CCSID JSON'
  • l10n_sa_csr Binary
    attachment=True copy=False groups='base.group_system' help='The Certificate Signing Request that is submitted to the Compliance API'
  • l10n_sa_csr_errors Html
    copy=False args: 'Onboarding Errors'
  • l10n_sa_latest_submission_hash Char
    copy=False help='Hash of the latest submitted invoice to be used as the Previous Invoice Hash (KSA-13)' args: 'Latest Submission Hash'
  • l10n_sa_production_csid_certificate_id Many2one → certificate.certificate
    comodel_name='certificate.certificate' domain=[('is_valid', '=', True)] string='PCSID Certificate'
  • l10n_sa_production_csid_json Char
    copy=False groups='base.group_system' help='Production CSID data received from the Production CSID API in dumped json format' args: 'PCSID JSON'
  • l10n_sa_production_csid_validity Datetime
    related='l10n_sa_production_csid_certificate_id.date_end'
  • l10n_sa_serial_number Char
    copy=False help='Unique Serial Number automatically filled when the journal is onboarded' args: 'Serial Number'
Public methods (0)

No public methods.

New fields (3)
  • l10n_sa_chain_index Integer
    copy=False help='Invoice index in chain, set if and only if an in-chain XML was submitted and did not error' readonly=True string='ZATCA chain index'
  • l10n_sa_invoice_signature Char
    copy=False args: 'Unsigned XML Signature'
  • l10n_sa_uuid Char
    copy=False help='Universally unique identifier of the Invoice' string='Document UUID (SA)'
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)
  • reverse_moves(self, is_modify=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (1)
  • onchange_amount(self)
    @api.onchange('amount')

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 (3)
  • journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal'
  • l10n_sa_otp Char
    copy=False help='OTP required to get a CCSID. Can only be acquired through the Fatoora portal.' args: 'OTP'
  • l10n_sa_renewal Boolean
    default=False help='Used to decide whether we should call the PCSID renewal API or the CCSID API' args: 'PCSID Renewal'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate(self)

New fields (6)
  • l10n_sa_additional_identification_number Char
    readonly=False related='partner_id.l10n_sa_additional_identification_number'
  • l10n_sa_additional_identification_scheme Selection
    readonly=False related='partner_id.l10n_sa_additional_identification_scheme'
  • l10n_sa_api_mode Selection
    copy=False default='sandbox' help='Specifies which API the system should use' required=True args: [('sandbox', 'Sandbox'), ('preprod', 'Simulation (Pre-Production)'), ('prod', 'Production')]
  • l10n_sa_edi_building_number Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_building_number'
  • l10n_sa_edi_plot_identification Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_plot_identification'
  • l10n_sa_private_key_id Many2one → certificate.key
    comodel_name='certificate.key' copy=False domain=[('public', '=', False)] help='The private key used to generate the CSR and obtain certificates' string='ZATCA Private key'
Public methods (1)
  • write(self, vals)

New fields (1)
  • l10n_sa_api_mode Selection
    readonly=False related='company_id.l10n_sa_api_mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_additional_identification_number Char
    help='Additional Identification Number for Seller/Buyer' args: 'Identification Number (SA)'
  • l10n_sa_additional_identification_scheme Selection
    default='OTH' help='Additional Identification scheme for Seller/Buyer' string='Identification Scheme' args: [('TIN', 'Tax Identification Number'), ('CRN', 'Commercial Registration Number'), ('MOM', 'Momra License'), ('MLS', 'MLSD License'), ('700', '700 Number'), ('SAG', 'Sagia License'), ('NAT', 'National ID'), ('GCC', 'GCC ID'), ('IQA', 'Iqama Number'), ('PAS', 'Passport ID'), ('OTH', 'Other ID')]
  • l10n_sa_edi_building_number Char
    args: 'Building Number'
  • l10n_sa_edi_plot_identification Char
    args: 'Plot Identification'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/l10n_sa_edi
VERSION
VERSION 0.3
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Josse Colpaert, Xavier Morel, qdp-odoo, Laurent Smet, Moens Alexandre, Xavier-Do, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Brice bib Bartoletti, Nasreddin Boulif (bon), Gorash, Julien Van Roy, aliya, Florian(flg), Maximilien (malb), Mahamadasif Ansari, Gauthier Wala (gawa), Claire Bretton (clbr), Yosua Nicolaus, Dylan Kiss (dyki), hupo-odoo, khfa, Mehdi Bendali Hacine, Sarah Bellefroid, sesn-odoo, guva-odoo, yosa-odoo, Julien Carion (juca), mega, Mehdi (mebe), mebe-odoo, Louis Gobert, Yousef Alnashef (alny), Claire (clbr), Hammad Arif, abwa, Corentin Lombard, AKR, nape-odoo, dvsh-odoo, Jacob Was (jacw), khom-odoo, Omar Khalid, Nesma Harraz (neha), MohsinAli Masi
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_edi_ubl_cii
    - account_debit_note
    - l10n_sa
    - l10n_gcc_invoice
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-invoice implementation for Saudi Arabia; Integration with ZATCA
    

Code Analysis

Views touched (22)
XML IDNameModelTypeStatus
account_move_send_form account.move.send.form account.move.send xpath Inherits account.account_move_send_form
arabic_english_invoice arabic_english_invoice ir.ui.view qweb Inherits l10n_sa.arabic_english_invoice
export_sa_zatca_ubl_extensions export_sa_zatca_ubl_extensions ir.ui.view qweb New
export_sa_zatca_ubl_signed_properties export_sa_zatca_ubl_signed_properties ir.ui.view qweb New
l10n_sa_edi_otp_wizard_view_form l10n_sa_edi.otp.wizard.form l10n_sa_edi.otp.wizard form New
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_sa_edi res.config.settings xpath Inherits account.res_config_settings_view_form
sa_partner_address_form sa.partner.form.address res.partner form New
ubl_21_AddressType_zatca ubl_21_AddressType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_AddressType
ubl_21_CreditNoteLineType_zatca ubl_21_CreditNoteLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_CreditNoteLineType
ubl_21_CreditNoteType_zatca ubl_21_CreditNoteType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_CreditNoteType
ubl_21_DebitNoteLineType_zatca ubl_21_DebitNoteLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_DebitNoteLineType
ubl_21_DebitNoteType_zatca ubl_21_DebitNoteType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_DebitNoteType
ubl_21_InvoiceLineType_zatca ubl_21_InvoiceLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_21_InvoiceType_zatca ubl_21_InvoiceType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
ubl_21_PartyType_zatca ubl_21_PartyType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PartyType
ubl_21_PaymentMeansType_zatca ubl_21_PaymentMeansType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PaymentMeansType
ubl_21_TaxTotalType_zatca ubl_21_TaxTotalType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_TaxTotalType
view_account_journal_form account.journal.form.l10n_sa_edi account.journal xpath Inherits account.view_account_journal_form
view_account_move_reversal_inherit_l10n_sa_edi account.move.reversal.form.inherit.l10n_sa_edi account.move.reversal field Inherits account.view_account_move_reversal
view_company_form res.company.l10n_sa_edi.form res.company xpath Inherits base.view_company_form
view_partner_form res.partner.l10n_sa_edi.form res.partner xpath Inherits base.view_partner_form
view_tax_form account.tax.form.zatca account.tax xpath Inherits account.view_tax_form
Models touched (16)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • create_debit(self)

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 (9)
  • l10n_sa_chain_sequence_id Many2one → ir.sequence
    copy=False readonly=True string='ZATCA account.move chain sequence' args: 'ir.sequence'
  • l10n_sa_compliance_checks_passed Boolean
    copy=False default=False help='Specifies if the Compliance Checks have been completed successfully' args: 'Compliance Checks Done'
  • l10n_sa_compliance_csid_json Char
    copy=False groups='base.group_system' help='Compliance CSID data received from the Compliance CSID API in dumped json format' args: 'CCSID JSON'
  • l10n_sa_csr Binary
    attachment=True copy=False groups='base.group_system' help='The Certificate Signing Request that is submitted to the Compliance API'
  • l10n_sa_csr_errors Html
    copy=False args: 'Onboarding Errors'
  • l10n_sa_latest_submission_hash Char
    copy=False help='Hash of the latest submitted invoice to be used as the Previous Invoice Hash (KSA-13)' args: 'Latest Submission Hash'
  • l10n_sa_production_csid_json Char
    copy=False groups='base.group_system' help='Production CSID data received from the Production CSID API in dumped json format' args: 'PCSID JSON'
  • l10n_sa_production_csid_validity Datetime
    compute='_l10n_sa_compute_production_csid_validity' help='Production CSID expiration date' store=True args: 'PCSID Expiration'
  • l10n_sa_serial_number Char
    copy=False help='Unique Serial Number automatically filled when the journal is onboarded' args: 'Serial Number'
Public methods (0)

No public methods.

New fields (3)
  • l10n_sa_chain_index Integer
    copy=False help='Invoice index in chain, set if and only if an in-chain XML was submitted and did not error' readonly=True string='ZATCA chain index'
  • l10n_sa_invoice_signature Char
    copy=False args: 'Unsigned XML Signature'
  • l10n_sa_uuid Char
    copy=False help='Universally unique identifier of the Invoice' string='Document UUID (SA)'
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)
  • reverse_moves(self, is_modify=False)

New fields (1)
  • l10n_sa_edi_enable_zatca Boolean
    compute='_compute_l10n_sa_edi_enable_zatca' string='ZATCA'
Public methods (0)

No public methods.

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (1)
  • onchange_amount(self)
    @api.onchange('amount')

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal'
  • l10n_sa_otp Char
    copy=False help='OTP required to get a CCSID. Can only be acquired through the Fatoora portal.' args: 'OTP'
  • l10n_sa_renewal Boolean
    default=False help='Used to decide whether we should call the PCSID renewal API or the CCSID API' args: 'PCSID Renewal'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate(self)

New fields (6)
  • l10n_sa_additional_identification_number Char
    readonly=False related='partner_id.l10n_sa_additional_identification_number'
  • l10n_sa_additional_identification_scheme Selection
    readonly=False related='partner_id.l10n_sa_additional_identification_scheme'
  • l10n_sa_api_mode Selection
    copy=False default='sandbox' help='Specifies which API the system should use' required=True args: [('sandbox', 'Sandbox'), ('preprod', 'Simulation (Pre-Production)'), ('prod', 'Production')]
  • l10n_sa_edi_building_number Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_building_number'
  • l10n_sa_edi_plot_identification Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_plot_identification'
  • l10n_sa_private_key Binary
    attachment=False copy=False groups='base.group_system' help='The private key used to generate the CSR and obtain certificates' args: 'ZATCA Private key'
Public methods (1)
  • write(self, vals)

New fields (1)
  • l10n_sa_api_mode Selection
    readonly=False related='company_id.l10n_sa_api_mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_additional_identification_number Char
    help='Additional Identification Number for Seller/Buyer' args: 'Identification Number (SA)'
  • l10n_sa_additional_identification_scheme Selection
    default='OTH' help='Additional Identification scheme for Seller/Buyer' string='Identification Scheme' args: [('TIN', 'Tax Identification Number'), ('CRN', 'Commercial Registration Number'), ('MOM', 'Momra License'), ('MLS', 'MLSD License'), ('700', '700 Number'), ('SAG', 'Sagia License'), ('NAT', 'National ID'), ('GCC', 'GCC ID'), ('IQA', 'Iqama Number'), ('PAS', 'Passport ID'), ('OTH', 'Other ID')]
  • l10n_sa_edi_building_number Char
    args: 'Building Number'
  • l10n_sa_edi_plot_identification Char
    args: 'Plot Identification'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/l10n_sa_edi
VERSION
VERSION 0.2
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSJosse Colpaert, Moens Alexandre, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Nasreddin Boulif (bon), Julien Van Roy, Florian(flg), mehjabinfarsana, Maximilien (malb), Mahamadasif Ansari, khfa, Mehdi Bendali Hacine, sesn-odoo, yosa-odoo, mega, Mehdi (mebe), mebe-odoo, Louis Gobert, Yousef Alnashef (alny), Claire (clbr), Hammad Arif, abwa, Khaled Said, AKR
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:52
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi_ubl_cii
    - account_edi
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_debit_note
    - l10n_sa
    - l10n_multilang
    - l10n_gcc_invoice
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-invoice implementation for Saudi Arabia; Integration with ZATCA
    

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
arabic_english_invoice arabic_english_invoice ir.ui.view qweb Inherits l10n_sa.arabic_english_invoice
export_sa_zatca_ubl_extensions export_sa_zatca_ubl_extensions ir.ui.view qweb New
export_sa_zatca_ubl_signed_properties export_sa_zatca_ubl_signed_properties ir.ui.view qweb New
l10n_sa_edi_otp_wizard_view_form l10n_sa_edi.otp.wizard.form l10n_sa_edi.otp.wizard form New
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_sa_edi res.config.settings xpath Inherits account.res_config_settings_view_form
sa_partner_address_form sa.partner.form.address res.partner form New
ubl_21_AddressType_zatca ubl_21_AddressType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_AddressType
ubl_21_InvoiceLineType_zatca ubl_21_InvoiceLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_21_InvoiceType_zatca ubl_21_InvoiceType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
ubl_21_PartyType_zatca ubl_21_PartyType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PartyType
ubl_21_PaymentMeansType_zatca ubl_21_PaymentMeansType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PaymentMeansType
ubl_21_TaxTotalType_zatca ubl_21_TaxTotalType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_TaxTotalType
view_account_journal_form account.journal.form.l10n_sa_edi account.journal xpath Inherits account.view_account_journal_form
view_account_move_reversal_inherit_l10n_sa_edi account.move.reversal.form.inherit.l10n_sa_edi account.move.reversal field Inherits account.view_account_move_reversal
view_company_form res.company.l10n_sa_edi.form res.company xpath Inherits base.view_company_form
view_partner_form res.partner.l10n_sa_edi.form res.partner field Inherits base.view_partner_form
view_tax_form account.tax.form.zatca account.tax xpath Inherits account.view_tax_form
Models touched (15)

New fields (0)

No new fields.

Public methods (1)
  • create_debit(self)

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 (9)
  • l10n_sa_chain_sequence_id Many2one → ir.sequence
    copy=False readonly=True string='ZATCA account.move chain sequence' args: 'ir.sequence'
  • l10n_sa_compliance_checks_passed Boolean
    copy=False default=False help='Specifies if the Compliance Checks have been completed successfully' args: 'Compliance Checks Done'
  • l10n_sa_compliance_csid_json Char
    copy=False groups='base.group_system' help='Compliance CSID data received from the Compliance CSID API in dumped json format' args: 'CCSID JSON'
  • l10n_sa_csr Binary
    attachment=True copy=False groups='base.group_system' help='The Certificate Signing Request that is submitted to the Compliance API'
  • l10n_sa_csr_errors Html
    copy=False args: 'Onboarding Errors'
  • l10n_sa_latest_submission_hash Char
    copy=False help='Hash of the latest submitted invoice to be used as the Previous Invoice Hash (KSA-13)' args: 'Latest Submission Hash'
  • l10n_sa_production_csid_json Char
    copy=False groups='base.group_system' help='Production CSID data received from the Production CSID API in dumped json format' args: 'PCSID JSON'
  • l10n_sa_production_csid_validity Datetime
    compute='_l10n_sa_compute_production_csid_validity' help='Production CSID expiration date' store=True args: 'PCSID Expiration'
  • l10n_sa_serial_number Char
    copy=False help='Unique Serial Number automatically filled when the journal is onboarded' args: 'Serial Number'
Public methods (0)

No public methods.

New fields (3)
  • l10n_sa_chain_index Integer
    copy=False help='Invoice index in chain, set if and only if an in-chain XML was submitted and did not error' readonly=True string='ZATCA chain index'
  • l10n_sa_invoice_signature Char
    copy=False args: 'Unsigned XML Signature'
  • l10n_sa_uuid Char
    copy=False help='Universally unique identifier of the Invoice' string='Document UUID (SA)'
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)
  • reverse_moves(self)

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (1)
  • onchange_amount(self)
    @api.onchange('amount')

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal'
  • l10n_sa_otp Char
    copy=False help='OTP required to get a CCSID. Can only be acquired through the Fatoora portal.' args: 'OTP'
  • l10n_sa_renewal Boolean
    default=False help='Used to decide whether we should call the PCSID renewal API or the CCSID API' args: 'PCSID Renewal'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate(self)

New fields (6)
  • l10n_sa_additional_identification_number Char
    readonly=False related='partner_id.l10n_sa_additional_identification_number'
  • l10n_sa_additional_identification_scheme Selection
    readonly=False related='partner_id.l10n_sa_additional_identification_scheme'
  • l10n_sa_api_mode Selection
    copy=False default='sandbox' help='Specifies which API the system should use' required=True args: [('sandbox', 'Sandbox'), ('preprod', 'Simulation (Pre-Production)'), ('prod', 'Production')]
  • l10n_sa_edi_building_number Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_building_number'
  • l10n_sa_edi_plot_identification Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_plot_identification'
  • l10n_sa_private_key Binary
    attachment=False copy=False groups='base.group_system' help='The private key used to generate the CSR and obtain certificates' args: 'ZATCA Private key'
Public methods (1)
  • write(self, vals)

New fields (1)
  • l10n_sa_api_mode Selection
    readonly=False related='company_id.l10n_sa_api_mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_additional_identification_number Char
    help='Additional Identification Number for Seller/Buyer' args: 'Identification Number (SA)'
  • l10n_sa_additional_identification_scheme Selection
    default='OTH' help='Additional Identification scheme for Seller/Buyer' string='Identification Scheme' args: [('TIN', 'Tax Identification Number'), ('CRN', 'Commercial Registration Number'), ('MOM', 'Momra License'), ('MLS', 'MLSD License'), ('700', '700 Number'), ('SAG', 'Sagia License'), ('NAT', 'National ID'), ('GCC', 'GCC ID'), ('IQA', 'Iqama Number'), ('PAS', 'Passport ID'), ('OTH', 'Other ID')]
  • l10n_sa_edi_building_number Char
    args: 'Building Number'
  • l10n_sa_edi_plot_identification Char
    args: 'Plot Identification'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/l10n_sa_edi
VERSION
VERSION 0.1
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo
MAINTAINERS
MAINTAINERSOdoo
COMMITTERS
COMMITTERSJosse Colpaert, Andrea Grazioso (agr-odoo), Anh Thao Pham (pta), Nasreddin Boulif (bon), mehjabinfarsana, akr, khfa, Mehdi Bendali Hacine, sesn-odoo, yosa-odoo, mega, Mehdi (mebe), mebe-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account_edi_ubl_cii
    - account_edi
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_debit_note
    - l10n_sa_invoice
    - l10n_sa
    - l10n_multilang
    - l10n_gcc_invoice
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        E-invoice implementation for the Kingdom of Saudi Arabia
    

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
arabic_english_invoice arabic_english_invoice ir.ui.view qweb Inherits l10n_sa_invoice.arabic_english_invoice
export_sa_zatca_ubl_extensions export_sa_zatca_ubl_extensions ir.ui.view qweb New
export_sa_zatca_ubl_signed_properties export_sa_zatca_ubl_signed_properties ir.ui.view qweb New
l10n_sa_edi_otp_wizard_view_form l10n_sa_edi.otp.wizard.form l10n_sa_edi.otp.wizard form New
res_config_settings_view_form res.config.settings.view.form.inherit.l10n_sa_edi res.config.settings xpath Inherits account.res_config_settings_view_form
sa_partner_address_form sa.partner.form.address res.partner form New
ubl_21_AddressType_zatca ubl_21_AddressType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_AddressType
ubl_21_InvoiceLineType_zatca ubl_21_InvoiceLineType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_InvoiceLineType
ubl_21_InvoiceType_zatca ubl_21_InvoiceType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_21_InvoiceType
ubl_21_PartyType_zatca ubl_21_PartyType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PartyType
ubl_21_PaymentMeansType_zatca ubl_21_PaymentMeansType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_PaymentMeansType
ubl_21_TaxTotalType_zatca ubl_21_TaxTotalType_zatca ir.ui.view qweb Inherits account_edi_ubl_cii.ubl_20_TaxTotalType
view_account_journal_form account.journal.form.l10n_sa_edi account.journal xpath Inherits account.view_account_journal_form
view_account_move_reversal_inherit_l10n_sa_edi account.move.reversal.form.inherit.l10n_sa_edi account.move.reversal field Inherits account.view_account_move_reversal
view_company_form res.company.l10n_sa_edi.form res.company xpath Inherits base.view_company_form
view_partner_form res.partner.l10n_sa_edi.form res.partner field Inherits base.view_partner_form
view_tax_form account.tax.form.zatca account.tax xpath Inherits account.view_tax_form
Models touched (14)

New fields (0)

No new fields.

Public methods (1)
  • create_debit(self)

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 (9)
  • l10n_sa_chain_sequence_id Many2one → ir.sequence
    copy=False readonly=True string='ZATCA account.move chain sequence' args: 'ir.sequence'
  • l10n_sa_compliance_checks_passed Boolean
    copy=False default=False help='Specifies if the Compliance Checks have been completed successfully' args: 'Compliance Checks Done'
  • l10n_sa_compliance_csid_json Char
    copy=False groups='base.group_system' help='Compliance CSID data received from the Compliance CSID API in dumped json format' args: 'CCSID JSON'
  • l10n_sa_csr Binary
    attachment=True copy=False groups='base.group_system' help='The Certificate Signing Request that is submitted to the Compliance API'
  • l10n_sa_csr_errors Html
    copy=False args: 'Onboarding Errors'
  • l10n_sa_latest_submission_hash Char
    copy=False help='Hash of the latest submitted invoice to be used as the Previous Invoice Hash (KSA-13)' args: 'Latest Submission Hash'
  • l10n_sa_production_csid_json Char
    copy=False groups='base.group_system' help='Production CSID data received from the Production CSID API in dumped json format' args: 'PCSID JSON'
  • l10n_sa_production_csid_validity Datetime
    compute='_l10n_sa_compute_production_csid_validity' help='Production CSID expiration date' store=True args: 'PCSID Expiration'
  • l10n_sa_serial_number Char
    copy=False help='The serial number of the Taxpayer solution unit. Provided by ZATCA' args: 'Serial Number'
Public methods (0)

No public methods.

New fields (3)
  • l10n_sa_chain_index Integer
    copy=False help='Invoice index in chain, set if and only if an in-chain XML was submitted and did not error' readonly=True string='ZATCA chain index'
  • l10n_sa_invoice_signature Char
    copy=False args: 'Unsigned XML Signature'
  • l10n_sa_uuid Char
    copy=False help='Universally unique identifier of the Invoice' string='Document UUID (SA)'
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)
  • reverse_moves(self)

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (1)
  • onchange_amount(self)
    @api.onchange('amount')

New fields (2)
  • l10n_sa_exemption_reason_code Selection
    help='Tax Exemption Reason Code (ZATCA)' selection=EXEMPTION_REASON_CODES string='Exemption Reason Code'
  • l10n_sa_is_retention Boolean
    default=False help='Determines whether or not a tax counts as a Withholding Tax' args: 'Is Retention'
Public methods (0)

No public methods.

New fields (3)
  • journal_id Many2one → account.journal
    default=<expr> required=True args: 'account.journal'
  • l10n_sa_otp Char
    copy=False help='OTP required to get a CCSID. Can only be acquired through the Fatoora portal.' args: 'OTP'
  • l10n_sa_renewal Boolean
    default=False help='Used to decide whether we should call the PCSID renewal API or the CCSID API' args: 'PCSID Renewal'
Public methods (2)
  • default_get(self, fields)
    @api.model
  • validate(self)

New fields (6)
  • l10n_sa_additional_identification_number Char
    readonly=False related='partner_id.l10n_sa_additional_identification_number'
  • l10n_sa_additional_identification_scheme Selection
    readonly=False related='partner_id.l10n_sa_additional_identification_scheme'
  • l10n_sa_api_mode Selection
    copy=False default='sandbox' help='Specifies which API the system should use' required=True args: [('sandbox', 'Sandbox'), ('preprod', 'Simulation (Pre-Production)'), ('prod', 'Production')]
  • l10n_sa_edi_building_number Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_building_number'
  • l10n_sa_edi_plot_identification Char
    compute='_compute_address' inverse='_l10n_sa_edi_inverse_plot_identification'
  • l10n_sa_private_key Binary
    attachment=False copy=False groups='base.group_system' help='The private key used to generate the CSR and obtain certificates' args: 'ZATCA Private key'
Public methods (1)
  • write(self, vals)

New fields (1)
  • l10n_sa_api_mode Selection
    readonly=False related='company_id.l10n_sa_api_mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_sa_additional_identification_number Char
    help='Additional Identification Number for Seller/Buyer' args: 'Identification Number (SA)'
  • l10n_sa_additional_identification_scheme Selection
    default='OTH' help='Additional Identification scheme for Seller/Buyer' string='Identification Scheme' args: [('TIN', 'Tax Identification Number'), ('CRN', 'Commercial Registration Number'), ('MOM', 'Momra License'), ('MLS', 'MLSD License'), ('700', '700 Number'), ('SAG', 'Sagia License'), ('NAT', 'National ID'), ('GCC', 'GCC ID'), ('IQA', 'Iqama Number'), ('PAS', 'Passport ID'), ('OTH', 'Other ID')]
  • l10n_sa_edi_building_number Char
    args: 'Building Number'
  • l10n_sa_edi_plot_identification Char
    args: 'Plot Identification'
Public methods (0)

No public methods.