/*==============================================================================
FICHA: Indicador N°13 - DL 1153 2025
ELABORACION: OGTI/ OGEI - MINSA - JL
==============================================================================*/
use BD_HISINDICADORES
go

--***************************************************
--				BASES DE DATOS.
--***************************************************
--HIS MINSA 
select
	id_cita									, 
	fecha_registro							, 
	fecha_atencion	= convert(date,periodo)	, 
	renaes			= convert(int,renaes)	, 
	id_tipcond_estab						, 
	id_tipcond_serv							, 
	num_doc									, 
	edad_reg								, 
	tipo_dx			= id_tipitem			, 
	cod_item  								, 
	valor_lab
into #his_minsa
from BD_BACKUP_OGEI.dbo.MEF_TramaHisMinsa_202308_20230920 WITH(NOLOCK)
where	id_tipo_doc = 1 AND
				 sw = 1 AND
		substring(rtrim(ltrim(id_ups)),1,4) = '3033' AND				-- UPS servicios Odontologicas.
		(convert(int,edad_reg) between 3 and 11)	 AND
		id_tipedad_reg						= 'A'						-- Edad 3 a 11 años.
						
	--Excluir Atenciones de Telemedicina.
	delete from #his_minsa 
	where id_cita in (
						select
							distinct
							id_cita
						from #his_minsa
						where substring(cod_item,1,5)='99499'
					 ) 
					
-- Cargamos la Tabla de Metas (20 % de la Población asignada por IPRESS)
-- Archivo facilitado por Salud Bucal en valor entero
/*Meta de población por IPRESS para acceder al Denominador*/
SELECT
	m.IPRESS,
	Meta = SUM(CAST(m.Meta AS INT))
INTO #Meta_IPRESS
FROM Meta_IPRESS_Edad_Ind13_SaludBucal m
GROUP BY m.IPRESS


--***************************************************
--					SINTAXIS
--***************************************************
declare 
	@mes_inicio int,
	@mes_eval	int,
	@año		int 

set @mes_eval = 8 --<=========== Mes de evaluación
set @año	  = 2023 --<============= Año de evaluación 

--%%%%%%%%%%%%%%%%
--  DENOMINADOR
--%%%%%%%%%%%%%%%%

--1.Total de niñas y niños de 3 a 11 años y que presenten como primera atención en el año el procedimiento de evaluación oral completa
select
	distinct
	renaes			,
	num_doc			,
	fecha_atencion	,
	edad = edad_reg
into #hisminsa_den
from (	select
			h.*,
			id = row_number() over (partition by num_doc, renaes
										order by fecha_atencion asc, fecha_registro desc)
		from #his_minsa h
		where	cod_item	in ('D0150')		and
				tipo_dx		=   'D'				and
				(valor_lab not in ('G') or valor_lab is null )	and
				(edad_reg between 3 and 11)						and
				year(fecha_atencion)   = 2023					and
				month(fecha_atencion) <= 8
	 ) as t 
where id = 1


--%%%%%%%%%%%%%%%%
-- NUMERADOR
--%%%%%%%%%%%%%%%%

--1.Niños del denominador que durante o después de su primera atención cumplan con las siguientes condiciones: 
	
	--1.1 Procedimiento A.
	
	-- Eliminamos, Dx= K02, K04 y K05
	SELECT *
	INTO #his_minsa_SinK
	FROM #his_minsa
	
	delete from #his_minsa_SinK 
	where id_cita in (
						select
							distinct
							id_cita
						from #his_minsa 
						where substring(cod_item,1,3) IN ('K02','K04','K05','K08')
					 ) 
	
	IF OBJECT_ID('Tempdb..#hisminsa_numa') IS NOT NULL DROP TABLE #hisminsa_numa
	select
		distinct
		renaes			, 
		num_doc			,
		fecha_atencion	,
		edad
	into #hisminsa_numa
	from (	select
				renaes			,
				num_doc			,
				fecha_atencion	,
				edad			,
				num_a			= iif((	num_d0150 = 1 and num_u160 = 1 and num_d1310 = 1		and
										num_d1330 = 1 and num_d1206d1208 = 1 and num_u510 = 1)	or
										(num_d0150 = 1 and num_d1310 = 1 and num_d1330 = 1 and
										 num_d1206d1208 = 1 and num_u510 = 1),
										 1,0)
			from (	select
						renaes			,
						num_doc			,
						fecha_atencion	,
						edad			= edad_reg	,
						id_cita			,
						num_d0150		= max(iif( cod_item in ('D0150') and tipo_dx = 'D' and (valor_lab not in ('G') or valor_lab is null),1,0)),
						num_u160		= max(iif( cod_item = 'u160' and tipo_dx  = 'D' and (valor_lab not in ('G') or valor_lab is null),1,0)),
						num_d1310		= max(iif( cod_item = 'd1310' and tipo_dx = 'D' and (valor_lab not in ('G') or valor_lab is null),1,0)),
						num_d1330		= max(iif( cod_item = 'd1330' and tipo_dx = 'D' and (valor_lab not in ('G') or valor_lab is null),1,0)),
						num_d1206d1208	= max(iif( cod_item in ('D1206','D1208','D1204') and tipo_dx='D' and (valor_lab not in ('G') or valor_lab is null),1,0)), -- Eliminar enero el D1204
						num_u510		= max(iif( cod_item = 'U510' and tipo_dx  = 'D' and (valor_lab not in ('G') or valor_lab is null),1,0))
					from #his_minsa_SinK
					where	year(fecha_atencion)	 = 2023 AND
							month(fecha_atencion)	<= 8
					group by renaes, num_doc, fecha_atencion, edad_reg, id_cita
				 ) as t 
	) as t where num_a = 1

	
		--Validacion de numerador A
		select
			distinct
			renaes			,
			num_doc			,
			fecha_atencion	,
			edad			,
			num_a			,
			fecha_num_a
		into #hisminsa_numa_final
		from (	select
					a.renaes		,
					a.num_doc		,
					a.fecha_atencion,
					a.edad		,
					num_a		= 1	,
					fecha_num_a = b.fecha_atencion,
					id = row_number() over(partition by a.num_doc, a.renaes
											   order by b.fecha_atencion asc)
				from #hisminsa_den a
				inner join #hisminsa_numa b on a.num_doc = b.num_doc and
												a.renaes = b.renaes
				where b.fecha_atencion >= a.fecha_atencion
		) as t where id = 1



	--1.2 Procedimiento B.
	
	-- Eliminamos, Dx= D0150
	SELECT *
	INTO #his_minsa_SinD
	FROM #his_minsa
	
	delete from #his_minsa_SinD 
	where id_cita in (	select
							distinct
							id_cita
						from #his_minsa 
						where cod_item = 'D0150')
	
	select
		distinct
		renaes			, 
		num_doc			,
		fecha_atencion	,
		edad
	into #hisminsa_numb
	from (	select
				renaes			,
				num_doc			,
				fecha_atencion	,
				edad			,
				num_b			= iif(num_DE = 1 and num_u510 = 1,1,0)
			from (	select
						renaes			,
						num_doc			,
						fecha_atencion	,
						edad			= edad_reg	,
						id_cita			,
						num_DE = max(iif(substring(cod_item,1,1) in ('D','E') and
																tipo_dx = 'D' and
										(valor_lab not in ('G') or valor_lab is null),
									 1,0)),
						num_u510 = max(iif(cod_item = 'U510' and
											tipo_dx = 'D'	 and
										  (valor_lab not in ('G') or valor_lab is null),
									 1,0))
					from #his_minsa_SinD 
					where	year(fecha_atencion)   = 2023 and
							month(fecha_atencion) <= 8
					group by renaes, num_doc, fecha_atencion, edad_reg, id_cita
			) as t 
	) as t where num_b=1

/*No ingresan los de la condición A, para esta condición se toman los que
presentan morbilidad con condición de alta a partir de la segunda cita*/

SELECT
	Id = concat(n.renaes,n.num_doc,n.fecha_atencion),
	n.*
INTO #T
FROM #hisminsa_numb n


SELECT
	t.renaes		,
	t.num_doc		,
	t.fecha_atencion,
	t.edad
INTO #hisminsa_numb_2
FROM #T t
where Id not in
				(SELECT
					 Id = concat(b.renaes,b.num_doc,b.fecha_atencion)
				 FROM #hisminsa_numb b
				 INNER JOIN #hisminsa_numa_final a ON b.num_doc		  = a.num_doc		AND
													 b.renaes		  = a.renaes		AND
													 b.fecha_atencion = a.fecha_atencion)
				

		--Validacion de numerador B
		select
			distinct
			renaes			,
			num_doc			,
			fecha_atencion	,
			edad			,
			num_b			,
			fecha_num_b
		into #hisminsa_numb_final
		from (	select
					a.renaes		,
					a.num_doc		,
					a.fecha_atencion,
					a.edad			,
					num_b		= 1	,
					fecha_num_b = b.fecha_atencion,
					id = row_number() over(partition by a.num_doc, a.renaes
											   order by b.fecha_atencion asc)
				from #hisminsa_den a
				inner join #hisminsa_numb_2 b on a.num_doc = b.num_doc and
												  a.renaes = b.renaes
				where b.fecha_atencion >= a.fecha_atencion
		) as t where id = 1


--%%%%%%%%%%%%%%%%
--	INDICADOR
--%%%%%%%%%%%%%%%%
select
	a.renaes	,
	a.num_doc	,
	a.edad		,
	fecha_eval =	case
						when b.fecha_num_a is null and c.fecha_num_b is null		then a.fecha_atencion 
						when b.fecha_num_a is null and c.fecha_num_b is not null	then c.fecha_num_b
						when b.fecha_num_a is not null and c.fecha_num_b is null	then b.fecha_num_a 
						when b.fecha_num_a is not null and c.fecha_num_b is not null and b.fecha_num_a <= c.fecha_num_b	then b.fecha_num_a
						when b.fecha_num_a is not null and c.fecha_num_b is not null and b.fecha_num_a >  c.fecha_num_b	then c.fecha_num_b 	
					end	,
	den			= 1		,
	num			= iif(b.num_a = 1 or c.num_b = 1,1,0),
	num_a		= isnull(b.num_a,0),
	b.fecha_num_a,
	num_b		= isnull(c.num_b,0),
	c.fecha_num_b
into #tabla_reporte
from #hisminsa_den a 
left join #hisminsa_numa_final b on a.renaes		 = b.renaes			and
									a.num_doc		 = b.num_doc		and
									a.fecha_atencion = b.fecha_atencion and
									a.edad			 = b.edad
left join #hisminsa_numb_final c on a.renaes		 = c.renaes			and
									a.num_doc		 = c.num_doc		and
									a.fecha_atencion = c.fecha_atencion and
									a.edad			 = c.edad

--===================
-- REPORTE
--===================
--drop table BD_HISINDICADORES.dbo.DL1153_2023_CG13_AltaOdontologica

--ALTER TABLE BD_HISINDICADORES.dbo.DL1153_2023_CG13_AltaOdontologica 
--ADD Indicador INT NULL, Mes_Corte INT NULL;

--UPDATE a SET
--	a.Indicador = 13,
--	a.Mes_Corte = 6
--FROM DL1153_2023_CG13_AltaOdontologica a

--INSERT INTO BD_HISINDICADORES.dbo.DL1153_2023_CG13_AltaOdontologica
IF OBJECT_ID('tempdb..#2024_CG13_AltaOdontologica') IS NOT NULL DROP TABLE #2024_CG13_AltaOdontologica
select 
	Diris		 = B.diris,
	Departamento =	CASE 
						WHEN B.DESC_DPTO='LIMA' AND B.DESC_PROV='LIMA' THEN 'LIMA METROPOLITANA'
						WHEN B.DESC_DPTO='LIMA' AND B.DESC_PROV<>'LIMA' THEN 'LIMA PROVINCIAS'
						ELSE B.DESC_DPTO 
					END,
	Provincia	= B.desc_prov,
	Distrito	= B.desc_dist,
	Red =	case
				when b.DIRIS like '%diris%' then b.diris
				else B.DESC_RED
			end,
	MicroRed = b.desc_mred,
	b.cat_estab,
	eess_nombre = b.desc_estab,
	año			= year(a.fecha_eval),
	mes			= month(a.fecha_eval),
	filtro_aplicacion = d.Tipo,
	a.*,
	Indicador = 13,
	Mes_Corte = 8
INTO #2024_CG13_AltaOdontologica
from #tabla_reporte a
inner join BD_BACKUP_OGEI.dbo.Renaes_20230920 b on convert(int,a.renaes)=convert(int,b.COD_ESTAB)
left join BD_HISINDICADORES.dbo.TBL_DL1153_2023_13_EESS_DSABU c on convert(int,a.renaes)=convert(int,c.renipres)
inner join (select distinct renaes, tipo from BD_HISINDICADORES.dbo.DL1153_2023_EESS_EVAL where ind=13) d on convert(int,a.renaes)=convert(int,d.renaes)
and convert(int,b.ambito)=1


select Diris, Departamento, Provincia, Distrito, Red, MicroRed, Cat_estab, renaes, eess_nombre, mes, año, filtro_aplicacion
, sum(den) den, sum(num) num, sum(num_a) num_a, sum(num_b) num_b
from #2024_CG13_AltaOdontologica
WHERE Mes_Corte = 8
group by Diris, Departamento, Provincia, Distrito, Red, MicroRed, Cat_estab,renaes, eess_nombre, mes, año, filtro_aplicacion

drop table #his_minsa
drop table #hisminsa_den
drop table #hisminsa_numa
drop table #hisminsa_numa_final
drop table #hisminsa_numb
drop table #hisminsa_numb_final
drop table #tabla_reporte
-- =D