IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_BurDirectionRIACfluoro]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_BurDirectionRIACfluoro]
GO
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO

---- =============================================
---- Author:      Vitacore (с)
---- Create date: 2017-02-07
---- Description: Передать информацию об услуге ФЛГ  в буряцкий РИАЦ
---- =============================================
--CREATE PROCEDURE [dbo].[sp_BurDirectionRIACfluoro]
--       @MedicalRecordID  uniqueidentifier
--	   ,@IDPatient	 uniqueidentifier
--	   ,@User uniqueidentifier = null
--	   ,@QueueName varchar(100) = 'Bur.RIACSync' 

--AS
--BEGIN
--	SET NOCOUNT ON;

--	declare  
--		 @PrEx uniqueidentifier
--		,@Result varchar(max)
--		,@Type varchar(255)
--		,@OwnerID uniqueidentifier
--		,@dateTime datetime = null
--		,@ContentEncoding varchar(255)
--		,@TYPE_WEBSER varchar(16) 
--		,@TYPE_OPER varchar(16)  
--	    ,@Region  varchar(32)
--	    ,@LpuMain uniqueidentifier
--		,@EventID uniqueidentifier
--		,@PostingDate varchar(10)
--		,@EventDate   varchar(10)
--		,@CloseDate varchar(10)
--		,@oid varchar(128)
--		,@Snils varchar(32)
--		,@idPlace varchar(16) 
--		,@isExtraordinary bit
--		,@idReasonExtraCode varchar(16)  
--		,@PrgDecision  varchar(255)
--		,@AddInfo  varchar(512)
	  
--		,@IDAK  uniqueidentifier = null
--		,@oid_Pat varchar(128)
--		,@AttachDate varchar(10)
--		,@Number varchar(64) -- полис
--		,@Serial varchar(16)
--		,@TypePolis int 
--		,@FirstName varchar(64) 
--		,@FatherName varchar(64) 
--		,@LastName varchar(64) 
--		,@Snils_Pat varchar(14) 
--		,@Sex int
--		,@BirthDate  varchar(10)

--		,@DeathDate  varchar(10)
--		,@Group varchar(16)
--		,@dateStart varchar(10)
--		,@dateStartWithoutReg  varchar(10)

--		select @dateTime =  GETDATE()
--			,@TYPE_WEBSER = 'tuberws'
--			,@TYPE_OPER = 'AddFluoroGraphy'  --  операция 
--			,@Type = 'fluorograf'
--			,@OwnerID =  @MedicalRecordID
--			,@ContentEncoding = 'utf-8'		

		
--		--  собираем данные для услуги ФЛГ осмотра
--		select 
--		  @EventID = eb.EventID				-- Идентификатор случая в МИС 

--		  ,@PostingDate =convert(varchar(10),acr.PostingDate, 120) 	-- 1..1 Дата события	= Дата открытия случая

--	 	  ,@EventDate =	convert(varchar(10),eb.EventDate, 120)		-- 1..1 Дата начала оказания услуги
--		  ,@CloseDate =  convert(varchar(10),eb.CloseDate, 120)		-- Дата окончания услуги

--		  ,@oid = isnull(erm.oid,'')	    -- Идентификатор МУ. ЛПУ проводившее исследование
--		  ,@Snils = IsNull(w.Snils,'')		-- Идентификатор врача. В качестве идентификатора указывается СНИЛС в формате: ЧЧЧ-ЧЧЧ-ЧЧЧ ЧЧ
--		  ,@idPlace = 
--		   case 
--			   when pdev.MobileDevice = 1 then '2'								
--			   else '1'
--		   end          -- 1..1	Место оказания. Приложение 4   (1-ЛПУ,   2-Передвижная флюороустановка)

--		  ,@isExtraordinary =  
--		   case 
--				when  (isnull(prex.NameShort,'') = '') then 0    
--				else 1									
--			end								 --  1..1	Проведен ли осмотр во внеочередном порядке

--		 ,@idReasonExtraCode = IsNull(prex.Code,'')
--		 ,@PrgDecision = te.Name			 --  1..1	Результат осмотра   = Заключение флюорографии
--		 ,@AddInfo = pg.AddInfo				 --  0..1	Примечания
--		 ,@Group = isnull(ctg.Code,'')		 --	 код контенгента

--		 from [AKUZ].T_PRG_DIAGNOSTICS pg
--			LEFT JOIN [AKUZ].T_MEDICAL_RECORD mr on mr.MedicalRecordID =  pg.MedicalRecordID
--			LEFT JOIN [AKUZ].T_DIAGNOSTICS_RESULTS dr on dr.MedicalRecordID = pg.MedicalRecordID 
--			LEFT JOIN [AKUZ].T_AMBULANCE_CARD_RECORD acr on acr.MedicalRecordID = pg.MedicalRecordID 
--			LEFT JOIN [AKUZ].T_AMBULANCE_CARD ac on acr.AmbulanceCard = ac.AmbulanceCardID
--			JOIN AKUZ.T_LPU_MAIN lm ON lm.LpuID = ac.CardLpu   
--			JOIN EHR.T_EHR_RUS_MDR308 erm ON erm.EhrRusID = lm.EhrRusMdr308

--			LEFT JOIN [AKUZ].T_EVENT_BASE eb on eb.EventID = acr.AmbulanceEvent
							 
--			LEFT JOIN [AKUZ].T_POST post on  post.ResourceID = mr.Post  
--			LEFT JOIN [AKUZ].T_WORKER w on w.WorkerID = post.Worker  -- сотрудник (получаем Идентификатор врача) 
--			LEFT JOIN [VCLib].T_ENUMS te on te.EnumID = pg.PrgDecision
		
		
--			LEFT JOIN [AKUZ].T_PRG_REASON_EXTRAORDINARY prex on prex.PrgReasonExtraordinaryID = pg.PrgReasonExtraordinary
--			LEFT JOIN [AKUZ].T_PRG_DEVICE pdev on pdev.PrgDeviceID = pg.PrgDevice
--			LEFT JOIN [AKUZ].T_PRG_CONTINGENT ctg on ctg.PrgContingentID = pg.PrgContingent

--		where  pg.MedicalRecordID = @MedicalRecordID



--		-- Для случая, когда пациент нигде не зарегистрирован, но диагностику проходит
--	    select top 1 
--		 @dateStartWithoutReg = convert(varchar(10),ak3.CreationDateTime, 120) from AKUZ.T_AMBULANCE_CARD ak3 where ak3.Patient = @IDPatient  order by ak3.CreationDateTime desc

--		--  собираем данные  о  пациенте (чтобы его добавить/изменить, если он отсутствует в базе РИАС)
--		SELECT 	top 1
--			@IDAK = ac.AmbulanceCardID, 
--			@LastName = IsNull(p.LastName,''),
--			@FirstName = IsNull(p.FirstName,''), 
--			@FatherName = IsNull(p.FatherName, ''), 
--			@Snils_Pat = IsNull(REPLACE(REPLACE(p.SNILS,'-',''),' ',''),''),
			
--			@BirthDate = convert(varchar(10),p.Birthday, 120),

--			@Sex = e.Code,
--			@Number = IsNull(pcy.Number, ''),
--			@Serial = IsNull(pcy.Serial, ''),
 
--			@TypePolis = case		-- перекодировка типа полиса для Бурятии							 
--					when pcy3.PolicyForm = 1 then 2
--					when pcy3.PolicyForm in (2, 3) then 1
--					when pcy3.PolicyForm = 4 then 3
--					else null
--			end ,			
--	    	@DeathDate =  convert(varchar(10),di.DeathDate, 120),   --     дата смерти  
			
--			@oid_Pat = IsNull(erm.oid,''),
--			@dateStart =    isnull(convert(varchar(10), r.RegistrationDate, 120), @dateStartWithoutReg) ,	--  будем считать за дату включения в контингент - дата регистрации АК 
--			@AttachDate =  convert(varchar(10), r.RegistrationDate, 120)				--	0..1	Дата прикрепления пациента к 

--			from AKUZ.T_PATIENT p
-- 			LEFT JOIN AKUZ.T_SOCIAL_STATUS ss on ss.SocialStatusID = p.SocialStatus 
--			LEFT JOIN AKUZ.T_SNILS s ON s.Snils = p.SNILS
--			LEFT JOIN VCLib.T_ENUMS e ON e.EnumID = p.Sex
--			LEFT JOIN AKUZ.T_POLICY pcy ON pcy.PolicyID = 
--				(  
--					(SELECT TOP 1 case when pcy2.ValidThrough IS NULL OR IsNull(@dateTime,@dateTime)<=pcy2.ValidThrough then pcy2.PolicyID else  NULL end
--					FROM AKUZ.T_POLICY pcy2 
--					LEFT JOIN AKUZ.T_PATIENT t21 ON t21.PatientID = pcy2.Patient
--					WHERE (pcy2.type_ IN (536) AND t21.PatientID=p.PatientID AND IsNull(@dateTime,@dateTime)>=pcy2.IssueDate)
--					ORDER BY pcy2.IssueDate DESC,IsNull(pcy2.ValidThrough,dateadd(Year,100,pcy2.IssueDate)) DESC
--					)
--				)
--			LEFT JOIN AKUZ.T_POLICY pcy3  on pcy3.PolicyID = [dbo].fn_GetOmsPolicy(p.PatientID, @dateTime)
--			left join AKUZ.T_REGISTRATION r ON p.PatientID = r.Patient   AND r.Status  = 1 
--																	AND r.RegistrationDate<=@dateTime
--																	AND r.AttachmentStatus > 0 
--																	AND r.Profile  in (1,2)
--			left JOIN AKUZ.T_LPU_MAIN lm ON lm.LpuID = r.LpuMain
--			LEFT JOIN EHR.T_EHR_RUS_MDR308 erm ON erm.EhrRusID = lm.EhrRusMdr308
--			left JOIN AKUZ.T_AMBULANCE_CARD ac  ON 
--							ac.CardLpu = r.LpuMain and 
--							p.PatientID = ac.Patient
--			LEFT JOIN AKUZ.T_PRG_CONTINGENT ctg on ctg.PrgContingentID = p.PrgContingent
--			LEFT JOIN AKUZ.T_DEATH_INFO	di on di.AmbulanceCard = ac.AmbulanceCardID
--			where p.PatientID = @IDPatient
--			ORDER BY r.RegistrationDate DESC	
				
--			Select  @Result =  		 
--			( 
--				select  
--					@TYPE_OPER			as 'TYPE_OPER'              -- операция 
--					,@TYPE_WEBSER		as 'TYPE_WEBSER'			-- тип веб-сервиса (diabetws или  tuberws)
--					,@MedicalRecordID	as 'IDOwner'
--					,@MedicalRecordID	as 'IDOwnerForm'
--					,@IDPatient         as 'Fluoro/idPatientMIS'	-- Идентификатор пациента в МИС 
--					,@EventID			as 'Fluoro/idCaseMIS'		-- Идентификатор случая в МИС 
--					,@PostingDate		as 'Fluoro/dateOpen'		-- Дата события	= Дата открытия случая
 
--					,@EventDate			as 'Fluoro/dateStart'		-- Дата начала оказания услуги
--					,@CloseDate			as 'Fluoro/dateEnd'			-- Дата окончания услуги
--					,@oid				as 'Fluoro/idOrg'			-- Идентификатор МУ. ЛПУ проводившее исследование

--					,@Snils				as 'Fluoro/idDoctorMIS'		-- Идентификатор врача. В качестве идентификатора указывается СНИЛС в формате: ЧЧЧ-ЧЧЧ-ЧЧЧ ЧЧ
--					,@idPlace			as 'Fluoro/idPlace'         -- 1..1	Место оказания. Приложение 4   (1-ЛПУ,   2-Передвижная флюороустановка)

--					,@isExtraordinary	as 'Fluoro/isExtraordinary'	-- 1..1	Проведен ли осмотр во внеочередном порядке
--					,@idReasonExtraCode as 'Fluoro/idReasonExtraCode'	-- 0..1	Код справочника «Причины внеочередного проведения». Приложение 5	
				
--					,@PrgDecision		as 'Fluoro/result'			 -- 1..1	Результат осмотра     -- Заключение флюорографии				
--					,@AddInfo			as 'Fluoro/notes'            -- 0..1	Примечания

--					--  Данные о пациенте
--					,@Number			as  'Patient/InsurancePolicy/Number'
--					,@Serial			as  'Patient/InsurancePolicy/Serial'	
--					,@TypePolis 		as  'Patient/InsurancePolicy/Type'	
--					,@FirstName			as  'Patient/Firstname'		
--					,@FatherName		as  'Patient/Middlename'    
--					,@LastName			as  'Patient/Familyname'
--					,@Snils_Pat			as  'Patient/SNILS'	
--					,@Sex				as  'Patient/Sex'	
--					,@BirthDate			as  'Patient/BirthDate' 
--					,@oid_Pat			as  'Patient/idOrg'
--					,@AttachDate		as  'Patient/attachDate'
--					,@DeathDate			as  'Patient/deathDate'
--					,@IDPatient			as  'Patient/IdPatientMIS'
--					,@Group				as  'Patient/TuberGroups/Group'
--					,@DateStart			as  'Patient/TuberGroups/DateStart'					
--				for xml path(''),
--				root('RIAC')
--			)
	   
--			-- Отправка
--			INSERT INTO [AKUZ].[T_RABBIT_SEND_OBJECT]
--				([RabbitSendObjectID] ,[QueueName] ,[Content] ,[MessageID] ,[Headers] ,[ContentEncoding] ,[Type] ,[UserID] ,[State] ,[CreateDateTime] ,[OwnerID])
--			select NewID()--(<RabbitSendObjectID, uniqueidentifier,>
--				  ,@QueueName--,<QueueName, varchar(255),>
--				  ,dbo.ConvertTextToBinaryZip(@Result, '')--,<Content, text,>
--				  ,null--,<MessageID, varchar(255),>
--				  ,null--,<Headers, varchar(255),>
--				  ,@ContentEncoding--,<ContentEncoding, varchar(255),>
--				  ,@Type--,<Type, varchar(255),>
--				  ,@User--,<UserID, varchar(255),>
--				  ,0--,<State, int,>)
--				  ,@dateTime--,<CreateDateTime, datetime,>)
--				  ,@OwnerID--,<OwnerID, varchar(255),>
--END