GEOSTARK NOMINA - v8.1 Blindaje auditor de vacaciones
=======================================================

Objetivo quirúrgico:
- Corregir el guardado de salario_moneda y origen_registro en eventos de vacaciones.
- No tocar lógica de cálculo de días, montos, saldos ni copia a novedades.
- Exigir soporte/referencia formal para nuevos eventos.
- Reparar mojibake básico en snapshots para reportes legales.

Archivos modificados:
- nomina_vacaciones.php
- nomina_vacaciones_master_helpers.php
- nomina_vacaciones_auditoria.php

Corrección técnica principal:
En v8 el bind_param del INSERT de vacaciones tenía desalineados los tipos para:
- salario_moneda
- salario_monto_original
- bono_extra_usd_mensual
- origen_registro

Por eso algunos eventos guardaban:
- salario_moneda = 0
- origen_registro = 0

v8.1 corrige esa asignación y normaliza esos campos antes de insertar.

Instalación:
1. Respaldar archivos y base.
2. Copiar los tres PHP en la raíz /crud/.
3. Ejecutar SQL_VALIDACION_V8_1_VACACIONES.sql.
4. Si hay eventos viejos con moneda/origen inválidos, ejecutar SQL_OPCIONAL_V8_1_REPARAR_EVENTOS_VACACIONES.sql primero en NO, revisar conteos, luego cambiar a SI.
5. Registrar un nuevo evento de vacaciones de prueba y validar que salario_moneda y origen_registro queden correctos.

Validación esperada:
- Eventos con salario_moneda inválida = 0
- Eventos con origen_registro inválido = 0
- Eventos sin snapshot_json = 0

No se modificaron cálculos de vacaciones ya validados.
