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

---- =============================================
---- Author:      Vitacore (с)
---- Create date: 2016-11-03
---- Description: Бурятия. Отправка информации   по пациенту  в РИАС (Бурятия) по E10-E14(Диабет)
----              Добавление
----				Изменение
---- =============================================
--CREATE PROCEDURE [dbo].[sp_BurDirectionRIAC]	
--    @IDAK  uniqueidentifier = null
--	,@IDPBDD uniqueidentifier = null			
--	,@IDPatient uniqueidentifier = null
--	,@IDPBD uniqueidentifier = null
--	,@MKB varchar(8) = '' -- МКБ
--	,@QueueName varchar(100) = 'Bur.RIACSync'	  -- RoutigKey
--	,@User uniqueidentifier = null	

--AS
--BEGIN
--	 SET NOCOUNT ON;
--	  declare
--		@Result varchar(max)
--		,@ContentEncoding varchar(255)
--		,@Type varchar(255)
--		,@OperationType varchar(8)
--		,@dateTime datetime 
--		,@INSERT varchar(6)
--		,@UPDATE varchar(6)
--		,@DELETE varchar(6)
--		,@OwnerID uniqueidentifier

--		,@MedicalRecordID varchar(255)
--		,@OnDate datetime

--		,@TYPE_OPER varchar(16)  -- операция PBD
--		,@TYPE_WEBSER varchar(16) -- тип веб-сервиса (diabetws или  tuberws)
--		,@oid varchar(128)  --  Значение поля Код МО 
--		,@idORG varchar(64)  -- Информация о прикреплении к МУ. 
--		,@Number varchar(64) -- полис
--		,@Serial varchar(16)
--		,@TypePolis int  -- Тип полиса.   Перекодировка типа полиса для Бурятии
--		,@BenefitCode varchar(8)  -- Федеральная льгота.Код льготы  
--		,@DateBegin varchar(10) -- Дата начала действия льготы
--		,@DateEnd varchar(10)  -- Дата окончания действия льготы
--		,@Nsus	bit -- Признак отказа от НСУ	
--		,@FirstName varchar(64) -- имя
--		,@FatherName varchar(64) -- отчество
--		,@LastName varchar(64) -- фамилия
--		,@Snils varchar(14) --  снилс
--		,@Sex int -- Пол (код)
--		,@BirthDate varchar(10) -- Дата рождения 
--		,@PatientID  uniqueidentifier  -- Код пациента в МИС
--		,@StartDate varchar(10)	-- NB   Дата регистрации 
--		,@SnilsDoctor varchar(14) -- Идентификатор врача. В качестве идентификатора указывается СНИЛС в формате: ЧЧЧ-ЧЧЧ-ЧЧЧ ЧЧ
		
--		,@EndDateAccount	varchar(10) = null -- Дата снятия с учета 
--		,@ExcludeReason varchar(8) = null -- Код причины снятия с учета
--		,@Loaded bit  -- Загружен
--		,@Msg varchar(256)

--		select @ContentEncoding = 'utf-8'
--				,@OwnerID = @IDPBDD
--				,@dateTime =  GETDATE()

--		IF  SUBSTRING(@MKB,1,3) in ('E10','E11','E12','E13','E14')  OR SUBSTRING(@MKB,1,5) in ('E23.2','E23.3')
--			BEGIN
--			   select  @TYPE_WEBSER = 'diabetws'
--					  ,@Type = 'BUR_DIRECTION_DIABET'
--			END
--		ELSE 
--		    return

--		-- Операция для веб-сервиса
--		select 
--		      @TYPE_OPER = case 
--			    when pbd.ChangeType = 1 then	'AddPatient'   
--				when pbd.ChangeType = 2 then	'UpdatePatient'
--				when pbd.ChangeType = 3 then	'DeletePatient'
--				end
--		from [AKUZ].T_PATIENT_BENEFITS_DIRECTION pbd
--		where 	pbd.PatientBenefitsDirectionID = @IDPBD	

--		------------ Диабет. "Добавление общих данных льготника"   "Изменение общих данных льготника"
--		IF ( @TYPE_OPER = 'AddPatient')  OR   ( @TYPE_OPER = 'UpdatePatient') 
--		BEGIN
--				select 
--					-- @TYPE_OPER = pbd.ChangeType								
--					--@oid = isnull(mdr.oldOid,'')
--					@oid = isnull(mdr.oid,'')										          
--					,@Number = isnull(pl.Number,'')									
--					,@Serial = isnull(pl.Serial,'')													
--					,@TypePolis = case		-- перекодировка типа полиса для Бурятии							 
--						when pl.PolicyForm = 1 then 2
--						when pl.PolicyForm in (2, 3) then 1
--						when pl.PolicyForm = 4 then 3
--						else 0
--					end										
--					,@BenefitCode = isnull(fl.BenefitCode,'000')	      -- Код льготы
--					,@DateBegin =   convert(varchar(10),fl.DateBegin, 120) 
					
--					--	,@DateEnd = convert(varchar(10),fl.DateEnd, 120)
--					,@Nsus=isnull(fl.Nsus,0)												 				
--					,@FirstName = isnull(pbd.FirstName,'')
--					,@FatherName = isnull(pbd.FatherName,'')  
--					,@LastName = isnull(pbd.LastName,'')	
--					,@Snils = ltrim(s.Snils)	
--					,@Sex = en.Code	
--					,@BirthDate =convert(varchar(10),pbd.Birthday, 120)
--					,@StartDate = convert(varchar(10), pbd.Date,120)
--					,@SnilsDoctor = ltrim(w.Snils)	
--					--,@idORG = isnull(tp.oldOid,'')
--					,@idORG = isnull(tp.oid,'')

   
--				from  [AKUZ].T_PATIENT_BENEFITS_DIRECTION_DATA pbdd
--				join [AKUZ].T_PATIENT_BENEFITS_DIRECTION pbd on pbdd.PatientBenefitsDirection = pbd.PatientBenefitsDirectionID 
--				join AKUZ.T_REGIONAL_BENEFITS_DIRECTION rbd on rbd.PatientBenefitsDirectionID = pbdd.PatientBenefitsDirection  and rbd.SOST_R = 1     -- 1-прикреплен к ЛПУ
--				--LEFT JOIN [AKUZ].T_SNILS s on s.Snils = pbd.SNILS -- снилс
--				LEFT JOIN [VCLib].T_ENUMS en on en.EnumID = pbd.Sex  -- пол 
--				LEFT JOIN [AKUZ].T_BENEFITS bn on bn.BenefitsID = pbdd.Benefits
--				LEFT JOIN [AKUZ].T_PATIENT pt on pt.PatientID = pbd.Patient
--				LEFT JOIN [AKUZ].T_SNILS s on s.Snils = pt.SNILS -- снилс
--				LEFT JOIN [AKUZ].T_SOCIAL_STATUS ss on ss.SocialStatusID = pt.SocialStatus 
--				LEFT JOIN [AKUZ].T_LPU_MAIN lpu On pbd.LpuMain = lpu.LpuID


--			LEFT JOIN -- информация о прикреплении.  Текущее прикрепление
--				(Select  
--						rg.Patient     
--						--,isnull(mdr.oldOid,'') oldOid
--						,isnull(mdr.oid,'') oid
--						,rg.LpuMain
--					From [AKUZ].T_REGISTRATION rg
--					JOIN [AKUZ].T_LPU_MAIN lm on lm.LpuID = rg.LpuMain	
--					JOIN [EHR].T_EHR_RUS_MDR308 mdr on mdr.EhrRusID = lm.EhrRusMdr308  -- Регистр медицинских организаций Российской Федерации Версия 2  
--					where rg.RegistrationID = ( select [dbo].[fn_GetRegistration](@IDPatient  ,getdate(), 1)  from [AKUZ].T_PATIENT p where p.PatientID = @IDPatient)
--				)tp On pt.PatientID = tp.Patient 


--				LEFT JOIN [EHR].T_EHR_RUS_MDR308 mdr on mdr.EhrRusID = lpu.EhrRusMdr308  -- Регистр медицинских организаций Российской Федерации Версия 2 

--				LEFT JOIN [AKUZ].T_POLICY pl on pl.PolicyID = [dbo].fn_GetOmsPolicy(@IDPatient, @dateTime)
--				LEFT JOIN (
--							select top 1  p.SNILS, fr.DateBegin, fr.DateEnd,fr.Nsus ,bn.BenefitCode 
--							from [AKUZ].T_FR_PATIENT fp   -- Пациент из фед. регистра
--							join [AKUZ].T_PATIENT p on p.SNILS = fp.Snils
--							join [AKUZ].T_FR_RECORD fr on fr.Snils = fp.Snils 
--							join [AKUZ].T_FR_DOCUMENT fd on fd.Snils = fp.Snils
--							join [AKUZ].T_BENEFITS bn on bn.BenefitsID = fd.Benefits  -- Код федеральной льготы
--							where p.PatientID =   @IDPatient 
--							order by  fr.DateNsuBegin desc,fr.DateEnd desc
--						) fl on fl.Snils = pt.SNILS
--				LEFT JOIN [AKUZ].T_POST post on post.ResourceID = pbdd.Doctor	-- должность
--				LEFT JOIN [AKUZ].T_WORKER w on w.WorkerID = post.Worker  -- сотрудник (получаем Идентификатор врача) 
--				where pbdd.PatientBenefitsDirectionDataID= @IDPBDD --and ar.Patient = pt.PatientID

--		END



--		---------------------------  "Исключение льготника (диабет) из регистра"
--		IF   (@TYPE_WEBSER = 'diabetws') AND ( @TYPE_OPER = 'DeletePatient') 
--		BEGIN
--				select
--					@Snils = isnull(pbd.SNILS ,'')	
--					,@FirstName = isnull(pbd.FirstName,'')
--					,@FatherName = isnull(pbd.FatherName, '')  
--					,@LastName =isnull(pbd.LastName, '')

--					,@BirthDate =convert(varchar(10),pbd.Birthday, 120)
--					,@Mkb = isnull(pbdd.Mkb	,'')
--					,@SnilsDoctor = isnull(w.Snils, '')       
--					--,@oid = isnull(mdr.oldOid,'')	
--					,@oid = isnull(tp.oid,'')	
--					,@ExcludeReason =   case									 
--							when rbd.ExcludeReason  = 4 then '1'
--							when rbd.ExcludeReason  = 5 then '2'
--							when rbd.ExcludeReason  = 6 then '3'
--							when rbd.ExcludeReason  = 7 then '4'
--							when rbd.ExcludeReason  = 8 then '5'
--							else 5
--						end	

--					,@EndDateAccount =convert(varchar(10),  isnull(pbd.Date, getdate()), 120)

--					--,@idORG = isnull(tp.oldOid, '')
--					,@idORG = isnull(tp.oid, '')
				
--				from  [AKUZ].T_PATIENT_BENEFITS_DIRECTION pbd
--				join AKUZ.T_REGIONAL_BENEFITS_DIRECTION rbd on rbd.PatientBenefitsDirectionID = pbd.PatientBenefitsDirectionID
--				LEFT JOIN 
--					(Select top 1  PatientBenefitsDirection,Mkb,DiagDate,Doctor     -- самый первый добавленный диагноз по диабету для добавления в РР
--						From [AKUZ].T_PATIENT_BENEFITS_DIRECTION_DATA pbdd
--						Where pbdd.PatientBenefitsDirection = @IDPBD   
--								and (SUBSTRING(pbdd.Mkb,1,3) in ('E10','E11','E12','E13','E14')  OR  SUBSTRING(@MKB,1,5) in ('E23.2','E23.3'))  
--						order by pbdd.DiagDate asc
--					) pbdd On pbdd.PatientBenefitsDirection = @IDPBD

--				LEFT JOIN [AKUZ].T_PATIENT pt on pt.PatientID = pbd.Patient
--				LEFT JOIN [AKUZ].T_LPU_MAIN lpu On pbd.LpuMain = lpu.LpuID
				
				
			
--			LEFT JOIN -- информация о прикреплении.  Текущее прикрепление
--				(Select  
--						rg.Patient     
--						--,isnull(mdr.oldOid,'') oldOid
--						,isnull(mdr.oid,'') oid
--						,rg.LpuMain
--					From [AKUZ].T_REGISTRATION rg
--					JOIN [AKUZ].T_LPU_MAIN lm on lm.LpuID = rg.LpuMain	
--					JOIN [EHR].T_EHR_RUS_MDR308 mdr on mdr.EhrRusID = lm.EhrRusMdr308  -- Регистр медицинских организаций Российской Федерации Версия 2  
--					where rg.RegistrationID = ( select [dbo].[fn_GetRegistration](@IDPatient  ,getdate(), 1)  from [AKUZ].T_PATIENT p where p.PatientID = @IDPatient)
--				)tp On pt.PatientID = tp.Patient 
				
--				LEFT JOIN [EHR].T_EHR_RUS_MDR308 mdr on mdr.EhrRusID = lpu.EhrRusMdr308  -- Регистр медицинских организаций Российской Федерации Версия 2 
--				LEFT JOIN [AKUZ].T_POST post on post.ResourceID = pbdd.Doctor	-- должность
--				LEFT JOIN [AKUZ].T_WORKER w on w.WorkerID = post.Worker  -- сотрудник (получаем Идентификатор врача) 
--				where pbd.PatientBenefitsDirectionID = @IDPBD 		
--		END

--		if (@BenefitCode ='000')
--		begin
--		  Set @DateBegin =  convert(varchar(10),getdate(), 120)   -- Формируем обязательное поле даты, если льгота отсутствует
--		end

--		select @Result = 
--		(
--			select 
--					@TYPE_OPER			as  'TYPE_OPER'
--					,@TYPE_WEBSER		as  'TYPE_WEBSER'				
--					,@IDPBDD			as  'IDOwner'
--					,@IDPatient			as  'IDPatient'
--					,@IDAK				as  'IDOwnerForm'
--					,@oid				as  'idOrg'
--					,@Number			as  'Patient/InsurancePolicy/Number'
--					,@Serial			as  'Patient/InsurancePolicy/Serial'	
--					,@TypePolis 		as  'Patient/InsurancePolicy/Type'	
--					,@BenefitCode		as  'Patient/Benefit/Code' 
--					,@DateBegin			as  'Patient/Benefit/StartDate'
--					--,@DateEnd			as  'Patient/Benefit/EndDate'	
--					,@Nsus				as  'Patient/Benefit/Refusal'	
--					,@FirstName			as  'Patient/Firstname'		
--					,@FatherName		as  'Patient/Middlename'    
--					,@LastName			as  'Patient/Familyname'
--					,@Snils				as  'Patient/SNILS'	
--					,@Sex				as  'Patient/Sex'	
--					,@BirthDate			as  'Patient/BirthDate' 
--					,@idORG				as  'Patient/idOrg'
--					,@IDPatient			as  'Patient/IdPatientMIS'
--					,@MKB				as  'MKBCode' 
--					,@StartDate			as  'StartDate'	
--					,@EndDateAccount	as  'EndDateAccount'	
--					,@ExcludeReason		as  'ExcludeReason'
--					,@SnilsDoctor		as  'idDoctorMIS'							

--			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
