Parche master v2 - Bono nocturno y archivado seguro de conceptos
Fecha: 2026-05-14

Cambios principales:
1) Se agrega el concepto A-011 "Bono nocturno ordinario 30%".
   - Tipo: ASIG
   - Modo: CANTIDAD
   - Incide salario normal: sí
   - Incide base cotización: sí
   - Tasa legal parametrizada: BONO_NOCTURNO_TASA = 0.30
   - Fórmula: horas nocturnas ordinarias x salario hora x 0.30

2) En nomina_calcular_actualizado.php se agrega una nueva columna:
   A-011 Bono nocturno 30%
   Allí deben cargarse solo las horas nocturnas ordinarias.
   La columna A-008 queda para horas extraordinarias nocturnas.

3) Se corrige la eliminación de conceptos personalizados.
   Antes, si el concepto tenía movimientos históricos, MySQL podía bloquear el DELETE por llave foránea,
   pero la pantalla mostraba "eliminado" igualmente.
   Ahora:
   - Si el concepto no tiene movimientos: se borra físicamente.
   - Si tiene movimientos históricos: se archiva con activo=0 y aplica_global=0.
   - Los conceptos archivados no se aplican en nuevas corridas.
   - Por defecto el catálogo muestra solo conceptos activos; se agregó botón para ver archivados/inactivos.

4) El bono felicidad A-100, al eliminarse, quedará archivado si ya fue usado en corridas anteriores.
   Esto es correcto para proteger recibos históricos. Ya no debe aparecer como activo ni aplicarse en corridas nuevas.

Instalación:
- Respaldar carpeta actual y base de datos.
- Copiar estos archivos sobre la raíz del sistema CRUD de nómina.
- Entrar a Conceptos de Nómina o Cálculo de Nómina para que se cree/active automáticamente A-011.
- En Conceptos de Nómina, eliminar/archivar "bono felicidad" si sigue activo.
- Correr la nueva nómina usando A-011 para horas nocturnas ordinarias.

Validación:
- Se validó sintaxis PHP con php -l en los archivos modificados.
