Electronic Withholding Ecuadorian Localization

l10n_ec_withhold
REPOSITORY
REPOSITORYOCA/l10n-ecuador
GIT
GIThttps://github.com/OCA/l10n-ecuador.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-ecuador/tree/17.0/l10n_ec_withhold
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAccount
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Odoo-EC
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Odoo-EC
COMMITTERS
COMMITTERSCarlos Lopez, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-ecuador
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-ecuador:
    - l10n_ec_base
    - l10n_ec_account_edi
odoo/odoo:
    - l10n_ec
    - base
    - base_iban
    - account
    - base_setup
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - account_debit_note
    - l10n_latam_invoice_document
    - l10n_latam_base
    - contacts
    - base_vat
    - account_edi
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography==36.0.0
xades==0.2.4
xmlsig==0.1.9
zeep
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The `l10n_ec_withhold` module is designed to facilitate the management of withholding taxes in the context of Ecuadorian localization. Withholding taxes play a crucial role in financial transactions, both in the procurement of goods and services (purchases) and the sale of products or services (sales). This module streamlines the process of handling withholding taxes, ensuring compliance with Ecuadorian tax regulations.

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
account_fiscal_position_form account.fiscal.position.form account.fiscal.position xpath Inherits l10n_ec_base.account_fiscal_position_form
account_invoice_custom_view Facturas con retencion account.move xpath Inherits account.view_move_form
account_journal_form_view account.journal.form account.journal xpath Inherits account.view_account_journal_form
account_journal_latam_form_view account.journal.form account.journal xpath Inherits l10n_latam_invoice_document.view_account_journal_form
e_withhold_document_body e_withhold_document_body ir.ui.view qweb New
ec_edi_withhold ec_edi_withhold ir.ui.view qweb New
ec_edi_withhold_dividend_pay ec_edi_withhold_dividend_pay ir.ui.view qweb New
ec_edi_withhold_refunds ec_edi_withhold_refunds ir.ui.view qweb New
ec_edi_withhold_tax_support ec_edi_withhold_tax_support ir.ui.view qweb New
ec_edi_withhold_totals_refunds ec_edi_withhold_totals_refunds ir.ui.view qweb New
l10n_ec_wizard_purchase_withhold_form_view Create purchase Withhold Wizard l10n_ec.wizard.create.purchase.withhold form New
l10n_ec_wizard_sale_withhold_form_view Create Sale Withhold Wizard l10n_ec.wizard.create.sale.withhold form New
report_withhold_document_ec report_withhold_document_ec ir.ui.view qweb Inherits l10n_ec_account_edi.report_invoice_document
report_withhold_ec report_withhold_ec ir.ui.view qweb New
view_account_move_withhold_form account.move.form.withhold account.move xpath Inherits l10n_ec_account_edi.view_move_form
view_account_move_withhold_tree account.move.withhold.tree account.move xpath Inherits account.view_move_tree
view_partner_withhold_form view.partner.property.withhold.form res.partner xpath Inherits account.view_partner_property_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 (1)
  • l10n_ec_avoid_withhold Boolean
    help='Select if the tax position no require withholding' string='Avoid Withholding?'
Public methods (0)

No public methods.

New fields (1)
  • l10n_ec_withholding_type Selection
    string='Withholding Type' args: [('purchase', 'Purchase'), ('sale', 'Sale')]
Public methods (0)

No public methods.

New fields (6)
  • l10n_ec_tax_support Selection
    help='Tax support in invoice line' string='Tax Support' args: TAX_SUPPORT
  • l10n_ec_withhold_active Boolean
    compute='_compute_l10n_ec_withhold_active' store=True string='Withholds?'
  • l10n_ec_withhold_count Integer
    compute='_compute_l10n_ec_withhold_count' string='Withholds Count'
  • l10n_ec_withhold_ids Many2many → account.move
    column1='move_id' column2='withhold_id' copy=False readonly=True relation='l10n_ec_withhold_invoice_rel' string='Withhold' args: 'account.move'
  • l10n_ec_withhold_line_ids One2many → account.move.line
    comodel_name='account.move.line' inverse_name='l10n_ec_withhold_id' readonly=True string='Lineas de retencion'
  • l10n_ec_withholding_type Selection
    string='Withholding Type' args: [('purchase', 'Purchase'), ('sale', 'Sale')]
Public methods (11)
  • action_open_business_doc(self)
  • action_send_and_print(self)
  • action_show_l10n_ec_withholds(self)
  • action_try_create_ecuadorian_withhold(self)
  • button_cancel(self)
  • get_formview_id(self, access_uid=None)
  • get_views(self, views, options=None)
    @api.model
  • get_withhold_types(self)
    @api.model
  • is_purchase_withhold(self)
  • is_sale_withhold(self)
  • is_withhold(self)

New fields (4)
  • l10n_ec_invoice_withhold_id Many2one → account.move
    comodel_name='account.move' copy=False readonly=True string='Invoice'
  • l10n_ec_tax_support Selection
    copy=False help='Tax support in invoice line' string='Tax Support' args: TAX_SUPPORT
  • l10n_ec_withhold_id Many2one → account.move
    comodel_name='account.move' copy=False readonly=True string='Withhold'
  • l10n_ec_withhold_tax_amount Monetary
    compute='_compute_withhold_tax_amount' store=True string='Withhold Tax Amount'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • document_number Char
    compute='_compute_document_number' readonly=False required=False size=17 store=True
  • electronic_authorization Char
    required=False size=49
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True string='Related Document'
  • issue_date Date
    required=True string='Date'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' string='Journal'
  • partner_id Many2one → res.partner
    string='Partner' args: 'res.partner'
Public methods (0)

No public methods.

New fields (5)
  • base_amount Float
    readonly=True string='Amount Base'
  • invoice_id Many2one → account.move
    args: 'account.move'
  • tax_group_withhold_id Many2one → account.tax.group
    comodel_name='account.tax.group' string='Withholding Type'
  • tax_withhold_id Many2one → account.tax
    comodel_name='account.tax' string='Withholding tax'
  • withhold_amount Float
    compute='_compute_withholding_amount' store=True string='Amount Withhold'
Public methods (1)
  • onchange_tax_group_withhold(self)
    @api.onchange('tax_group_withhold_id')

New fields (2)
  • withhold_line_ids One2many → l10n_ec.wizard.create.purchase.withhold.line
    comodel_name='l10n_ec.wizard.create.purchase.withhold.line' inverse_name='withhold_id' required=True string='Lines'
  • withhold_totals Float
    compute='_compute_total_withhold' store=True
Public methods (1)
  • button_validate(self)
    Create a purchase Withholding and try reconcile with invoice

New fields (2)
  • l10n_ec_tax_support Selection
    copy=False string='Tax Support' args: TAX_SUPPORT
  • withhold_id Many2one → l10n_ec.wizard.create.purchase.withhold
    comodel_name='l10n_ec.wizard.create.purchase.withhold' ondelete='cascade' string='Withhold'
Public methods (0)

No public methods.

New fields (3)
  • invoice_ids Many2many → account.move
    comodel_name='account.move' string='Invoice'
  • withhold_line_ids One2many → l10n_ec.wizard.create.sale.withhold.line
    comodel_name='l10n_ec.wizard.create.sale.withhold.line' inverse_name='withhold_id' required=True string='Lines'
  • withhold_totals Float
    compute='_compute_total_withhold' store=True
Public methods (11)
  • button_validate(self)
    Create a Sale Withholding and try reconcile with invoice
  • default_get(self, fields)
    @api.model
  • extract_date_from_authorization(self)
  • extract_document_number_from_authorization(self)
  • onchange_authorization(self)
    @api.onchange('electronic_authorization')
  • onchange_document_number(self)
    @api.onchange('document_number')
  • validate(self)
  • validate_authorization(self)
  • validate_repeated_invoice(self)
  • validate_repeated_withhold(self)
  • validate_selected_invoices(self)

New fields (1)
  • withhold_id Many2one → l10n_ec.wizard.create.sale.withhold
    comodel_name='l10n_ec.wizard.create.sale.withhold' ondelete='cascade' string='Withhold'
Public methods (0)

No public methods.

New fields (2)
  • l10n_ec_avoid_withhold Boolean
    related='property_account_position_id.l10n_ec_avoid_withhold'
  • l10n_ec_tax_support Selection
    help='Tax support in invoice line' string='Tax Support' args: TAX_SUPPORT
Public methods (0)

No public methods.