-- ==========================================================
-- GEOSTARK NOMINA - LIMPIEZA TECNICA V7.3
-- Snapshots huerfanos + reparacion basica UTF/mojibake.
-- Ejecutar primero en modo NO para revisar conteos.
-- ==========================================================

SET @CONFIRMAR_LIMPIEZA_V73 := 'NO';

SELECT 'Snapshots trabajador huerfanos' AS revision, COUNT(*) AS total
FROM nomina_corrida_trabajador_snapshot s LEFT JOIN nomina_corridas c ON c.id=s.corrida_id WHERE c.id IS NULL;
SELECT 'Snapshots conceptos huerfanos' AS revision, COUNT(*) AS total
FROM nomina_corrida_conceptos_snapshot s LEFT JOIN nomina_corridas c ON c.id=s.corrida_id WHERE c.id IS NULL;
SELECT 'Snapshots calendario huerfanos' AS revision, COUNT(*) AS total
FROM nomina_corrida_calendario_snapshot s LEFT JOIN nomina_corridas c ON c.id=s.corrida_id WHERE c.id IS NULL;

SELECT 'Si los conteos son correctos cambia @CONFIRMAR_LIMPIEZA_V73 a SI y ejecuta de nuevo.' AS instruccion;

DELETE s FROM nomina_corrida_trabajador_snapshot s
LEFT JOIN nomina_corridas c ON c.id=s.corrida_id
WHERE @CONFIRMAR_LIMPIEZA_V73='SI' AND c.id IS NULL;

DELETE s FROM nomina_corrida_conceptos_snapshot s
LEFT JOIN nomina_corridas c ON c.id=s.corrida_id
WHERE @CONFIRMAR_LIMPIEZA_V73='SI' AND c.id IS NULL;

DELETE s FROM nomina_corrida_calendario_snapshot s
LEFT JOIN nomina_corridas c ON c.id=s.corrida_id
WHERE @CONFIRMAR_LIMPIEZA_V73='SI' AND c.id IS NULL;

-- Reparacion basica de mojibake frecuente. No reemplaza una auditoria completa de codificacion.
UPDATE personas SET
  nombre = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(nombre,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  apellido = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(apellido,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  direccion = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(direccion,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  departamento = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(departamento,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  area = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(area,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â','')
WHERE @CONFIRMAR_LIMPIEZA_V73='SI'
  AND (nombre LIKE '%Ã%' OR apellido LIKE '%Ã%' OR direccion LIKE '%Ã%' OR departamento LIKE '%Ã%' OR area LIKE '%Ã%' OR nombre LIKE '%Â%' OR apellido LIKE '%Â%');

UPDATE cargos SET
  cargo = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(cargo,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â','')
WHERE @CONFIRMAR_LIMPIEZA_V73='SI' AND (cargo LIKE '%Ã%' OR cargo LIKE '%Â%');

UPDATE nomina_corrida_trabajador_snapshot SET
  nombre = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(nombre,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  apellido = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(apellido,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â',''),
  cargo = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(cargo,'Ã¡','á'),'Ã©','é'),'Ã­','í'),'Ã³','ó'),'Ãº','ú'),'Ã±','ñ'),'Ã‘','Ñ'),'Â','')
WHERE @CONFIRMAR_LIMPIEZA_V73='SI' AND (nombre LIKE '%Ã%' OR apellido LIKE '%Ã%' OR cargo LIKE '%Ã%' OR nombre LIKE '%Â%' OR apellido LIKE '%Â%');

SELECT 'Limpieza v7.3 ejecutada solo si @CONFIRMAR_LIMPIEZA_V73 = SI' AS resultado;
