王正凯
摘要:经曲阜师范大学与山东省济宁市人社局协商、沟通,大学校医院纳入医保定点医院。校医院HIS系统需要与山大地纬医保接口进行数据对接。本文介绍了山大地纬医保系统的接口环境,以及校医院HIS系统对医保接口的调试思路、调试过程和解决方案。
关键词:医保;接口技术;编程;Perl
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2021)10-0263-03
Abstract:After negotiation between Qufu Normal University and Medical Insurance Bureau of Jining City Shandong Province, School hospital will be included Medical insurance designated hospitals. This article describes basic situation of Shandong University Medical Insurance System interface, and the process of Interface docking technology.
Key words: the Social medical insurance system; Interface technology; Programming; Perl
1 社會医保基本现状
党的十九大报告确立了习近平新时代中国特色社会主义思想,明确阐述了健康中国的发展战略及总体部署,提出打造共建共享的健康治理新格局,健康治理开始成为政府、学界及民众普遍关注的重大民生问题。全民医保作为我国健康保障体系的主要制度安排,其治理问题也是健康治理的有机组成部分,关系到健康中国战略目标的实现。[1]
当今时代,互联网和大数据应用日益成为管理创新发展的先导力量,深刻改变着传统的政府行政管理方式。利用信息技术手段创新治理工具,推动医保制度设计更加科学化、精细化、人性化,促进医药卫生体制改革全面深化,不仅是当前社会发展的需要,更是实现医保治理现代化的重要途径。[2] 越来越多的地方医院,通过医保的规范技术接口,纳入医保的信息化管理系统,互联网、大数据、云计算等现代信息技术在医保领域正在全方位拓展。
2 本院面对的医保接口环境
按照地方人社局的要求,笔者所在医院需要与山大地纬医保系统进行数据对接。山东大地纬医保结算覆盖山东省80%地区的定点医疗机构和定点药店,山大地纬软件公司向医院提供的技术文档是《地纬定点医院嵌入式接口服务说明文档(v1.0.7)》。该说明文档的背景介绍是“定点医疗机构业务是社会保险体系中的重要组成部分,定点医疗机构结算系统更是核心平台三版的核心外围业务系统之一。为了更好地实现定点医疗机构结算系统与医院自身信息管理系统的对接,地纬公司研制设计了本接口系统。”
“地纬定点医院接口服务系统”是在地纬公司采用面向服务的应用程序开发(Services-oriented development of application,SODA)使定点医院医保结算系统转换到面向服务架构(service-oriented architecture,SOA)。该接口服务集成了医疗保险定点医疗机构的所有结算业务服务函数,这些函数供给医院HIS系统调用,并支持重要结算信息的返回。将该接口嵌入原医院管理系统后,医院管理系统可无缝连接到医疗保险网络信息系统。
医院端与医保核心端应用架构如下:
3 医院对医保接口的调试过程
3.1 医保接口调试前的硬件准备
医院向地方通信公司申请开通医保专线连接,并准备一台连接医保专线的电脑。按照地纬软件公司的要求,该电脑安装Win7 32位专业版。
3.2 山大地纬结算软件的安装
电脑安装地纬医保结算系统,安装USB加密卡。
地纬医保结算系统安装过程中,在D盘会创建“地纬定点医疗机构结算系统三版”文件夹。这个文件夹里的sei3.dll文件是接口类库文件,需要在电脑命令行状态完成sei3.dll文件的注册:
regsvr32 sei3.dll
3.3 编程环境的创建
为了方便医保接口的调试工作,经过综合考量,决定使用不需要编译的脚本语言Perl编写调试程序。
安装Strawberry Perl 5.26.2.1 (32bit)。安装后的Perl并不能直接处理dll文件,还需要在命令行状态安装“Win32::OLE”模块:
Perl –MCPAN –e “install ‘win32::OLE”
3.4 编写调用dll的测试程序:
按照医保接口文档说明,用Perl写一个创建ole对象的程序如下:
#!"D:\Strawberry\perl\bin\perl"
use Win32::OLE;
my $sei = CreateObject Win32::OLE 'sei3' or die $!;
my $vi = $sei->connecttonewobject('sei3');
if ($vi != 0)
{
print "创建地纬嵌入式接口sei对象失败!\n";
}
else
{
print "创建地纬嵌入式接口sei对象成功!\n";
}
运行结果:创建地纬嵌入式接口sei对象成功!
在创建sei对象的基础上,对接口文档中“读取无卡取保人基本信息”的功能编写Perl程序,对本市参保人员高某的医保信息尝试读取:
# 读取无卡取参保人的基本信息 Perl代码:
$sei->resetvar();
$sei->putvarstring('grbh',' 37088119710429****');
$sei->putvarstring('xm','高**');
$sei->putvarstring('yltclb','4');
$r = $sei->putvarstring('sbjgbh',' 37088101');
if ($sei->request_service('query_person_info') != 0)
{
print "调用无卡取信息服务失败!\n";
}
$vrqlb = $sei->getvarstring('rqlb');
$vxm = $sei->getvarstring('xm');
$vzfbz = $sei->getvarstring('zfbz');
$vmzdbjbs = $sei->getvarstring('mzdbjbs');
print "$vrqlb $vxm $vzfbz $vmzdbjbs";
程序運行后,屏幕打印:
A 高** 1 甲状腺功能亢奋(门诊特病)#m00023/
打印信息的含义依次为:人群类别 姓名 标志 疾病编码。
这说明,测试程序能够正常调用sei3.dll封装的函数。
接口文档中其他的功能实现,都可以通过Perl对sei3.dll的调用来完成。在调用sei3.dll时经常会要求传递datetime()类型的时间参数,由于Perl和PB编程语言的差异,在Perl中没有并没有这个数据类型,所以需要写一个生成datetime()时间格式数据的子函数,在传递datetime()类型的时间参数前进行调用:
sub get_datetime()
{
$chpasstime = time();
use POSIX qw(strftime);
$chpasstime = strftime "%Y-%m-%d %H:%M:%S", localtime($chpasstime);
$chpasstime = $chpasstime ;
return $chpasstime;
}
还有其他一些类似的情况,需要在Perl中构造数据转换函数,在此不再叙述。
3.5 医保慢性病门诊处方的处理实例
在完成对医保接口基本调用的测试之后,开始调试医保慢性病类型的门诊处方。在医院HIS系统里需要做一些必要的改动,医保慢性病处方录入后,需要及时调用医保接口把处方内容传递给医保系统,并等待医保系统返回的结算信息。传递门诊处方的核心程序代码为:
# 创建对象句柄
use Win32::OLE;
$sei = CreateObject Win32::OLE 'sei3' or die $!;
$vi = $sei->connecttonewobject('sei3');
# 医保接口初始化
$sei->resetvar();
$sei->putvarstring('sbjgbh','37088101'); # 社保机构编号入参
$sei->putvarstring('yybm','088137'); # 医院编号入参
$sei->putvarstring('gzrybh','0001'); # 操作员编号入参
$sei->putvarstring('pwd','******'); # 密码入参
$vi = $sei->request_service('init');
# 门诊初始化
$sei->resetvar();
$sei->putvarstring('sbjgbh',"$sbjgbh");
$sei->putvarstring('yltclb',"$yltclb");
$sei->putvarstring('xzbz',"C"); # 险种标识,医疗C;工伤E
$sei->putvarstring('grbh',"$grbh"); # 个人编号
$sei->putvarstring('xm',"$xm"); # 姓名
$sei->putvarstring('xb',"$xb"); # 性别
$sei->putvarstring('jbbm',"$jbbm"); # 疾病编码
$sei->putvarstring('ysbm',"$ysbm"); # 医师编码
$sei->putvardatetime('fyrq',"$datetime"); # 当前时间入参
$vi = $sei->request_service ('init_mz'); # 调用门诊初始化
if ($vi eq '0') # 如果门诊初始化成功
{
$vjshid=$sei->getvarstring('jshid'); # 从接口读取结算号
$vfyid=$sei->getvarstring('fyid'); # 从接口读取费用号
$vzylsh=$sei->getvarstring('zylsh'); # 从接口读取流水号
# 门诊费用项目循环上传
# 此处通过标准SQL语句读取HIS数据库中门诊处方信息(已略去),并传递到医保接口
while (@data = $sth->fetchrow_array())
{
$sei->putvarstring('yyxmbm',"$yyxmbm");
$sei->putvarstring('yyxmmc',"$medname");
$sei->putvardec('dj',"$lprice");
$sei->putvardec('sl',"$quantity");
$sei->putvardec('bzsl','1');
$sei->putvardec('zje',"$zje");
$sei->putvarstring('gg',"$guige");
$sei->putvardec('sxzfbl',"$sxzfbl"); # 自付比例
$sei->putvardatetime('fyfssj',"$datetime"); # 当前时间入参
$sei->putvarstring('zxksbm','006'); # 执行科室编码
$sei->putvarstring('kdksbm','006'); # 开单科室编码
$sei->putvarstring('sm',''); # 说明,默认保持空
$sei->putvarstring('yzlsh',''); # 医嘱流水号 默认保持空
$sei->putvarstring('sfryxm',"$sfryxm"); # 收费人员姓名
}
}
程序运行后,门诊处方内容传递给接口,并接收到医保返回的结算信息,弹出结算单打印界面。
这样就完成了医保慢性病门诊处方的一次结算。
3.6 医保类型住院费用的处理
住院费用的处理和门诊费用的处理类似,最大的不同在于,医保住院患者产生的费用信息实时上传,并不结算,直到患者出院时才完成结算。
住院费用的上传、患者出院的结算,也都是对医保接口函数的调用,和医保门诊处方的调用过程类似。
限于篇幅,医保住院费用的上传程序、出院结算程序,本文不再叙述。
4 讨论总结
Perl属于快速原型开发的高级编程语言,程序代码不需要编译,使用非常方便,这是本院选择使用Perl作为调试语言的原因。
随着全国社会医保工作的展开,各地医院都会陆续接入医保系统。本文记录了我院加入社会医保接口调试的主要流程,事实上,医院管理系统(HIS)需要做的改动很多,细节工作也很烦琐,比如医院费用项目与医保费用项目的对应等工作。但只要能明确思路,所有问题都可以逐步得到解决。医保接口的改造成功不仅方便了医保患者的就医,提高了医院的服务水平,而且还规范了医院医保患者的管理。[3]
虽然各地医保机构和医院软件系统存在差异,但接入醫保系统的思路和过程是相似的,可以相互参考、借鉴。
参考文献:
[1] 王琬,詹开明.社会力量助推医保治理现代化研究[J].社会保障评论,2018,2(1):82-91.
[2] 马颖颖.社会保障公私合作的产生基础及中国的实践[J].社会保障评论,2017,1(3):148-159.
[3] 赖家聚,赖燕梅,刘焱鑫.省、市医保接口统一基础与交换数据平台实现[J].医学信息,2019,32(12):13-16.
【通联编辑:王力】