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:
-
Tarjetas trello:
Evaluaciones ministerio - CNAE empresas
Evaluaciones Ministerio - Nº Servicios Prevención
Evaluaciones ministerio - Nº Fallecidos
- 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: