Saltar a contenido

Bloqueos: Retención en la fuente

Catálogo histórico; no es el comportamiento vigente completo

Mensajes extraídos de 4073760e, no errores provocados en el build actual. La línea de origen solo corresponde a ese árbol. Para el corte 067ec7a21cf049451cd349ae473e872883f98e77, prevalecen las guías actualizadas por cambio integrado y sus recuperaciones. No usar una frase histórica de “no implementado” para negar una capacidad incorporada después (FSP, F220, conector nominal o asistentes).

Ficha de verificación

Catalogo generado el 2026-08-17 por lectura del arbol congelado 4073760e880a de dev-fase3 en xdiegob/PayrollBPS. Cada fila corresponde a un raise real localizado en el código, con su archivo y linea. No hay mensajes redactados para esta wiki.

Bloqueos de depuración, procedimientos 1 y 2, calendario del artículo 386 y expediente del Formulario 220.

145 mensajes en 17 modelos. Pegue el texto del mensaje en el buscador para llegar directamente a su fila.

Como leer una fila

Cuando aparece dice en qué momento se dispara: al pulsar un botón, al crear, al modificar o por una validación automática. Origen es el archivo y la línea exactos del árbol congelado, para que cualquiera pueda comprobar el texto sin creerle a esta wiki. Las llaves {} marcan dónde el sistema inserta un valor concreto (un nombre, una fecha, un importe).

bps.acumulado.retencion

Mensaje Cuando aparece Tipo Origen
El acumulado solo se crea por el servicio (acumular). Al crear (create) Operación no permitida models/acumulado_retencion.py:83
El acumulado anual de retencion es inmutable. Al modificar (write) Operación no permitida models/acumulado_retencion.py:87
Los acumulados de retencion no se eliminan. Al eliminar (unlink) Operación no permitida models/acumulado_retencion.py:91
Ya existe un acumulado anual de retencion para el empleado/compania/ano. Operación (acumular) Operación no permitida models/acumulado_retencion.py:106
No hay depuraciones (HU-064A) persistidas del ano para el empleado: el acumulado consume trazas ya calculadas, no se inventa. Operación (acumular) Operación no permitida models/acumulado_retencion.py:113
Ya existe un acumulado anual para el empleado/compania/ano (paralelo). Operación (acumular) Operación no permitida models/acumulado_retencion.py:138

bps.aplicacion.retencion

Mensaje Cuando aparece Tipo Origen
La aplicacion solo se crea por el servicio (aplicar). Al crear (create) Operación no permitida models/aplicacion_retencion.py:94
La aplicacion de retencion es inmutable. Al modificar (write) Operación no permitida models/aplicacion_retencion.py:98
Las aplicaciones de retencion no se eliminan. Al eliminar (unlink) Operación no permitida models/aplicacion_retencion.py:102
Ya existe una aplicacion de retencion para el empleado/compania/periodo. Operación (aplicar) Operación no permitida models/aplicacion_retencion.py:241
Ya existe una aplicacion para el empleado/compania/periodo (paralelo). Operación (aplicar) Operación no permitida models/aplicacion_retencion.py:296

bps.beneficio.retencion

Mensaje Cuando aparece Tipo Origen
El beneficio '{}' de {} exige soporte adjunto para poder aplicarse (HU-066A CA-2). Validación automática (_check_soporte) Validación models/beneficio_retencion.py:62
El valor del beneficio '{}' de {} no puede ser negativo. Validación automática (_check_valor_no_negativo) Validación models/beneficio_retencion.py:72
La fecha hasta no puede ser anterior a la desde. Validación automática (_check_fechas) Validación models/beneficio_retencion.py:80
El empleado pertenece a otra compania: no se mezclan companias. Validación automática (_check_compania) Validación models/beneficio_retencion.py:87

bps.control.anual.retencion

Mensaje Cuando aparece Tipo Origen
El control anual solo se crea por el servicio (generar_control). Al crear (create) Operación no permitida models/control_anual_retencion.py:182
El control anual APROBADO es totalmente inmutable (evidencia de cierre). Al modificar (write) Operación no permitida models/control_anual_retencion.py:190
El control anual de retencion solo se actualiza por el servicio gobernado (generar_control / aprobar). Al modificar (write) Operación no permitida models/control_anual_retencion.py:195
Los controles anuales de retencion no se eliminan. Al eliminar (unlink) Operación no permitida models/control_anual_retencion.py:201
Solo un administrador de nomina BPS genera el control anual de retencion. Operación (generar_control) Operación no permitida models/control_anual_retencion.py:417
No puede generar el control anual de un empleado de una compania fuera de su contexto. Operación (generar_control) Operación no permitida models/control_anual_retencion.py:422
El control anual del empleado/ano ya esta APROBADO (inmutable): no se regenera. Los controles no se eliminan (son traza). Operación (generar_control) Operación no permitida models/control_anual_retencion.py:429
No hay depuraciones (HU-064A) persistidas del ano para el empleado: el control anual consume trazas ya calculadas, no se inventa. Operación (generar_control) Operación no permitida models/control_anual_retencion.py:436
Ya existe un control anual para el empleado/compania/ano (paralelo). Operación (generar_control) Operación no permitida models/control_anual_retencion.py:515
Solo un administrador de nomina BPS aprueba el control anual. Operación (aprobar) Operación no permitida models/control_anual_retencion.py:539
No puede aprobar un control de una compania fuera de su contexto. Operación (aprobar) Operación no permitida models/control_anual_retencion.py:542
El control anual ya esta aprobado (inmutable). Operación (aprobar) Operación no permitida models/control_anual_retencion.py:545
El control anual esta BLOQUEADO por fuente (tope sin valor vigente): no hay evaluacion completa que aprobar. Cargue la fuente oficial y regenere el control. Operación (aprobar) Operación no permitida models/control_anual_retencion.py:547
La aprobacion del control anual exige un motivo. Operación (aprobar) Operación no permitida models/control_anual_retencion.py:554
La aprobacion del control anual exige un soporte documental (referencia: acta, radicado). Operación (aprobar) Operación no permitida models/control_anual_retencion.py:556

bps.control.anual.retencion.concepto

Mensaje Cuando aparece Tipo Origen
Los conceptos del control anual solo se crean por el servicio. Al crear (create) Operación no permitida models/control_anual_retencion.py:619
Los conceptos del control anual son inmutables. Al modificar (write) Operación no permitida models/control_anual_retencion.py:624
Los conceptos del control anual no se eliminan. Al eliminar (unlink) Operación no permitida models/control_anual_retencion.py:631

bps.depuracion.retencion

Mensaje Cuando aparece Tipo Origen
La depuracion solo se crea por el servicio (depurar). Al crear (create) Operación no permitida models/depuracion.py:162
La depuracion de retencion es inmutable. Al modificar (write) Operación no permitida models/depuracion.py:166
Las depuraciones de retencion no se eliminan. Al eliminar (unlink) Operación no permitida models/depuracion.py:170
Los ingresos del periodo deben ser >= 0. Operación (depurar) Operación no permitida models/depuracion.py:269
Ya existe una depuracion de retencion para el empleado/compania/periodo. Operación (depurar) Operación no permitida models/depuracion.py:273
Ya existe una depuracion para el empleado/compania/periodo (paralelo). Operación (depurar) Operación no permitida models/depuracion.py:333

bps.depuracion.retencion.paso

Mensaje Cuando aparece Tipo Origen
Los pasos de depuracion solo se crean por el servicio. Al crear (create) Operación no permitida models/depuracion.py:436
Los pasos de depuracion son inmutables. Al modificar (write) Operación no permitida models/depuracion.py:440
Los pasos de depuracion no se eliminan. Al eliminar (unlink) Operación no permitida models/depuracion.py:444

bps.formulario220.acumulado

Mensaje Cuando aparece Tipo Origen
El acumulado F220 solo se crea por el servicio gobernado. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:321
El acumulado F220 es inmutable; regenere una version nueva. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:327
Los acumulados F220 no se eliminan (son trazas). Al eliminar (unlink) Operación no permitida models/formulario_220_acumulado.py:331
No puede acumular F220 de una compania fuera de su contexto. Operación (generar_desde_soporte) Operación no permitida models/formulario_220_acumulado.py:521
Solo un operador o administrador BPS genera acumulados F220. Operación (generar_desde_soporte) Operación no permitida models/formulario_220_acumulado.py:523
Hay mas de un acumulado F220 vigente para el soporte. Operación (generar_desde_soporte) Operación no permitida models/formulario_220_acumulado.py:527
Solo un administrador BPS regenera un acumulado F220. Operación (generar_desde_soporte) Operación no permitida models/formulario_220_acumulado.py:532
Regenerar un acumulado F220 exige motivo. Operación (generar_desde_soporte) Operación no permitida models/formulario_220_acumulado.py:535

bps.formulario220.acumulado.linea

Mensaje Cuando aparece Tipo Origen
Las trazas F220 solo se crean por el acumulador gobernado. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:621
Las trazas F220 son inmutables. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:625
Las trazas F220 no se eliminan. Al eliminar (unlink) Operación no permitida models/formulario_220_acumulado.py:629

bps.formulario220.casilla

Mensaje Cuando aparece Tipo Origen
Solo un administrador BPS crea mapeos oficiales del Formulario 220. Al crear (create) Operación no permitida models/formulario_220.py:232
Crear un mapeo Formulario 220 exige motivo (contexto bps_motivo_cambio). Al crear (create) Operación no permitida models/formulario_220.py:235
Solo un administrador BPS modifica mapeos oficiales del Formulario 220. Al modificar (write) Operación no permitida models/formulario_220.py:253
Todo cambio critico del mapeo Formulario 220 exige motivo (contexto bps_motivo_cambio). Al modificar (write) Operación no permitida models/formulario_220.py:257
Las casillas fuenteadas del Formulario 220 no se eliminan; desactivelas con motivo para conservar trazabilidad. Al eliminar (unlink) Operación no permitida models/formulario_220.py:276
La casilla del Formulario 220 debe ser positiva. Validación automática (_check_fuente) Validación models/formulario_220.py:286
Solo una casilla monetaria puede exigir redondeo al millar. Validación automática (_check_fuente) Validación models/formulario_220.py:288
Toda casilla Formulario 220 exige fuente, URL y pagina/seccion. Validación automática (_check_fuente) Validación models/formulario_220.py:293
PENDIENTE_FUENTE_FORMULARIO_220: faltan casillas activas de la estructura oficial del borrador ({}). No se construye una matriz incompleta ni por inferencia. Operación (evaluar_soporte) Operación no permitida models/formulario_220.py:575

bps.formulario220.dato.gobernado

Mensaje Cuando aparece Tipo Origen
Solo un administrador BPS registra datos F220 gobernados. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:209
Registrar datos F220 exige bps_motivo_cambio. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:211
Solo un administrador BPS modifica datos F220 gobernados. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:225
Modificar datos F220 exige bps_motivo_cambio. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:228
Los datos F220 gobernados no se eliminan; desactivelos. Al eliminar (unlink) Operación no permitida models/formulario_220_acumulado.py:239
La vigencia final del dato no puede ser anterior. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:248
El periodo hasta no puede ser anterior al periodo desde. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:250
El periodo certificado exige una hr.version persistida como fuente. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:252
El empleado del dato F220 debe pertenecer a la misma compania. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:255
La hr.version del dato F220 debe pertenecer a la misma compania. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:258
Todo dato gobernado exige fuente y URL. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:261
El codigo DANE de departamento debe contener solo digitos. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:263
El codigo DANE de municipio debe contener solo digitos. Validación automática (_check_dato) Validación models/formulario_220_acumulado.py:265

bps.formulario220.expediente

Mensaje Cuando aparece Tipo Origen
El expediente Formulario 220 solo se crea por el servicio gobernado. Al crear (create) Operación no permitida models/formulario_220.py:669
El expediente Formulario 220 aprobado es inmutable. Al modificar (write) Operación no permitida models/formulario_220.py:675
El expediente Formulario 220 es inmutable; use el flujo gobernado. Al modificar (write) Operación no permitida models/formulario_220.py:679
Los expedientes Formulario 220 no se eliminan (son evidencia). Al eliminar (unlink) Operación no permitida models/formulario_220.py:684
No puede generar un expediente de una compania fuera de su contexto. Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:809
El expediente Formulario 220 exige un soporte anual PRODUCTIVO y APROBADO; no se certifican acumulados abiertos. Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:812
Hay mas de un expediente para el soporte/version (ambiguedad); revise datos. Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:819
El expediente ya fue congelado con otra referencia contable; no se reescribe. Genere un nuevo soporte anual para otra evidencia. Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:824
Solo un administrador BPS incorpora valores esperados contables. Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:830
Comparar valores esperados exige una referencia contable (hoja/radicado). Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:834
Ya existe un expediente Formulario 220 para el soporte/version (paralelo). Operación (generar_desde_soporte) Operación no permitida models/formulario_220.py:893
Solo un administrador BPS registra la aprobacion de revision contable. Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:969
No puede aprobar un expediente de una compania fuera de su contexto. Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:972
La revision contable ya esta aprobada (inmutable). Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:975
La aprobacion contable exige un motivo. Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:979
La aprobacion contable exige soporte/referencia (acta o radicado). Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:981
No se aprueba la revision: hay {} diferencia(s) contra valores esperados. Operación (aprobar_revision_contable) Operación no permitida models/formulario_220.py:984

bps.formulario220.regla

Mensaje Cuando aparece Tipo Origen
Solo un administrador BPS crea reglas Formulario 220. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:100
Crear una regla Formulario 220 exige bps_motivo_cambio. Al crear (create) Operación no permitida models/formulario_220_acumulado.py:102
Solo un administrador BPS modifica reglas Formulario 220. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:116
Modificar una regla Formulario 220 exige bps_motivo_cambio. Al modificar (write) Operación no permitida models/formulario_220_acumulado.py:119
Las reglas Formulario 220 no se eliminan; desactivelas con motivo. Al eliminar (unlink) Operación no permitida models/formulario_220_acumulado.py:130
La vigencia final no puede ser anterior a la inicial. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:139
Toda regla exige fuente, URL y pagina/seccion oficial. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:143
Una inclusion o exclusion exige concepto BPS. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:145
Una regla de aporte del trabajador exige el subsistema fuente. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:147
La regla FSP no usa un subsistema de aporte; su fuente es la traza FSP. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:150
Una totalizacion exige al menos una casilla fuente. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:153
Una relacion permitida exige otra casilla distinta de la destino. Validación automática (_check_regla) Validación models/formulario_220_acumulado.py:156

bps.retencion.proc2

Mensaje Cuando aparece Tipo Origen
El porcentaje fijo solo se crea por el servicio (calcular). Al crear (create) Operación no permitida models/retencion_proc2.py:82
El porcentaje fijo (Proc.2) es inmutable. Al modificar (write) Operación no permitida models/retencion_proc2.py:86
Los porcentajes fijos (Proc.2) no se eliminan. Al eliminar (unlink) Operación no permitida models/retencion_proc2.py:90
No hay depuraciones mensuales (HU-064A) persistidas para promediar el Proc.2: sin trazas no se calcula (no se inventa la base). Operación (calcular) Operación no permitida models/retencion_proc2.py:104
Ya existe un porcentaje fijo (Proc.2) para el empleado/compania/corte. Operación (calcular) Operación no permitida models/retencion_proc2.py:110
Ya existe un porcentaje fijo (Proc.2) para el corte (paralelo). Operación (calcular) Operación no permitida models/retencion_proc2.py:139

bps.retencion.proc2.calendario

Mensaje Cuando aparece Tipo Origen
El calendario del Proc.2 solo se activa por el servicio (activar). Al crear (create) Operación no permitida models/retencion_proc2_calendario.py:97
El calendario del Proc.2 es inmutable: reactive/desactive por el servicio o active uno nuevo para otro ano. Al modificar (write) Operación no permitida models/retencion_proc2_calendario.py:110
Los calendarios del Proc.2 no se eliminan (traza). Al eliminar (unlink) Operación no permitida models/retencion_proc2_calendario.py:116
Solo un administrador BPS activa el calendario del Proc.2 (afecta la consumibilidad productiva de la retencion). Operación (activar) Operación no permitida models/retencion_proc2_calendario.py:192
No puede activar el calendario de una compania fuera de su contexto. Operación (activar) Operación no permitida models/retencion_proc2_calendario.py:196
El calendario del Proc.2 debe declarar su fuente normativa (ET art. 386). Operación (activar) Operación no permitida models/retencion_proc2_calendario.py:200
Ya existe un calendario Proc.2 para la compania/ano (paralelo). Operación (activar) Operación no permitida models/retencion_proc2_calendario.py:245
Solo un administrador BPS desactiva el calendario del Proc.2 (afecta la consumibilidad productiva de la retencion). Operación (desactivar) Operación no permitida models/retencion_proc2_calendario.py:265
No puede desactivar el calendario de una compania fuera de su contexto. Operación (desactivar) Operación no permitida models/retencion_proc2_calendario.py:269
Indique el motivo de la desactivacion del calendario del Proc.2 (traza). Operación (desactivar) Operación no permitida models/retencion_proc2_calendario.py:272
PENDIENTE_CALENDARIO_PROC2: no hay calendario del Proc.2 activo y vigente para la compania {} en el ano gravable {}. Actívelo (admin BPS) con su fuente (ET art. 386) antes de consumir la retencion del Proc.2. Operación (corte_gobernante) Operación no permitida models/retencion_proc2_calendario.py:313
PENDIENTE_CALENDARIO_PROC2: el mes {}/{} no queda cubierto por ningun corte semestral del calendario Proc.2 vigente (ET art. 386): no se asume un corte arbitrario. Operación (corte_gobernante) Operación no permitida models/retencion_proc2_calendario.py:333

bps.soporte.retencion

Mensaje Cuando aparece Tipo Origen
El soporte solo se crea por el servicio (preparar). Al crear (create) Operación no permitida models/soporte_retencion.py:206
El soporte anual APROBADO es totalmente inmutable (evidencia de cierre). Al modificar (write) Operación no permitida models/soporte_retencion.py:224
El soporte tecnico de retencion es inmutable. Al modificar (write) Operación no permitida models/soporte_retencion.py:228
Los soportes de retencion no se eliminan. Al eliminar (unlink) Operación no permitida models/soporte_retencion.py:232
Ya existe un soporte tecnico de retencion para el empleado/compania/ano. Operación (preparar) Operación no permitida models/soporte_retencion.py:289
No hay aplicaciones (HU-068A) persistidas del ano para el empleado: el soporte consume trazas ya calculadas, no se inventa. Operación (preparar) Operación no permitida models/soporte_retencion.py:293
Solo un administrador de nomina BPS genera el soporte anual productivo. Operación (generar_productivo) Operación no permitida models/soporte_retencion.py:443
No puede generar el soporte anual de un empleado de una compania fuera de su contexto. Operación (generar_productivo) Operación no permitida models/soporte_retencion.py:447
Ya existe un soporte TECNICO (HU-071A, preparar) para el empleado/compania/ano: no se duplica ni se promueve automaticamente a paquete productivo (HU-071B). El soporte tecnico queda consultable pero NO es aprobable como cierre anual; los soportes no se eliminan (son traza). Operación (generar_productivo) Operación no permitida models/soporte_retencion.py:457
Ya existe un soporte PRODUCTIVO (HU-071B) de retencion para el empleado/compania/ano: no se duplica (idempotencia). Operación (generar_productivo) Operación no permitida models/soporte_retencion.py:462
Solo un administrador de nomina BPS aprueba el soporte anual. Operación (aprobar) Operación no permitida models/soporte_retencion.py:513
No puede aprobar un soporte de una compania fuera de su contexto. Operación (aprobar) Operación no permitida models/soporte_retencion.py:516
Este soporte es TECNICO (HU-071A, preparar): no paso los gates del paquete productivo (consumibilidad, cruce con recibos, advertencias) y NO es aprobable como cierre anual. Los soportes tecnicos historicos quedan consultables; no se promueven automaticamente (H1 PR #95). Operación (aprobar) Operación no permitida models/soporte_retencion.py:522
El soporte anual ya esta aprobado (inmutable). Operación (aprobar) Operación no permitida models/soporte_retencion.py:528
La aprobacion del soporte anual exige un motivo. Operación (aprobar) Operación no permitida models/soporte_retencion.py:532
La aprobacion del soporte anual exige un soporte documental (referencia: acta, radicado). Operación (aprobar) Operación no permitida models/soporte_retencion.py:534
PENDIENTE_DATOS_VALIDACION_CONTABLE_FORMULARIO_220: las casillas oficiales 4-60 estan catalogadas, pero faltan acumuladores/datos declarados en la matriz y la salida oficial no esta habilitada. Use el expediente F220 para revision contable. Su aprobacion NO emite ni habilita el certificado DIAN. Deuda DA-2026-06-20-019. Operación (generar_certificado_oficial) Operación no permitida models/soporte_retencion.py:998

bps.tabla.retencion

Mensaje Cuando aparece Tipo Origen
La tarifa marginal debe estar entre 0 y 100. Validación automática (_check_valores) Validación models/tabla_retencion.py:50
El 'hasta' debe ser mayor que el 'desde'. Validación automática (_check_valores) Validación models/tabla_retencion.py:52
El rango ({}, {}] se solapa con ({}, {}] en el mismo scope y vigencia: la tabla del art. 383 seria ambigua. Validación automática (_check_no_solapamiento) Validación models/tabla_retencion.py:67
No hay tabla del art. 383 vigente cargada para {} (PENDIENTE_FUENTE): la retencion productiva se bloquea hasta cargar la tabla oficial (ET art. 383) con su fuente. No se inventa la tabla. Operación (retencion_uvt) Operación no permitida models/tabla_retencion.py:111
La tabla del art. 383 vigente no cubre la base de {} UVT (rango faltante): no se calcula parcial. Operación (retencion_uvt) Operación no permitida models/tabla_retencion.py:121
La tabla del art. 383 vigente tiene mas de un rango aplicable a la base de {} UVT (tabla ambigua): no se elige uno arbitrariamente. Operación (retencion_uvt) Operación no permitida models/tabla_retencion.py:125