医保接口展示 (如何获取医保接口)

一、分析医保接口文档

医保接口提供了两个文档分别是《定点医药机构直连国家统一医保平台接口开发说明V2.3》和《医疗保障信息平台定点医药机构接口规范(基线版)(V3.1)》,先看第一个主要讲接*技口**术实现,使用什么技术才可以正确调用医保的api;第二个主要讲接口列表和每一个接口的入参和出参的数据说明,这个文档是很难懂得,表面上就是一堆接口而已,你只需要组装好入参,调用后返回出参就行了,关键是这些入参和出参的字段,一是接口调用是有先后顺序的,后一个接口的入参可能是前一个接口返回的出参,有一些关键的字段来源医保,还有一些来源his,你要能正确理解这些概念,比如his系统中的门诊号、处方号、药品编码等,所以需要我们一开始就整体拉通这些接口,找到这些入参数据对应his系统中的哪些表,而不是一个个接口编写,这样返工的可能性很大。

1、整体架构

医保接口系统其实就是对接医保系统和HIS系统之间的一个桥梁,这个接口系统一般是提供给医院人员使用,所以都是集成在HIS系统中的,也大多数都是由HIS工程师来开发的,当然单独成独立的系统也是可以的,以前由于这些费用数据都是来源于HIS系统,所以只有his工程师才能对接,但现在医院都开始上线了院内集成平台,所以这些费用数据都可以从平台获取,这样大家都可以做了。

医保接口做得好的会集成到HIS收费功能里面,自费和医保都是一样操作,只需要选择不同病人类型就行,这样肯定加大了HIS系统的改造难度,现在大多数都是做成独立的功能,自费病人就打开自费收费功能,医保病人就打开医保结算功能。

国家医保接口实现方式,国家医保接口实例

2、技术实现

搞清楚文档接口要实现的技术,是调用程序库的方式还是webapi方式,以前医保接口大多数都是调用dll方式来实现的,这种方式要更麻烦一些,还好全国医保是采用的webapi方式,这种技术现在比较流行实现起来也比较容易。

虽然大部分接口都是采用webapi,但看文档涉及到医保读卡器还是采用dll方式,因为在结算的是必须要读卡输密码确认的。

另外医保还提供电子医保码方式快速登记病人,病人到医生那里只需要手机上打开医保码,医生扫码就可以调出病人基本信息,这样既方便患者也节约医院成本,医保读卡器不便宜。

API请求头参数,文档中提供了Java示例,我这里提供C#实现示例

请求头
x-tif-paasid:paasid
x-tif-signature:签名字符串
x-tif-timestampunix 时间戳(秒)
x-tif-nonce:非重复的随机字符串
void SetHeaders()
{
    //随机字符串
    string nonce = Guid.NewGuid().ToString();
    //当前时间戳
    long timestamp = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
    string token = Config.Settings.token;
    string paasid = Config.Settings.paasid;
    //签名算法:x-tif-signature = sha256(x-tif-timestamp + Token + x-tif-nonce + x-tif-timestamp)
    //创建应用时分配的加密密钥
    string signature = GetSHA256(#34;{timestamp}{token}{nonce}{timestamp}");

    Headers["x-tif-paasid"] = paasid;
    Headers["x-tif-signature"] = signature;
    //x-tif-timestamp:当前时间unix 时间戳,精确到秒
    Headers["x-tif-timestamp"] = #34;{timestamp}";
    Headers["x-tif-nonce"] = nonce;
}
public string GetSHA256(string data)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            byte[] hash = SHA256.Create().ComputeHash(bytes);

            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                builder.Append(hash[i].ToString("X2"));
            }

            return builder.ToString();
        }

读卡器封装类

    public class SIReader
    {

        const string DLLFile = "LibSI\\SSCardDriver.dll";

        /// <summary>
        /// “读基本信息”
        /// </summary>
        /// <param name="iType">
        /// 1-接触式操作卡;
        /// 2-非接触式操作卡;
        /// 3-自动寻卡,接触式操作卡优先;
        /// 4-自动寻卡,非接触式操作卡优先。
        /// </param>
        /// <param name="pOutInfo"></param>
        /// <returns></returns>
        [DllImport(DLLFile, EntryPoint = "iReadCardBas")]
        public static extern int iReadCardBas(int iType,StringBuilder pOutInfo);

        /// <summary>
        /// 通用读卡
        /// </summary>
        /// <param name="iType">操作卡的类型</param>
        /// <param name="iAuthType">当文件的读控制受 PIN 或 RK 密钥保护时,该参数用于指定读控制认证方式,
        /// 定义如下:1-PIN 校验;2-RK 密钥认证。此参数只在文件的读控制权限为“PIN或 RK”时有效。</param>
        /// <param name="pCardInfo">该参数用于传入卡的基本信息,依次为:卡识别码、卡号。各数据项之间以“|”分割,且最后一个数据项以“|”结尾。</param>
        /// <param name="pFileAddr">该参数用于指定需要读出的文件和文件下的数据项</param>
        /// <param name="pOutInfo">当函数执行成功时,该输出参数为读出的由输入参数指定的各数据项</param>
        /// <returns>成功返回 0 </returns>
        [DllImport(DLLFile, EntryPoint = "iReadCard")]
        public static extern int iReadCard(int iType,int iAuthType,string pCardInfo,string pFileAddr, StringBuilder pOutInfo);

        /// <summary>
        /// “PIN 校验”
        /// </summary>
        /// <param name="iType"></param>
        /// <param name="pOutInfo"></param>
        /// <returns></returns>
        [DllImport(DLLFile, EntryPoint = "iVerifyPIN")]
        public static extern int iVerifyPIN(int iType, StringBuilder pOutInfo);

        /// <summary>
        ///  “PIN 修改”函数
        /// </summary>
        /// <param name="iType"></param>
        /// <param name="pOutInfo"></param>
        /// <returns></returns>
        [DllImport(DLLFile, EntryPoint = "iChangePIN")]
        public static extern int iChangePIN(int iType, StringBuilder pOutInfo);

        /// <summary>
        /// 获取密码键盘值
        /// 获取密码键盘输入的数值,并对该数值进行相关加密。
        /// </summary>
        /// <param name="iTimeOut">超时时间</param>
        /// <param name="iVoiceType">语音提示
        /// 1 提示“请输入密码”
        /// 2 提示“请输入新密码”
        /// 3 提示“请再次输入新密码”
        /// 4 提示“请输入原密码
        /// </param>
        /// <param name="pOutInfo">返回加密的密码键盘输入值串或错误信息</param>
        /// <returns></returns>
        [DllImport(DLLFile, EntryPoint = "iGetPWD")]
        public static extern long iGetPWD(int iTimeOut, int iVoiceType, StringBuilder pOutInfo);

    }

电子医保凭据

国家医保接口实现方式,国家医保接口实例

调用下面接口获取,获取电子凭据令牌
/fsi/api/hsecfc/localQrCodeQuery
调取1101接口,人员基本信息获取,入参采用
mdtrt_cert_type 就诊凭证类型
mdtrt_cert_no 就诊凭证编号,就诊凭证类型为“01”时填写电子凭证令牌,为“02”时填写身份证号,为“03”时填写社会保障卡卡号

3、业务范围

医保接口上接口非常多,有100多个,包含了医院的和药店的,部分接口是共用的,部分是独立的,我们这次主要是HIS系统来对接,所以只需要考虑医院部分的接口就行了。

医院部分的接口也有不少,大体包括以下内容,人员信息、目录*载下**、门急诊结算、住院办理、住院结算、人员备案、目录对照、科室管理、费用结算业务、信息采集上传、信息查询等。

门诊结算业务,主要调用人员信息、门急诊结算相关的接口

住院入院业务,主要调用人员信息、住院办理接口

住院出院业务,主要调用人员信息、住院结算接口

医保科平时需要的工作,获取最新医保目录*载下**、目录对照、科室管理、人员备案、费用结算、信息采集上传、信息查询等。

关于人员定点备案可以参考下面解释:

异地就医手续办理流程如下:1、备案:参保人在前往异地就医前,在当地医保经办机构办理异地就医备案手续,提交相关材料,经办机构审核后方可办理。2、选定点医疗机构:参保人在将要去的省份,选择2-3家定点医疗机构。我国的定点医疗机构可在人社局官网查询到。

- 医药机构费用结算业务,一般一个月进行一次对账,如果总账不平的话,就需要对明细,也就是每一次病人结算记录,如果出现不一致的记录,那就需要进行补传或撤销来处理错误的费用。

- 信息采集上传,主要是将医院的业务数据上传到医保,比如病案首页、检查报告等数据,一般只要把结算清单上传,其他医疗数据不必传。

- 信息查询,这些接口主要方便医院医保人员获取更多的医保信息。

接口优先级:

第一、肯定是门诊结算、住院入院、住院出院结算这几个实施业务

第二、目录*载下**、目录对照、科室对照等基础数据配置,只有对照正确后面的报销业务才能进行。

第三、费用结算业务了,这样医院每月才能正常从医保局获得医保费用。

第四、信息查询,方便医保科人员日常查询工作。

二、HIS系统门诊业务流程和住院业务流程

1、门诊流程

国家医保接口实现方式,国家医保接口实例

1、参保人出示身份证、医保电子凭证等身份证明,医疗机构应验证其身份;

2、在窗口进行挂号后,由科室上传就诊信息,按照费用批次上传明细;如果是慢特病购药,需要传入慢特病病种信息;

3、再次验证身份后,医疗机构按照费用批次发起门诊结算,一次挂号可以结算多个批次费用;

4、结算时因电脑死机、网络中断、或超时等原因导致医院端结算系统无法获得医保中心结算结果,同时无法判断医保中心端是否存在本次结算结果的情况下,应提示结算失败,并发起冲正交易,如果系统结算正常返回,展示结算信息并打印结算单;

5、门诊结算适用于普通门诊、门诊挂号、门诊统筹、门诊慢特病等门诊类医疗类别,结算支持本地结算、省内异地结算、跨省异地结算。

2、住院流程

国家医保接口实现方式,国家医保接口实例

1、参保人出示身份证、医保电子凭证等身份证明,医疗机构应验证其身份;

2、医疗机构为参保人办理入院后,上传费用明细;

3、医疗机构核实住院信息后,为参保人办理出院;需要变更住院信息、诊断信息时,调用住院信息变更交易【2403】进行变更;

4、办理出院后,不允许再上传费用明细,医疗机构发起住院结算;

5、结算时因电脑死机、网络中断、或超时等原因导致医院端结算系统无法获得医保中心结算结果,同时无法判断医保中心端是否存在本次结算结果的情况下,应提示结算失败,并发起冲正交易,如果系统结算正常返回,展示结算信息并打印结算单;

6、住院结算适用于普通住院,生育住院等住院类医疗类别,支持本地结算、省内异地结算、跨省异地结算;

7、暂不支持住院中途结算。