欢迎,来自IP地址为:44.221.43.208 的朋友


2022年,国家将大力推进医保全国统一结算工作,并逐步实现医保结算的精准化、合理化。了解和掌握医保国家平台的结算规则,具备一定的接口开发能力,可以在全国医保结算方式变革的大潮中占得先机,为个人发展打下良好基础。

本文将简要介绍医保国家平台的实现机理,并以 Python 语言为例,详细讲解如何对接医保国家平台。

医保国家平台的实现机理

众所周知,医保之前都是各医保统筹区独立处理医保交易,从而造成医保政策各异、结算接口标准不一、诊疗项目及药品目录也存在差异。随着各医保统筹区逐渐采用国家标准代码,从而实现诊疗项目、药品、医疗机构、医护人员等基本信息的全国统一,为采用国家医保接口进行医保交易创造了条件。

使用国家医保平台进行医保交易,可以轻易实现跨统筹区的医保结算,从而真正实现全民医保,可以有效提升医保覆盖范围和保障水平。

重庆作为第一个接入医保国家平台的省级医保统筹区,为医保国家平台的运作积累了众多宝贵的经验。重庆医保接入国家平台的实现方式为:

医院信息系统<—json报文—>本机医保交易动态库<—json报文—>本地医保国家平台

医院的信息系统只需要与医保网络可达,医院信息系统通过调医保交易运态库,直接同医保国家平台进行交互,取消了之前部署在各医疗机构的前置设备,使网络更加扁平化,易于管理。

数据传输采用网络中数据传输最为流行的数据格式 json,使接口更具有通用性。本地医保国家平台通过专用网络,联接其他统筹区的国家平台,共同组成医保国家平台,从而实现医保全国联网结算。

重庆医保国家平台交易程序实现

重庆医保交易使用”SiInterface_hsf.dll”作为交易接口程序,负责完成医保交易数据的传输。该动态库提供两个调用函数,分别为int INIT(char * pErrMsg) 和 int BUSINESS_HANDLE( char* inputData, char* outputData)。其中 INIT 函数用于初始化接口,初始化成功后方能调用该接口进行医保交易;而 BUSINESS_HANDLE 函数是业务处理函数,用于接收医院系统传输的交易报文,并将国家平台产生的响应结果回传医院系统。

动态库依赖于 Visual C++ 2008 x86 版本,需要在系统安装该 VC 发行版。找不到的话,可以点击 >>这里<<进行下载。

由于重庆医保交易的接口动态库为32位程序,并且依赖于32位的 VC 动态库,开发方便起见,建议开发系统采用32位的 Python 程序包。调用该动态库,使用 ctypes 包即可。示例如下:

import ctypes
SI_DLL = ctypes.windll.LoadLibrary('./SiInterface_hsf.dll')

注意在调用该动态库时,需要将动态库文件及其配置文件”SiInterface_hsf.ini”共同放置于 Python 文件的同一目录。

如果动态库装载成功,就会得到接口动态库对象 SI_DLL,之后就可以通过该对象来调用动态库的接口函数了。

进行医保交易之前,首先需要初始化,也就是调用动态库的 INIT 函数。示例代码如下:

outputData = ctypes.create_string_buffer(1024)
try:
    if SI_DLL.INIT(outputData)== 0 :
        print('接口初始化成功')
except Exception as e:
    print('错误提示',str(e))

根据交易说明,初始化成功时,函数返回值为0,如果初始化出错,则会将出错信息回写至接口入参的字符串中(也就是outputData串),当然也可以直接获得程序报错。

初始化成功后,就可以正式进行医保交易了,调用 BUSINESS_HANDLE 函数即可实现。该函数有两个参数,inputData 和 outputData,均是 C 语言的字符串指针。inputData 用于存放医院系统发送给医保平台的报文串,而outputData用于存放国家平台反馈给医院系统的交易结果数据。数据格式采用 json 格式,二进制保存。所以在发送及接收报文数据时需要编码和解码。

Python 对于 json 格式有着天然的支持优势,其字典类型可以完美对应 json 报文。将字典转换为 json 报文时,调用 dumps 函数,将 json 报文转换为对应的字典数据时,只需要调用 loads 函数即可。

医保交易采用标准的 json 格式报文,每个交易有其特定的交易代码,示例使用签到(9001)交易举例,实现一次简单的医保交易:

import json
import ctypes

#定义一个签到交易字典变量
SI_Business_9001={
    "infno":"9001",
    "msgid":"H50000000001202201011000000001",
    "insuplc_admdvs":"",
    "mdtrtarea_admvs":"500001",
    "recer_sys_code":"YBXT",
    "dev_no":"",
    "dev_safe_info":"",
    "signtype":"SM3",
    "cainfo":"",
    "infver":"V1.0",
    "opter_type":"1",
    "opter":"1000",
    "opter_name":"测试",
    "inf_time":"2022-01-01 10:00:00",
    "fixmedins_code":"H50000000001",
    "fixmedins_name":"重庆医保测试医院",
    "sign_no":"",
    "serv_code":"HH00001",
    "serv_sign":"AABBCCDDAABBCCDD",
    "input":{
        "signIn":{
            "opter_no":"1000",
            "mac":"00:11:22:33:44:55",
            "ip":"192.168.0.1"
        }
    }
}

SI_DLL = ctypes.windll.LoadLibrary('./SiInterface_hsf.dll')

#初始化接口动态库
outputData = ctypes.create_string_buffer(1024)
try:
    if SI_DLL.INIT(outputData)== 0 :
        print('接口初始化成功')
except Exception as e:
    print('错误提示',str(e))

#医保签到交易
inParameter = ctypes.c_char_p(json.dumps(SI_Business_9001).encode('utf-8'))
print(inParameter.value)
outParameter = ctypes.create_string_buffer(1024)
try:
    businessResult = SI_DLL.BUSINESS_HANDLE(inParameter,outParameter)
    if businessResult == 0:
        outputData = str(outParameter.value,encoding='gbk')
        out_dict = json.loads(outputData)
        print(json.dumps(out_dict,indent=2,ensure_ascii=False))
        SIGN_NO = out_dict['output']['signinoutb']['sign_no']
    else:
        print('提示信息','医保签到不成功!')
except Exception as e:
        print('错误提示',str(e))

代码首先将9001交易的字典类型数据转换为 C 字符串指针,然后创建一个 C 字符串指针用于接收出参数据。字典类型转换为 json 报文调用 dumps 函数,编码采用统一的UTF-8 编码。经过编码的数据就会被转换成二进制字符串,用于医保动态库交易处理函数的入参。

然后创建一个长为1024字节的 C 字符串outParameter,用于作为医保动态库交易处理函数的出参接收平台返回的数据。

最后调用之前生成的交易动态库对象的 BUSINESS_HANDLE 函数进行医保交易。

交易成功的话,函数返回值为0,并且会将相应信息写入之前定义的出参字符串,示例为 outParameter。接收到的数据同样为 json 报文,首先将它转换为字符串后,再使用 json.loads 函数将其转换为字典类型数据,用于提取数据。重庆医保平台有一个比较坑的地方是回传数据中文采用 GBK 编码,如果转换时编码格式不对,中文会显示有问题。最后,通过字典类型,可以方便的提取需要的数据,示例提取了从国家平台获取的医保签到号”sing_no”,之后当天所有的医保交易都可以使用这个签到号了,示例还打印了获取的 json 报文内容,ensure_ascii=False 用于将数据的中文正确打印出来。

以上就是医保国家平台接口开发的关键内容,其它内容则需要根据每个交易的具体规范修改入参字典数据,根据出参解析相应内容即可。目前重庆最新版的交易接口标准可以从 >>这里<< 获取。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注