SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --存储过程.HOPatient_VAE1_Update /* 2011-08-24,by HHy,会员病人绑定病人费别 */ --=================================================================================== --Author <...Fyq> --Alter Date <...2015-07-23> --Description<...入院登记过程> --2011-12-27 增加籍贯、出生地址、健康卡号、身高、体重等录入信息 --2012.02.08 增加CRM预约记录对应 --2012.02.14 增加住院号生成规则,按年月生成 --2012.03.19 判断住院次数是否存在-- by wht --2012.04.25 增加住院就诊ID --2012.05.04 入院登记时增加CRM跟进人录入 --2012.10.26 出院状态不允许编辑 --2012.11.08 CRM客户经理用另外的过程实现 --2013.01.28 计算详细日期调用医生站计算详细日期函数 --2013.04.19 增加部分地址信息录入,与病案首页保持一致 --2013.07.15 增加病人余额表限制费用总额、补充费用总额记录 --2013.08.14 入院登记调整病人类别重新计算信用额度 --2013.12.05 新增入院登记时清空一部分病人信息(信用额度、担保金额) --2014.01.15 增加对住院号前缀YY(取年份最后两位)的支持 --2014.03.05 增加监护人信息的维护 --2014.06.20 入院登记支持保存就诊卡 --2014.08.29 禁止修改已出院病人的姓名和住院号(权限) --2014.10.11 增加了解途径维护 --2014.1.23 VAE02修改为住院号+入院次数 --2015.06.02 已结账是否允许修改姓名及住院号,提前到事务之前 --=================================================================================== ALTER PROC [HOPatient_VAE1_Update] @XML ntext, --XML文档 @VAE01 int out , --登记号 @VBL01 int out, --缴款ID @DiagId int, --前就诊号(针对再入院情况) @EmpId int, --操作员ID @EmpDept int, --部门 @FAA01 int, --领用票据Id @EmpCode varchar(20), --操作员编码 @EmpName varchar(20), --操作员 @WorkStation tinyint, --工作站模式 1=病人管理 2=护士工作站 @WardNoLen int,--住院号长度 @WardNoPre varchar(30),--住院号前缀 @VAA01 int out, --病人ID @VAA04 varchar(20) out,--住院号 @VBO01 int =0 out --病人变动记录 AS If exists(select * from VAE1 where VAE01 = @VAE01 and VAE44 = 5) BEGIN RAISERROR('病人已经出院,不允许修改登记信息.', 16, 1) with nowait return 1 END DECLARE @iDOM int, @iret int --解析XML文档 Exec @iret = sp_xml_preparedocument @iDOM OUTPUT, @XML if @iret > 0 BEGIN exec sp_xml_removedocument @iDOM RAISERROR('解析XML文档时发生错误,错误号: %d.', 16, 1, @iret) with nowait return @iret END /* 病人信息表 病人登记表 病人诊断记录 病人预交款记录 写入临时表中 */ SELECT * INTO #tmpPatInfo FROM OpenXml(@iDOM, '/Root/VAE1/Item', 8) WITH( VAE01 integer --登记Id ,VAE02 varchar(20) --登记号 ,VAA01 integer --病人Id ,VAA02 varchar(64)--会员卡号 ,VAA04 varchar(20)--住院号 ,VAA05 varchar(64) --姓名 ,ABW01 varchar(1)--性别 ,VAA12 datetime--出生日期 ,VAA15 varchar(20)--身份证号 ,VAA38 varchar(48)--学 ,ABQ02 varchar(32)--民族 ,ACM02 varchar(20)--从业状况、身份 ,ABBRP varchar(10)--拼音码 ,ABBRW varchar(10)--五笔码 ,VAA16 varchar(20)--其他证件 ,VAE04 tinyint --病人性质 ,ABJ01 varchar(2)--医疗付款方式 all ,BDP02 varchar(50)--病人类别 all ,ABC02 varchar(20)--折扣费别 all ,VAA20 varchar(64) ,VAA25 varchar(64) ,BDX02 varchar(64) ,VAE08 tinyint--再入院 ,BCK01A int--入院病区ID all ,BCK01B int--入院科室ID all ,VAE11 datetime--入院日期 ,ABO01 varchar(2)--入院病情 all ,ABR01 varchar(1)--入院方式 all ,ABT02 varchar(20)--就诊方式 all ,VAE15 varchar(64)--转院名称 ,ABZ02 varchar(10)--入院待遇 all ,ABK02 varchar(20)--住院目的 all ,BCQ04A varchar(20)--住院床位 all ,VAE19 int--住院次数 ,VAE20 tinyint--陪伴 ,AAG01 int--护理等级 all ,VAE22 varchar(2)--住院病情 ,BCK01C int --住院病区ID all ,BCK01D int --住院科室ID all ,BCQ04B varchar(20) --住院床位 all ,VAE26 datetime --出院日期 ,VAE27 int --住院天数 ,ABV01 varchar(2) --出院类型 all ,VAE29 tinyint --确诊 ,VAE30 datetime --确诊日期 ,VAE31 tinyint --新发肿瘤 ,ABL01 varchar(2) --血型 ,VAE33 int --抢救次数 ,VAE34 int --成功次数 ,VAE35 tinyint --随诊标志 ,VAE36 int --随诊期限 ,VAE37 varchar(2) --随诊单位 ,VAE38 tinyint --尸检标志 ,BCE03A varchar(20)--门诊医师 all ,BCE03B varchar(20)--责任护士 all ,BCE03C varchar(20)--住院医师 all ,VAE42 varchar(64) --疾病兵种 ,VAE44 tinyint --状态 ,VAE45 numeric(18,4)--金额 ,VAE46 int --年龄 ,AAU01 varchar(1) --年龄单位 all ,ACK01 varchar(2) --婚姻状况 all ,AAT02 varchar(128) --职业 all ,ACC02 varchar(32) --国籍 all ,AAY02 varchar(48) --学历 all ,BAQ01 int --合约单位ID all ,BAQ02 varchar(10) --合约单位编码 all ,BAQ03 varchar(64) --工作单位 all ,VAE55 varchar(32) --单位电话 ,VAE56 varchar(64) --单位地址 ,VAE57 varchar(128) --户口地址 ,VAE58 varchar(6) --户籍邮编 ,VAE59 varchar(20) --户籍电话 ,VAE60 varchar(20) --省市 ,VAE61 varchar(64) --县市, 城市, 县区市 ,VAE62 varchar(64) --地址, 常住地址, 街道, 乡镇村, resident address ,VAE63 varchar(20) --电话 ,VAE64 varchar(13) --移动电话 ,VAE65 varchar(128) --电子邮箱 ,VAE66 varchar(64) --其他联系方式 ,VAE67 varchar(64) --监护人 ,VAE68 varchar(20) --联系人姓名 ,AAZ02 varchar(32) --与病人关系 ,VAE70 varchar(64) --联系人地址 ,VAE71 varchar(20) --联系人电话 ,VAE72 varchar(16) --联系人移动电话 ,VAE73 varchar(4) --中医治疗内别 ,IAA01 int --保险机构 all ,UAA01 int --社区 all ,IAK05 varchar(50)--社会保障号 ,VAE76 tinyint --审核 ,BCE03D varchar(20) --审核人 ,VAE78 datetime --审核日期 ,VAE79 tinyint --上传标志 ,VAE80 tinyint --转出标志 ,BCE03E varchar(20) --登记人 all ,VAE82 datetime --制表时间 all ,VAE83 varchar(255) --备注 ,VAE84 int --档案状态 ,VAE85 datetime --存档时间 ,VAA50 varchar(6) --单位邮编 ,VAA51 varchar(64) --单位开户行 ,VAA52 varchar(20) --单位银行帐号 ,VAO01A int --门诊诊断号 ,VAO01B int --中医诊断号 ,VAO01C int --入院诊断 ,BAK01A int --门诊诊断 ,BAK01B int --中医诊断 ,BAK01C int --入院诊断 ,BAK05A varchar(128)--门诊诊断 ,BAK05B varchar(128)--中医诊断 ,BAK05C varchar(128)--入院诊断 ,VBL01 int--交款Id ,VBL02 varchar(20)--单据号 ,VBL03 varchar(20)--票据号 ,VBL04 tinyint--类型 ,VBL05 tinyint--状态 ,VBL13 numeric(18,4)--金额 ,VBL14 varchar(32)--支付方式 ,BAQ03B varchar(128)--工作单位 ,BBO02 varchar(64)--开户行 ,VBL11 varchar(20)--银行帐号 ,VBO01 int--病人变动记录 ,VAE86 varchar(32)--介绍人 ,BEP05 numeric(18,4)--报警值 ,BEP06 numeric(18,4)--信用额度 ,VAC01 int--挂号ID ,VAE88 datetime ,VAE89 numeric(9 ,3) ,VAE90 numeric(9 ,3) ,VAE91 numeric(9 ,2) ,VAE92 varchar(64) ,VAA82 varchar(64) ,SCF01 int ,CManageId int ,CManage varchar(20) ,QueryPeopleId int ,QueryPeople varchar(20) ,BCE02C varchar(20) ,VCT32 varchar(20) ,VCT33 varchar(20) ,VCT34 varchar(20) ,VCT35 varchar(20) ,VCT36 varchar(20) ,VCT37 varchar(20) ,VCT38 varchar(20) ,VCT39 varchar(20) ,VCT41 varchar(20) ,VCT42 varchar(20) ,BEP07 numeric(18 ,4) ,VBM11 numeric(18 ,4) ) --如果病人信息不存在,则退出 If not exists(select * from #tmpPatInfo) BEGIN exec sp_xml_removedocument @iDOM RAISERROR('提交错误,病人信息为空.', 16, 1) with nowait RETURN 2 END --如果住院序列号表为空,则退出 If not exists(select * from VAA1_ID_4) BEGIN exec sp_xml_removedocument @iDOM RAISERROR('住院号序列号表为空,不能生成住院号.', 16, 1) with nowait RETURN 2 END --移除XML文档 exec sp_xml_removedocument @iDOM /*===================================如果病人信息不存在,则写入一条新的病人信息,否则更新病人资料====================================================*/ DECLARE @id int, @ErrId int, @PriKey int, @VAlue int, @AAG01 int, @ZAE01 int, @ABO01 int, @VAC01 int, @BAK01A int, @BAK01B int, @BAK01C int, @VAO01A int, @BCK01A int, @BCK01B int, @VAO01B int, @VAO01C int, @VAA10 int, @VAE04 tinyint, @AAU01 varchar(1), @VAE11 datetime, @VAE82 datetime, @VBL13 numeric(18,4), @tmpstr varchar(30), @BDP02 varchar(20), @ABC02 varchar(20), @VAE02 varchar(20), @BCE03B varchar(20), @BCE03C varchar(20), @BAK05A varchar(128),--门诊诊断 @BAK05B varchar(128),--中医诊断 @BAK05C varchar(128),--入院诊断 @VAA05 varchar(20), @OVAA05 varchar(20), @OVAA04 varchar(20), @OABC02 varchar(20), @OBDP02 varchar(20), @VAE87 varchar(20), @OVAE88 datetime, @VAE88 datetime, @SCH12 varchar(1024), @BCK03B varchar(20), @SCF01 int, @VAE19 int, @CManageId int , @CManage varchar(20) , @QueryPeopleId int , @QueryPeople varchar(20) , @SCI01 int , @VAA12 datetime , @BEP07 numeric(18 ,4) , @VBM11 numeric(18 ,4) , @VAA02 varchar(64) select @id=VAA01, @VAA01=ISNULL(VAA01 , 0) ,@VAA04 =VAA04,@VAE01=VAE01 ,@BAK01A=BAK01A ,@BAK01B=BAK01B ,@VAO01A=VAO01A ,@VAO01B=VAO01B ,@VAE82=Getdate(), @VBO01=VBO01, @AAG01=AAG01, @VAO01C = VAO01C, @BAK01C = BAK01C, @BCK01A=BCK01A, @BCK01B=BCK01B, @VBL13=VBL13, @BCE03B=BCE03B, @BCE03C=BCE03C , @BAK05A = BAK05A ,@BAK05B =BAK05B ,@BAK05C = BAK05C , @VAC01 = VAC01 , @VAE11 = VAE11 , @VAA05 = VAA05 , @BDP02 = BDP02 , @ABC02 = ABC02 , @VAA10 = VAE46 , @AAU01 = AAU01 , @VAE04 = VAE04 , @VAE88 = VAE88 , @SCF01 = SCF01 ,@VAE19=VAE19 ,@CManage = CManage , @CManageId = CManageId , @QueryPeople = QueryPeople , @QueryPeopleId = QueryPeopleId , @VAA12 = VAA12 , @VBM11 = VBM11 , @BEP07 = BEP07 , @VAA02 = VAA02 from #tmpPatinfo SELECT @VAE87 = [dbo].[GetAgeDetailFromAge](0 , 'Y' , @VAA12 ) --SELECT @VAE87 = [dbo].[GetAgeDetail](@VAA10 , @AAU01 ) If (Isnull(@VAA04 , '') = '' ) and (isnull(@VAE01 , 0) > 0) BEGIN RAISERROR('病人住院号不能为空.', 16, 1, @iret) with nowait return 2 END --判断入院时间如果为空,不让保存 If ISNULL(@VAE11 , '') = '' BEGIN RAISERROR('入院时间不能为空.', 16, 1, @iret) with nowait return 2 END --通过病人类别来确定费别 If exists(select * from SYS_Parameters where ProductID = 9999 and ProgramID = 9999 and ParamNo = 18 and Value = '1') BEGIN If not exists(select * from BGY1 where ABC02 = @ABC02 and BDP02 = @BDP02) BEGIN RAISERROR('提交错误,病人类别与费别不对应.', 16, 1) with nowait RETURN 2 END END --判断住院次数是否存在 If exists(select * from VAE1 where VAA01=@VAA01 and VAE19=@VAE19 and VAE01<> isnull(@VAE01 , 0) and VAE44 <> 9) BEGIN RAISERROR('已存在第%d次住院记录,请修改住院次数后重新保存.', 16, 1,@VAE19) with nowait RETURN 2 END --会员病人绑定病人费别 IF EXISTS(SELECT * FROM SYS_PARAMETERS WHERE PRODUCTID=100 AND PROGRAMID=116001 AND PRIVILEGE=0 AND PARAMNO='2' AND VALUE='1') AND EXISTS(SELECT * FROM VAA1 WHERE VAA01=@VAA01 AND VBU01>0 AND ABC02>'' AND ABC02<>@ABC02) BEGIN RAISERROR('已绑定会员卡类型,禁止修改病人费别.', 16, 1) with nowait RETURN 2 END --判断会员卡号是否重复 If ISNULL(@VAA02 , '') <> '' BEGIN IF EXISTS(SELECT * FROM VAA1 WHERE VAA02 = @VAA02 AND VAA01 <> @id) BEGIN RAISERROR('卡号为[%s]已经使用', 16, 1,@VAA02) with nowait RETURN 2 END END /*===================================================如果住院号为空将自动生成住院号==============================================*/ If isnull(@VAA04,'') = '' BEGIN --如果门诊留观单独编码则生成门诊留观编码 If (@VAE04 = 1) and exists(select * from SYS_Parameters where ProgramID = 104004 and ParamNo = 117 and Value = '1') BEGIN SELECT @WardNoLen = ISNULL(Value , 6) from SYS_Parameters where ProgramID = 104004 and ParamNo = 118 SELECT @WardNoPre = ISNULL(Value , '') from SYS_Parameters where ProgramID = 104004 and ParamNo = 119 END --如果前缀是按当前日期生成规则,则替换前缀 If @WardNoPre ='YYYYMMDD' set @WardNoPre = convert(varchar(8),getdate(),112) ELSE IF @WardNoPre='YYYY' set @WardNoPre=convert(varchar(4),getdate(),112) ELSE IF @WardNoPre='YY' set @WardNoPre=convert(varchar(2),getdate(),2) ELSE IF @WardNoPre = 'YYYYMM' set @WardNoPre =convert(varchar(6),getdate(),112) Declare @MaxValue int , @str varchar(20) set @str = '000000000000' If (@VAE04 = 1) and exists(select * from SYS_Parameters where ProgramID = 104004 and ParamNo = 117 and Value = '1') BEGIN Exec @ErrId = Core_NewIDEx 'VAA1' , 'VAA04' , @Value out If @ErrId > 0 BEGIN RETURN 1 END SET @VAA04= @WardNoPre + right(@Str + cast(@Value as Varchar),@WardNoLen - len(@WardNoPre)) END ELSE BEGIN Exec @ErrId = Core_NewId_VAA04 @Value out --获取住院号序列 If @ErrId > 0 BEGIN RETURN 1 END set @VAA04= @WardNoPre + right(@Str + cast(@Value as Varchar),@WardNoLen - len(@WardNoPre)) If exists(select * from VAA1 where vaa04 = @VAA04) BEGIN select @MaxValue=right(max(VAA04),@WardNoLen-len(@WardNoPre)) from VAA1 where len(VAA04)= @WardNoLen and left(VAA04,len(@WardNoPre)) = @WardNoPre update VAA1_ID_4 set VAlue = @MaxValue set @str='000000000000' exec Core_NewId_VAA04 @Value out --获取住院号序列 set @VAA04= @WardNoPre + right(@Str + cast(@Value as Varchar),@WardNoLen - len(@WardNoPre)) END END END /*================================================================================================================================*/ If ISNULL(@VAA05 , '') = '' BEGIN RAISERROR('病人姓名不能为空.', 16, 1) with nowait RETURN 2 END If ISNULL(@VAA04 , '' ) = '' BEGIN RAISERROR('住院号不能为空.', 16, 1) with nowait RETURN 2 END If exists(select * from VAA1 where VAA04 = @VAA04 and VAA01 <> @VAA01) BEGIN RAISERROR('住院号[%s]已经使用.', 16, 1 , @VAA04) with nowait RETURN 2 END SELECT @OBDP02 = ISNULL(b.BDP02 , a.BDP02) ,@OABC02 = ISNULL(b.ABC02 , a.ABC02) from VAA1 a left join VAE1 b on b.VAA01 = a.VAA01 and VAE01 = @VAE01 where a.VAA01 = @Id SELECT @OVAA04 =VAA04 ,@OVAA05 = VAA05 from VAA1 where VAA01 = @ID If @VAA05 <> @OVAA05 BEGIN If dbo.GetEmpPermissionValue(104004021,@EmpId)=1 BEGIN if exists(select * from VAE1 where VAA01 = @ID and VAE44=5) begin if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('已结账病人的姓名不允许修改', 16, 1) WITH NOWAIT Return 1 end END END If @VAA04 <> @OVAA04 BEGIN If dbo.GetEmpPermissionValue(104004022,@EmpId)=1 BEGIN if exists(select * from VAE1 where VAA01 = @ID and VAE44=5) begin if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('已结账病人的住院号不允许修改', 16, 1) WITH NOWAIT Return 1 end END END BEGIN TRAN --开始一个事务 /*===============================================如果Id为0或者null新增一条病人信息记录==============================================*/ if isnull(@id,0) = 0 BEGIN exec @ErrId = Core_NewIDEx 'VAA1','VAA01',@VAA01 out --获取新的病人信息ID If @ErrId > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RETURN 1 END INSERT INTO VAA1 (VAA01, VAA04, VAA05, ABBRP, ABBRW, ABW01, VAA10, AAU01, VAA12, ACK01, VAA15, VAA16, ABJ01, BDP02, ABC02, VAA20 , ACM02, AAT02, ACC02, ABQ02, VAA25, VAA28, VAA29, VAA30, VAA31, VAA32, VAA33, VAA34, VAA35, VAA36, VAA37, VAA38, VAA39, VAA40, VAA41, VAA42, VAA43, VAA44, BAQ01, BAQ02, VAA47, VAA48, VAA49, VAA50, VAA51, VAA52, VAA56, VAA61, VAA64, IAA01,IAK05, BCK01B, BCK01C, BCQ04, VAA73,VAA75,ABL01 ,BEP05 ,BEP06 , VAA82 , VAA02 , BDX02) select @VAA01, @VAA04, VAA05, ABBRP, ABBRW, ABW01, VAE46, AAU01, VAA12, ACK01, VAA15, VAA16, ABJ01, BDP02, ABC02, VAA20 ,ACM02, AAT02, ACC02, ABQ02, VAA25, VAE57, VAE58, VAE59, VAE60, VAE61, VAE62, VAE63, VAE64, VAE65, VAE66, AAY02, VAE67, VAE68, AAZ02, VAE70, VAE71, VAE72, BAQ01, BAQ02, BAQ03, VAE55, VAE56, VAA50, VAA51, VAA52, VAE19, 2, VAE83, IAA01, IAK05, BCK01B, BCK01A, BCQ04A, VAE11,getdate(),ABL01, Isnull(BEP05 , 0) , isnull(BEP06 ,0) , VAA82 , VAA02 , BDX02 from #tmpPatinfo IF @@ERROR > 0 --如果发生错误,则回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*===========================================================更新病人信息=================================================================*/ ELSE BEGIN /*================================================初始化部分病人信息========================================================*/ If ISNULL(@VAE01 , 0) <= 0 BEGIN Update VAA1 SET VAA53 = '', VAA54 = 0 , BEP05 = 0 , BEP06 = 0 where VAA01 = @Id END /*=============================================如果病人姓名变动,加入变动记录===============================================*/ If @VAA05 <> @OVAA05 begin Exec @ErrId = Core_NewId 'ZAE1' , 'ZAE01' , @ZAE01 out If @ErrId > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RETURN 1 END INSERT INTO ZAE1 (ZAE01, TNAME, CNAME, ZAE04, ZAE05, ZAE06, ZAE07, ZAE08, BCE01, BCE03, ZAE11) select @ZAE01, 'VAA1', 'VAA05', @ID, @VAE01 , @OVAA05, @VAA05, '病人姓名变更', @EmpId , @EmpName , getdate() IF @@ERROR >0 --如果发生错误,回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*=========================================如果病人住院号变动,加入变动记录===============================================*/ IF @VAA04 <> @OVAA04 BEGIN Exec Core_NewId 'ZAE1' , 'ZAE01' , @ZAE01 out INSERT INTO ZAE1 (ZAE01, TNAME, CNAME, ZAE04, ZAE05, ZAE06, ZAE07, ZAE08, BCE01, BCE03, ZAE11) select @ZAE01, 'VAA1', 'VAA04', @ID, @VAE01 , @OVAA04, @VAA04, '住院号变更', @EmpId , @EmpName , getdate() IF @@ERROR > 0 --如果发生错误,回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*==============================================如果费别变化,加入变动记录================================================*/ IF @OABC02 <> @ABC02 BEGIN Exec Core_NewId 'ZAE1' , 'ZAE01' , @ZAE01 out INSERT INTO ZAE1 (ZAE01, TNAME, CNAME, ZAE04, ZAE05, ZAE06, ZAE07, ZAE08, BCE01, BCE03, ZAE11) select @ZAE01, 'VAE1', 'ABC02', @ID, @VAE01 , @OABC02, @ABC02 , '住院登记费别变更', @EmpId , @EmpName , getdate() IF @@ERROR > 0 --如果发生错误,回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END update a Set a.VAA04= @VAA04 ,a.VAA02= b.VAA02 ,a.VAA05= b.VAA05 ,a.ABBRP= b.ABBRP ,a.ABBRW= b.ABBRW ,a.ABW01= b.ABW01 ,a.VAA10= b.VAE46 ,a.AAU01= b.AAU01 ,a.VAA12= b.VAA12 ,a.ACK01= b.ACK01 ,a.VAA15= b.VAA15 ,a.VAA16= b.VAA16 ,a.ABJ01= b.ABJ01 ,a.BDP02= b.BDP02 ,a.ABC02= b.ABC02 ,a.ACM02= b.ACM02 ,a.AAT02= b.AAT02 ,a.ACC02= b.ACC02 ,a.ABQ02= b.ABQ02 ,a.VAA20= b.VAA20 ,a.VAA25= b.VAA25 ,a.VAA28= b.VAE57 ,a.VAA29= b.VAE58 ,a.VAA30= b.VAE59 ,a.VAA31= b.VAE60 ,a.VAA32= b.VAE61 ,a.VAA33= b.VAE62 ,a.VAA34= b.VAE63 ,a.VAA35= b.VAE64 ,a.VAA36= b.VAE65 ,a.VAA37= b.VAE66 ,a.VAA38= b.AAY02 ,a.VAA39= b.VAE67 ,a.VAA40= b.VAE68 ,a.VAA41= b.AAZ02 ,a.VAA42= b.VAE70 ,a.VAA43= b.VAE71 ,a.VAA44= b.VAE72 ,a.BAQ01= b.BAQ01 ,a.BAQ02= b.BAQ02 ,a.VAA47= b.BAQ03 ,a.VAA48= b.VAE55 ,a.VAA49= b.VAE56 ,a.VAA50= b.VAA50 ,a.VAA51= b.VAA51 ,a.VAA52= b.VAA52 ,a.VAA56= b.VAE19 ,a.VAA61= 2 ,a.VAA64= b.VAE83 ,a.IAK05= b.IAK05 ,a.IAA01= b.IAA01 ,a.BCK01B=b.BCK01B ,a.BCK01C=b.BCK01A ,a.BCQ04= b.BCQ04B ,a.VAA73= b.VAE11 ,a.ABL01= b.ABL01 ,a.BEP05 = b.BEP05 ,a.BEP06 = b.BEP06 ,a.VAA82 = b.VAA82 ,a.BDX02 = b.BDX02 from VAA1 a,#tmpPatinfo b where a.VAA01 = @Id IF @@ERROR >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END /*===========================================如果病人类别变化,加入变动记录================================================*/ If @BDP02 <> @OBDP02 BEGIN Exec Core_NewId 'ZAE1' , 'ZAE01' , @ZAE01 out INSERT INTO ZAE1 (ZAE01, TNAME, CNAME, ZAE04, ZAE05, ZAE06, ZAE07, ZAE08, BCE01, BCE03, ZAE11) select @ZAE01, 'VAE1', 'BDP02', @ID, @VAE01 , @OBDP02, @BDP02, '病人类别变更', @EmpId , @EmpName , getdate() IF @@ERROR > 0 --如果发生错误,回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END --根据规则重新计算其信用额度 If exists(select * from SYS_Parameters where ProductID = 100 and ProgramID = 104004 and ParamNo = 123 and Value = '1') BEGIN Declare @VBM04 numeric(18,4) , @VAA54 numeric(18,4) , @BEP06 numeric(18,4) SELECT @VBM04 = VBM04 from VBM2 where VAA07 = @VAE01 and ACF01 =2 SELECT @VAA54 = VAA54 from VAA1 where VAA01 = @id SET @VBM04 = ISNULL(@VBM04 , 0) SET @VAA54 = ISNULL(@VAA54 , 0) SELECT @BEP06 = dbo.GetCreditLimit(@VBM04 , @VAA54 , @BDP02 , @BCK01A , 1) Update VAA1 SET BEP06 = ISNULL(@BEP06 , 0) where VAA01 = @id END --2015.06.15增加限制费用总额和药品总额 if exists(select * from BLP1 where BLP02=31 and BLP03=@BCK01B and BLP06=@BDP02 and (BLP04 > 0 or BLP05 > 0)) begin if exists(select * from VBM2 where VAA07=@VAE01 and ACF01=2) update a set a.BEP07=case when b.blp05>0 then b.blp05 else a.BEP07 end,VBM13=b.blp04 from VBM2 a join (select @vae01 vae01,blp04,blp05 from BLP1 where BLP02=31 and BLP03=@bck01b and BLP06=@BDP02 and (BLP04 > 0 or BLP05 > 0) ) b on b.vae01 = a.vaa07 where VAA07=@VAE01 and ACF01=2 else begin declare @lvbm01 int EXEC Core_NewIDEx 'VBM1','VBM01',@lVBM01 out insert into VBM2(VBM01,VAA01,VAA07,ACF01,VBM04,VBM05,VBM06,VBM08,VBM09,BEP07,VBM11,VBM12,VBM13) select @lvbm01,@id,@vae01,2,0,0,0,0,0,blp05,0,0,blp04 from BLP1 where BLP02=31 and BLP03=@bck01b and BLP06=@BDP02 and (BLP04 > 0 or BLP05 > 0) end end END END /*=============================================================保存病人入院登记=================================================================*/ Declare @SCA01 int , @SCH01 int , @VBL02 varchar(20), @VBL03 varchar(30), @BAQ03 varchar(128),--工作单位 @BBO02 varchar(64), --开户行 @VBL11 varchar(20), --银行帐号 @VBL14 varchar(32), --支付方式 @VBL18 datetime, @VBL19 datetime SELECT @SCA01 = SCA01 from SCA1 where VAA01 = @VAA01 SELECT @id = VAE01, @VBL02 = VBL02,@VBL03 = VBL03,@BAQ03 = BAQ03B,@BBO02 = BBO02,@VBL11 = VBL11,@VBL14 = VBL14 FROM #tmpPatinfo /*==========================================================如果Id为0或者null,新增一条入院登记记录===============================================*/ IF isnull(@id,0)=0 BEGIN EXEC @ErrId = Core_NewIDEx 'VAE1','VAE01',@VAE01 out --获取新的病人登记ID号 If @ErrId > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RETURN 1 END Set @tmpstr ='00000000000000000000' + cast(@VAE01 as varchar) SET @VAE02 = right(@tmpstr,10) /*=======================================================================插入新的入院登记记录==================================================================*/ INSERT INTO VAE1( VAE01, VAE02, VAA01, VAE04, ABJ01, BDP02, ABC02, VAE08, BCK01A, BCK01B, VAE11, ABO01, ABR01, ABT02, VAE15, ABZ02, ABK02, BCQ04A, VAE19, VAE20, AAG01, VAE22, BCK01C, BCK01D, BCQ04B, VAE26, VAE27, ABV01, VAE29, VAE30, VAE31, VAE33, VAE34, VAE35, VAE36, VAE37, VAE38, BCE03A, BCE03B, BCE03C, VAE42, VAE44, VAE45, VAE46, AAU01, ACK01, AAT02, ACC02, AAY02, BAQ01, BAQ02, BAQ03, VAE55, VAE56, VAE57, VAE58, VAE59, VAE60, VAE61, VAE62, VAE63, VAE64, VAE65, VAE66, VAE67, VAE68, AAZ02, VAE70, VAE71, VAE72, VAE73, IAA01, UAA01, VAE76, BCE03D, VAE78, VAE79, VAE80, BCE03E, VAE82, VAE83, VAE84, VAE85 , VAE86 , VAE87 , VAE88 , VAE89 , VAE90 , VAE91 , VAE92 , SCF01 , BCE02C ) SELECT @VAE01, @VAA04+convert(varchar(2),VAE19), @VAA01, VAE04, ABJ01, BDP02, ABC02, VAE08, BCK01A, BCK01B, VAE11, ABO01, ABR01, ABT02, VAE15, ABZ02, ABK02, BCQ04A, VAE19, VAE20, AAG01, VAE22, BCK01A, BCK01B, BCQ04B, VAE26, VAE27, ABV01, VAE29, VAE30, VAE31, VAE33, VAE34, VAE35, VAE36, VAE37, VAE38, BCE03A, BCE03B, BCE03C, VAE42, VAE44, VAE45, VAE46, AAU01, ACK01, AAT02, ACC02, AAY02, BAQ01, BAQ02, BAQ03, VAE55, VAE56, VAE57, VAE58, VAE59, VAE60, VAE61, VAE62, VAE63, VAE64, VAE65, VAE66, VAE67, VAE68, AAZ02, VAE70, VAE71, VAE72, VAE73, IAA01, UAA01, VAE76, BCE03D, VAE78, VAE79, VAE80, BCE03E, Getdate(), VAE83, VAE84, VAE85 ,VAE86 , @VAE87 , VAE88 , VAE89 , VAE90 , VAE91 , VAE92 , SCF01 , BCE02C from #tmpPatinfo IF @@ERROR > 0--如果发生错误,则回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人入院登记时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END /*=====================================================================插入病人预交款记录===================================================================*/ If isnull(@VBL13,0) > 0 BEGIN Set @VBL18 = getdate() Set @VBL19 = getdate() exec HOPatient_PrePay_Entry @VBL01 out,@VBL02,'',4,0,@VAA01,@VAE01,@EmpDept,@BAQ03,@BBO02, @VBL11,'',@VBL13,@VBL14,@VBL18,@VBL19,@EmpId,@EmpCode,@EmpName,@FAA01 IF @@ERROR > 0 --如果发生错误,则回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人预交款时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*============================================================如果从门诊开住院证过来的病人,更新住院证中信息==================================================*/ If isnull(@VAC01 , 0) > 0 BEGIN Update VBN1 SET VAA04 = @VAA04 , VBN12 = @VAE01 , VBN13 = @VAE11 where VAA07 = @VAC01 END /*========================================================================更新余额表信息======================================================================*/ Declare @VBM01 int SELECT @BEP07 = BEP07 from BEP1 where BCK01 = @BCK01A and BDP02 = @BDP02 SET @BEP07 = ISNULL(@BEP07 , 0) SET @VBM11 = ISNULL(@VBM11 , 0) Exec @ErrId = HORate_VBM1_Update @VBM01 , @VAA01 , 2 , 0 , 0 , 0 ,@VAE01 , @BEP07 , @VBM11 If @ErrId > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('更新病人余额表时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END /*============================================================================================================================================================*/ END ELSE --更新入院登记记录 BEGIN SELECT @OVAE88 = VAE88 from VAE1 where VAE01 = @id IF @OVAE88 <> @VAE88 BEGIN Exec Core_NewId 'ZAE1' , 'ZAE01' , @ZAE01 out INSERT INTO ZAE1 (ZAE01, TNAME, CNAME, ZAE04, ZAE05, ZAE06, ZAE07, ZAE08, BCE01, BCE03, ZAE11) select @ZAE01, 'VAE1', 'VAE88', @ID, @VAE01 , @OVAE88, @VAE88 , '住院登记有效日期变更', @EmpId , @EmpName , getdate() IF @@ERROR > 0 --如果发生错误,回滚数据 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END UPDATE a SET a.VAE04 = b.VAE04, a.ABJ01 = b.ABJ01, a.BDP02 = b.BDP02, a.ABC02 = b.ABC02, a.VAE08 = b.VAE08, a.BCK01A = b.BCK01A, a.BCK01B = b.BCK01B, a.VAE11 =b.VAE11 , a.ABO01 =b.ABO01 , a.ABR01 =b.ABR01 , a.ABT02 =b.ABT02 , a.VAE15 =b.VAE15 , a.ABZ02 =b.ABZ02 , a.ABK02 =b.ABK02 , a.BCQ04A = b.BCQ04A, a.VAE19 =b.VAE19 , a.VAE20 =b.VAE20 , a.AAG01 =b.AAG01 , a.VAE22 =b.VAE22 , a.BCK01C = b.BCK01C , a.BCK01D = b.BCK01D , a.BCQ04B = b.BCQ04B , a.VAE27 = b.VAE27 , a.ABV01 = b.ABV01 , a.VAE29 = b.VAE29 , a.VAE30 = b.VAE30 , a.VAE31 = b.VAE31 , a.VAE33 = b.VAE33 , a.VAE34 = b.VAE34 , a.VAE35 = b.VAE35 , a.VAE36 = b.VAE36 , a.VAE37 = b.VAE37 , a.VAE38 = b.VAE38 , a.BCE03A = b.BCE03A , a.BCE03B = b.BCE03B , a.BCE02C = b.BCE02C , a.BCE03C = b.BCE03C , a.VAE42 = b.VAE42 , a.VAE45 = b.VAE45 , a.VAE46 =b.VAE46 , a.AAU01 =b.AAU01 , a.ACK01 =b.ACK01 , a.AAT02 =b.AAT02 , a.ACC02 =b.ACC02 , a.AAY02 =b.AAY02 , a.BAQ01 =b.BAQ01 , a.BAQ02 =b.BAQ02 , a.BAQ03 =b.BAQ03 , a.VAE55 =b.VAE55 , a.VAE56 =b.VAE56 , a.VAE57 =b.VAE57 , a.VAE58 =b.VAE58 , a.VAE59 =b.VAE59 , a.VAE60 =b.VAE60 , a.VAE61 =b.VAE61 , a.VAE62 =b.VAE62 , a.VAE63 =b.VAE63 , a.VAE64 = b.VAE64 , a.VAE65 = b.VAE65 , a.VAE66 = b.VAE66 , a.VAE67 = b.VAE67 , a.VAE68 = b.VAE68 , a.AAZ02 = b.AAZ02 , a.VAE70 = b.VAE70 , a.VAE71 = b.VAE71 , a.VAE72 = b.VAE72 , a.VAE73 = b.VAE73 , a.IAA01 = b.IAA01 , a.UAA01 = b.UAA01 , a.VAE76 = b.VAE76 , a.BCE03D = b.BCE03D, a.VAE78 = b.VAE78 , a.VAE79 = b.VAE79 , a.VAE80 = b.VAE80 , a.BCE03E = b.BCE03E, a.VAE83 = b.VAE83 , a.VAE84 = b.VAE84 , a.VAE85 = b.VAE85 , a.VAE86 = b.VAE86 , a.VAE88 = b.VAE88 , a.VAE89 = b.VAE89 , a.VAE90 = b.VAE90 , a.VAE91 = b.VAE91 , a.VAE92 = b.VAE92 , a.SCF01 = b.SCF01 , a.VAE87 = @VAE87 FROM VAE1 a,#tmpPatInfo b WHERE a.VAE01 = @id IF @@ERROR > 0 BEGIN IF @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人入院登记时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END --如果没有入科的病人,修改时改变其住院科室、病区 UPDATE VAE1 SET BCK01C = @BCK01A , BCK01D = @BCK01B WHERE VAE01 = @id AND VAE44 <= 1 --维护病人余额记录 SET @BEP07 = ISNULL(@BEP07 , 0) SET @VBM11 = ISNULL(@VBM11 , 0) Exec @ErrId = HORate_VBM1_Update @VBM01 , @VAA01 , 2 , 0 , 0 , 0 ,@VAE01 , @BEP07 , @VBM11 If @ErrId > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('更新病人余额表时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*=============================================保存病人诊断信息(门诊诊断、中医诊断、入院诊断)====================================================*/ Exec @ErrId =HOPatient_VAO1_Update @VAA01,@VAE01,@VAO01A,@BAK01A,2,1,1,0,1,null,0,@EmpName,@BAK05A IF @ErrId >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人院门诊诊断时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END --入院门诊诊断(中医) Exec @ErrId =HOPatient_VAO1_Update @VAA01, @VAE01, @VAO01B, @BAK01B, 2, 1, 0, 1, 1, null, 0, @EmpName, @BAK05B IF @ErrId >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人院门诊诊断时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END --入院诊断 Exec @ErrId =HOPatient_VAO1_Update @VAA01 , @VAE01, @VAO01C, @BAK01C, 2, 1, 0, 0, 2, null, 0, @EmpName, @BAK05C IF @ErrId >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人院诊断时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END /*=========================================保存病人变动记录(入院登记)================================================*/ If @WorkStation=1 BEGIN Exec @ErrId= HOPatient_Pat_Change @VBO01, @VAA01, @VAE01, @VAE82, 1, @BCK01A, @BCK01B, @AAG01, @ABO01, @EmpId, @EmpName IF @ErrId >0 BEGIN If @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('入院登记保存病人变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END end else /*========================================保存病人变动记录(护士工作站)===============================================*/ if @WorkStation=2 BEGIN Declare @VBO04 datetime set @VBO04=getdate() select @VBO01=VBO01 from VBO1 where VAA01=@VAA01 and VAA07=@VAE01 and VBO06=7 and isnull(VBO21,0)=0 Exec @ErrId=HOPatient_Nurse_PatChange @VBO01,@VAA01,@VAE01,@VBO04,7,@BCK01A,@BCK01B,@AAG01,@ABO01,@BCE03B,@BCE03C,@EmpId,@EmpName IF @ErrId >0 BEGIN If @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('护士站保存病人变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /* ==============================================更新病人再入院情况=================================================*/ if isnull(@DiagId,0) <> 0 BEGIN update VAE1 set VAE08=1 where VAE01 = @DiagId and VAE44 <> 0 IF @@ERROR >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('更新病人再入院状态时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END /*===============================================更新CRM预约信息===================================================*/ If ISNULL(@SCF01 , 0) > 0 BEGIN update SCF1 SET VAA07B = @VAE01 , SCF11 = 4 where SCF01 = @SCF01 IF @@ERROR >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('更新CRM预约信息时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END --写入CRM咨询师 If ISNULL(@QueryPeopleId , 0) > 0 BEGIN Exec @ErrId = HOCRM_SCI1_Update @SCI01 out , @SCA01 , 2 , @SCF01 , 0 , @QueryPeopleId , @QueryPeople , '' , 0 , 3 , 0 , @VAE01 , 1 , '' IF @ErrId > 0 BEGIN IF @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('写入咨询师时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END SELECT @SCA01 = SCA01 from SCF1 where SCF01 = @SCF01 --如果没有对应病人信息,对应病人信息 If not exists(select * from SCA1 where VAA01 > 0 and SCA01 = @SCA01) BEGIN update SCA1 SET VAA01 = @VAA01 where SCA01 = @SCA01 IF @@ERROR >0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('更新CRM客户信息时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END END IF ISNULL(@SCA01 , 0) > 0 BEGIN If ISNULL(@CManageId , 0) > 0 BEGIN SET @SCI01 = 0 --Exec @ErrId = HOCRM_SCI1_Update @SCI01 out , @SCA01 , 1 , @SCF01 , 0 , @CManageId , @CManage Exec @ErrId = HOCRM_SCA1_Status @SCA01 , @CManageId , @CManage , 0 /*IF @ErrId > 0 BEGIN IF @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('写入客户经理时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END */ END SELECT @BCK03B = BCK03 from BCK1 where BCK01 = @BCK01B SET @SCH12 = '住院号:' + @VAA04 + ' 入院时间:' + convert(varchar(30) , @VAE11 , 111) + ' 入院科室:' + @BCK03B + ' 门诊医生:' + ISNULL(@BCE03B ,'') Exec @ErrId = HOCRM_SCH1_Update @SCH01 out , @SCA01 , 0 , 'VAE1' , 'VAE01' , 201 , '入院' , @SCH12 , 0 , 0 , @EmpId ,@EmpName END /*=============================================返回入院登记病人变动ID==============================================*/ SELECT @VBO01 = VBO01 from VBO1 where VAA01 = @VAA01 and VAA07 = @VAE01 and VBO06 =1 /*=============================================写入病人登记扩展表内容================================================= */ If not exists(SELECT * from VCT1 where VAA07 = @VAE01) BEGIN INSERT INTO VCT1(VAA07 , VCT32 , VCT33 , VCT34 , VCT35 , VCT36 , VCT37 , VCT38 , VCT39 , VCT41 , VCT42) SELECT @VAE01 , VCT32 , VCT33 , VCT34 , VCT35 , VCT36 , VCT37 , VCT38 , VCT39 , VCT41 , VCT42 from #tmpPatInfo IF @@ERROR > 0 BEGIN if @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人登记扩展表时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT Return 1 END END ELSE BEGIN Update a SET a.VCT32 = b.VCT32 , a.VCT33 = b.VCT33 , a.VCT34 = b.VCT34 , a.VCT35 = b.VCT35 , a.VCT36 = b.VCT36 , a.VCT37 = b.VCT37 , a.VCT38 = b.VCT38 , a.VCT39 = b.VCT39 , a.VCT41 = b.VCT41 , a.VCT42 = b.VCT42 from VCT1 a ,#tmpPatInfo b where a.VAA07 = @VAE01 END /*======================================================================================================================*/ COMMIT TRAN IF Object_id('tempdb..#tmpPatInfo') IS NOT NULL DROP TABLE #tmpPatInfo