IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SPUSS_276_YOGUN_BAKIM_GENEL_DEGERLENDIRME_KAYIT]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE SPUSS_276_YOGUN_BAKIM_GENEL_DEGERLENDIRME_KAYIT
GO

CREATE PROCEDURE [dbo].[SPUSS_276_YOGUN_BAKIM_GENEL_DEGERLENDIRME_KAYIT] 
	@HDOSYAID INT=0,
    @HYATISID INT=0,
	@TUMUNUTEKRAR BIT = 0	 	 
AS
BEGIN
	--SPUSS_276_YOGUN_BAKIM_GENEL_DEGERLENDIRME_KAYIT 165552,0,1
	DECLARE @HATA NVARCHAR(2000) = ''
	DECLARE @MESAJ NVARCHAR(2000) = ''
	DECLARE @SAYIHATA BIT = 0
	DECLARE @XMLBASLIK NVARCHAR(2000) = ''
	DECLARE @SUBEID INT = 1
	DECLARE @goNDERIMTABLOSU TABLE 
		(
			goNDERILECEKXML XML,
			HATA NVARCHAR(2000),
			MESAJ NVARCHAR(2000),	
			XMLBASLIK NVARCHAR(3500),
			TABLOID INT,
			MINID INT,
			MAXID INT
		)
	
	IF OBJECT_ID('tempdb..#TMPHYATIS') IS NOT NULL 
	DROP TABLE #TMPHYATIS

	IF OBJECT_ID('tempdb..#TMPTANI') IS NOT NULL 
	DROP TABLE #TMPTANI


	-- Eğer #TMPTANI tablosu daha önce oluşturulmamışsa, tablonun oluşturulması
	IF OBJECT_ID('tempdb..#TMPTANI') IS NULL
	BEGIN
		CREATE TABLE #TMPTANI (
			TICD_ICDKOD VARCHAR(10),
			TICD_ICDADI VARCHAR(200),
			TICD_ICDTURUID INT
		);
	END

	-- Veri ekleme işlemi
	IF NOT EXISTS (
		SELECT 1
		FROM HDOSYAICD
		LEFT JOIN TICD ON TICD.ICDKOD = HDOSYAICD.ICDKOD
		WHERE HDOSYAICD.ICDMDLKAYDET = 1 AND HDOSYAICD.HDOSYAID = @HDOSYAID
	)
	BEGIN
		-- Eğer HDOSYAICD tablosunda veri yoksa, #TMPTANI tablosuna varsayılan değerle satır ekle
		INSERT INTO #TMPTANI (TICD_ICDKOD, TICD_ICDADI, TICD_ICDTURUID)
		VALUES ('Z00.8', 'GENEL MUAYENELER, DİĞER', 1);
	END
	ELSE
	BEGIN
		-- Eğer veri varsa, mevcut sorgu ile değerleri al
		INSERT INTO #TMPTANI (TICD_ICDKOD, TICD_ICDADI, TICD_ICDTURUID)
		SELECT DISTINCT  
			ISNULL(TICD.ICDKOD, 'Z00.8') AS TICD_ICDKOD,
			ISNULL(TICD.ICDADI, 'GENEL MUAYENELER, DİĞER') AS TICD_ICDADI,
			ISNULL(HDOSYAICD.ICDTURUID, 1) AS TICD_ICDTURUID
		FROM HDOSYAICD
		LEFT JOIN TICD ON TICD.ICDKOD = HDOSYAICD.ICDKOD
		WHERE HDOSYAICD.ICDMDLKAYDET = 1 
			AND HDOSYAICD.HDOSYAID = @HDOSYAID;
	END

SELECT 	
	(SELECT COUNT(*) FROM #TMPTANI) AS ICD_SAYI,
	HDOSYA.SUBEID AS HDOSYA_SUBEID,
	SUBELER.SUBEADI AS SUBELER_SUBEADI,
	HDOSYA.SNOTAKIPNO AS HDOSYA_SNOTAKIPNO,
	MAX(HYATIS.HYATISID) AS HYATIS_HYATISID,
	MIN(HYATIS.HYYATISTARIH) AS HYATIS_HYYATISTARIH,
	MAX(HYATIS.HYCIKISTARIH) AS HYATIS_HYCIKISTARIH,
	MAX(HYATIS.CIKISSEVKTURUID) AS HYATIS_CIKISSEVKTURUID,
	MAX(HYATIS.HASTATIPI) AS HYATIS_HASTATIPI,
	MAX(CAST(HYATIS.ONAMALINMADURUMU AS INT)) AS HYATIS_ONAMALINMADURUMU,
    MAX(CAST(HYATIS.HAVALI_HASTA_YATAK_DURUMU AS INT)) AS HYATIS_HAVALI_HASTA_YATAK_DURUMU,
	HKIMLIK.HKANGRUBUID,
	ISNULL((SELECT SKRSKANGRUBUID  
	        FROM TKANGRUBU 
	        WHERE TKANGRUBU.KANGRUBUID = HKIMLIK.HKANGRUBUID), '9') AS HYATIS_KANGRUBUID,
	ISNULL((SELECT SKRSKANGRUBUADI 
	        FROM TKANGRUBU 
	        INNER JOIN TSKRSKANGRUBU 
	          ON TSKRSKANGRUBU.SKRSKANGRUBUKODU = TKANGRUBU.SKRSKANGRUBUID  
	        WHERE TKANGRUBU.KANGRUBUID = HKIMLIK.HKANGRUBUID), 'BELİRLENEMEDİ') AS HYATIS_KANGRUBUADI,
	MAX(TKLINIK.KLINIKKODU) AS TKLINIK_KLINIKKODU,
	MAX(TKLINIK.KLINIKADI)  AS TKLINIK_KLINIKADI,
	MAX(HYATIS.BASAMAK) AS HYATIS_BASAMAK,
	CASE 
		WHEN MAX(HYATIS.BASAMAK) = 1 THEN '1. BASAMAK YOĞUN BAKIM'
		WHEN MAX(HYATIS.BASAMAK) = 2 THEN '2. BASAMAK YOĞUN BAKIM'
		WHEN MAX(HYATIS.BASAMAK) = 3 THEN '3. BASAMAK YOĞUN BAKIM'
	END AS HYATIS_BASAMAK_ADI,
	--ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR = 'Saglik-Net' AND PROGNAME = 'MEDISOFT' AND KEYNAME = CONVERT(VARCHAR, HDOSYA.SUBEID) + ' numaralı şubenin kurum numarası'), '') AS SAGLIKNETKURUMKODU
	    ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Saglik-Net' AND PROGNAME='MEDISOFT' AND KEYNAME= CONVERT(VARCHAR,HDOSYA.SUBEID)+' numarali subede Yenidoğanların Kimliksiz fatura edilebilir gün sayısı'),'') 	AS SAGLIKNETKIMLIKSIZYENIDOGANGUN,

        CASE WHEN (SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Saglik-Net' AND PROGNAME='MEDISOFT' AND /* VALUESTR='1' AND*/ KEYNAME LIKE CONVERT(VARCHAR,HDOSYA.SUBEID)+' numaral% %ubede Sa%l%k Net Online test modu aktif')='1' THEN
		  '10000038' 
		ELSE
		   ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Saglik-Net' AND PROGNAME='MEDISOFT' AND KEYNAME= CONVERT(VARCHAR,HDOSYA.SUBEID)+' numaralı şubenin kurum numarası'),'') 
		END AS SAGLIKNETKURUMKODU,

		 CASE WHEN (SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Saglik-Net' AND PROGNAME='MEDISOFT' AND /* VALUESTR='1' AND*/ KEYNAME LIKE CONVERT(VARCHAR,HDOSYA.SUBEID)+' numaral% %ubede Sa%l%k Net Online test modu aktif')='1' THEN
		  '3bc26a7d-4a19-4edf-ab9f-1413ac85e7d0' /*TEST KTS FİRMA KODU*/
		ELSE
		   'C740D0288ED4C45FE0407C0A04162BDD'  /*KTS TALYA*/ 
		END AS SNOKTSFIRMAKODU,

		ISNULL((SELECT TOP 1 VALUESTR FROM CONFIG WITH(NOLOCK) WHERE SECTIONSTR='Saglik-Net' AND PROGNAME='MEDISOFT' AND KEYNAME= CONVERT(VARCHAR,HDOSYA.SUBEID)+' numarali subede Hasta kayıt gönderiminde referans no ön Karakteri'),'') AS REFNOONEK

INTO #TMPHYATIS
FROM HYATIS WITH(NOLOCK)	
	INNER JOIN HDOSYA WITH(NOLOCK) ON HDOSYA.HDOSYAID = HYATIS.HDOSYAID 
	INNER JOIN SUBELER WITH(NOLOCK) ON SUBELER.SUBEID = HDOSYA.SUBEID
	INNER JOIN HKIMLIK WITH(NOLOCK) ON HKIMLIK.HKIMLIKID = HDOSYA.HKIMLIKID
	LEFT JOIN TBOLUM WITH(NOLOCK) ON HDOSYA.BOLUMID = TBOLUM.BOLUMID    
    LEFT JOIN TKLINIK WITH(NOLOCK) ON TBOLUM.KLINIKKODU = TKLINIK.KLINIKKODU 
WHERE HDOSYA.HDIPTAL = 0
  AND HDOSYA.HDOSYAID = @HDOSYAID
  AND (@HYATISID = 0 OR HYATIS.HYATISID = @HYATISID)
GROUP BY 
	HDOSYA.SUBEID,
	SUBELER.SUBEADI,
	HDOSYA.SNOTAKIPNO,
	HKIMLIK.HKANGRUBUID

	
	IF (SELECT COUNT(*) FROM #TMPHYATIS) = 0 
	BEGIN
		SET @SAYIHATA=1
		SET @MESAJ= @MESAJ + 'Dosyaya ait USS 276 yoğun bakım kaydı bulunamadı! '
	END

	IF (SELECT COUNT(*) FROM #TMPHYATIS WHERE HDOSYA_SUBEID IS NULL) > 0 
		SET @HATA = @HATA + 'İşlemin şube kaydı bulunamadı! '

	IF (SELECT HDOSYA_SUBEID FROM #TMPHYATIS WHERE ISNULL(HDOSYA_SNOTAKIPNO,'')='') > 0 
		SET @HATA = @HATA + 'Sağlık Net hasta takip numarası alınmadan USS sistemine çıkış kaydı yapılamaz. '

	--IF (SELECT HDOSYA_SUBEID FROM #TMPHYATIS WHERE ISNULL(HYATIS_KANGRUBUADI,'')='') > 0 
	--	SET @HATA = @HATA + 'Kimlik Kartında Hasta Kangrubu Seçilmemiş!!! '
    
	IF (SELECT HDOSYA_SUBEID FROM #TMPHYATIS WHERE ISNULL(HYATIS_BASAMAK_ADI,'')='') > 0 
		SET @HATA = @HATA + 'Yatış Kartında Hasta Yoğun Bakım Basamak Değeri Seçilmemiş!!! '

    IF (SELECT HDOSYA_SUBEID FROM #TMPHYATIS WHERE ISNULL(HYATIS_HASTATIPI,'')='') > 0 
		SET @HATA = @HATA + 'Yatış Kartında Yoğun Bakım Hasta Tipi Seçilmemiş!!! '
    
	IF @HATA='' AND @SAYIHATA=0
	BEGIN		
		SELECT @SUBEID = HDOSYA_SUBEID FROM #TMPHYATIS
		DECLARE @TBLXMLBASLIK TABLE (XMLBASLIK NVARCHAR(2000), HATA NVARCHAR(2000),MESAJ NVARCHAR(2000))
		INSERT INTO @TBLXMLBASLIK (XMLBASLIK, HATA, MESAJ) EXEC SPUSS_000_XML_BASLIK @SUBEID		
		SELECT @HATA=HATA, @MESAJ=MESAJ, @XMLBASLIK=XMLBASLIK FROM @TBLXMLBASLIK		
	END


	IF @HATA = '' AND @SAYIHATA=0
	BEGIN
	   		
   		DECLARE @CURYATISID INT
		DECLARE CURYATIS CURSOR FOR SELECT HYATIS_HYATISID FROM #TMPHYATIS
		OPEN CURYATIS
		FETCH NEXT FROM CURYATIS INTO @CURYATISID
		WHILE @@FETCH_STATUS =0
		BEGIN

			
					BEGIN TRY
						INSERT INTO @goNDERIMTABLOSU (goNDERILECEKXML,HATA,MESAJ,XMLBASLIK,TABLOID,MINID,MAXID) 
						SELECT							 
							(
							 SELECT 
							   NEWID() as 'messageGuid/@value',
							   '1' as 'messageType/@version',
							   '0a9ba485-e7e0-4abb-9c86-0a14fd364bb8' as 'messageType/@codeSystemGuid',
							   '276' as 'messageType/@code',
							   'Yoğun Bakım Değerlendirme Genel Bilgiler' as 'messageType/@value',
							   LEFT(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19),GETDATE(),120),' ',''),'-',''),':',''),12) as 'documentGenerationTime/@value',
									 (
						 
										SELECT	
											'1' AS 'healthcareProvider/@version',
											'c3eade04-4f91-5dab-e043-14031b0ac9f9' as 'healthcareProvider/@codeSystemGuid',
											SAGLIKNETKURUMKODU as 'healthcareProvider/@code',
											SUBELER_SUBEADI as 'healthcareProvider/@value'  
											FOR XML PATH('author'), TYPE
									  ),
										--'C740D0288ED4C45FE0407C0A04162BDD' as 'firmaKodu/@value',
										SNOKTSFIRMAKODU as 'firmaKodu/@value',
										(
										SELECT 
											(
												SELECT
													ISNULL(HDOSYA_SNOTAKIPNO,'') AS 'SYSTakipNo/@value'
												FOR XML PATH('HASTA_TAKIP_BILGISI'), TYPE
											),
											--*******
											(--RECORDDATA
												SELECT 
												   --<HAVALI_HASTA_YATAK_DURUMU version="1" codeSystemGuid="c9d56fee-d143-4602-ad7b-ba131ef92ad9" code="Code" value="HAVALI_HASTA_YATAK_DURUMU" />
												    CASE WHEN HYATIS_HAVALI_HASTA_YATAK_DURUMU=1 THEN 'EVET' ELSE 'HAYIR' END  AS 'HAVALI_HASTA_YATAK_DURUMU/@value',
													'1' AS 'HAVALI_HASTA_YATAK_DURUMU/@version',
													'c9d56fee-d143-4602-ad7b-ba131ef92ad9' AS 'HAVALI_HASTA_YATAK_DURUMU/@codeSystemGuid',
													CASE WHEN HYATIS_HAVALI_HASTA_YATAK_DURUMU=1 THEN 1 ELSE 2 END AS 'HAVALI_HASTA_YATAK_DURUMU/@code',

                                                   --<KAN_GRUBU version="1" codeSystemGuid="a3d6e943-5d85-4c75-ac72-709115974fb7" code="Code" value="KAN_GRUBU" />												   
												   HYATIS_KANGRUBUADI 'KAN_GRUBU/@value',
													'1' AS 'KAN_GRUBU/@version',
													'a3d6e943-5d85-4c75-ac72-709115974fb7' AS 'KAN_GRUBU/@codeSystemGuid',
													HYATIS_KANGRUBUID 'KAN_GRUBU/@code',

													--<YOGUN_BAKIM_GIRIS_ZAMANI value="YOGUN_BAKIM_GIRIS_ZAMANI" />
													ISNULL(replace(convert(varchar(8), HYATIS_HYYATISTARIH, 112)+convert(varchar(8), HYATIS_HYYATISTARIH, 114), ':',''),'')AS 'YOGUN_BAKIM_GIRIS_ZAMANI/@value',
													--<YOGUN_BAKIM_CIKIS_ZAMANI value="YOGUN_BAKIM_CIKIS_ZAMANI" />
													ISNULL(replace(convert(varchar(8), HYATIS_HYCIKISTARIH, 112)+convert(varchar(8), HYATIS_HYCIKISTARIH, 114), ':',''),'')AS 'YOGUN_BAKIM_CIKIS_ZAMANI/@value',
                                                     
													
													--<YOGUN_BAKIM_TIPI version="1" codeSystemGuid="e725df2c-402f-4f0d-ae8a-f4e23b6e178c" code="Code" value="YOGUN_BAKIM_TIPI" />
													'1' AS 'YOGUN_BAKIM_TIPI/@version',
														'e725df2c-402f-4f0d-ae8a-f4e23b6e178c' AS 'YOGUN_BAKIM_TIPI/@codeSystemGuid',
														CASE HYATIS_HASTATIPI
														WHEN 1 THEN '1'
														WHEN 2 THEN '2'													
														WHEN 3 THEN '3'															
														END AS 'YOGUN_BAKIM_TIPI/@code',

														CASE HYATIS_HASTATIPI
														WHEN 1 THEN 'ERİŞKİN'
														WHEN 2 THEN 'ÇOCUK'													
														WHEN 3 THEN  'YENIDOGAN'
														END AS 'YOGUN_BAKIM_TIPI/@value',

                                                     --<YOGUN_BAKIM_UNITE_ADI version="1" codeSystemGuid="c04bee57-c5d4-443d-e040-7b0a6f146a3d" code="Code" value="YOGUN_BAKIM_UNITE_ADI" />
													  
													   '1' AS 'YOGUN_BAKIM_UNITE_ADI/@version',
																	 'c04bee57-c5d4-443d-e040-7b0a6f146a3d' AS 'YOGUN_BAKIM_UNITE_ADI/@codeSystemGuid' ,
																	 TKLINIK_KLINIKKODU AS 'YOGUN_BAKIM_UNITE_ADI/@code', 
																	 TKLINIK_KLINIKADI AS 'YOGUN_BAKIM_UNITE_ADI/@value',
													 
													 --<YOGUN_BAKIM_UNITESI_SEVIYESI version="1" codeSystemGuid="3c20a43e-74ee-4a04-9649-05359b5f9c5d" code="Code" value="YOGUN_BAKIM_UNITESI_SEVIYESI" />
													   '1' AS 'YOGUN_BAKIM_UNITESI_SEVIYESI/@version',
																	 '3c20a43e-74ee-4a04-9649-05359b5f9c5d' AS 'YOGUN_BAKIM_UNITESI_SEVIYESI/@codeSystemGuid' ,
																	 HYATIS_BASAMAK AS 'YOGUN_BAKIM_UNITESI_SEVIYESI/@code', 
																	 HYATIS_BASAMAK_ADI AS 'YOGUN_BAKIM_UNITESI_SEVIYESI/@value',
													
													--<HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU version="1" codeSystemGuid="c9d56fee-d143-4602-ad7b-ba131ef92ad9" code="Code" value="HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU" />
													 CASE WHEN HYATIS_ONAMALINMADURUMU=1 THEN 'EVET' ELSE 'HAYIR' END  AS 'HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU/@value',
													'1' AS 'HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU/@version',
													'c9d56fee-d143-4602-ad7b-ba131ef92ad9' AS 'HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU/@codeSystemGuid',
													CASE WHEN HYATIS_ONAMALINMADURUMU=1 THEN 1 ELSE 2 END AS 'HASTA_BILGILENDIRME_ONAM_ALINMA_DURUMU/@code',

													--<YOGUN_BAKIM_YATIS_TANI_BILGISI>
													--<TANI_TURU version="1" codeSystemGuid="55894edb-1a8c-4f7f-a447-0119e61c14f1" code="Code" value="TANI_TURU" />
													--<ICD10 version="1" codeSystemGuid="c3eaabad-8c4c-56ee-e043-14031b0a5530" code="Code" value="ICD10" />
												    --</YOGUN_BAKIM_YATIS_TANI_BILGISI>
													(/*p3*/
																SELECT 
																		CASE
																		WHEN ICD_SAYI>0
																		THEN
																				(
																					SELECT	'1' AS 'TANI_TURU/@version',
																							'55894edb-1a8c-4f7f-a447-0119e61c14f1' AS 'TANI_TURU/@codeSystemGuid',																																													CASE TICD_ICDTURUID
																							WHEN 1 THEN '3'
																							WHEN 2 THEN '1'
																							WHEN 3 THEN '4'
																							ELSE '2' 
																							END AS 'TANI_TURU/@code',
																							CASE TICD_ICDTURUID
																							WHEN 1 THEN 'ÖN TANI'
																							WHEN 2 THEN 'ANA TANI'
																							WHEN 3 THEN 'AYIRICI TANI'
																							ELSE 'EK TANI' 
																							END AS 'TANI_TURU/@value',
																							'1' AS 'ICD10/@version',
																							'c3eaabad-8c4c-56ee-e043-14031b0a5530' AS 'ICD10/@codeSystemGuid',
																							ISNULL(CONVERT(VARCHAR(20), TICD_ICDKOD), '') AS 'ICD10/@code',
																							ISNULL(TICD_ICDADI, '') AS 'ICD10/@value'
																					FROM #TMPTANI
																					FOR XML PATH('YOGUN_BAKIM_YATIS_TANI_BILGISI'), TYPE
																				)
																		END

															)/*p3 end*/ 
															
									     
												FOR XML PATH('YOGUN_BAKIM_DEGERLENDIRME_GENEL_BILGILER'),TYPE
										
										
										)
						
											FOR XML PATH('recordData'), TYPE)
		   
				FROM #TMPHYATIS
				WHERE HYATIS_HYATISID = @CURYATISID

				FOR XML PATH(''), ROOT('SYSMessage')
	
	
							) AS goNDERILECEKXML,
							@HATA AS HATA, 
							@MESAJ AS MESAJ,
							@XMLBASLIK AS XMLBASLIK,
							@CURYATISID AS TABLOID,
							0 AS MINID,
							0 AS MAXID

					END TRY
					BEGIN CATCH
						SET @HATA = ERROR_MESSAGE()
						IF @HATA = ''
							SET @HATA = 'Bilinmeyen bir hata oluştu'

						INSERT INTO @goNDERIMTABLOSU (goNDERILECEKXML,HATA,MESAJ,XMLBASLIK,TABLOID,MINID,MAXID)			
						SELECT	'' AS goNDERILECEKXML,
								@HATA AS HATA, 
								@MESAJ AS MESAJ,
								'' AS XMLBASLIK,
								@CURYATISID AS TABLOID,
								0 AS MINID,
								0 AS MAXID
			

					END CATCH
				



		FETCH NEXT FROM CURYATIS INTO @CURYATISID 
		END -- CURYATIS son
	

		CLOSE CURYATIS
		DEALLOCATE CURYATIS

	END
	ELSE
	BEGIN

		INSERT INTO @goNDERIMTABLOSU (goNDERILECEKXML,HATA,MESAJ,XMLBASLIK,TABLOID,MINID,MAXID)
		SELECT	'' AS goNDERILECEKXML,
				@HATA AS HATA, 
				@MESAJ AS MESAJ,
				'' AS XMLBASLIK,
				@CURYATISID AS TABLOID,
				0 AS MINID,
				0 AS MAXID

		SET @HATA = ''			 
	END



	
	IF OBJECT_ID('tempdb..#TMPHYATIS') IS NOT NULL 
			DROP TABLE #TMPHYATIS

	IF OBJECT_ID('tempdb..#TMPTANI') IS NOT NULL 
		DROP TABLE #TMPTANI


	SELECT * FROM @goNDERIMTABLOSU

END
