Catálogo de mensajes de bloqueo¶
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
BPSNOMINA 1.0 · Generado el 2026-08-17 · Código 4073760e (dev-fase3 de xdiegob/PayrollBPS) · Obtenido por lectura del árbol congelado, no por redacción manual · Entorno de comprobación: instancia limpia local sobre ese mismo commit.
Por qué existe esta sección¶
Nómina BPS se detiene a propósito. Cuando falta un dato, una fuente, un soporte o un permiso, no adivina y no continúa: lanza un mensaje y bloquea la operación. A ese diseño se le llama fail-closed, y es deliberado: en nómina, un cálculo hecho con un dato incompleto es peor que un cálculo no hecho.
La consecuencia práctica es que usted verá mensajes de bloqueo con frecuencia, sobre todo durante la implantación. Un bloqueo no es un error del software. Es el software diciéndole exactamente qué le falta.
Esta sección existe para que ningún mensaje lo deje sin salida.
Cómo usar el catálogo¶
- Copie el texto del mensaje que ve en pantalla.
- Péguelo en el buscador de esta wiki, arriba a la derecha.
- La búsqueda lo lleva a la fila del catálogo, que le dice qué operación lo lanzó, sobre qué modelo y en qué archivo y línea del código está definido.
Si el mensaje trae un valor concreto (un nombre, una fecha, un importe), busque solo la parte fija. En el catálogo esa parte variable aparece como {}.
Un mensaje largo no es un mensaje hostil
Muchos bloqueos explican, en el propio texto, la razón y la salida. Por ejemplo: «El recibo productivo no esta finalizado: el acumulador solo consume un recibo FINALIZADO (autoritativo). Finalice el recibo antes de causar.» La instrucción viene incluida. Léalo completo antes de escalar.
Qué hay catalogado¶
| Frente | Mensajes | Modelos |
|---|---|---|
| Empleado, contrato y datos maestros | 327 | 56 |
| Tiempos y novedades | 160 | 27 |
| Liquidación, recibos y prestaciones | 320 | 47 |
| Retención en la fuente | 145 | 17 |
| PILA, nómina electrónica y firma | 351 | 43 |
| Banco, contabilidad, conciliación y cierre | 349 | 55 |
| Riesgo jurídico e implantación | 168 | 24 |
| Total | 1 820 | 269 |
Cómo se construyó, y qué queda fuera¶
El catálogo se obtuvo recorriendo el árbol congelado con un analizador sintáctico de Python, localizando cada raise de ValidationError, UserError y AccessError, y reconstruyendo el texto literal del mensaje. Ningún mensaje fue redactado, resumido ni traducido para esta wiki: si el producto escribe «compania» sin tilde, el catálogo dice «compania» sin tilde, porque eso es lo que usted verá en pantalla y lo que debe poder buscar.
Alcance real de la extracción, para que nadie lea de más:
| Dato | Valor |
|---|---|
raise con texto literal en los 17 módulos |
2 517 |
| De ellos, en código productivo (fuera de pruebas) | 2 515 |
| Mensajes distintos | 2 411 |
| Catalogados aquí (alcanzables desde la aplicación) | 1 820 |
| No catalogados: procesos internos y cálculos | 691 |
raise cuyo texto se arma en ejecución y no se puede leer del código |
10 |
Se catalogan los mensajes que puede provocar una persona operando: un botón, una acción, la creación o modificación de un registro, o una validación automática del modelo. Se dejan fuera los que solo se disparan dentro de procesos internos, porque un usuario no llega a ellos por sí mismo.
Lo que este catálogo NO hace todavía
Cada fila identifica el mensaje y su origen exacto, y muchos mensajes traen su propia salida en el texto. Pero no todos tienen aún una explicación redactada con causa y remedio paso a paso. Esa redacción existe hoy para los bloqueos del ciclo mensual central; el resto está catalogado y es buscable, que es lo que evita quedarse sin pista.
No se rellenó el resto con explicaciones genéricas: una explicación inventada sería peor que la ausencia, porque parecería verificada.
Los bloqueos que verá el primer día¶
Estos cuatro aparecen al configurar una compañía nueva, antes de liquidar nada. Están redactados porque son el tropiezo inicial de toda implantación.
«El municipio no tiene código DANE cargado»¶
Texto completo: «El lugar de trabajo «…» está incompleto para la DIAN. El municipio «…» no tiene código DANE cargado: regístrelo en Nómina BPS > Maestros DIAN > Municipios (DANE) con su fuente oficial.»
Qué significa. La ubicación de trabajo debe viajar a la nómina electrónica con el código oficial del municipio. La instalación no trae los municipios codificados: el catálogo Municipios (DANE) llega vacío de códigos.
Por qué se detiene ahí. Un código DANE inventado produciría un documento electrónico formalmente válido pero materialmente falso. El producto prefiere no emitirlo.
Qué hacer. Vaya a Nómina BPS > Configuración > Catálogos > Maestros DIAN > Municipios (DANE), abra el municipio y registre su código, su fuente y la fecha en que la consultó. Haga lo mismo con el departamento. Sin esto no podrá crear ningún empleado.
«El contrato a término fijo exige fecha de terminación»¶
Texto completo: «El contrato a término fijo exige fecha de terminación (art. 46 CST). Sin fecha fin se entiende indefinido: use ese tipo o registre la fecha fin.»
Qué significa. Marcó el contrato como término fijo pero no puso fecha de fin.
Por qué se detiene ahí. El artículo 46 del Código Sustantivo del Trabajo exige que el término fijo conste con su duración; sin ella, la relación se entiende indefinida. Guardar un «fijo sin fecha» crearía un contrato cuya naturaleza jurídica no coincide con lo registrado.
Qué hacer. Registre la fecha de terminación, o cambie el tipo a Término indefinido. El mensaje le ofrece las dos salidas correctas.
«El contrato a término fijo debe constar por escrito»¶
Texto completo: «El contrato a término fijo debe constar por escrito (art. 46 CST): adjunte el soporte escrito del contrato.»
Qué significa. Falta el documento adjunto en Soporte escrito del contrato.
Qué hacer. Adjunte el contrato firmado en el campo de soportes de la ficha. No basta con tenerlo en un archivador: el producto exige la evidencia dentro del registro.
«El salario integral no puede ser inferior al mínimo legal»¶
Texto completo: «El salario integral (…) no puede ser inferior al mínimo legal del año … (… = 10 SMMLV + factor prestacional; art. 132 CST).»
Qué significa. El salario integral tiene un piso legal: diez salarios mínimos más el factor prestacional. El producto calcula ese piso con los parámetros del año y compara.
Qué hacer. Suba el salario al piso legal o desmarque Salario integral. Consulte el piso vigente en Configuración > Parámetros del año; allí está también la norma que lo sustenta.
Los bloqueos de permisos¶
Dos denegaciones son tan frecuentes que conviene reconocerlas antes de encontrarlas.
| Lo que ve | Qué le falta realmente |
|---|---|
| «No está autorizado a acceder a los registros "Empleado" (hr.employee)» | Tiene rol BPS pero no un rol de RR. HH. de Odoo. Ver Roles y seguridad. |
| «No puede acceder a los registros "Ejecutar nómina mensual BPS (F5-F6)"… permitida para: Nómina BPS Colombia/Administrador de Nómina» | La ejecución de la nómina mensual está reservada al Administrador de Nómina. Un operador no la lanza. |
Guías relacionadas¶
- Roles y seguridad — quién puede hacer qué, y la combinación de roles que hace falta.
- Preparar la compañía — el orden de configuración que evita la mitad de estos bloqueos.
- Solucionar problemas — cuando el síntoma no es un mensaje concreto.