22 lines
1.6 KiB
Markdown
22 lines
1.6 KiB
Markdown
# 001 · PHIS 健康档案稳定源主键
|
|||
|
|
|
||
|
|
## 背景
|
||
|
|
|
||
|
|
PHIS 待上报响应同时给出 `archId`、`businessId`、`empiId`、`phrId`。项目需要一个跨重试、跨更新时间稳定的源记录键生成 OSI `checkId`,否则同一档案更新会产生新的第三方流水号。
|
||
|
|
|
||
|
|
本地真实健康档案样例中 `archId == businessId`,单凭这一条数据无法判断两者语义。参考项目 `chis_upload/worker/phis_poll_worker.go` 的 PHIS 回调会同时原样回传 `archId` 和 `businessId`;其他业务样例中二者不同,说明 `businessId` 是业务记录/任务标识,不能作为跨业务稳定的居民档案标识。`empiId/phrId` 属于 CHIS 侧主键链路,可由创建或查询获得,不适合作为第三方源键。
|
||
|
|
|
||
|
|
## 决策
|
||
|
|
|
||
|
|
- 健康档案的 `SourceRecordID` 固定使用 PHIS `archId`。
|
||
|
|
- `businessId` 保留用于 trace 和 PHIS 状态回写,不参与 `checkId`。
|
||
|
|
- `empiId/phrId` 保留为上游携带的参考值;upsert 时以 CHIS 查询结果为准,不参与 `checkId`。
|
||
|
|
- `archId` 缺失时返回校验错误,不回退到 `businessId`,避免把一次业务任务误当成稳定档案。
|
||
|
|
- `checkId = sha1("PHIS|JKDA|<archId>")` 的前 20 位小写十六进制;`updateTime` 不参与计算。
|
||
|
|
|
||
|
|
## 影响
|
||
|
|
|
||
|
|
- 同一 PHIS 档案重试或内容更新时保持相同 `checkId`。
|
||
|
|
- 现有 `GenerateCheckID` 移除版本参数;原 T-205 中“更新时间改变 checkId”的基线同步调整。
|
||
|
|
- 若 PHIS 后续正式契约说明 `archId` 不是稳定档案键,必须新建 ADR 迁移,不能静默改变已投递记录的 checkId。
|