docs: 校准 PHIS 档案 upsert 任务

This commit is contained in:
ila
2026-07-15 22:08:45 +08:00
parent d30ff01c35
commit 00c1028731
7 changed files with 97 additions and 20 deletions
+2 -2
View File
@@ -245,7 +245,7 @@ checkId = 截断20位( 编码( 源系统标识 | dataType | 源记录主键 [ |
## 10. JKDA 创建/更新请求契约(T-206 本地基线)
T-206 已建立本地契约与客户端方法,真实写入验收暂未执行,原因见 `progress.md` 对应记录。
T-206 已完成本地契约与客户端方法并通过单测;真实写入验收拆为 T-215,当前等待明确写入授权与安全测试档案。
- `JKDA00001`:`/osi/api/jkda/create` → `osi.CreateHealthRecord`
- `JKDA00003`:`/osi/api/jkda/update` → `osi.UpdateHealthRecord`
@@ -253,7 +253,7 @@ T-206 已建立本地契约与客户端方法,真实写入验收暂未执行
- 创建请求侧门牌号字段使用 `addressNumber`;查询响应侧仍以实测错拼 `adressNumber` 建模,二者不能混用。
- `mapping.BuildHealthRecordCreate` 负责把 `MappedHealthRecord` 组装成 `contract.HealthRecordCreate`,保留确定性 `checkId`,并由 `manaDoctorId/manaUnitId` 派生 `createUser/createUnit`。
真实 create/update 联调完成后,需要在本节补回平台返回样本、`phrId` 字段确认、同一 `checkId` 重复 create 的幂等语义。
T-215 真实 create/update 联调完成后,需要在本节补回平台返回样本、`phrId` 字段确认、同一 `checkId` 重复提交的幂等语义、更新目标标识、`addressNumber` 落库结果及逐档案 `operateUser` 规则。
---
+6 -3
View File
@@ -30,10 +30,13 @@
- [x] `contract/jkda.go` 查询响应结构体(T-201;创建/更新请求结构体留到 T-206)。
- [x] `mapping/health_record.go` + `mapping/checkid.go`。
- [x] `osi/jkda.go`:Find/FindRqbj(T-203;Find 已真实请求验收,FindRqbj 已按文档契约单测覆盖)。
- [ ] `osi/jkda.go`:Create/Update(T-206,依赖映射与字典缓存)。
- [ ] `handler` + `router`:暴露 `/api/health-record/save`(server 模式联调用)。
- [x] `osi/jkda.go`:Create/Update 本地契约与客户端能力(T-206);真实平台验收拆至 T-215。
- [ ] PHIS 真实档案 DTO + PHIS→CHIS 完整转换器(T-212)。
- [ ] 按身份证查询后 create/update 的 upsert 应用服务(T-213)。
- [ ] `handler` + `router`:暴露 `POST /api/health-record/upsert`(T-204,server 模式联调用)。
- [ ] 用授权测试档案完成 create→query→update→query 真实验收(T-215)。
- [x] 用 01 文档样例 + 联调样本写映射单测。
- **验收**:一条 PHIS 档案 → 映射 → create → 平台返回成功码(实测 `"01"`)与 `phrId`;重复投递被幂等跳过。
- **验收**:一条 PHIS 档案 → 映射 → 查询判定 → create/update → 平台返回成功码(实测 `"01"`)并回查一致;重复投递被幂等跳过。
## 阶段 3 · 投递流水线
+1 -1
View File
@@ -11,7 +11,7 @@
查询链路已打通,接下来"其余业务线查询 + 将来写入"被以下三件卡着,**建议同一封邮件一起催**,避免写入阶段既缺授权又缺规则双重卡壳:
1. **写入授权 + 安全测试档案**(见 D3)——解 T-206(档案 create)阻塞,进而解 T-204。
1. **写入授权 + 安全测试档案**(见 D3)——解 T-215(档案 create/update 真实验收)阻塞,进而完成 T-204 真实 curl 验收。
2. **缺失的列表/查询接口 serviceId + 路径**(见 B1、B2、B4)——解 T-304 列表查询、T-303 老年人查询的 serviceId 缺口。
3. **写入业务规则**:checkId 去重语义 + 完整度谁算(见 C1、C2)——写入阶段前置,现在问以免后置返工。
+9 -9
View File
@@ -5,15 +5,15 @@
## 当前快照
- 日期:2026-07-09
- 阶段:**Phase D 创建/更新代码基线完成,真实写入验收受阻;T-303 老年人生活自理能力评估查询代码完成、真实联调受阻**;T-001~T-006、T-201、T-203、T-102、T-202、T-205、T-101、T-103、T-209、T-210 已验收;T-206 已完成本地契约/客户端/映射组装代码,但未执行真实 `JKDA00001` create
- 日期:2026-07-15
- 阶段:**T-206 创建/更新本地能力已完成;进入 Phase U 的 PHIS 档案转换与 upsert,真实写入验收由 T-215 单独受阻**;T-303 老年人生活自理能力评估查询代码完成、真实联调受阻
- 技术栈:Go 1.24 单二进制;`main.go -mode server|deliver`;配置读取使用 viper,支持环境变量覆盖;OSI 客户端已具备签名、信封、传输、基础判码、JKDA00002 Find、JKDA00005 FindRqbj(人群分类,已按实测 auto 路径校准)、JKDA00001 Create、JKDA00003 Update、LNRZLPG00002 老年人生活自理能力查询(待真实联调),以及 WGDZ/ZRYS/YPML/CXJG 四个公开查询薄封装
- 生产代码:已有 `main.go`、`config/`、`contract/envelope.go`、`contract/jkda.go`、`contract/lnr.go`、`osi/` 薄客户端、`cache/dictionary.go`、`verify_jkda.go`、`go.mod`/`go.sum`;`mapping/dict.go`、`mapping/health_record.go`、`mapping/checkid.go` 已建立映射纯函数、码表基线、主数据反查接入点和创建请求组装;`handler/health_record.go`+`handler/elderly.go`+`handler/public.go`+`server.go` 提供 server 模式档案查询、人群分类查询、老年人自理能力查询、网格地址、责任医生、药品目录、机构查询端点;`pipeline/` 等业务模块仍待后续任务建立
- 联调现实:**JKDA00002 个人档案查询已用 Go 侧真实请求打通**,返回 `code="01" message="操作成功" data_count=1`;**公开查询 WGDZ00001/ZRYS00001/CXJG00002 已用真实档案主数据验证通过**,均返回 `code="01"` 且数组非空;药品目录 YPML00001 已完成客户端封装和单测,尚未做真实药品关键字样本验证;**JKDA00001 create 未跑真实请求**,避免在没有安全测试居民/写入授权时污染平台档案
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析、配置加载与环境变量覆盖、MD5 签名、请求头组装、JSON POST 传输、头名大小写保留、identity 响应编码声明、超时配置、SOCKS5 代理地址校验、信封结构、serviceId 路由、成功/重试判码、Client.Call 请求与响应解析、JKDA00002 查询响应契约、JKDA00001/00003 创建更新请求契约与客户端方法、JKDA00002 Find、JKDA00005 FindRqbj(personSign/idCard/phrId)、公开查询四接口、公开查询 HTTP API、字典缓存快照与持久化失败不阻断、映射码表双向查找、民族 01~56 完整性、健康档案映射必填/码表校验、主数据名称反查、创建请求组装、checkId 确定性、docx/联调风格映射样本基线、JKDA00002 验证入口
- 标准启动路径:`./init.sh` 已配置三步:依赖下载、`go test ./...`、`go run . -mode server -config config.yaml.example`
- 标准验证路径:`go test ./...`、`go build ./...`
- 当前 blocker:T-206 真实 create 验收缺少可写入沙箱的安全测试居民资料或明确写入授权。软限制:当前机器从 Git Bash 启动 Go 会出现标准库路径/构建缓存权限异常,`init.sh` 无法完整跑完;PowerShell 下等价 Go 命令和真实查询通过。厂家侧 B1/B2/B4/B5 契约缺口只影响阶段 4
- 当前 blocker:T-215 真实 create/update 验收缺少可写入沙箱的安全测试居民资料或明确写入授权;该 blocker 不影响先做 T-212 转换器和 T-213 假依赖编排。PHIS `archId/businessId/phrId/empiId` 的稳定主键语义、逐档案 `operateUser` 规则也需在 T-212/T-215 中确认。软限制:当前机器从 Git Bash 启动 Go 会出现标准库路径/构建缓存权限异常,`init.sh` 无法完整跑完;PowerShell 下等价 Go 命令和真实查询通过。厂家侧 B1/B2/B4/B5 契约缺口只影响阶段 4
## 当前目录要点
@@ -98,13 +98,13 @@ python3 scripts/query_health_record.py
## 下一步
> 读先行调整(2026-07-08):写入(T-206/T-204)被厂家授权锁死,先推其余业务线查询。
> 2026-07-15 已把本地能力与真实验收拆开:T-206 标记本地 DONE,T-215 承接授权后的真实写入验收。
1. ✅ T-301/T-305 体检查询(最近一次 + 名单)、T-302 体检 HTTP 端点 —— 均已完成。
2. **T-303 真实联调**:提供安全测试身份证后,确认 `LNRZLPG00002`、`/auto/lnr/query` 与响应字段;当前代码/单测已完成。
3. T-307 老年人中医体质辨识查询仍待厂家补查询文档(docs/06 B4)。
4. 并行催厂家(docs/06 ★ 优先催办):写入授权+测试档案、缺失单查/老年人体质 serviceId、checkId/完整度规则。
4. 授权到位后回到 T-206 真实 create 验收 → T-204。
1. **T-212**:确认 PHIS 四类标识语义,建立脱敏 DTO/fixture、完整字段转换器和逐档案操作上下文。
2. **T-213**:用假 OSI、幂等、report、PHIS 回写接口完成 upsert 应用编排;不等待写入授权。
3. **T-204**:复用 T-213 暴露 `POST /api/health-record/upsert`,handler 不复制业务逻辑。
4. 并行催厂家/PHIS 维护方:写入授权与可写测试档案、稳定源主键语义、更新目标标识、逐档案 `operateUser` 规则。
5. 授权到位后执行 T-215 真实 create→query→update→query 验收。
## 维护规则