Contratos¶
¿Qué es?¶
El módulo de Contratos registra la información contractual y salarial de cada empleado. Cada contrato vincula a un empleado con un tipo de contrato, un salario, fechas de vigencia y una periodicidad de pago. Los contratos son la base para generar los comprobantes de nómina: solo los empleados con contrato activo aparecen en el autocompletado al crear comprobantes.
Vista principal¶
Columnas de la tabla¶
- Empleado — Nombre del empleado. Ancho máximo 240 px, truncado.
- Tipo — Nombre del tipo de contrato (ej. "Término fijo", "Indefinido"). Ancho 160 px.
- Inicio — Fecha de inicio del contrato en formato AAAA-MM-DD. Ancho 110 px, monoespaciado.
- Fin — Fecha de fin del contrato en formato AAAA-MM-DD. Ancho 110 px. Puede estar vacío si es contrato indefinido.
- Salario — Salario base del contrato en pesos colombianos (COP). Formato monoespaciado, alineado a la derecha. Ancho 150 px.
- Vigencia — Badge de color según el estado de vigencia del contrato (ver tabla de estados de vigencia).
- Estado — Badge: Activo (verde) o Inactivo (gris). Indica si el contrato está en uso activo. Ancho 100 px.
Filtros¶
- Buscar por empleado... — Campo de texto libre.
- Vigencia — Selector con todos los estados de vigencia:
Todas,Activo,Borrador,Por vencer,Cerrado,Cancelado. - Estado — Selector:
Activos(por defecto),Inactivos,Todos.
Ordenación por defecto¶
Ordenada por fecha de inicio descendente.
Estados de vigencia¶
| Estado | Código | Badge | Descripción |
|---|---|---|---|
| Borrador | new |
Gris | Contrato creado pero no vigente aún |
| Activo | open |
Verde | Contrato vigente en la fecha actual |
| Por vencer | pending |
Amarillo | La fecha de fin está próxima |
| Cerrado | close |
Rojo | La fecha de fin ya pasó |
| Cancelado | cancel |
Rojo | Contrato anulado manualmente |
Acciones disponibles¶
Botón "Nuevo contrato"¶
Visible con permiso contracts: create. Abre el modal de creación.
Botón "Importar"¶
Visible con permiso contracts: import. Navega a la importación masiva (#/contracts-bulk).
Botón "Catálogos"¶
Abre el panel deslizante lateral de Tipos de contrato:
- Lista de tipos con nombre y botones de acción al pasar el cursor.
- Renombrar (ícono de lápiz) — Activa campo editable en línea. Enter o check guarda; Escape cancela.
- Eliminar (ícono de papelera) — Elimina el tipo. Si hay contratos que usan ese tipo, puede fallar con un mensaje de error del servidor.
- Agregar nuevo tipo — Campo de texto en el pie del panel + botón "+".
Exportar¶
Botón de exportación. Descarga un archivo contratos. Requiere permiso contracts: export.
Acciones masivas¶
Al seleccionar uno o más contratos:
- Cambiar estado — Selector de estado de vigencia + botón Aplicar.
- Eliminar — Doble confirmación. Eliminación permanente.
- Cerrar selección — Botón X.
Modal de creación / edición¶
Campos del formulario¶
- Empleado — Autocompletado de empleados (obligatorio). El sistema busca por nombre.
- Tipo de contrato (
contract_type_id) — Autocompletado del catálogo de tipos de contrato. - Fecha de inicio (
date_start) — Selector de fecha (obligatorio). - Fecha de fin (
date_end) — Selector de fecha (opcional). Dejar vacío para contratos a término indefinido. - Salario (
wage) — Valor numérico en COP (obligatorio, debe ser mayor a 0). No acepta decimales. - Vigencia (
state) — Selector del estado de vigencia:Borrador,Activo,Por vencer,Cerrado,Cancelado. - Término (
term) — Campo de texto libre para condiciones adicionales del contrato (opcional). - Periodicidad de pago (
schedule_pay) — Selector:Mensual(monthly),Quincenal(bi-monthly). Por defecto: Mensual. - Cómo se liquida (
payroll_attendance) — Decide de dónde sale el pago en la nómina. Ver la sección siguiente.
Validaciones¶
- Empleado es obligatorio.
- Fecha de inicio es obligatoria.
- Salario es obligatorio y debe ser mayor a 0 ("El salario debe ser mayor a 0").
"Cómo se liquida": turnos o administrativo¶
Este selector del contrato decide de dónde sale el pago de esa persona en la nómina. Tiene dos valores:
| Valor | Qué hace |
|---|---|
| Por turnos y marcación — vigilancia (por defecto) | Se le exigen turnos y marcación: un día sin explicar frena la liquidación. |
| Por días del período — administrativo, sin turnos | Se le pagan los días del período sin mirar turnos. Las ausencias salen sólo de las novedades, y no se le exige marcación ni rondas. |
Por qué hace falta marcarlo¶
Un programador, la gerente o recursos humanos no tienen turnos y nunca los van a tener, y hay que liquidarles nómina igual.
El problema es que "no tiene turnos" no basta como señal: alguien sin un solo turno liquida un mes aparentemente perfecto —30 días de sueldo, auxilio completo, cero alertas—. Eso es exactamente lo que la planta interna necesita y lo que jamás puede pasarle a un vigilante al que nadie le cargó la programación. Los dos producen el mismo desprendible impecable.
Equivocarse hacia turnos manda a alguien a la bandeja de excepciones: molesto, visible y reversible. Equivocarse hacia administrativo le liquida el mes sin mirar si trabajó.
Contratos y quién entra a la nómina¶
A quién se le liquida lo decide el contrato abierto, no la casilla de "activo" del empleado. Un empleado marcado como inactivo con el contrato sin cerrar sigue entrando a las corridas de nómina — y tiene que entrar, porque a quien se retira a mitad de mes hay que liquidarle los días.
Un empleado inactivo con contrato abierto es siempre un dato incompleto: si la persona se retiró, había que cerrarle el contrato; si sigue vinculada (licencia, suspensión), había que dejarla activa.
Por eso el sistema pregunta en las dos direcciones:
- Al inactivar un empleado (individual o masivamente): "¿cerrar también sus contratos?"
- Al cerrar o cancelar un contrato: "¿inactivar también al empleado?" — y sólo se ofrece para quien queda sin ningún contrato vigente, porque cerrar uno no significa que la persona se fue (un cambio de cargo, una renovación).
Cerrar un contrato con fecha de hoy no saca a la persona del mes en curso, y eso es correcto: quien se retira el 30 cobra el mes.
Importación masiva de contratos (contracts-bulk)¶
La página #/contracts-bulk permite crear múltiples contratos a la vez.
Columnas de la hoja¶
| # | Columna | Obligatorio | Notas |
|---|---|---|---|
| 1 | Empleado | Sí | Nombre del empleado (debe existir) |
| 2 | Tipo | No | Nombre del tipo de contrato |
| 3 | Fecha inicio | Sí | Formato AAAA-MM-DD |
| 4 | Fecha fin | No | Formato AAAA-MM-DD (vacío = indefinido) |
| 5 | Salario | Sí | Valor en COP sin decimales |
| 6 | Periodicidad | No | mensual o quincenal |
Importar desde archivo (con IA)¶
Botón Importar acepta .csv, .xlsx o .xls. La IA mapea columnas automáticamente.
Permisos¶
| Acción | Permiso requerido |
|---|---|
| Ver contratos | contracts: view |
| Crear contrato | contracts: create |
| Editar contrato | contracts: edit |
| Eliminar | contracts: delete |
| Exportar | contracts: export |
| Importar | contracts: import |
Páginas relacionadas¶
- Empleados — Cada contrato pertenece a un empleado. El empleado debe existir antes de crear su contrato.
- Nómina — Al crear comprobantes de pago, solo aparecen empleados con contratos activos en el autocompletado.
- Novedades — Los auxilios de alimentación y transporte configurados en los puestos toman como referencia el contrato del empleado.
Preguntas frecuentes¶
¿Un empleado puede tener múltiples contratos activos al mismo tiempo? El sistema lo permite técnicamente, pero se recomienda tener solo un contrato activo por empleado para evitar confusiones en la nómina.
¿Qué pasa si elimino un tipo de contrato que está en uso? El servidor puede rechazar la operación con un mensaje de error si hay contratos existentes que usan ese tipo. Primero reasigna o elimina esos contratos antes de borrar el tipo.
¿Cuándo cambia automáticamente el estado de vigencia de un contrato? El sistema puede calcular el estado según las fechas (si la fecha de fin ya pasó, muestra "Cerrado"; si está próxima, "Por vencer"). Sin embargo, el campo también se puede cambiar manualmente desde el modal o acciones masivas.
¿El campo "Término" es visible para el empleado? No. Es un campo interno del portal para registrar notas o condiciones del contrato. No se muestra en la app móvil.
¿Qué pongo en "Cómo se liquida"? Por turnos y marcación para el personal operativo (vigilantes, supervisores en puesto): su pago sale de la programación. Por días del período para la planta administrativa, que no tiene turnos ni los va a tener.
Marqué a un vigilante como administrativo, ¿qué pasa? Se le liquida el mes completo sin mirar si tuvo turnos ni si marcó. El desprendible se ve perfecto y no hay ninguna alerta — que es justamente lo peligroso. Corrígelo a Por turnos y marcación.
Un empleado inactivo me sale en la corrida de nómina. Porque tiene el contrato abierto, y a quien se le liquida lo decide el contrato. Ciérrale el contrato con su fecha de fin. Si la fecha es de hoy, seguirá cobrando el mes en curso, que es lo correcto.
Inactivé al empleado, ¿se cierra solo su contrato? No automáticamente: el sistema pregunta si quieres cerrarlos también. Lo mismo al revés cuando cierras un contrato y la persona queda sin ninguno vigente.