Saltar a contenido

Evaluación ministerio 2018

Incidencia

Se necesitan los listados para la elaborar la evaluación de amianto de las CCAA que solicita el ministerio.

Estos listados se obtienen desde la aplicación en formato pdf, en lugar de en formato excel. Además, tienen varios errores.

[3512] CNAE de Empresas

Estamos realizando la evaluación de amianto (2005-2018) las CCAA y tenemos que enviar los datos, entre ellos CNAE de las empresas y nº de trabajadores. En la aplicación TEAM los datos de la evaluación vienen en pdf y necesito disponer de los datos en Excel, os envío el último disponible para obtener los datos actualizados a diciembre de 2018 ¿Por favor me lo podéis enviar? Habría que mirar que este tipo de listado se pueda obtener en el apartado de empresas (permitir listar Excel)

[3513] Nº Servicios Prevención

En los datos de procedencia, hoja 3 de la evaluación del Ministerio, debería contar a los S.P. por nº de CIF que han aportado fichas de vigilancia de la salud sean o no de CyL (debería ser inferior a 270)

[3514] Nº Fallecidos

En la tabla con los datos de la evaluación del Ministerio de 2005-2018de TEAM, hay errores:

Fallecidos (éxitus) son más de 300 y en la tabla aparecen 49 ¿no los estará contando en el apartado de NO activos? Los No activos son los desempleados. Se necesita disponer de los datos según el Excel que adjunta Mercedes (incluye motivos de las pérdidas: rechazo del seguimiento, no localizados,…).

Estudio

Se busca el report que obtiene este listado. A partir de él se podrán obtener las distintas sqls para extraer los datos necesarios.

El report que obtiene el listado es team_ministerio.rdf. Abriendo este report en Reports Builder y mirando en las consultas se obtienen las sqls empleadas para obtener los datos del listado.

[3512] CNAE de Empresas

El formato del Excel que se quiere obtener es

COD_CNAE ACTIVIDAD NUM_EMPRESAS CYL FUERA_CYL HOMBRES MUJERES
4121 Construcción de edificios residenciales 71 61 10 294 1
Sin CNAE 45 33 12 479 32

Las columnas cod_cnae y num_empresas las obtenemos con la consulta Q1 del report:

sql SELECT DECODE(a.C_CNAE_CLASE_ID,NULL, 'Sin CNAE', a.C_CNAE_CLASE_ID) COD_cnae, 'JCYL' COM, COUNT(a.C_EMPRESA_ID) NUM_EMPRESAS FROM TEAM_EMPRESAS a WHERE a.B_BORRADO='N' GROUP BY a.C_CNAE_CLASE_ID ORDER BY NUM_EMPRESAS DESC

Para obtener la columna actividad hay que hacer una consulta a COMU_CS.comu_cnae_clase.d_cnae_clase.

Las columnas cyl y fuera_cyl las obtenemos con la consulta Q2 del report:

(SELECT DECODE(a.C_CNAE_CLASE_ID,NULL,'Sin CNAE',a.C_CNAE_CLASE_ID) COD_cnae, 'JCYL' COM,
COUNT(a.C_EMPRESA_ID) NUM
FROM TEAM_EMPRESAS a
WHERE a.B_BORRADO='N'
AND a.C_PROV_ID IN ('05','09','24','34','37','40','42','47','49')
GROUP BY a.C_CNAE_CLASE_ID)
UNION
(SELECT DECODE(a.C_CNAE_CLASE_ID,NULL,'Sin CNAE',a.C_CNAE_CLASE_ID) COD_cnae, 'RESTO' COM,
COUNT(a.C_EMPRESA_ID)NUM
FROM TEAM_EMPRESAS a
WHERE a.B_BORRADO='N'
AND a.C_PROV_ID NOT IN('05','09','24','34','37','40','42','47','49')
GROUP BY a.C_CNAE_CLASE_ID)
ORDER BY num DESC

Las columnas hombres y mujeres las obtenemos con la consulta Q4 del report:

SELECT DISTINCT DECODE(a.C_CNAE_CLASE_ID,NULL,'Sin CNAE',a.C_CNAE_CLASE_ID) cod_cnae,e.b_sexo,COUNT(DISTINCT d.C_trab_ID) num_trab
FROM TEAM_EMPRESAS a,
TEAM_EMPRESAS_TRABAJADORES c,
TEAM_TRABAJADORES d,
comu_usuarios e
WHERE
a.C_EMPRESA_ID=c.C_EMPRESA_ID
AND a.B_BORRADO='N'
AND c.C_TRAB_ID=d.C_TRAB_ID
AND d.B_BORRADO='N'
AND D.C_EST_TRAB_ID != '05'
AND d.C_USUARIO_ID=e.C_USUARIO_ID
GROUP BY a.C_CNAE_CLASE_ID,e.b_sexo
ORDER BY 1,2

[3513] Nº Servicios Prevención

La sql que obtiene los datos de procedencia es:

SELECT a.PROC_TRAB, a.PROC_TRAB_ID, a.TRABAJADORES, NVL(b.num_emp,0) num_emp
FROM
(
 SELECT DECODE(PT.D_PROC_TRAB, 'Servicios Regionales de Salud', 'Servicios Públicos de Salud',
                               'Servicios Regionales de Salud otras CCAA', 'Servicios Públicos de Salud',
                               'Mutuas AT y EP', 'Mutuas',
                               'Organizaciones Empresariales', 'Empresas',
                               'Autoridad laboral', 'Otros',
                               'A petición propia', 'Otros',
                               PT.D_PROC_TRAB) PROC_TRAB,
        DECODE (PT.C_PROC_TRAB_ID, '09','02', '07','99', '08','99', PT.C_PROC_TRAB_ID) PROC_TRAB_ID,
        COUNT(DISTINCT T.C_TRAB_ID) TRABAJADORES
 FROM TEAM_TRABAJADORES T, TEAM_PROCEDENCIAS_TRABAJADOR PT
 WHERE T.C_PROC_TRAB_ID(+) = PT.C_PROC_TRAB_ID
   AND T.B_BORRADO(+) = 'N'
 GROUP BY DECODE(PT.D_PROC_TRAB, 'Servicios Regionales de Salud', 'Servicios Públicos de Salud',
                                 'Servicios Regionales de Salud otras CCAA', 'Servicios Públicos de Salud',
                                 'Mutuas AT y EP', 'Mutuas',
                                 'Organizaciones Empresariales', 'Empresas',
                                 'Autoridad laboral', 'Otros',
                                 'A petición propia', 'Otros',
                                 PT.D_PROC_TRAB),
          DECODE (PT.C_PROC_TRAB_ID, '09','02', '07','99', '08','99', PT.C_PROC_TRAB_ID)
 ORDER BY PROC_TRAB_ID
) a,
(
 SELECT DECODE (T.C_PROC_TRAB_ID, '09','02', '07','99', '08','99', T.C_PROC_TRAB_ID) PROC_TRAB_ID,
        COUNT(DISTINCT et.C_EMPRESA_ID)num_emp
 FROM TEAM_EMPRESAS_TRABAJADORES et, TEAM_TRABAJADORES T
 WHERE t.b_borrado='N'
   AND t.C_TRAB_ID=et.C_TRAB_ID
 GROUP BY DECODE (T.C_PROC_TRAB_ID, '09','02', '07','99', '08','99', T.C_PROC_TRAB_ID)
) b
WHERE a.PROC_TRAB_ID=b.PROC_TRAB_ID(+)
ORDER BY a.PROC_TRAB_ID

En los datos de procedencia lo que se mira es el campo de procedencia que se ha grabado a cada trabajador. En el caso de servicios de prevención, como en los demás tipos, es eso lo que se contabiliza sin tener en cuenta si el servicio de prevención ha aportado o no ficha.

Aparentemente se hace de forma correcta, pero distinta a lo que pensaba Mercedes.

[3514] Nº Fallecidos

El Excel de Mercedes es:

Datos 2005-2018
Datos TEAM
MINISTERIO TEAM Hombres Mujeres No información Total
Expuesto Expuesto Σ
Post-expuesto Activo:
- Post-expuesto activo en la misma empresa Post-expuesto activo Σ
- Post-expuesto activo en otra empresa Post-expuesto No activo Σ
Post-expuestos Inactivos:
- Jubilados Post-expuesto jubilado Σ
- Desempleados Post-expuesto desempleado Σ
- No información Desconocido Σ
a) Total de registrados de alta (no incluye al siguiente grupo de pérdidas) Σ Σ Σ Σ
Pérdidas(registrados de baja):
No localizados No localizados Σ
Cambio a otra CCAA Cambio de Comunidad Σ
Rechazan el Seguimiento Rechaza seguimiento Σ
Éxitus Fallecidos Σ
b) Total registrados de baja Σ Σ Σ Σ
c) Total registrados (a+b) Σ (a+b) Σ (a+b) Σ (a+b) Σ (a+b)

La sql que obtiene los datos es:

SELECT a.C_EST_TRAB_ID,a.est_trab,a.orden,b.total_mujeres,c.total_hombres FROM
(SELECT /*+ ORDERED */  t.C_EST_TRAB_ID,
DECODE (c_est_trab_id,
'01', '           No Activos',
'02', '           Jubilados',
'03', '      Activos',
'00', 'Desconocidos',
'04', 'Expuestos'
) est_trab,
DECODE (c_est_trab_id,
'02', 5,
'03', 3,
'00', 7,
'04', 1,
'01',6
) orden
FROM
TEAM_TRABAJADORES t
WHERE t.b_borrado='N'
AND t.C_EST_TRAB_ID IN ('00','01','02','03','04')
GROUP BY t.C_EST_TRAB_ID
UNION ALL
SELECT NULL c_est_trab_id, 'Post-Expuestos' est_trab,2 orden FROM dual
UNION ALL
SELECT NULL c_est_trab_id, '      Inactivos' est_trab,4 orden FROM dual
UNION ALL
SELECT NULL c_est_trab_id, 'Pérdidas' est_trab,8 orden FROM dual) a,
(SELECT /*+ ORDERED_PREDICATES */ t.C_EST_TRAB_ID,COUNT(t.C_TRAB_ID) total_mujeres
FROM
TEAM_TRABAJADORES_ESTADOS TE,
TEAM_TRABAJADORES t,
comu_usuarios u
WHERE t.b_borrado='N'
AND T.C_TRAB_ID=TE.C_TRAB_ID
AND TE.N_ANNO=TO_NUMBER(:ANNOTRABREG) 
AND t.C_USUARIO_ID=u.C_USUARIO_ID
AND u.b_sexo='M'
GROUP BY t.C_EST_TRAB_ID) b,
(SELECT /*+ ORDERED_PREDICATES */ t.C_EST_TRAB_ID,COUNT(t.C_TRAB_ID) total_hombres
FROM
TEAM_TRABAJADORES_ESTADOS TE,
TEAM_TRABAJADORES t,
comu_usuarios u
WHERE t.b_borrado='N'
AND T.C_TRAB_ID=TE.C_TRAB_ID
AND TE.N_ANNO=TO_NUMBER(:ANNOTRABREG) 
AND t.C_USUARIO_ID=u.C_USUARIO_ID
AND u.b_sexo='H'
GROUP BY t.C_EST_TRAB_ID) c
WHERE a.C_EST_TRAB_ID=b.C_EST_TRAB_ID(+)
AND a.C_EST_TRAB_ID=c.C_EST_TRAB_ID(+)
UNION ALL
--query específica para recuperar los fallecidos
(SELECT '05' c_est_trab_id,'      Exitus' est_trab,9 orden,b.total_mujeres,a.total_hombres FROM
(SELECT U.B_SEXO, COUNT(TE.C_TRAB_ID) total_hombres
FROM TEAM_TRABAJADORES_ESTADOS TE, TEAM_TRABAJADORES T, COMU_USUARIOS U
WHERE TE.N_ANNO = TO_NUMBER(:ANNOTRABREG)    
  AND TE.C_EST_TRAB_ID = '05'
  AND TE.C_TRAB_ID = T.C_TRAB_ID
  AND T.C_USUARIO_ID = U.C_USUARIO_ID
  AND U.B_SEXO='H'
  AND TE.C_TRAB_ID NOT IN ( SELECT TE2.C_TRAB_ID
                   FROM TEAM_TRABAJADORES_ESTADOS TE2
       WHERE TE2.N_ANNO = TO_NUMBER(:ANNOTRABREG)-1     
         AND TE2.C_EST_TRAB_ID = '05'
        )
GROUP BY U.B_SEXO) a,
(SELECT U.B_SEXO, COUNT(TE.C_TRAB_ID) total_mujeres
FROM TEAM_TRABAJADORES_ESTADOS TE, TEAM_TRABAJADORES T, COMU_USUARIOS U
WHERE TE.N_ANNO = TO_NUMBER(:ANNOTRABREG)    
  AND TE.C_EST_TRAB_ID = '05'
  AND TE.C_TRAB_ID = T.C_TRAB_ID
  AND T.C_USUARIO_ID = U.C_USUARIO_ID
  AND U.B_SEXO='M'
  AND TE.C_TRAB_ID NOT IN ( SELECT TE2.C_TRAB_ID
                   FROM TEAM_TRABAJADORES_ESTADOS TE2
       WHERE TE2.N_ANNO = TO_NUMBER(:ANNOTRABREG)-1     
         AND TE2.C_EST_TRAB_ID = '05'
        )
GROUP BY U.B_SEXO) b)
ORDER BY orden

El problema es que los cálculos los está haciendo del año en curso (el de fecha de fin desde pantalla), no todos los anteriores.

Solución

[3512] CNAE de Empresas

La sql que obtiene los datos pedidos es:

SELECT 
    Empresas.*, 
    NVL(Hombres.num_trab,0) Hombres, 
    NVL(Mujeres.num_trab,0) Mujeres 
FROM
    (SELECT 
        DECODE(Emp.C_CNAE_CLASE_ID, NULL,'Sin CNAE', Emp.C_CNAE_CLASE_ID) COD_CNAE, 
        (SELECT cnaes.D_CNAE_CLASE ACTIVIDAD 
            FROM COMU_CS.COMU_CNAE_CLASES cnaes 
            WHERE Emp.C_CNAE_CLASE_ID=cnaes.C_CNAE_CLASE_ID) ACTIVIDAD,
        COUNT(Emp.C_EMPRESA_ID) NUM_EMPRESAS,
        SUM(DECODE(Emp.C_PROV_ID, '05', 1, '09', 1, '24', 1, '34', 1, '37', 1, '40', 1, '42', 1, '47', 1, '49', 1)) CYL,
        SUM(DECODE(Emp.C_PROV_ID, '05', 0, '09', 0, '24', 0, '34', 0, '37', 0, '40', 0, '42', 0, '47', 0, '49', 0, 1)) FUERA_CYL
    FROM TEAM.TEAM_EMPRESAS Emp
    WHERE Emp.B_BORRADO='N'
    GROUP BY C_CNAE_CLASE_ID) Empresas,
    (SELECT 
         DECODE(a.C_CNAE_CLASE_ID,NULL,'Sin CNAE',a.C_CNAE_CLASE_ID) cod_cnae,
         COUNT(DISTINCT d.C_trab_ID) num_trab
    FROM TEAM.TEAM_EMPRESAS a,
        TEAM.TEAM_EMPRESAS_TRABAJADORES c,
        TEAM.TEAM_TRABAJADORES d,
        COMU_CS.COMU_usuarios e
    WHERE
        a.C_EMPRESA_ID=c.C_EMPRESA_ID
        AND a.B_BORRADO='N'
        AND c.C_TRAB_ID=d.C_TRAB_ID
        AND d.B_BORRADO='N'
        AND D.C_EST_TRAB_ID != '05'
        AND d.C_USUARIO_ID=e.C_USUARIO_ID
        AND e.b_sexo='H'
        AND (c.F_ALTA IS NULL OR c.F_ALTA <= TO_DATE('31/12/2018', 'DD/MM/YYYY'))
    GROUP BY a.C_CNAE_CLASE_ID) Hombres,
        (SELECT 
         DECODE(a.C_CNAE_CLASE_ID,NULL,'Sin CNAE',a.C_CNAE_CLASE_ID) cod_cnae,
         COUNT(DISTINCT d.C_trab_ID) num_trab
    FROM TEAM.TEAM_EMPRESAS a,
        TEAM.TEAM_EMPRESAS_TRABAJADORES c,
        TEAM.TEAM_TRABAJADORES d,
        COMU_CS.COMU_usuarios e
    WHERE
        a.C_EMPRESA_ID=c.C_EMPRESA_ID
        AND a.B_BORRADO='N'
        AND c.C_TRAB_ID=d.C_TRAB_ID
        AND d.B_BORRADO='N'
        AND D.C_EST_TRAB_ID != '05'
        AND d.C_USUARIO_ID=e.C_USUARIO_ID
        AND e.b_sexo='M'
        AND (c.F_ALTA IS NULL OR c.F_ALTA <= TO_DATE('31/12/2018', 'DD/MM/YYYY'))
    GROUP BY a.C_CNAE_CLASE_ID) Mujeres
WHERE 
    Empresas.COD_CNAE = Hombres.COD_CNAE (+)
    AND Empresas.COD_CNAE = Mujeres.COD_CNAE (+)
ORDER BY NUM_EMPRESAS DESC

Donde los parámetros de la consulta, que serían fecha de inicio, F_INI (en este caso 01/01/2005), y fecha de fin, F_FIN (en este caso 31/12/2018) se darían como:

  • Tabla TEAM_EMPRESAS_TRABAJADORES
    • F_ALTA <= F_FIN

[3513] Nº Servicios Prevención

Se informa a Mercedes de cómo se obtienen los datos.

[3514] Nº Fallecidos

Se hace a partir de unas sqls que tenía Julián.

Primera parte de la tabla:

-- No pérdidas
SELECT ET.D_EST_TRAB, U.B_SEXO, count(T.C_TRAB_ID) AS NUM_TRAB
FROM team.TEAM_TRABAJADORES T, team.TEAM_ESTADOS_TRABAJADOR ET, comu_cs.COMU_USUARIOS U
WHERE T.C_EST_TRAB_ID = ET.C_EST_TRAB_ID
  AND T.C_USUARIO_ID = U.C_USUARIO_ID
  AND T.B_BORRADO = 'N'
   AND T.F_ALTA BETWEEN to_date('01/01/2005','dd/mm/yyyy') AND to_date('31/12/2018','dd/mm/yyyy')
  --y no son pérdidas 
  AND T.B_LOCALIZADO = 'S'
  AND T.B_OTRACA = 'N'
  AND T.B_RECHAZA = 'N'
  AND T.C_EST_TRAB_ID <> '05'
GROUP BY ET.D_EST_TRAB, U.B_SEXO
ORDER BY ET.D_EST_TRAB, U.B_SEXO;

Segunda parte de la Excel:

-- Pérdidas por sexo

SELECT CASE WHEN T.C_EST_TRAB_ID = '05' THEN 'Fallecidos'
            WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'S' THEN 'Cambio de comunidad'
            WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'N' AND T.B_LOCALIZADO = 'N' THEN 'No localizados'
            WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'N' AND T.B_LOCALIZADO = 'S' AND T.B_RECHAZA = 'S' THEN 'Rechaza seguimiento'
       END PERDIDA,
       U.B_SEXO,
       count(T.C_TRAB_ID) AS NUM_TRAB
FROM team.TEAM_TRABAJADORES T, comu_cs.COMU_USUARIOS U
WHERE T.C_USUARIO_ID = U.C_USUARIO_ID
  AND T.B_BORRADO = 'N'
  AND T.F_ALTA BETWEEN to_date('01/01/2005','dd/mm/yyyy') AND to_date('31/12/2018','dd/mm/yyyy')
--Son pérdidas 
  AND (T.B_LOCALIZADO = 'N' OR T.B_OTRACA = 'S' OR T.B_RECHAZA = 'S' OR T.C_EST_TRAB_ID = '05')
GROUP BY CASE WHEN T.C_EST_TRAB_ID = '05' THEN 'Fallecidos'
              WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'S' THEN 'Cambio de comunidad'
              WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'N' AND T.B_LOCALIZADO = 'N' THEN 'No localizados'
              WHEN T.C_EST_TRAB_ID <> '05' AND T.B_OTRACA = 'N' AND T.B_LOCALIZADO = 'S' AND T.B_RECHAZA = 'S' THEN 'Rechaza seguimiento'
         END,
         U.B_SEXO
ORDER BY PERDIDA, B_SEXO;

Resumen

  • Tareas gforge:
  • Ficheros modificados:
  • Modificado en base de datos:
  • Incluido en versión:
  • Subido al svn:
  • Fechas
  • Fecha de inicio: 14/08/2019
  • Fecha de fin:
  • Fecha de validación:

Última actualización: August 15, 2021