HIS医保接口设计规范一、导言BSHIS在两年前就开始涉及医保软件接口的设计和实施了。
随着时间的推移,越来越多的新签医院工程也要求实施医保;而一些以前上的老工程,也开始在实施各地的医保政策。
可以说,医保的实施已经成为HIS软件在医院实施中一个很重要的组成部分。
从某种意义上讲,医保实施的好坏也已经直接影响了工程实施的进度和效果。
由于医保政策的复杂性,再加上政策有很大的地区差异。
在实施过程中,软件设计人员遇到了很多比较复杂也或者很难于解决的问题。
另外,由于医保政策一般都是刚刚指定出来不久的。
所以,在实施的过程中,经常会遇到修改政策的过程。
这在一定程度上给软件设计和实施增加了不少的难度。
同时,也会导致医保接口软件设计上的不确定性,直接的后果是可能导致很多的重复劳动。
结合前面很多人医保实施成功和失败的教训,对在医保接口设计过程中的,好的方法进行了归纳,并尽量给出一种比较完善和完美的设计解决方法和规范,可帮助医保实施和软件接口设计人员比较好地实施医保。
当然,现在只是个草稿,需要医保实施实践不断地扩充此规范,以至形成一种比较固定的综合解决方案。
二、关于医保政策软件和应对方案我们通过对北京安宁盈科、创智公司、东大阿儿派、杭州新世纪、建达电子、万达公司等各个医保险政策软件提供商提供的接口方案进行了分析,总计出他们之间的共性如下:1、一般都提供DOS和WINDOWS两套方案,DOS下一般用文件形式传递数据,WINDOWS下一般以WIN32 API的形式在HIS和医保前置机之间调用和传递数据(DLL提供了政策函数)。
我们以后者为重点说明问题。
2、政策函数一般分为两类:单个函数和多个函数两种类型设计多个函数是指每中业务或者比较相似的业务为一个函数,这样组成结算、登记、退费等多个函数。
如:杭州新世纪、东大阿儿派单个函数是指所有的业务都用一个函数实现。
参数一般用结构字符串实现。
如:上海万达公司。
3、明细数据一般都和结算时必要的项目数据分开传递到医保中心服务器。
这样做的目的是为了减少网络阻塞。
如果是同时要传的,一般在结算准备阶段就已经将数据计算好了。
4、平时发生费用时,一般分成两种方式处理:1)平时的自负比例按HIS中设置的算,也不需要审批如:万达公司2)平时的自负比例不按HIS中设置的算,需要审批;需要维护标准的HIS药品/项目的对照表,并在对照表中设置比例。
如:东大阿儿派,记费代码需修改。
5、结算前一般都要刷卡,有些允许只在登记或者挂号的时候刷卡,结算时计算(准备)阶段:处理结算数据的上传或者调用结算计算函数获得医保支付信息,并获得自负金额,HIS端可据此结算和打印发票。
确认结算阶段:执行结算处理,和医保政策软件进行结算交易。
基于上面的分析和考虑,我们希望能够利用各个医保政策软件的共性,屏蔽其个性和特殊性、隔离HIS端业务和医保端业务。
这样,对HIS端调用来说,调用的方式和接口是相同,有利于批量的实施和迎合医保险业务的多变性;减少HIS端程序的频繁修改和很大的后期维护量。
所以,我们总的原则是:1)隔离HIS端业务和医保端业务:HIS端窗口和模块中,不要加入医保的处理过程,但可以加入对象方法的数据准备和方法调用。
这样可减少HIS端业务和医保端业务的关联性,可适合批量医院上医保、各家医院程序又有客户化的情况。
2)利用共性,屏蔽个性:尽量将HIS端该调用医保处理的位置、函数名称和步骤明确化,规范化,避免不必要的重复劳动和差异程序维护。
3)尽量减少调用医保的地方,或者在一个事件或者函数中集中处理,利于维护。
4)调用方法参数用结构体或者DATAWINDOW,避免很多的参数。
5)函数返回值类型单一化,就成功或者失败两种情况,其他的返回信息放在医保接口对象的实例结构体变量或者实例变量中。
三、医保接口规范1、医保病人结算的一般流程入院或者挂号(需要验证身份) →发生费用→结算发生费用时处理:有些医保需要个别项目进行审批,有些需要统一按标准目录取比例这时需要HIS药品/项目和医保之间有个对照如杭州医保就需要按上面的方法处理有些医保则不需在发生费用时和医保有关,只是在结算时发送相关的大项目结算金额就可以了。
如上海医保,无对单个项目的处理结算的流程:先身份验证→计算请求:结算前先获得费用支付结构→确认结算:发送确认交易命令,调用医保软件实现结算退款的流程:先身份验证→由HIS向医保政策软件发送退款需要的数据和请求命令→获得医保政策软件响应处理HIS业务退款补结算的流程(指不是退全部款,而是新增或者退一部分):先身份验证→由HIS向医保政策软件发送退款和重新结算的数据和请求命令→获得医保政策软件响应处理HIS业务门诊挂号(住院入院登记)处理:在正式保存数据前,先调用医保政策提供商提供的函数验证,成功后,才保存正式的挂号或者已登记人员(在返回时一般可从函数的返回值中获得病人的基本信息,该信息保存在医保中心)2、在程序设计中应该遵循的原则1)保证医保处理业务和HIS处理业务隔离开新增 yb_ybcl.pbl 放医保公用对象和数据;以后,只要替换此文件即实现医保变化。
新增医保处理基对象 u_ybcl_base(基础类,负责和医保的业务调用),医保处理对象u_ybcl(业务类,负责从HIS端获得和准备数据,以及与HIS端的交互操作)。
HIS端调用对象u_ybcl的方法(函数和事件),并提供必要的参数信息。
2)若有医院和标准业务不同,请从 u_ybcl 对象继承3)需要修改 u_nbcl 对象和yb_ybcl.pbl,请在修改后,覆盖所有使用该PBL的地方,保持版本的统一,避免不必要的版本不相同而导致不能充分地共享代码。
4)要书写上了医保后的表结构变化记录和字段变化记录。
建议写成能直接执行的SQL语句,这样实施医保险的人,直接执行即可。
避免让实施的人到DBMS上去修改。
如,宁波医保的SQL如下:字段添加请参考《bshis2.x宁波新医保__新增字段》适用于 Sybase or MsSql表的添加请参考《bshis2.x宁波新医保__新增表sybase》适用于 Sybase 11 or later 或者《bshis2.x宁波新医保__新增表sql70》适用于 Microsoft Sql Server 5)需要书写必要的注意事项,以便实施。
可让工程技术人员阅读,知道其上医保系统。
最主要的是说明“需要设置的基础数据”(包括了执行表结构修改和新增表的SQL 语句)如,可看《bshis2.x宁波新医保__若干注意事项.txt》6)代码中,对象的函数和事件命名要统一和规范化。
如:事件的命名规范为:ue_mzgh_xxxx 门诊挂号相关的事件ue_mzsf_xxxx 门诊收费相关的事件ue_mztf_xxxx 门诊退费相关的事件ue_zydj_xxxx 住院(入院)登记相关的事件ue_zysf_xxxx 住院收费相关的事件ue_zytf_xxxx 住院退费相关的事件7)医保对象中,提供结算结果、个人信息结构体等必要的实例变量(即对象属性)。
可让HIS端在计算自负金额和打印用,以及其他处理的时候用。
结算结果结构体中的信息有:自理金额、现金金额(就是自理金额+医保的现金支付部分)、本次结算总费用、结算后的帐户余额、其他必要的结算信息(如当前结算的类型等)、医保支付信息子结构体、各项目金额组成子机构体、个人信息子结构体等。
具体需要多少信息可根据实际情况而定。
下面是医保的结构体实例变量的说明://====================================================================// s_his_ybjsxx isu_ybjsxx 结算信息(可供HIS端打印发票是用)//====================================================================integer ghsf 结算类型 1挂号2门诊3住院-2门诊退费-3住院退费integer jsbz 结算方式 0普通1特病2家床string jzbz 普通/急诊 1普通2急诊yb_ybfymx fymx 项目费用信息(在预结算时产生)decimal {2} zjje 当前结算费用总额decimal {2} fyje[100] 按医保归并得到的项目金额... 其他需要的项目费用数据yb_ybzfxx zfmx 支付结构(预结算后得到)子结构体(因为各个地区医保不同,内部项目具体命名可到时候实施的时候再修改)decimal {2} grzhzf 个人帐户支付decimal {2} gbjjzf 公补基金支付decimal {2} tczf 统筹支付decimal {2} jzzf 救助支付decimal {2} xjzf 医保现金支付decimal {2} qfdzhzf 起付段帐户支付decimal {2} qfdgbzf 起付段公补支付decimal {2} qfdxjzf 起付段现金支付decimal {2} tcdzhzf 统筹段帐户支付decimal {2} tcdgbzf 统筹段公补支付decimal {2} tcdxjzf 统筹段现金支付decimal {2} jzdzhzf 救助段帐户支付decimal {2} jzdgbzf 救助段公补支付decimal {2} jzdxjzf 救助段现金支付decimal {2} xjzfa 现金支付Adecimal {2} xjzfb 现金支付Bdecimal {2} xjzfc 现金支付Cdecimal {2} grzhye 进行了当前结算后的帐户余额decimal {2} tfxjje 退费现金(<0退 >0补交),退费时用;一般不建议退费,而用隔日作废后重新结算decimal {2} zjje 当前结算的总计金额decimal {2} qzlje 当前结算的全自理金额decimal {2} xjzf 当前结算的医保现金金额decimal {2} xjje 当前结算的全部现金金额 = 当前结算的全自理金额 + 当前结算的医保现金金额decimal {2} zhye 进行了当前结算后的帐户余额string tsbbm 特病代码(不是特病结算无意义)string zcyydm 转目标医院代码(不是转院结算无意义)//====================================================================// s_his_jbxx isu_jbxx 病人基本信息(刷卡后获得)//==================================================================== string knxx 卡内信息string brkh 病人卡号string bxhm 保险号码yb_ybgrxx grxx 个人信息子结构体string brxm 病人姓名string sfzh 身份证号string zhbz 帐户标志string dwdm 单位编码string qxdm 区县代码integer brnl 年龄integer brxb 性别string djbz 冻结状态 0未冻结 1已冻结datetime csny 出生年月decimal {2} zhye 帐户余额... 其他项目可根据实际情况添加integer bz -1 表示刷卡未成功否则成功若返回值有很多的信息,建议放在对象的结构体实例变量中。