凌晨四点四十,接收医院信息安全负责人的办公室里还亮着一盏台灯。
灯光落在一份《整改任务清单(第一版)》上,纸面边缘被反复翻折,已经起了毛。林昼坐在靠墙的椅子上,手里握着一次性纸杯,杯里的热水早就凉了。他没喝,只是借着那一点温度提醒自己别把情绪放出来。
禁变窗口框架落地只是第一步,真正的战场在“落地方式”。
制度写在纸上,供应商可以用“口径”去对付;
冻结写进系统里,他们就只能用“权限”去对付;
而权限一旦被锁住,就会逼出他们的真实依赖――他们到底靠什么保障所谓“连续性”。
第三方平台给出的“策略冻结”能力,像一把可以上锁的门栓。门栓上了锁,所有“紧急”就必须走钥匙,钥匙在谁手里,决定了未来几年谁能在关键期动手。
这把钥匙,供应商一定想抢回去。
---
早上七点半,监管发来一条简短通知:当日上午十点进行“策略冻结与地理围栏启用”现场演示,要求供应商、第三方平台、原医院信息科、接收医院信息安全负责人共同见证,演示必须可审计、可复核,并生成演示记录哈希。
梁组长的补充说明更直接:“监管要求当场确认:冻结开关由医院侧掌握,供应商只能申请例外。且冻结期间任何策略变更尝试必须被记录并可追溯。”
林昼看到“任何变更尝试必须被记录”这句话,心里微微一沉。
这句话很关键,也很危险。关键在于它能把“绕开冻结”的尝试变成铁证;危险在于,一旦有人真的敢绕开,冲突会迅速升级――升级的不止是技术,也包括人身与舆论压力。
他把这条通知转给法务,法务只回了一个字:“记。”
“记”意味着他们会把每一条演示过程写进纪要,把每一次鼠标点击写进时间戳,把每一个配置项截图固化并加哈希。
流程开始变得像取证。
取证意味着,对方任何小动作都可能被放大。
---
九点十分,父亲在普通病房里精神很好,能自己坐起来吃几口粥。林昼去看他时,父亲问:“今天还忙?”
林昼点头:“要做个演示。”
父亲皱眉:“演示什么?”
林昼想了想,用父亲能听懂的说法解释:“把他们那边的开关锁住,关键时候不能随便动。”
父亲的手停了一下,声音仍旧嘶哑,却更清晰:“锁住了,他们会不会更恨你?”
林昼没有否认:“会不舒服。但这不是我锁,是医院和监管锁,是制度锁。”
父亲盯着他,许久才说:“你记住,别和人结仇。”
林昼把床头的水杯往父亲手边推了推:“我不和人结仇。我只让开关有主人。”
父亲没再说话,只轻轻“嗯”了一声,像是勉强接受,却仍担心。
---
十点整,演示开始。
供应商技术负责人上线,屏幕共享打开第三方平台控制台。界面一眼看去很标准:左侧“routingpolicy”“geofence”“freezecontrol”“audittrail”等模块,右侧是策略列表与配置项。
监管先要求:展示当前策略版本、区域优先级序列、地理围栏状态、以及冻结状态。第三方平台协查联系人作为平台方,负责解释各字段含义与审计机制。
供应商先展示“routingpolicyv2.7”,区域优先级显示为:cn>apac>global。地理围栏状态:off。冻结状态:off。
监管没有评论,只说:“现在按整改要求,启用地理围栏,限制为cn区域;同时启用策略冻结,并将冻结控制权移交医院侧账号。演示全过程要求:每一步都生成审计事件,并在结束时导出审计摘要,计算哈希。”
供应商技术负责人点头,开始操作。
第一步,启用地理围栏。
他点开“geofence”,选择“cn-only”,勾选“applytoemailrelayandapirouting”。点击“apply”。
系统弹窗要求输入原因码与审批引用:reasoncode、approvalref。
供应商输入:reasoncode=regulatory_remediation;approvalref=rgl-rem-001。点击确认。
第三方平台协查联系人补充说明:“平台会记录操作者账号、ip、时间戳、变更前后状态,并生成版本链哈希。”
监管要求当场展示审计事件。供应商切到“audittrail”,出现一条新事件:100217,geofenceon,scopecn-only,operatorsvc_route_admin,approveropsmgr。
林昼在旁边看法务的实时纪要文档,看到法务把“100217”四个数字敲得很重,并在旁边标注:秒级时间戳。
第二步,启用策略冻结。
供应商打开“freezecontrol”,页面上有一个大开关:“policyfreeze”。旁边有三个选项:
*freezemode:read-onlychange-requestonlyfulllock
*controller:tenantadmindesignatedcustomeradminjoint
*exceptionworkflow:enableddisabled
监管直接说:“freezemode选fulllock。controller选designatedcustomeradmin。exceptionworkflow必须enabled,且例外审批链必须包含医院侧签署角色。”
供应商的鼠标停了一下。fulllock意味着供应商在关键期几乎动不了任何策略。它会让他们失去“紧急兜底”的便利。林昼甚至能从屏幕那端的停顿里感受到对方的犹豫。
但监管的语气没有任何回旋:“请按要求操作。”
供应商点击fulllock,选择designatedcustomeradmin。系统提示:需要绑定医院侧账号作为控制者,并要求医院侧在场确认。
接收医院信息安全负责人在会议里报出医院侧账号id(已脱敏),第三方平台协查联系人确认该账号权限为“customerfreezecontroller”,可在冻结期间授权例外。
供应商完成绑定,点击“enablefreeze”。
弹窗再次要求原因码与审批引用。供应商输入:reasoncode=medical_change_window;approvalref=hsp-fz-2024-01。
点击确认后,audittrail里跳出新事件:100644,freezeon,modefulllock,controllercustomeradmin,operatorsvc_route_admin,approveropsmgr,controllerboundhsp_admin_xxx。
监管立刻要求导出审计摘要并计算哈希。第三方平台协查联系人指导导出“freezeeventsummary”,生成一个json摘要文件。供应商计算sha-256并当场展示,监管抄录,接收医院法务截图固化。
到这里,冻结开关看似完成。
真正的考验在下一步:冻结启用后,供应商还能不能“偷偷动”。
监管说:“请供应商尝试修改路由策略,将区域优先级序列改为cn>global(去除apac),看系统是否拒绝,并记录拒绝事件。”
供应商技术负责人打开“routingpolicy”,试图编辑优先级序列。页面上立刻出现红色提示:**policyisfrozen.changesareblocked.submitexceptionrequest.**
监管说:“提交例外申请。不要直接改。”
供应商点击“submitexceptionrequest”,弹出一个表单:
*changetype:routingpriorityadjust
*requestedvalue:cn>global
*reason:
*riskasses**ent:
*requestedwindow:
*hospitalapproval:pending
供应商在reason里写了一段很长的话,核心是:“为降低跨区路径风险,建议在非关键期移除apac优先级,避免回退至apac。”
监管问:“你们现在才建议移除apac优先级?此前为何将apac作为第二优先级并启用override?”
供应商合规负责人说:“此前是为投递成功考虑,现在根据监管要求整改。”
监管没有再追,示意继续。例外申请提交后,系统显示状态:pendinghospitalapproval。
接收医院信息安全负责人没有立即批准,只说:“我们按禁变窗口制度走,今天是演示,不代表批准任何变更。”
监管点头:“正确。演示到此。我们现在验证冻结期间的‘变更尝试记录’:请展示审计事件是否记录了被阻止的修改尝试与例外申请。”
第三方平台切到“audittrail”,果然出现两条事件:
*100831attemptchangeblocked(frozen)
*100845exceptionrequestcreated(pendinghospitalapproval)
林昼看着这两条事件,心里有一种冷硬的确定:冻结不是口号,它会把每一次“想动”的心思写进日志。
写进日志,就意味着从今天起,供应商任何“紧急”都不能再靠口头解释。它必须留下申请、留下拒绝、留下批准、留下时间戳。
这就是制度写进系统的力量。
---
演示结束后,供应商试图马上争取控制权。
合规负责人提出:“为了提高响应效率,建议冻结控制权采用joint模式,由医院与供应商共同控制,避免医院不在线导致无法紧急处理。”
监管直接拒绝:“医院可以指定值班机制,也可以授权例外审批链。控制权不能回到供应商手里。供应商若担心响应效率,请提出‘值班与授权方案’,而不是改controller。”
这句话把路堵死了。供应商只能在医院的规则里找效率,不能再用效率夺权。
林昼在纪要里看到法务写了一句:“控制权锁定医院侧。”他知道这句话会成为未来所有争议的锚点。
锚点一旦落下,就很难再被拔起。
---
下午一点十七,问题很快来了。
原医院信息科负责人发来一条紧急反馈:启用cn-only地理围栏后,原医院邮件系统对外投递出现延迟,部分内部通知邮件排队时间明显增加,担心影响临床沟通效率。