典型问题分析报告_第1页
典型问题分析报告_第2页
典型问题分析报告_第3页
典型问题分析报告_第4页
典型问题分析报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.典型问题分析报告第 19 页 共 19 页肇蒀蝿肀肃蒀袂羃莁葿薁膈芇蒈蚄羁膃蒇螆膆聿蒆袈罿莈薅薈螂芄薄蚀羇膀薄袂螀膆薃薂肆肂薂蚄袈莀薁螇肄芆薀衿袇膂虿蕿肂肈蚈蚁袅莇蚈螃肁芃蚇羆袃艿蚆蚅腿膅节螈羂肁芁袀膇荿芁薀羀芅芀蚂膅膁荿螄羈肇莈袆螁莆莇蚆羇莂莆螈衿芈莆袁肅膄莅薀袈肀莄蚃肃荿莃螅袆芅蒂袇肁膁蒁薇袄肇蒀蝿肀肃蒀袂羃莁葿薁膈芇蒈蚄羁膃蒇螆膆聿蒆袈罿莈薅薈螂芄薄蚀羇膀薄袂螀膆薃薂肆肂薂蚄袈莀薁螇肄芆薀衿袇膂虿蕿肂肈蚈蚁袅莇蚈螃肁芃蚇羆袃艿蚆蚅腿膅节螈羂肁芁袀膇荿芁薀羀芅芀蚂膅膁荿螄羈肇莈袆螁莆莇蚆羇莂莆螈衿芈莆袁肅膄莅薀袈肀莄蚃肃荿莃螅袆芅蒂袇肁膁蒁薇袄肇蒀蝿肀肃蒀袂羃莁葿薁膈芇蒈蚄羁膃蒇螆膆聿蒆

2、袈罿莈薅薈螂芄薄蚀羇膀薄袂螀膆薃薂肆肂薂蚄袈莀薁螇肄芆薀衿袇膂虿蕿肂肈蚈蚁袅莇蚈螃肁芃蚇羆袃艿蚆蚅腿膅节螈羂肁芁袀膇荿芁薀羀芅芀蚂膅膁荿螄羈肇莈袆螁莆莇蚆羇莂莆螈衿芈莆袁肅膄莅薀袈肀莄蚃肃荿莃螅袆芅蒂袇肁膁蒁薇袄肇蒀蝿肀肃蒀袂羃莁葿薁膈芇蒈蚄羁膃蒇螆膆聿蒆袈罿莈薅薈螂芄薄蚀羇膀薄袂 ZLHIS 典型问题分析报告 第1 期中联信息产业 重庆公司2006年7月篇首寄语 在今年6月份的一次用户沟通会上,许多用户提到,希望中联公司能够定期提供一份分析典型问题的资料,用于指导用户自已解决问题,提升医院的信息化水平,同时也可减轻公司的服务压力,正是用户的建议性意见催生了展现在您面前的这份典型问题

3、分析报告的诞生。我们将典型的ZLHIS产品应用相关的技术问题进行分类整理,组织资深工程师对重庆区域内的典型问题进行总结分析,集结成册,为用户解决问题提供正确、高效的解决方案。报告分析的问题主要来源于中联技术论坛和一线服务人员的经验总结。中联公司一直致力于探询新的服务方式,提高医院的信息化应用水平,我们寄希望于这份资料,能够为医院解决ZLHIS产品应用中的问题提供实实在在的帮助。 中联公司的每一次发展,都离不开广大用户的支持。如果您对本刊有什么意见或建议可以通过登录中联技术论坛( 发表您的意见。 本期内容导读医保业务东软“住院门诊号”错误处理办法 在重庆市东软医保中,如果住院病人曾经作为医保病人

4、登记过,同一次住院过程中再进行补充登记时,会出现“违反唯一约束”的错误提示,为了解决该问题,10.11.0以上版本的医保部件改变了“住院门诊号”的生成方式,增加了“就诊序号”,将其作为住院门诊号的一部分。处理该问题的过程中,给系统中原有的病人处理带来了一些问题,导致不能正常结算,成为7月份最主要的东软件医保问题之一,本文将对问题产生原因做深入的分析并提出解决方法。药品系统盘点金额与入出汇总表的库存金额不符的分析 在ZLHIS产品应用中,经常有用户反映入出汇总表的金额与盘点金额不等的现象,这也成为药品系统中的“老大难”问题,本文将对此问题进行深入分析,并指导用户解决问题。费用系统“发现已被其他人

5、操作的费用”结帐错误的处理 某些住院病人使用同一住院号多次入院后,在最后一次结帐时出现“发现已经被其他人结帐的费用”错误,导致不能进行正常结帐操作,本文将详细说明此问题的解决过程。数据库管理病人费用汇总表的解决方案 由于医保业务的启用,导致一个事务持续时间过长,造成“病人费用汇总”的锁定,影响其他事务的提交。表现出来的就是HIS客户端多台连续死机,影响了医院的正常业务开展,本文将对此问题作深入的分析并对目前的采用的解决方案进行介绍。附录 7月份ZLHIS典型问题Q A集 我们对7月份的一些处理较为简单的问题进行分析,给出了解决办法,主要集中医保结口方面的问题。第一章 东软医保“住院门诊号”错误

6、处理作者:贺学兵 一、适用范围 适用版本:ZLHIS10.11及以上版本 适用医保:重庆市东软医保二、问题现象 在“病人费用查询”模块中进行预结算或出院结帐时,出现错误提示:“医保结口调用失败,找不到住院门诊号为XXX的就诊信息”。 三、原因分析10.11版本以前住院门诊号生成规则存在的问题 住院门诊号是东软医保中作为身份登记的标识号,一次就诊只能产生一个住院门诊号,不允许重复。在医保前置服务器的kc21(就诊信息登记表)的AKC190(住院门诊号)和AKB020(医保号)的字段上设置了主键约束。约束SQL如下;alter table HIS_PRO.KC21 add constraint P

7、K_KC21 primary key (AKC190, AKB020)10.11以前,住院门诊号的生成规则是:病人id_主页id,当医保病人撤消医保登记后,再进行补充登记时,会出现下述错误:第一次医保登记时,已经在KC21 表中生成一条记录,进行撤消操作时,打上作废标志,但未删除登记信息。当再进行补充登记时,由于是使用的相同住院门诊号,写入前置机数据库,违反了唯一约束,就出现了上述的错误提示。、10.11以后的住院门诊号生成规则 为了解决住院门诊号重复的问题,在10.11中,改变了住院门诊号的生成规则,生成规则为:病人id_主页id_就诊序号。具体的处理过程为,在“保险帐户”表中增加

8、“就诊序号”字段,每次医保登记时,读取“就诊序号”字段的值加上1作为本次的就诊序号,按照新规则生成病人的住院门诊号。这样就解决了病人再次补充登记时,住院门诊号重复的问题。如:病人ID为6574主页ID为2,而第一次正常登记时,生成的住院门诊号为6547_2_1,再次补充登记时,生成的住院门诊号为6547_2_2。产生的住院门诊号,将会记录到“保险帐户”中的住院门诊号字段,在进行预结算等医保交易时,会读取“住院门诊号”作为参数完成医保交易。如果此字段为空,或值与前置机KC21表记录的不一致,就不能正常结算了。、新规则下在院医保病人存在的问题 10.11中更改了住院门诊号生成的规则,但在院医保病人

9、住院门诊号已经生成,“住院门诊号”字段为空。为解决此问题,在更换部件前,必须对当前在院病人进行处理,将住院门诊号更新到保险帐户的“住院门诊号”院字段,才能进行费用上传和预结算:declarecursor cur_在院病人 is select * from 病案主页 where 出院日期 is null and 险类=10;begin for v_在院病人 in cur_在院病人 loop update 保险帐户 set 住院门诊号 = v_在院病人.病人id|'_'|v_在院病人.主页id where 病人id=v_在院病人.病人id and 险类=10; end loop;c

10、ommit;end; 由于可能以下特殊情况,可以导致HIS端记录的住院门诊号与前置机不一致,导致进行医保交易时出现错误:u 在执行更新脚本时,“病案主页”的险类字段为空,导致脚本没有更新保险帐户u 病人已输出院,但未结帐,导致脚本没有更新相保险帐户u 医院部件没有更换完成,使用老部件登记了医保病人,按老规则生成了住院门诊号u 医院重新安装了ZLHIS客户端,没有更新医保部件。u 其他特殊原因四、解决办法由于各种原因造成的住院门诊号填写错误,都可以通过修改保险帐户“住院门诊号”字段解决。如下例:SQL> update 保险帐户 set 住院门诊号='65437_2_2' w

11、here 病人id=65437;1 rows updatedSQL> commit;Commit complete第二章 对历史时点的盘点金额与入出汇总表金额不一致的解决办法作者:李俊 一、适用范围 适用版本:ZLHIS10.14以下版本 二、问题现象在对所有药品设置了药品存储库房和盘点属性的情况下,对历史时点盘点的盘点金额与入出汇总表金额不一致,如下图:在2006-7-22日,对中西药库在2006-7-21 23:59:59的所有药品盘点的盘点金额与药品入出汇总表的金额不等,药品入出汇总表中期末库存金额为3217646.21,盘点金额为3179351.21。三、原因分析 1、某一药品在

12、生成盘点表的当前时间无库存,而在历史时点有库存,造成对历史某一时点盘存时出现漏盘现象。比如第一行药品抗克胶囊在2006-7-21有库存,而在2006-7-22无库存数量。2、某些药品在盘点表生成时已停用,而在历史时点有库存且在用。 在7月21日药品诺氟沙星氯化钠针有库存,如下图: 在7月22日药品诺氟沙星氯化钠针已停用,如下图:四、解决办法1、药品盘点时,必须选择盘无库存药品方式2、通过自定义报表,查出漏盘的药品,并在药品目录管理中启用该药品。REPORT_525查询漏盘药品.ZLR3、重新对启用的药品进行手工盘点操作。第三章 住院结帐出现“发现已经被其他人结帐的费用”错误的解决方案作者:邓朝

13、雄 一、适用范围 适用版本:ZLHIS10.1.0以上版本二、问题现象 操作员在病人结帐处理模块中输入病人住院号,点确定时出现如下错误: 三、原因分析由于以前程序设计的问题(典型的是四舍五入和金额保留位数的不一致)导致在特殊情况下,让使用同一住院号多次入院的病人进行结帐时会出现实收金额与结帐金额不等的情况,现在程序加入判断后就会再次将这些记录提出并认为是未结帐费用而再次结帐。具体过程及SQL:-检查多次结帐后结帐金额是否高于原金额        Select Nvl(Sum(实收金额),0),Nvl(Sum(结帐金额),0)

14、 Into v_实收金额,v_结帐金额        From 病人费用记录        WHERE NO=NO_IN AND 序号=序号_IN AND 记录状态=记录状态_IN            AND SUBSTR(记录性质,LENGTH(记录性质),1)=记录性质_IN And Nvl(执行状态,0)=执行状态_IN; 

15、60;      If v_结帐金额>v_实收金额 Then            v_Error:='发现已经被其他人结帐的费用,当前结帐操作不能继续。'            Raise Err_Custom;        End

16、IF;四、解决办法1、发现异常费用进入病人结帐处理模块,在结帐表清单中,此类费用都会出现在费用清单的最后,时间与单据号和本次住院的单据号明显不同:时间远远大于本次住院的入院时间、单据号数小于本次费用的最小单据号数,还有可能开始字符都会不相同(跨年费用)。2、查找病人ID在病人费用查询中找到此病人的ID号(在窗口最下方)。3、对比错误记录及更改31 进入PL/SQL,执行以下SQL:Select No,姓名,实收金额,结帐金额 From 病人费用记录 Where 病人id=399574 And 实收金额<> 结帐金额 For Update32 把找到的结果集与HIS中的全部有异议的费

17、用进行对比,如果全部相符,则按以下步骤进行操作:和u 打开数据写保护;u 把结帐金额数改为与实收金额数相同;u 更改完成;u 关闭数据写保护;u 提交更改;第四章 “病人费用汇总表”锁定解决方案作者:文仲彦 一、适用范围 适用版本:ZLHIS9及ZLHIS+所有版本二、问题现象 收费室或者结帐处某台工作站在使用ZLHIS程序在对医保病人进行门诊或者住院收费结算时,由于医保在处理业务的时间过长,导致HIS程序表现为“假死机”状态,并最终导致其他工作站病人收费或结帐的工作连续死机,但系统内其他软件可以响应,严重影响医院正常业务运行。 三、原因分析在ZLHIS程序中有一张存储病人费用汇总的数据表,表

18、名为病人费用汇总,主要用于汇总明细费用,加快报表的统计速度,减轻费用明细记录表的压力,该表的结构如图:每当his程序对病人收费或者结帐时,程序都要更新该表的数据,更新的方式是行级增加或者修改,对于oracle数据库的表操作中,oracle有一个行级锁定的概念,其采用行级锁定,是为了防止在同一时间,多个会话对同一条数据进行操作,造成数据的不一致性。因此当一个事务首次发起一个DML语句时就获得一个行级锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,行级锁被释放,其他会话才可以加锁。因此,当H

19、IS在处理医保病人费用操作时,由于医保业务长时间未响应,时必导致在对病人费用汇总上某一条数据的死锁,而如果下一个病人收费或者结帐,恰巧也要更新该条数据,就形成了等待,在HIS程序中表现就为死机现象。四、解决办法1、通过zlKillSession工具,强行结束锁表会话。一双击图标二登录登录操作与ZLHIS类似,分别填写用户名、密码和服务器,如下图:在使用过程中,有以下2点需要注意:u 本工具已对用户登录密码进行了处理,请使用与本用户在ZLHIS中登录时相同的密码;u 本工具必须以DBA用户登录,例如ZLHIS,如果ZLHIS没有DBA权限,请先授权后再使用(可在sql plus 中执行grant

20、 dba to zlhis语句)三主界面登录成功后,显示如下图的界面:界面可分为功能和显示两个区域,其中显示区域用于显示检测出的导致系统死锁的会话以锁定的对象。显示区功能区四主要功能及操作功能1: 检测及KILL导致死锁的会话1. 登录本工具的同时也完成了对会话的检测,检测结果即显示在显示区中,从中可以看出是哪些会话导致了系统的死锁,以及被锁定的对象;2. 在一般情况下,检测出的会话都是需要进行KILL处理的,因此直接点击KILL会话即可。功能2: 有选择地KILL会话/刷新1. 如果只希望KILL某些特定的会话,可以直接点击“用户会话”列表中的选择列,将需要KILL的会话加上标志,再点击KI

21、LL会话按钮进行处理2. 如果需要重新检测当前系统中需要处理的会话,点击刷新按钮即可。优点: 操作简单,而且无需对数据表做相应的更改缺点: 不能从根本上避免锁表现象,只是强行结束锁表的用户,达到释放资源的目的。2、使用替代触发器的解决方案因为oracle数据库是不允许对视图进行DML操作,对于插入和更新,因为操作的是视图,所以需要在该视图上建立替代触发器,替代触发器是一种建立在视图上的触发器,用于捕捉外界对视图的DML操作,替代为其他操作进行,本过程建立的替代触发器,只捕获HIS程序对病人费用汇总表的DML操作,相当于把所有操作都吸收了,但并不对病人费用汇总视图进行任何操作,也就解决了对表的行

22、级锁定视图是一种虚拟表,是一组查询语句的反馈结果,本过程病人费用汇总就是反馈病人费用合计表的所有记录。 我们先建立一张“病人费用合计”表,作为原来的“病人费用汇总”表的替代。然后建立基于“病人费用合计”的视图“病人费用汇总”,由于与原来的表名相同,就可以使用使用了“病人费用汇总”的过程、函数能够编译通过。然后在视图建立替代触发器,屏蔽来自客户端的DML语句,避免行级锁定。最后就是建立后台作业,每天凌晨定时根据费用明细生成“病人费用合计”数据,便于报表统计。 替代触发器的方案的优点是彻底解决病人费用汇总表造成死锁的现象。但替代表病人费用合计并不能实时更新,只有通过数据库的自动作业进行定时汇总计算

23、,因此会造成统计表数据源中设计到病人费用汇总统计的(如:全院病人费用统计等),不能统计当天的数据,只能统计昨天时间的数据。相关的SQL语句如下:-1、创建新表病人费用合计,删除病人费用汇总表。create table 病人费用合计 as select * from 病人费用汇总;drop table 病人费用汇总;Alter Table 病人费用合计 Add Constraint 病人费用合计_UQ_日期 Unique (日期,病人病区id,病人科室id,开单部门id,执行部门id,收入项目id,来源途径,记帐费用) USING INDEX PCTFREE 15 TABLESPACE zl9E

24、xpense;-2、建立同名视图create or replace view病人费用汇总as select * from 病人费用合计;-3、创建替代触发器。create or replace trigger zl_病人费用汇总_triinstead of update or insert or delete on病人费用汇总beginnull;end zl_病人费用汇总_tri;/-4、创建数据处理过程用于重新计算病人费用合计表的数据,更新病人费用合计表的数据。create or replace procedure zl_病人费用汇总_重新计算is v_最大日期 date;begin -取费

25、用汇总的最大日期 select max(日期) into v_最大日期 from 病人费用合计 ; -删除可能计算错误的数据 delete from 病人费用合计 where 日期>=v_最大日期 - 5 ; -插入数据,计算日当天的费用数据不汇总 insert into 病人费用合计 Select 日期,病人病区ID,病人科室ID,开单部门ID,执行部门ID,收入项目ID,门诊标志,记帐费用,Sum(应收金额) AS 应收金额,Sum(实收金额) AS 实收金额,Sum(结帐金额) AS 结帐金额From(Select Trunc(登记时间) as 日期,病人病区ID,病人科室ID,开

26、单部门ID,执行部门ID,收入项目ID,门诊标志,记帐费用,Nvl(Sum(应收金额),0) as 应收金额,Nvl(Sum(实收金额),0) as 实收金额,Decode(记帐费用,0,Nvl(Sum(结帐金额),0),0) as 结帐金额From 病人费用记录Where 记录性质<>0 and 登记时间 between v_最大日期 - 5 and trunc(sysdate) Group by Trunc(登记时间),病人病区ID,病人科室ID,开单部门ID,执行部门ID,收入项目ID,门诊标志,记帐费用Union ALLSelect Trunc(B.收费时间) as 日期,

27、A.病人病区ID,A.病人科室ID,A.开单部门ID,A.执行部门ID,A.收入项目ID,A.门诊标志,A.记帐费用,0 as 应收金额,0 as 实收金额,Nvl(Sum(A.结帐金额),0) as 结帐金额From 病人费用记录 A,病人结帐记录 B Where A.记帐费用=1 And A.结帐id=B.ID and A.登记时间 between v_最大日期 - 5 and trunc(sysdate) Group by Trunc(B.收费时间),A.病人病区ID,A.病人科室ID,A.开单部门ID,A.执行部门ID,A.收入项目ID,A.门诊标志,A.记帐费用)Group by 日

28、期,病人病区ID,病人科室ID,开单部门ID,执行部门ID,收入项目ID,门诊标志,记帐费用Having Sum(应收金额)<>0 or Sum(实收金额)<>0 or Sum(结帐金额)<>0;end zl_病人费用汇总_重新计算;/-5、添加自定义作业,使病人费用合计定时执行第四步创建的更新过陈,达到定时更新的目的。declare v_jobNum number;begin dbms_job.submit(job => v_jobNum,what => 'zl_病人费用汇总_重新计算;',next_date => sys

29、date,interval => 'trunc(sysdate)+1+1/24');end;/-6、重新编译无效对象,使用pl/sql devloper或服务器管理工具进行附录 7月份典型问题QA集 Q1:适用范围:东软医保问题现象:在门诊收费时间点击预决算时报“错误的业务代码300或301”原因分析:因东软的SiInterface.dll文件版本小1.0.0.4,解决方法:下载最新的东软动态库。 Q2: 适用范围:东软医保问题现象:预结算时提示:“医保接口出现警告:要冲减的处方明细找不到对应的单据” 原因分析:因为医院记了负数费用,而负数的数量大于了原始单据的数量解决办

30、法:1、在病案主页中将该病人的险类改为空; -主页ID为病人在医院的住院次数,可以在病人费用查询模块中查到 update 病案主页 set 险类=null where 病人ID=? and 主页ID=?; commit; 2、在程序中对记的该负数单据进行销帐;3、在病人费用记录中将该单据的是否上传改为1; -NO为单据号 update 病人费用记录 set 是否上传=1 where NO='?' and 记录性质=2; commit; 4、在病案主页中将该病人的险类改为10; update 病案主页 set 险类=10 where 病人ID=? and 主页ID=?; 5、在程

31、序中对要退的费用进行销帐处理。Q3:适用范围:东软医保问题现象:医保结算或者记帐时,提示:找到指定的文件,10.0.8.129原因分析:东软的接口程序需要浏览器,浏览器不能置于脱机方式解决方法:打开IE浏览器,选中“文件”=>下“脱机工作”菜单,取消脱机方式。Q4:适用范围:ZLIHS所有版本问题现象:药品无法停用,但库房又没有库存量原因分析:、其它药品库房、药房是否还有库存、药品还存在有库存金额或库存差价 解决方法: 通过药品盘点或差价调整功能调整药品差价Q5: 适用范围:9.18.0及以前的版本问题现象:药品调价速度慢,调整一个药品价格都以分钟计算原因分析:可能是药品调价的SQL语句中某条SQL语句没有用到索引,对药品收发记录进行了全表扫描解决方法:在药品收发记录的"价格ID"上建立索引,SQL如下:create index 药品收发记录_IX_价格ID on 药品收发记录 (价格ID)Q6: 适用范围:竞达农村合作医疗结口问题现象:补充登记的医保病人,入院日期传送到中心是系统当前日期 原因分析:竞达的中心端程序没有取HIS传上去

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论