USE [BDHIS_MINSA]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author     : Martin Jaramillo Morales
-- Description: Genera el Json para las tramas de integracion
-- Create date: 20200329
-- =============================================

--EXEC USP_INTEGRACION_generarJsonIntegracion
CREATE PROCEDURE [dbo].[USP_INTEGRACION_generarJsonIntegracion] 
AS
BEGIN

	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_CITA) BEGIN DELETE TRAMA_INTEGRACION_CITA END
	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_CITA_DX) BEGIN DELETE TRAMA_INTEGRACION_CITA_DX END
	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE) BEGIN DELETE TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE END
	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_PACIENTE) BEGIN DELETE TRAMA_INTEGRACION_PACIENTE END
	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_DX_CITA_TMP) BEGIN DELETE TRAMA_INTEGRACION_DX_CITA_TMP END
	IF EXISTS (SELECT V_CITA_ORIGEN FROM TRAMA_INTEGRACION_DX_CITA) BEGIN DELETE TRAMA_INTEGRACION_DX_CITA END

	-- INSERCION DE CITA
	INSERT INTO TRAMA_INTEGRACION_CITA (V_CITA_ORIGEN, V_JSON)
	SELECT DISTINCT V_CITA_ORIGEN,
					CONCAT(
					'"edadregistro":"', CAST(I_CITA_EDAD_REGISTRO AS VARCHAR(MAX)), '", ',
					'"idtipedadregistro":"', CAST(V_CITA_ID_TIPO_EDAD_REGISTRO AS VARCHAR(MAX)), '", ',
					'"diaedad":"', CAST(I_CITA_DIA_EDAD AS VARCHAR(MAX)), '", ',
					'"mesedad":"', CAST(I_CITA_MES_EDAD AS VARCHAR(MAX)), '", ',
					'"annioedad":"', CAST(I_CITA_ANNIO_EDAD AS VARCHAR(MAX)), '", ',
					'"idfinanciador":"', CAST(V_CITA_ID_FINANCIADOR AS VARCHAR(MAX)), '", ',
					'"idturno":"', CAST(V_CITA_ID_TURNO AS VARCHAR(MAX)), '", ',
					'"componente": "",',
					'"idestablecimiento":"', CAST(I_CITA_CODIGO_ESTABLECIMIENTO AS VARCHAR(MAX)), '", ',
					'"numeroafiliacion":"', CAST(V_CITA_NUMERO_AFILIACION AS VARCHAR(MAX)), '", ',
					'"fechaatencion":"', CAST(V_CITA_FECHA_ATENCION AS VARCHAR(MAX)), '", ',
					'"idups":"', CAST(V_CITA_ID_UPS AS VARCHAR(MAX)), '", ',
					'"estadoregistro":"', CAST(C_CITA_ESTADO_REGISTRO AS VARCHAR(MAX)), '", ',
					'"fgdiag":"', CAST(I_CITA_FGDIG AS VARCHAR(MAX)), '", ',
					'"items": [')
	FROM TRAMA_INTEGRACION WHERE I_ESTADO=0
	PRINT 'INSERT TRAMA_INTEGRACION_CITA'

	-- INSERCION DE CITA CON SUS DX
	INSERT INTO TRAMA_INTEGRACION_CITA_DX (V_CITA_ORIGEN, V_CITA_ITEMS_CODIGO, C_CITA_ITEMS_TIPO_DIAGNOSTICO, C_CITA_ITEMS_VALOR_LAB_1, C_CITA_ITEMS_VALOR_LAB_2, C_CITA_ITEMS_VALOR_LAB_3, V_JSON)
	SELECT DISTINCT V_CITA_ORIGEN,
					V_CITA_ITEMS_CODIGO, 
					C_CITA_ITEMS_TIPO_DIAGNOSTICO, 
					C_CITA_ITEMS_VALOR_LAB_1, 
					C_CITA_ITEMS_VALOR_LAB_2, 
					C_CITA_ITEMS_VALOR_LAB_3, 
					CONCAT(
					'{',
					'"codigo":"' , CAST(V_CITA_ITEMS_CODIGO AS VARCHAR(MAX)) , '", ',
					'"tipoitem":"', CAST((SELECT Fg_Tipo FROM MAESTRO_HIS_CIE_CPMS WHERE Codigo_Item IN (V_CITA_ITEMS_CODIGO)) AS VARCHAR(MAX)) , '", ',
					'"tipodiagnostico":"' , CAST(C_CITA_ITEMS_TIPO_DIAGNOSTICO AS VARCHAR(MAX)) , '", ',
					'"labs": [',
					CASE WHEN (C_CITA_ITEMS_VALOR_LAB_1 IS NOT NULL) THEN (+'{"codigo":' + '"", '+
					'"valor":"'+ CAST(C_CITA_ITEMS_VALOR_LAB_1 AS VARCHAR(MAX)) + '"}') END,

					CASE WHEN (C_CITA_ITEMS_VALOR_LAB_1 IS NOT NULL AND C_CITA_ITEMS_VALOR_LAB_2 IS NOT NULL) THEN (+',{"codigo":' + '"", '+
					'"valor":"'+ CAST(C_CITA_ITEMS_VALOR_LAB_2 AS VARCHAR(MAX)) + '"}') END,

					CASE WHEN (C_CITA_ITEMS_VALOR_LAB_1 IS NOT NULL AND C_CITA_ITEMS_VALOR_LAB_2 IS NOT NULL AND C_CITA_ITEMS_VALOR_LAB_3 IS NOT NULL) THEN (+',{"codigo":' + '"", '+
					'"valor":"'+ CAST(C_CITA_ITEMS_VALOR_LAB_3 AS VARCHAR(MAX)) + '"}]}')  ELSE ']}' END) 
	FROM TRAMA_INTEGRACION WHERE I_ESTADO=0
	PRINT 'INSERT TRAMA_INTEGRACION_CITA_DX'

	-- INSERCION DE PERSONAL QUE ATIENDE Y REGISTRA
	INSERT INTO TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE (V_CITA_ORIGEN, V_JSON)
	SELECT DISTINCT V_CITA_ORIGEN,
					CONCAT(
					'"personal_registra": {',
					'"idtipodoc":"' , CAST([V_PEREGISTRA_ID_TIPODOC] AS VARCHAR(MAX)) , '", ',
					'"nrodocumento":"', CAST([V_PEREGISTRA_NRO_DOCUMENTO] AS VARCHAR(MAX)) , '", ',
					'"apepaterno":"', CAST([V_PEREGISTRA_APEPATERNO] AS VARCHAR(MAX)) , '", ',
					'"apematerno":"', CAST([V_PEREGISTRA_APEMATERNO] AS VARCHAR(MAX)) , '", ',
					'"nombres":"', CAST([V_PEREGISTRA_NOMBRES] AS VARCHAR(MAX)) , '", ',
					'"fechanacimiento":"', CAST([V_PEREGISTRA_FECHA_NACIMIENTO] AS VARCHAR(MAX)) , '", ',
					'"idsexo":"', CAST([C_PEREGISTRA_SEXO] AS VARCHAR(MAX)) , '", ',
					'"idpais":"', CAST([V_PEREGISTRA_ID_PAIS] AS VARCHAR(MAX)) , '", ',
					'"idprofesion":"', CAST([V_PEREGISTRA_ID_PROFESION] AS VARCHAR(MAX)) , '", ',
					'"idcondicion":"', CAST([V_PEREGISTRA_CONDICION] AS VARCHAR(MAX))  , '"}',
					',"personal_atiende": {',
					'"idtipodoc":"' , CAST([V_PEATIENDE_ID_TIPODOC] AS VARCHAR(MAX)) , '", ', 
					'"nrodocumento":"', CAST([V_PEATIENDE_NRO_DOCUMENTO] AS VARCHAR(MAX)) , '", ', 
					'"apepaterno":"', CAST([V_PEATIENDE_APEPATERNO] AS VARCHAR(MAX)) , '", ',
					'"apematerno":"', CAST([V_PEATIENDE_APEMATERNO] AS VARCHAR(MAX)) , '", ',
					'"nombres":"', CAST([V_PEATIENDE_NOMBRES] AS VARCHAR(MAX)) , '", ',
					'"fechanacimiento":"', CAST([V_PEATIENDE_FECHA_NACIMIENTO] AS VARCHAR(MAX)) , '", ',
					'"idsexo":"', CAST([C_PEATIENDE_SEXO] AS VARCHAR(MAX)) , '", ',
					'"idpais":"', CAST([V_PEATIENDE_ID_PAIS] AS VARCHAR(MAX)) , '", ',
					'"idprofesion":"', CAST([V_PEATIENDE_ID_PROFESION] AS VARCHAR(MAX)) , '", ',
					'"idcondicion":"', CAST([V_PEATIENDE_CONDICION] AS VARCHAR(MAX))  , '"}')
	FROM TRAMA_INTEGRACION WHERE I_ESTADO=0
	PRINT 'INSERT TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE'

	-- INSERCION DE PACIENTE
	INSERT INTO TRAMA_INTEGRACION_PACIENTE (V_CITA_ORIGEN, V_JSON)
	SELECT DISTINCT V_CITA_ORIGEN,
					CONCAT(
					'"paciente": {',
					'"idtipodoc":"' , CAST(V_PACIENTE_ID_TIPODOC AS VARCHAR(MAX)) , '", ', 
					'"nrodocumento":"', CAST(V_PACIENTE_NRO_DOCUMENTO AS VARCHAR(MAX)) , '", ', 
					'"apepaterno":"', CAST(V_PACIENTE_APEPATERNO AS VARCHAR(MAX)) , '", ',
					'"apematerno":"', CAST(V_PACIENTE_APEMATERNO AS VARCHAR(MAX)) , '", ',
					'"nombres":"', CAST(V_PACIENTE_NOMBRES AS VARCHAR(MAX)) , '", ',
					'"fechanacimiento":"', CAST(V_PACIENTE_FECHA_NACIMIENTO AS VARCHAR(MAX)) , '", ',
					'"idsexo":"', CAST(C_PACIENTE_SEXO AS VARCHAR(MAX)) , '", ',
					'"idflag":"', CAST(C_PACIENTE_ID_FLAG AS VARCHAR(MAX)) , '", ',
					'"idpais":"', CAST(V_PACIENTE_ID_PAIS AS VARCHAR(MAX)) , '", ',
					'"idestablecimiento":"', CAST(I_PACIENTE_CODIGO_ESTABLECIMIENTO AS VARCHAR(MAX)) , '", ',
					'"idetnia":"', CAST(C_PACIENTE_ID_ETNIA AS VARCHAR(MAX)) , '", ',
					'"nrohistoriaclinica":"', CAST(V_PACIENTE_NRO_HC AS VARCHAR(MAX)) , '"}') 
	FROM TRAMA_INTEGRACION WHERE I_ESTADO=0
	PRINT 'INSERT TRAMA_INTEGRACION_PACIENTE'

	-- INSERCION DE CITA CON SUS DX TEMPORAL
	INSERT INTO TRAMA_INTEGRACION_DX_CITA_TMP (V_CITA_ORIGEN, V_JSON)
	SELECT	V_CITA_ORIGEN,
			STUFF(	(SELECT  
					b.[V_JSON] + ', '
					FROM TRAMA_INTEGRACION_CITA_DX AS b
					WHERE b.V_CITA_ORIGEN = a.V_CITA_ORIGEN
					FOR XML PATH (''))
					, 1, 0, '')  AS [CitasConcatenados]
	FROM TRAMA_INTEGRACION_CITA AS a
	GROUP BY V_CITA_ORIGEN
	PRINT 'INSERT TRAMA_INTEGRACION_DX_CITA_TMP'

	 -- INSERCION DE CITA CON SUS DX
	INSERT INTO TRAMA_INTEGRACION_DX_CITA (V_CITA_ORIGEN, V_JSON)
	SELECT	V_CITA_ORIGEN, 
			SUBSTRING ([V_JSON], 1 , LEN([V_JSON])-1)
	FROM TRAMA_INTEGRACION_DX_CITA_TMP
	PRINT 'INSERT TRAMA_INTEGRACION_DX_CITA'

	  -- INSERCION DE TRAMA_INTEGRACION_CITA_JSON
	INSERT INTO TRAMA_INTEGRACION_HISMINSA_JSON (V_CITA_ORIGEN, V_JSON)
	SELECT	C.V_CITA_ORIGEN, 
			CONCAT('{', PR.V_JSON, ',', PA.V_JSON, ',"cita": {', C.V_JSON, DX.V_JSON, ']}}')
	FROM TRAMA_INTEGRACION_CITA C
	INNER JOIN TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE PR ON PR.V_CITA_ORIGEN=C.V_CITA_ORIGEN
	INNER JOIN TRAMA_INTEGRACION_PACIENTE PA ON PA.V_CITA_ORIGEN=C.V_CITA_ORIGEN
	INNER JOIN TRAMA_INTEGRACION_DX_CITA DX ON DX.V_CITA_ORIGEN=C.V_CITA_ORIGEN
	PRINT 'INSERT TRAMA_INTEGRACION_HISMINSA_JSON'

	UPDATE TRAMA_INTEGRACION SET I_ESTADO=1, D_FECHA_PROCESAMIENTO=GETDATE() WHERE I_ESTADO=0
	PRINT 'UPDATE TRAMA_INTEGRACION'

	DELETE TRAMA_INTEGRACION_CITA
	DELETE TRAMA_INTEGRACION_CITA_DX
	DELETE TRAMA_INTEGRACION_PERSONAL_REGISTRA_ATIENDE
	DELETE TRAMA_INTEGRACION_PACIENTE
	DELETE TRAMA_INTEGRACION_DX_CITA
	DELETE TRAMA_INTEGRACION_DX_CITA_TMP
END