钱正浩 王珺 罗金喜
摘 要: 文章利用区块链技术的安全、可信任、去中心化、不可篡改等特性,提出了一种基于Hyperledger的医疗保险与电子医疗事务联动系统。通过对Hyperledger关键技术的深入分析和研究,明确其技术原理与技术特性,并结合联动系统各使用方的实际需求,对系统进行了详细设计。实际搭建的联动系统经相关功能测试,验证了整体方案的可行性与有效性。
关键词: 区块链; 联动系统; 医疗保险; 不可篡改
中图分类号:TP311 文献标识码:A 文章编号:1006-8228(2021)12-55-05
Abstract: This paper proposes a Hyperledger based linkage system for medical insurance and electronic medical affairs by using the features of blockchain technology, such as security, trustworthiness, decentralization, and non-tamper ability, etc. The technical principle and technical characteristics are clarified by in-depth analyzing and researching the Hyperledger key technologies, and the detailed design of the system is carried on by combining with the actual needs of all the parties using the linkage system. The linkage system actually built has passed the relevant function tests, which verifies the feasibility and effectiveness of the overall scheme.
Keywords: blockchain; linkage systems; health insurance; non-tamper
0 引言
近年來,保险行业乘着互联网的东风发展迅速,但由于互联网天生的缺陷,欺诈、骗保等问题屡见不鲜。区块链技术的出现有助于解决这些问题,助力保险行业发展。
保险公司客户数量庞大,收集甄别客户信息需要花费大量的时间,且目前保险数据采用中心化数据库的存储方式,存在严重安全隐患。保险公司在工作环节需要获取客户身份、医疗健康等敏感信息,这些信息一旦泄露,会给客户和保险公司带来严重后果。
区块链技术以其安全、可信任、自动化、可追溯等特点将成为保险行业创新的新动力。保险公司可以在审查和验证后将用户信息写入区块链,购买不同保险时,在区块链上查询即可,这将大大缩短投保时间。同时保险公司可以与医院展开合作,经过授权的医院或医生把病人医疗信息写入区块链,这可以有效预防带病投保,虚假赔案等欺诈行为的发生;与不同的保险公司合作,将用户保单信息上链也可有效避免投保人重复购买不同公司相同险种保险的问题。区块链技术还可以实现自动理赔,将理赔条件编写在区块链的智能合约中,一旦达到预定出险条件,即可快速理赔。
为了解决上述保险行业面临的问题,本文提出了一种基于区块链的医疗保险与电子医疗联动系统设计方案。
1 区块链技术的介绍与选择
区块链[1]技术就是将加密数据组成区块,然后按照时间顺序排序(上链)生成不可修改的记录。区块链按照准入机制的不同可以分为:公有链、私有链和联盟链三类。公有链如比特币[2]或以太坊[3],任何人都可以自由加入它们,通过“挖矿”这一行为争夺记账权。联盟链如Hyperledger Fabric[4],没有“挖矿”这一行为,记账人事先指定,所有记账人共同决定区块的生成。私有链仅对单独的个人或组织开放,对于本文应用场景无太大参考价值。下面将目前应用最广的三种区块链进行比较,结果如表1所示。
与Hyperledger Fabric相比,比特币和以太坊都只有一个账本,所有的记录都在这一个账本里面。这导致这个账本非常臃肿,在遇到本文设想的业务场景时会带来隐患。而Fabric采用多账本的设计方式,杜绝了这样的问题。在Fabric中有一个被称为channel的概念,一个channel中包含若干成员,这些成员共享账本数据并共同维护账本。一个channel中可以包含多个成员,一个成员也可以在权限允许的情况下加入多个channel。并且因为采用PoW算法,为了保证数据的安全性和完整性,比特币和以太坊处理交易的效率远远不及Hyperledger Fabric,无法满足大数据量的业务要求。
本文设计的医疗保险与电子医疗事务联动系统,意在将保险公司方的医疗保险信息与医院方的病人病历信息联合存储,系统中各医院与保险公司相对固定,相互信任,无需面对整个公共网络,且二者业务对工作效率的要求较高,比特币和以太坊的吞吐量(Transactions Per Second)无法满足业务需求,保险公司方发布新的保险要求区块链方面具备灵活的智能合约系统。此外,因为Hyperledger Fabric中channel的概念,不同的保险公司只需存储自身与医院相关的交易,缓解了数据存储的压力。综上所述,本文利用Hyperledger 的特性,对医疗保险与电子医疗事务联动系统进行设计与实现。
2 系统框架设计
2.1 系统模型设计
基于Hyperledger的事务联动系统模型如图1所示。系统主要涉及医院、保险公司和用户三方。各医院和保险公司在实际的区块链网络中有自己的组织(0rg),每个组织可以设置自己的节点(Peer)。节点负责对各自的相关信息进行录入。医院的工作人员负责将用户的病历信息[5]录入系统,保险公司的工作人员负责将用户的保单信息录入系统,录入的信息在智能合约判断合法后,通过区块链节点上链,各个区块链节点同步信息,生成区块,形成共识的区块链数据。医院的工作人员还可以在用户缴费时,输入应缴费用和所患病种,智能合约通过链上已存的用户保单数据,判断出用户的实际应缴费用返还给医院工作人员。保险公司的工作人员同样可以在用户的病历信息上链之后,通过智能合约获知用户是否具有购买保险的资格,而不再需要用户提供健康告知。这使得用户的病历信息更加安全可靠,保險购买更加便捷,用户看病理赔经由智能合约完成,更为简便。
2.2 系统软件架构
根据上文构建的系统模型进行该系统的软件架构设计,分为基础层、数据层和应用层。基础层是Fabric区块链的基础架构;数据层包括存储数据、共识机制、智能合约、链码等,同时还提供权限管理等功能;应用层主要进行功能的编写和调用,包括病历信息录入、保单信息录入、用户信息查询、应缴费用查询等操作。医疗保险与电子医疗事务联动系统软件架构图如图2所示。
3 系统模块设计
3.1 Hyperledger Fabric基本组成及技术原理
Fabric由五个核心模块:Peer(主节点模块、负责存储区块链数据,运行维护链码)、Orderer(交易打包、排序模块)、Cryptogen(组织和证书生成模块)、Configtxgen(区块和交易生成模块)和Configtxlator(区块和交易解析模块)组成。其中Peer模块和Orderer模块的架构如图3所示。一个组织内有四个Peer服务器节点,这四个Peer服务器节点并不是四个Peer程序进程,而是表示一个组织内的四个角色。作为一个完整的组织,必须具备这四个角色(可以由一个Peer节点担任)。这四个节点中Commit节点主要负责维护区块链的账本结构,Endorse节点主要负责对交易进行检验,Leader节点负责代表组织从Orderer节点中获取区块信息,Anchor节点负责代表组织和其他组织进行信息交换。
如图3所示,Orderer模块负责对不同客户端发送的交易进行排序和打包,其工作原理如下。
● 客户端向Orderer模块发送交易。
● Orderer节点对交易进行检查,如果符合条件,则将交易发送到排序队列(Kafka)。
● Orderer节点从消息队列中取出交易并进行打包。打包之后会将相关的消息存储到本地存储中。
● Orderer节点根据客户端的代码请求,将区块链发送给客户端。
3.2 联动系统设计
对于联动系统的设计分为三部分:网络模块设计、智能合约模块设计和接口模块设计。网络模块设计主要建立联动系统的区块链内部逻辑,联动系统的区块链内部逻辑结构如图4所示。
整个联动系统中的参与方分为医院方和保险公司方,医院方设为hp_org1,因为保险公司数量众多,所以暂设为is_org1和is_org2,每个组织中设置三个节点来模拟实际工作中的情况,对用户数据进行录入、修改等操作。
因为实际用户病历信息较为复杂,所以在智能合约模块的设计中,暂选取了两种较为常见的重大疾病,共需要记录用户的六项信息,并确定了智能合约的名称以及对应功能,对智能合约实现功能进行设计,主要设计以下几个功能。
⑴ createUser():该功能需要传入共二个参数,第一个参数为用户的身份证号,第二个参数为用户的姓名。
⑵ queryUser():该功能实现对用户信息的查询,需要传入一个参数,参数为用户身份证号,查询结果返回用户的病历信息和保单信息。
⑶ queryUserMrd():该功能实现对用户病历信息的查询,需要传入一个参数,参数为用户身份证号,查询结果返回用户的病历信息。
⑷ queryUserPd():该功能实现对用户保单信息的查询,需要传入一个参数,参数为用户身份证号,查询结果返回用户的保单信息。
⑸ changeUserMrInfo():该功能实现对用户病历信息的修改,需要传入三个参数,第一个参数为用户身份证号,第二个参数为用户心血管病史,第三个参数为用户肿瘤病史。
⑹ changeUserIsInfo():该功能实现对用户保单信息的修改,需要传入四个参数,第一个参数为用户身份证号,第二个参数为用户保险名称,第三个参数为保险开始时间,第四个参数为保险结束时间。
⑺ cmiClaims():该功能实现综合医疗险理赔功能,需要传入三个参数,第一个参数为用户身份证号,第二个参数为用户需要缴纳的费用,第三个参数为用户所患疾病类型如肿瘤、心血管等。该功能会返回用户理赔后需要缴纳的费用。
接口模块设计主要通过Fabric-Go-SDK进行实现,主要分为query.go脚本与invoke.go脚本。query.go脚本主要调用queryUser_mrd()和queryUser_pd()还有queryUser()三种功能;invoke.go脚本主要调用createUser()、changeUserMrInfo()、changeUserIsInfo()、cmiClaims()四种功能。
4 系统实现与测试
4.1 系统实现
基于Hyperledger Fabric的医疗保险与电子医疗事务联动系统搭建的硬件环境采用Ubuntu虚拟机完成,利用Docker容器模拟多机环境进行封装,具体性能如表2所示。
系统搭建的软件环境如表3所示。环境搭建完成后,利用Hyperledger Fabric提供的5个核心模块对医疗保险与电子医疗事务联动系统进行实际搭建。
4.2 原型系统测试
基于Hyperledger Fabric的医疗保险与电子医疗事务联动系统搭建完成后,以User1为例,对相关功能进行测试。
⑴ createUser():创建User1,并写入User1的姓名,其余信息置空,结果如图5所示。
⑵ queryUser():对User1进行查询,结果如图6所示,可以看出User1已经被创建,且姓名已显示。
⑶ changeUserIsInfo():对User1中的保单信息进行写入,并进行queryUserPd()操作,结果如图7所示,可以看出User1的相关信息已经改变,病历信息不再为空。
⑷ cmiClaims():对User1进行出院自动理赔输出应付医药费(这里假设张三因肿瘤方面疾病需缴纳20000元),并进行queryUserMrd()操作查询其理赔后的病历信息,结果如图8、图9所示,可以看出因为检测到User1在保险有效期内,所以无需繳纳医药费,且在理赔过后病历信息已录入。
⑸ changeUserMrInfo():对User1中的病历信息进行写入(假设张三在2008-02-03,有过心血管疾病),并再次进行queryUserMrd()操作,结果如图10所示,可以看出User1的相关信息已经改变。
5 结束语
本文研究了一种基于Hyperledger Fabric区块链的医疗保险与电子医疗事务联动系统,分析了目前保险行业存在的痛点;对目前主流的三种区块链系统进行了比较筛选,选定Hyperledger Fabric联盟链作为平台构建事务联动系统并进行了实际搭建;搭建完成后对医疗保险与电子医疗事务联动系统中的相关功能进行了模拟测试。
从测试结果看,本文提出的基于HyperledgerFabric区块链的医疗保险与电子医疗联动系统基本满足当前保险行业对联动系统的需求,解决了保险业现存的带病投保、虚假配案等风险问题,保证了用户信息的安全性、真实性、有效性以及不可篡改性。
参考文献(References):
[1] 邵奇峰,金澈清,张召,钱卫宁,周傲英.区块链技术:架构及进展[J].计算机学报,2018.41(5):969-988
[2] Nakamoto S. Bitcoin: A Peer-to-Peer Electronic Cash System[J]. consulted,2008.
[3] Wood G. Ethereum: a secure decentralised generalised transaction ledger,2014.
[4] Androulaki E, Manevich Y, Muralidharan S, et al.Hyperledger fabric: a distributed operating system for permissioned blockchains[C]//the Thirteenth EuroSys Conference,2018.
[5] 薛腾飞,傅群超,王枞,王新宴.基于区块链的医疗数据共享模型研究[J].自动化学报,2017.43(9):1555-1562