丁士富 徐然 刘大龙
摘要:对于电子病历的使用者,不管是增、删、修改,或是审阅电子病历,系统均会留下记录和修改前的原始版本,便于事后追踪。在这个过程中,数字证书的重点建设至关重要。数字证书作为一种电子签名机制,其概念是根据档案内容进行运算,生成一个加密后的散列验证值,以供接收端验证,可以确保档案具有正确的来源(避免身份伪冒)和完整传递的内容。本文以某医院数据验签建设方案为例,详细介绍了电子病历数字签名业务流程逻辑、后台建设方案及前台使用的整套流程,该案例取得了良好的社会效益与经济效益,对国内大型综合医院具有广泛适用性。
关键词:数据安全;高质量发展;数字签名
一、引言
根据国家卫健委《公立医院高质量发展促进行动(2021—2025年)》文件要求,建设“三位一体”智慧医院已成为国内各大型三甲综合医院信息化业务的发展方向。以作者所在医院为例,在信息系统不断建设完善过程中,首先需要完善系统并补充短板。其次,就是要将医院各个环节中业务系统打通,进一步发挥信息化价值。在这一过程中,电子病历已逐渐成为各系统集成交互的中心[1]。所谓的电子病历,即是以数字化的方式记录病患病历中的内容,取代原有的纸本病历记录的方式[2]。相较于传统的纸本病历,电子病历有以下的优点。
①促进院际交换。病历电子化以后,病患资料在患者同意下,可以直接传输至转诊的医院,方便患者就医,也减少医疗资源的浪费。
②高效率。纸本病历书写后仅能在一个地方取用相当不便。而电子病历生成后,符合规定的医疗人员都可立即取用,提高了获取病患及时病况的效率。
③准确性。手写的纸本病历,医疗人员会出现难以辨识书写者笔迹的情况;而电子病历不仅清晰易读,也便于理解。
④法律文件。电子病历有严格的监控规范,签署后只有原作者可以进行修改,无论是增加、删除、修改、复制还是查阅文档,系统都会有记录,避免篡改病历的发生。
⑤永久储存:纸本病历保存困难,而电子病历可以很容易地永久保存,同时也节省空间。
⑥环保。在医院实施电子病历后,除非必要情况下,可以不再打印纸质病历,有效减少纸张浪费。
以下详细介绍我院数据验签建设方案:
二、业务流程逻辑说明
①医生在医生工作站完成手术同意书的录入和生成,并向患方讲述;
②患方对知情文书内容认可、无问题,直接在签名屏上签名、采集指纹信息;
③信手书PC客户端签名控件发送知情同意书数据摘要、患者签名图片、指纹信息到信手书服务器,申请患者事件签名证书(认证本次签署事件的专用证书);
④信手书服务器签发患者事件签名证书;
⑤使用签发的患者事件签名证书对知情同意书进行数字签名;
⑥将签名信息(患者签名值、签名图片、患者指纹信息)发送给EMR系统;
⑦实现医生USB Key签名及其他后续业务。
三、业务场景实现方案
(一)证书注册绑定
在系统用户表中增加“用户唯一标识”字段,用于建立业务系统用户与用户KEY的对应关系,证书用户唯一标识:SF+18身份证号。在应用系统【用户维护】功能增加“用户唯一标识”界面元素,对于该内容信息需提供两种方式进行维护:手工录入、通过读取USB Key获取。
读取当前插入KEY的证书用户唯一标识(用户绑定时调用):
StringstrUserCert=axXTXApp_Client.SOF_ExportUserCert(strCertId);//导出用户证书
StringstrUserCertID=axXTXApp_Client.SOF_GetCertInfoByOid(strUserCert, oid);//获取身份证号
(二)证书登录
常见有进入系统时登录和签名时登录两种方式。需增加显示用户列表的代码修改登录界面,用户名采用下拉列表,从USB key中读取
StringstrUserList =axXTXApp_Client.SOF_GetUserList();
列表格式:姓名||Certid
服务器端产生随机数,并用服务器证书对随机数签名
string strRandom = svs.GenRandom(16);//获取服务器随机数
(三)服务端验证客户端证书有效性
int ret V_cert = svs. ValidateAndSaveCertificate (strUserCert);switch (retV_cert)case 0: break;case 1: break;
case -1: MessageBox.Show("不是所信任的根", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return;
case -2: MessageBox.Show(“超过有效期,请更换证书“提示”MessageBoxButtons.OK, MessageBoxIcon.Warning); return.
(四)业务系统获取证书唯一标识,并与数据库比对,比对成功时登录成功
// 获取“证书用户唯一标识”,默认为SM2证书
strUserID=XTXAPP.SOF_GetCertInfoByOid(strClientCert,strCertOIDSM2)
業务系统根据“证书用户唯一标识”与数据库进行匹配;匹配成功后,检查当前用户是否已保存了电子签章,若没保存,读取当前KEY中的电子签章进行保存,若已保存不做操作。查询用户权限,成功进入业务系
统。
MessageBox(“提示”,“登录成功!”)
(五)签名加盖时间戳
1.对原文数据数字签名
客户端签名,利用私钥对签名原文签名,签名时必须插上Key而且必须已经登录
string strOrgData = rTxtOrgData.Text;//获取签名原文
if (strOrgData == null || strOrgData == "")
{MessageBox.Show(“签名原文为空”,“提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}
2.验证数字签名
业务系统从数据库中获取签名证书、签名原文、签名值,调用验证接口进行验证。
根据签名证书验证签名 0 表示验证成功
int resSVS = svs.VerifySignatureBySN(certSn, strOrgData, strSignValue);
3.验证时间戳
业务系统从数据库取出时间戳值进行验证。
// VerifyTS,参数1:时间戳值;参数2:原文,若原文为空,则不验证原文。
三、电子病历系统中的医嘱电子签名显示规则
(一)临时医嘱电子签名显示规则:
①处理医嘱。护士校对医嘱后,即在签名处显示校对护士手写姓名。责任或值班护士在PDA端执行医嘱后,该条医嘱“执行/确认时间”栏由实际执行医嘱时间替换原来的校对医嘱时间,同时将“执行/确认签名”栏由执行护士手写体签名替换校对护士的手写签名。
②实行电子签名后,对于检查、病理、内镜等非本科室护士执行的医嘱,默认校对医嘱护士宋体签名,责任护士不需要在PDA中手动执行该医嘱。
③目前需要跨科室执行的医嘱,例如术中用药、术前抗生素等,属于手术室护士、DSA护士、血透室护士操作的医嘱,病房护士无需操作PDA。(不需要点执行或者取消)。稍后,执行完毕后会显示跨科室护士的电子签名。
(二)长期医嘱签名显示规则
所有医嘱校对都要显示校对人的手写签名。护士务必在停止医嘱之前进行审核,然后患者才能出院,这样护士的电子签名才能显示(否则显示为空白)。
四、某份电子病历入院记录后台数据验签报告
(一)数字证书片段截取
MIIEmzCCBEKgAwIBAgIKGhAAAAAIOGEWIDTjENMASGA1UECgwEOkpDQTENMASGA1UECwwEQkpDOTEXMBIMDAwWhcNMTkwODIOMTU10
(二)电子签名值
:MEYCIQD5++9k5H2ie2sQxFSaJk2ulcvMkOGAIhAKzs39YPUDuP2oP7CBE/CQnQ6+ckHAiy5ZtoH3C+2dF0
(三)电子签名数据原文片段截取