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 |