CREATE PROCEDURE [dbo].[sp_remGrillaTrabajadores]
      @periodo INT = 0,
      @mes INT = 0,
      @esPanama BIT = 0,
      @activo INT = -1,
      @unidadNegocios INT = 0,
      @sexo INT = -1,
      @fichaDesde INT = 0,
      @fichaHasta INT = 999999999,
      @departamento INT = 0,
      @tipoContratoTrab INT = 0,
      @enrolado INT = 0
  AS
  BEGIN
      SET NOCOUNT ON;

      -- Validación de parámetros obligatorios
      IF @periodo IS NULL OR @periodo <= 0
      BEGIN
          RAISERROR('El parámetro @periodo es obligatorio y debe ser mayor a 0', 16, 1)
          RETURN
      END

      IF @mes IS NULL OR @mes <= 0 OR @mes > 12
      BEGIN
          RAISERROR('El parámetro @mes es obligatorio y debe estar entre 1 y 12', 16, 1)
          RETURN
      END

      -- Variable para fecha actual (para filtros de contrato)
      DECLARE @fechaActual DATETIME = CONVERT(DATETIME, '01-' + CAST(@mes AS VARCHAR) + '-' + CAST(@periodo AS VARCHAR), 105)

      SELECT
          remTrabajadores.activo,
          remTrabajadores.ficha,
          -- RUT según país
          CASE WHEN @esPanama = 1 THEN CONVERT(VARCHAR,remTrabajadores.rut)
               ELSE CONVERT(VARCHAR,remTrabajadores.rut) + '-' + remTrabajadores.dv
          END AS rut,
          RTRIM(remTrabajadores.apePaterno) +' '+ RTRIM(remTrabajadores.apeMaterno) +' '+ RTRIM(remTrabajadores.nombres) AS NombreCompleto,
          remTrabajadores.sexo,
          CASE remTrabajadores.sexo WHEN 0 THEN '0-FEMENINO' WHEN 1 THEN '1-MASCULINO' END AS descripSexo,
          remTrabajadores.unidadNegocios,
          CASE extranjero WHEN 1 THEN 'CHILENO' WHEN 2 THEN 'EXTRANJERO' WHEN 3 THEN 'EXTRANJERO/NO COTIZA' END AS nacionalidad,
          remTrabajadores.fechaIngreso,
          conUnidadNegocio.descripcion AS descripUnidadNegocio,
          remCargos.descripcion AS cargo,
          remTrabajadores.instSalud,
          remIsapre.descripcion AS descripIsapre,
          remTrabajadores.idPrevision,
          remPrevisiones.descripcion AS descripPrevision,
          remTrabajadores.pactadoSalud,
          remTrabajadores.banco,
          conBancos.nombre AS descripBanco,
          remTrabajadores.numCuenta,
          CONVERT(DECIMAL(8,0),sueldoBase) AS sueldoBase,
          -- CAMPOS PARA EXCEL
          remTrabajadores.periodo,
          remTrabajadores.mes,
          remTrabajadores.activo,
          remTrabajadores.extranjero,
          remTrabajadores.fechaNac,
          remTrabajadores.profesion,
          remTrabajadores.direccion,
          remTrabajadores.comuna,
          remTrabajadores.ciudad,
          remTrabajadores.pais,
          remTrabajadores.telefonoPart,
          remTrabajadores.telefonoEmp,
          remTrabajadores.celularPart,
          remTrabajadores.celularEmp,
          remTrabajadores.correoPart,
          remTrabajadores.correoEmp,
          remTrabajadores.estadoCivil,
          remTrabajadores.seccion,
          remTrabajadores.departamento,
          remTrabajadores.fechaContrato,
          remTrabajadores.tipoContrato,
          remTrabajadores.fechaTermino,
          remTrabajadores.fechaTerminoExt,
          remTrabajadores.fechaFiniquito,
          remTrabajadores.tipoSueldo,
          remTrabajadores.tipoJornada,
          remTrabajadores.cantidadHoras,
          remTrabajadores.tipoMovilizacion,
          remTrabajadores.montoMovilizacion,
          remTrabajadores.tipoColacion,
          remTrabajadores.montoColacion,
          remTrabajadores.rentaPromedio,
          remTrabajadores.formaPago,
          remTrabajadores.tipoTrabajador,
          remTrabajadores.regimenPrevisional,
          remTrabajadores.porcPrevision,
          remTrabajadores.tipoAhorroAFP,
          remTrabajadores.montoAhorroAFP,
          remTrabajadores.segcesantia,
          remTrabajadores.idDesahucio,
          remTrabajadores.porcDesahucio,
          remTrabajadores.regimenSalud,
          remTrabajadores.monedaSalud,
          remTrabajadores.periodosRecon,
          remTrabajadores.bienestar,
          remTrabajadores.modoBienestar,
          remTrabajadores.montoBienestar,
          remTrabajadores.idSindicato,
          remTrabajadores.modoSindicato,
          remTrabajadores.montoSindicato,
          remTrabajadores.servMedico,
          remTrabajadores.smedicoNormal,
          remTrabajadores.smedicoMaternal,
          remTrabajadores.smedicoEspecial,
          remTrabajadores.idApvi1,
          remTrabajadores.contratoApvi1,
          remTrabajadores.modoApvi1,
          remTrabajadores.montoApvi1,
          remTrabajadores.formapagoApvi1,
          remTrabajadores.idApvi2,
          remTrabajadores.contratoApvi2,
          remTrabajadores.formapagoApvi2,
          remTrabajadores.modoApvi2,
          remTrabajadores.montoApvi2,
          remTrabajadores.idApvi3,
          remTrabajadores.contratoApvi3,
          remTrabajadores.formapagoApvi3,
          remTrabajadores.modoApvi3,
          remTrabajadores.montoApvi3,
          remTrabajadores.idApvc1,
          remTrabajadores.contratoApvc1,
          remTrabajadores.modoApvc1,
          remTrabajadores.formapagoApvc1,
          remTrabajadores.montoApvc1,
          remTrabajadores.saldoperiodoanterior,
          remTrabajadores.tomadoperiodoanterior,
          remTrabajadores.areconocidos,
          remTrabajadores.moneda,
          remTrabajadores.montoretencionJudicial,
          remTrabajadores.imponiblecontrato,
          remTrabajadores.tramoasigfamiliar,
          remTrabajadores.tramoimpuesto,
          remTrabajadores.coment1,
          remTrabajadores.coment2,
          remTrabajadores.coment3,
          remTrabajadores.coment4,
          remTrabajadores.CargaNormal,
          remTrabajadores.CargaInvalida,
          remTrabajadores.CargaMaternal,
          remTrabajadores.PrevisionCuenta2,
          remFormasPago.descripcion AS desFormaPago,
          remTrabajadores.fechaultproceso,
          remTrabajadores.fechainicioperiodo,
          remTrabajadores.fechainivacprog,
          remTrabajadores.InstCesantia,
          remTrabajadores.diasprogresivostomados,
          remTrabajadores.loging,
          remTrabajadores.fecing,
          remTrabajadores.logmod,
          remTrabajadores.fecmod,
          remTrabajadores.fecmod2,
          remDepartamentos.descripcion AS depto,
          CASE WHEN remTrabajadoresAdmin.enrolado IS NULL THEN 'NO'
               WHEN remTrabajadoresAdmin.enrolado = 1 THEN 'SI'
               ELSE 'NO'
          END AS enrolado
      FROM remTrabajadores
      LEFT OUTER JOIN remPrevisiones
          ON remTrabajadores.regimenPrevisional = remPrevisiones.idRegimen
          AND remTrabajadores.periodo = remPrevisiones.periodo
          AND remTrabajadores.mes = remPrevisiones.mes
          AND remTrabajadores.idPrevision = remPrevisiones.idPrevision
      LEFT OUTER JOIN remCargos
          ON remTrabajadores.cargo = remCargos.idCargo
      LEFT OUTER JOIN conUnidadNegocio
          ON remTrabajadores.unidadNegocios = conUnidadNegocio.idUniNeg
      LEFT OUTER JOIN remIsapre
          ON remTrabajadores.instSalud = remIsapre.idIsapre
          AND remTrabajadores.periodo = remIsapre.periodo
          AND remTrabajadores.mes = remIsapre.mes
      LEFT OUTER JOIN conBancos
          ON remTrabajadores.banco = conBancos.idBanco
      LEFT OUTER JOIN remFormasPago
          ON remTrabajadores.formaPago = remFormasPago.idFormaPago
      LEFT OUTER JOIN remDepartamentos
          ON remTrabajadores.departamento = remDepartamentos.idDepartamento
      LEFT OUTER JOIN remTrabajadoresAdmin
          ON remTrabajadores.ficha = remTrabajadoresAdmin.ficha
      WHERE remTrabajadores.periodo = @periodo
        AND remTrabajadores.mes = @mes
        -- Filtro activo/inactivo: -1 = todos, 1 = activos, 0 = inactivos
        AND (remTrabajadores.activo = @activo OR @activo = -1)
        -- Filtro unidad de negocios: 0 = todos
        AND (remTrabajadores.unidadNegocios = @unidadNegocios OR @unidadNegocios = 0)
        -- Filtro sexo: -1 = todos, 0 = femenino, 1 = masculino
        AND (remTrabajadores.sexo = @sexo OR @sexo = -1)
        -- Filtro rango de fichas
        AND remTrabajadores.ficha BETWEEN @fichaDesde AND @fichaHasta
        -- Filtro departamento: 0 = todos
        AND (remTrabajadores.departamento = @departamento OR @departamento = 0)
        -- Filtro tipo de contrato
        AND (
            @tipoContratoTrab = 0  -- Todos
            OR (@tipoContratoTrab = 1 AND remTrabajadores.tipoContrato = 1 AND remTrabajadores.fechaTermino < @fechaActual)  -- Vencidos
            OR (@tipoContratoTrab = 2 AND remTrabajadores.tipoContrato = 1 AND MONTH(remTrabajadores.fechaTermino) = @mes AND YEAR(remTrabajadores.fechaTermino) = @periodo AND YEAR(fechaFiniquito) = 1900)  -- Por vencer
            OR (@tipoContratoTrab = 3 AND remTrabajadores.tipoContrato = 1)  -- Plazo Fijo
            OR (@tipoContratoTrab = 4 AND remTrabajadores.tipoContrato = 2)  -- Indefinido
        )
        -- Filtro enrolado: 0 = todos, 1 = SI, 2 = NO
        AND (
            @enrolado = 0  -- Todos
            OR (@enrolado = 1 AND remTrabajadoresAdmin.enrolado = 1)  -- SI enrolado
            OR (@enrolado = 2 AND (remTrabajadoresAdmin.enrolado = 0 OR remTrabajadoresAdmin.enrolado IS NULL))  -- NO enrolado
        )
  END