Repository
OCA/l10n-colombia · module folder · Try on Runboat
Module version
1.0.0
Category
Accounting/Localizations
Folder size
0.11 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/l10n-colombia
Last tracking update
2026-09-03 05:25:20
Authors
Odoo Community Association (OCA), Juan Arcos
Maintainers
Odoo Community Association (OCA), Juan Arcos
Committers
GitHub, oca-ci
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
Retención en la Fuente para Colombia
=====================================

Este módulo implementa el soporte para **retención en la fuente** (RteFte),
**ReteIVA** y **ReteICA** en la localización contable de Colombia.

La retención en la fuente es el mecanismo mediante el cual el Estado colombiano
recauda anticipadamente impuestos a través de los agentes retenedores.

Características principales:

- **Configuración en la compañía**: Define si la empresa es agente de retención
  y las retenciones por defecto (RteFte, ReteIVA, ReteICA)
- **Clasificación de partners**: Régimen tributario, tipo de persona, gran
  contribuyente, autorretenedor
- **Posiciones fiscales automáticas**: Con mapeo de cuentas para desactivar
  retenciones según el régimen del proveedor (Régimen Simple, No Contribuyente)
- **Impuestos con conceptos**: Cada impuesto de retención tiene asociado un
  concepto tributario (honorarios, servicios, compras, etc.)
- **Cuantías mínimas**: Validación automática de la base mínima en UVT
  (configurable vía parámetro del sistema)
- **Cálculo automático**: Botón "Calcular Retenciones" en facturas que aplica
  las retenciones según la configuración de la compañía y el partner
- **Soporte para ventas y compras**: Aplica retenciones tanto en facturas de
  proveedor como de cliente
- **Integración con factura electrónica**: Los impuestos negativos se reportan
  correctamente como WithholdingTaxTotal en el EDI UBL

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
res_config_settings_view_form_l10n_co_withholding res.config.settings.view.form.l10n_co_withholding res.config.settings form Inherits account.res_config_settings_view_form
view_l10n_co_reteica_rate_form l10n.co.reteica.rate.form l10n.co.reteica.rate form New
view_l10n_co_reteica_rate_search l10n.co.reteica.rate.search l10n.co.reteica.rate search New
view_l10n_co_reteica_rate_tree l10n.co.reteica.rate.tree l10n.co.reteica.rate list New
view_move_form_l10n_co_withholding account.move.form.l10n_co_withholding account.move form Inherits account.view_move_form
view_partner_form_l10n_co_withholding res.partner.form.l10n_co_withholding res.partner form Inherits account.view_partner_property_form
view_tax_form_l10n_co_withholding account.tax.form.l10n_co_withholding account.tax form Inherits account.view_tax_form
view_tax_group_form_l10n_co_withholding account.tax.group.form.l10n_co_withholding account.tax.group form Inherits account.view_tax_group_form
view_tax_search_l10n_co_withholding account.tax.search.l10n_co_withholding account.tax search Inherits account.view_account_tax_search
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (7)

New fields (0)

No new fields.

Public methods (5)
  • l10n_co_check_min_base(self, tax, base_amount)
  • l10n_co_compute_withholding_taxes(self)
  • l10n_co_get_applicable_withholding_taxes(self)
  • l10n_co_get_withholding_taxes(self, partner, tax_type='purchase')
  • l10n_co_remove_withholding_taxes(self, line_ids, withholding_tax_ids)

New fields (5)
  • l10n_co_min_base_uvt Float
    help='Cuantía mínima en UVT para que aplique esta retención. Si la base gravable es inferior, la retención no se aplica.' string='Base Mínima (UVT)'
  • l10n_co_withholding_compensates_tax_id Many2one → account.tax
    help='Impuesto de retención de venta que esta contrapartida compensa.' string='Retención Compensada' args: 'account.tax'
  • l10n_co_withholding_concept Selection
    help='Concepto tributario de la retención en la fuente según el Estatuto Tributario colombiano.' selection=[('honorarios', 'Honorarios'), ('servicios', 'Servicios'), ('comisiones', 'Comisiones'), ('compras', 'Compras'), ('arrendamiento_mueble', 'Arrendamiento Bienes Muebles'), ('arrendamiento_inmueble', 'Arrendamiento Bienes Inmuebles'), ('rendimientos_financieros', 'Rendimientos Financieros'), ('transporte_carga', 'Transporte de Carga'), ('transporte_pasajeros', 'Transporte de Pasajeros'), ('vigilancia', 'Vigilancia y Aseo (AIU)'), ('temporal', 'Servicios Temporales (AIU)'), ('salud', 'Servicios de Salud'), ('hoteles_restaurantes', 'Hoteles y Restaurantes'), ('software', 'Licencias de Software'), ('it_consulting', 'Consultoría TI'), ('obras_inmuebles', 'Obras en Inmuebles'), ('vehiculos', 'Adquisición de Vehículos'), ('inmuebles', 'Bienes Raíces'), ('inmuebles_comerciales', 'Bienes Raíces Comerciales'), ('agricola', 'Bienes Agrícolas'), ('combustibles', 'Combustibles'), ('cafe', 'Café'), ('pagos_exterior', 'Pagos al Exterior'), ('otros', 'Otros')] string='Concepto de Retención'
  • l10n_co_withholding_counterpart Boolean
    help='Impuesto positivo que compensa la retención en ventas para que el total de la factura no se reduzca ante la DIAN.' string='Contrapartida de Retención'
  • l10n_co_withholding_type Selection
    help='Tipo de retención: Renta, IVA o ICA.' selection=[('rte_fte', 'ReteFte (Renta)'), ('rte_iva', 'ReteIVA'), ('rte_ica', 'ReteICA')] string='Tipo de Retención'
Public methods (1)
  • l10n_co_get_positive_counterpart(self)

New fields (1)
  • l10n_co_withholding_counterpart Boolean
    help='Marca este grupo como el que agrupa las contrapartidas positivas de las retenciones de venta.' string='Grupo de Contrapartida de Retención'
Public methods (0)

No public methods.

New fields (6)
  • active Boolean
    default=True
  • city_id Many2one → res.city
    comodel_name='res.city' help='Ciudad/municipio para la cual aplica esta tarifa de ReteICA.' required=True string='Ciudad'
  • economic_activity_id Many2one → l10n.co.economic.activity
    comodel_name='l10n.co.economic.activity' help='Actividad económica CIIU para la cual aplica esta tarifa de ReteICA.' required=True string='Actividad Económica'
  • min_base_purchases_uvt Float
    default=27.0 digits=(6, 2) help='Base mínima en UVT para aplicar ReteICA en compras.' string='Base Mínima Compras (UVT)'
  • min_base_services_uvt Float
    default=4.0 digits=(6, 2) help='Base mínima en UVT para aplicar ReteICA en servicios.' string='Base Mínima Servicios (UVT)'
  • rate Float
    digits=(6, 4) help='Porcentaje de retención de ReteICA.' required=True string='Tarifa (%)'
Public methods (1)
  • get_rate_for_partner(self, partner)
    @api.model
    Get ReteICA rate for partner based on city and activity.

New fields (4)
  • l10n_co_default_rte_fte_tax_ids Many2many → account.tax
    column1='company_id' column2='tax_id' comodel_name='account.tax' domain=[('l10n_co_withholding_type', '=', 'rte_fte')] help='Impuestos de retención en la fuente que se aplican por defecto.' relation='res_company_l10n_co_rte_fte_tax_rel' string='ReteFte por Defecto'
  • l10n_co_default_rte_ica_tax_ids Many2many → account.tax
    column1='company_id' column2='tax_id' comodel_name='account.tax' domain=[('l10n_co_withholding_type', '=', 'rte_ica')] help='Impuestos de retención de ICA que se aplican por defecto.' relation='res_company_l10n_co_rte_ica_tax_rel' string='ReteICA por Defecto'
  • l10n_co_default_rte_iva_tax_ids Many2many → account.tax
    column1='company_id' column2='tax_id' comodel_name='account.tax' domain=[('l10n_co_withholding_type', '=', 'rte_iva')] help='Impuestos de retención de IVA que se aplican por defecto.' relation='res_company_l10n_co_rte_iva_tax_rel' string='ReteIVA por Defecto'
  • l10n_co_is_retention_agent Boolean
    help='Indica si la empresa actúa como agente de retención.' string='Agente de Retención'
Public methods (0)

No public methods.

New fields (4)
  • l10n_co_default_rte_fte_tax_ids Many2many
    readonly=False related='company_id.l10n_co_default_rte_fte_tax_ids' string='ReteFte por Defecto'
  • l10n_co_default_rte_ica_tax_ids Many2many
    readonly=False related='company_id.l10n_co_default_rte_ica_tax_ids' string='ReteICA por Defecto'
  • l10n_co_default_rte_iva_tax_ids Many2many
    readonly=False related='company_id.l10n_co_default_rte_iva_tax_ids' string='ReteIVA por Defecto'
  • l10n_co_is_retention_agent Boolean
    readonly=False related='company_id.l10n_co_is_retention_agent' string='Agente de Retención Colombia'
Public methods (0)

No public methods.

New fields (5)
  • city_id Many2one → res.city
    comodel_name='res.city' help='Ciudad/municipio del partner. Se usa para determinar las tarifas de ReteICA aplicables.' string='Ciudad'
  • l10n_co_is_authorretenedor Boolean
    help='Indica si el partner es autorretenedor de renta.' string='Autorretenedor'
  • l10n_co_is_gran_contribuyente Boolean
    help='Indica si el partner está calificado como gran contribuyente.' string='Gran Contribuyente'
  • l10n_co_is_retention_agent Boolean
    help='Indica si el partner actúa como agente de retención.' string='Agente de Retención'
  • l10n_co_tax_regime Selection
    help='Régimen tributario del partner para determinar las retenciones aplicables.' selection=[('ordinary', 'Régimen Ordinario'), ('simple', 'Régimen Simple'), ('non_taxpayer', 'No Contribuyente / No Responsable')] string='Régimen Tributario'
Public methods (0)

No public methods.