医保定点状态在官网挂错三天,患者就转头去了隔壁。不是他们不信任你,是那个红字“医保待审核”太刺眼,而你连改个状态都要等CDN缓存过期。
OAuth2.1 token轮换快得像心跳
上个月底医保局系统切到v3.2。
token有效期从24小时缩到4小时。我们还在用旧逻辑——CMS后台手动刷新一次要填三页表单,token上午十点签发,下午两点就失效,日志里全是401,但错误码后面没写“请重登”,只写了“invalid_token”。
HIS更绝。它只暴露了WebSocket端点 /realtime/slots/{clinicId},不给HTTP快照接口。前端想curl拉个快照?根本没入口。轮询?风控策略直接封掉每秒超0.5次的请求。结果页面显示“余号:8”,用户点进去发现已约满。这不是体验问题,是数据通道和业务节奏彻底脱钩。
凌晨三点刷后台,17家门店的GEO服务页里,12个还顶着“医保待审核”——而备案回执PDF五天前就到了邮箱,文件名清清楚楚:ybj-20260412-approval.pdf。

医疗增强模块不是开关,是重写渲染链
yh blog AI插件@2.5.3本身不带医疗能力。必须显式启用 yh-blog-plugin-medical-geo 子模块,加 --enable=medical-geo 参数才激活三路数据注入。
医保状态层不再读本地JSON。它直连国家医保服务平台新版API,用 clinic_code 和 valid_until 字段做双重校验。valid_until 不是简单比对时间戳,而是先解析为ISO 8601,再扣减时区偏移后跟服务端返回的 expires_at 做毫秒级比对。
号源层扔掉了轮询。它监听HIS推送的 slot_update 事件,每次收到 payload 都触发 yhBlogRenderEngine.rehydrate(),把新 slot_list 注入到当前 clinicId 对应的 Vue 组件实例里。Vue 的响应式系统会自动更新 DOM,不需要 touch DOM 或 forceUpdate。
药房联动那块,高德POI接口返回的 raw_category: "pharmacy" 被重新打标。比如“国药控股北京朝阳路店”,只要 name 字段含 DTP 或双通道字样,network_status 就被强制设为 "dual-channel"。这个映射不在配置文件里,它硬编码在 yh-blog-plugin-medical-geo/src/postprocess/pharmacy-tagging.js 第47行。
坐标CSV上传时,插件会在每行末尾悄悄补两个字段:distance_weight=0.8 和 slot_tag=morning_peak。前者让步行距离权重压过直线距离;后者把早九点到十点的号源单独标红。这些不是模板变量,是模板引擎编译阶段就 baked in 的规则。
yh-blog-plugin --source=clinics.csv --template=geo-service-page.njk --enable=medical-geo --cert-verify=true
HTTPS双向证书校验默认开启。这事不是可选项。《2026医疗网站安全合规白皮书》第7.3条写着:“未启用mTLS的GEO服务页,其 meta[name='og:url'] 和 schema.org/HealthClinic 结构化数据将被医保局爬虫忽略。”

正则补丁上线那天,运维在群里发了个啤酒表情
灰度跑通4家店后,国药控股三家分店全被标成“非医保合作方”。
翻训练语料才发现:2026年新增的 dual_channel_cert_id 字段在原始数据集里是空的。模型没见过这个模式,也没见过“DTP药房”这个词组出现在 name 字段里。
没时间重训。运维直接在插件 post-process 阶段塞了一行正则:
if (pharmacy.name.match(/国药控股.*(DTP|双通道)/i)) { data.network_status = 'dual-channel'; }
WebSocket重连失败率从17%压到0.3%——补丁就三行,改的是心跳超时判定逻辑,加了兜底的指数退避重试。AI生成的页面不会自己扛住医保接口抖动、药房地图坐标偏移、号源余量异步更新延迟这三类真实裂缝。代码不是用来炫技的,是替业务规则站岗的。
42家连锁诊所的GEO服务页全跑起来了——每个页面都绑着独立的 slot_tag,distance_weight 也按区域实测调过。上个月起,客服台那通“医保状态更新没?”的深夜来电,彻底消失了。
评论