diff --git a/docs/01-OSI接口规范分析.md b/docs/01-OSI接口规范分析.md index e063360..ab61502 100644 --- a/docs/01-OSI接口规范分析.md +++ b/docs/01-OSI接口规范分析.md @@ -135,7 +135,7 @@ | 业务 | 路径 | serviceId | 联调状态 | | --- | --- | --- | --- | | 创建 | `/osi/api/jktj/create` | `JKTJ00001` | 待写入授权 | -| 查询(单条) | `/osi/api/auto/jktj/query` | `JKTJ00002` | ⚠ 实测"没有url的接口配置"(**未部署**);`auto/jktj/find` 待确认 | +| 查询(某人全部体检,返回数组) | `/osi/api/auto/jktj/query` | `JKTJ00002` | ✅ 联调可用(按 idCard/phrid 查,返回全部体检数组)| | 更新 | `/osi/api/jktj/update` | `JKTJ00003` | 待写入授权 | | 已检/待检人员列表 | `/osi/api/auto/jktjlist/query` | `JKTJLIST00002` | ✅ 联调可用(T-305,入参 checkYear+分页)| | 最近一次体检 | `/osi/api/auto/jktjlscx/query` | `JKTJLSJL00002` | ✅ 联调可用(T-301) | diff --git a/docs/04-字段与接口映射.md b/docs/04-字段与接口映射.md index 69a47aa..dbf5299 100644 --- a/docs/04-字段与接口映射.md +++ b/docs/04-字段与接口映射.md @@ -263,14 +263,16 @@ T-206 已建立本地契约与客户端方法,真实写入验收暂未执行 | 业务 | serviceId | 路径 | 返回 | 状态 | | --- | --- | --- | --- | --- | | 最近一次体检 | `JKTJLSJL00002` | `/auto/jktjlscx/query` | 单对象(最近一次完整体检) | ✅ 实测可用(`osi.LastHealthCheck`) | -| 某人全部体检 | `JKTJ00002` | `/auto/jktj/query` | **数组**(该人全部体检,每条完整) | ⚠ docx 有定义,实测"没有url的接口配置"(**未部署**),见 docs/06 B5 | +| 某人全部体检 | `JKTJ00002` | `/auto/jktj/query` | **数组**(该人全部体检,每条完整) | ✅ 实测可用(`osi.QueryHealthChecks`;早期曾报"没有url配置",现已部署)| | 已检/待检名单 | `JKTJLIST00002` | `/auto/jktjlist/query` | 数组(人员名单+状态,非体检明细) | ✅ 实测可用(`osi.ListHealthCheckPeople`,见 §11.4) | - 请求信封同档案(`serviceId` + `uploadinfo{baseInfo, manageInfo}`);查询按 `phrid`/`idCard` 之一(docx baseInfo 只列这俩)。 -- **两处与档案不同的坑**:① 最近一次的 `data` 是**单个对象**(档案 find 是数组);② 体检身份证字段是小写 **`idcard`**(档案是 `idCard`)。 -- **JKTJ00002 返回形态**:`data` 为**数组**,每个元素是一份**完整体检**(结构同"最近一次",约 260 项 + 各子节点,见 §11.3),每条含自己的 `checkId`(体检编号,响应字段,长度 20)。 - - docx 无"按 `checkId` 直接查单条"的接口——`checkId` 只是响应字段。要按体检编号取历史某次,须用本接口查该人全部体检,再**本地按 `checkId` 过滤**。 - - 部署后即为"查历史体检 / 按体检编号定位"的正解接口;未部署前只有"最近一次"可用。 +- **身份证字段大小写三接口不一致(务必分开建模)**:最近一次 `JKTJLSJL00002` 用**小写 `idcard`**;`JKTJ00002` 与 `JKTJLIST00002` 用**驼峰 `idCard``**。档案 find 也是 `idCard`。 +- 最近一次的 `data` 是**单个对象**(`JKTJ00002` 与档案 find 是数组)。 +- **JKTJ00002 返回形态(实测)**:`data` 为**数组**=该人全部体检历史(本样本 8 条,2013–2026);每个元素是一份**完整体检**,结构同"最近一次"(38 顶层标量 + `healthAssessment`/`examination`/`lifestySituation`/`accessoryExamination` + 3 数组节点,见 §11.3)。 + - ⚠ **`checkId` 仅近年记录有值,历史记录为 `null`**(本样本仅最近 2 条有体检编号,更早 6 条 `checkId=null`)——第三方流水码是接入后才有的。 + - 因此"按体检编号取历史某次"只对**有 checkId 的近期记录**成立;更早的体检**没有 checkId**,只能按 **`checkDate`** 定位。 + - docx 无"按 `checkId` 直接查单条"的接口——查历史须用本接口取该人全部体检,再本地按 `checkId`/`checkDate` 过滤。 ### 11.2 记录结构与主键 diff --git a/docs/current-state.md b/docs/current-state.md index 943ce90..f949d98 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -41,7 +41,7 @@ | `mapping/health_record.go` `mapping/checkid.go` | 已有 | 健康档案映射草稿、字典快照注入、主数据反查、创建请求组装(含 createUser/createUnit 派生)、必填/码表校验、确定性 checkId | | `mapping/health_record_baseline_test.go` | 已有 | docx 风格、联调风格、脏数据映射回归样本 | | `handler/health_record.go` | 已有 | `GET /api/health-record/find` 查询端点,回写平台完整响应 | -| `handler/health_check.go` | 已有 | 体检端点 `GET /api/health-check/last`(最近一次)+ `/list`(年度名单)| +| `handler/health_check.go` | 已有 | 体检端点 `GET /api/health-check/last`(最近一次)+ `/all`(全部体检)+ `/list`(年度名单)| | `server.go` `osi_client.go` | 已有 | server 模式起 HTTP 服务、注册路由;`buildOSIClient` 共用构造(verify 与 server 复用) | | `pipeline/` 等 | 待建 | 后续任务 | @@ -81,6 +81,7 @@ OSI_VERIFY_ID_CARD= go run . -verify-jkda -config config.yaml go run . -mode server # 起服务(阻塞) curl "http://127.0.0.1:8080/api/health-record/find?idCard=" # 档案(完整 JSON) curl "http://127.0.0.1:8080/api/health-check/last?idCard=" # 最近一次体检 +curl "http://127.0.0.1:8080/api/health-check/all?idCard=" # 某人全部体检(数组) curl "http://127.0.0.1:8080/api/health-check/list?checkYear=2025&idCard=" # 年度已检/未检名单 # 本地 Python 联调查询(脚本硬编码凭据,勿提交) diff --git a/progress.md b/progress.md index c8261b6..611cba8 100644 --- a/progress.md +++ b/progress.md @@ -233,3 +233,12 @@ - 验证:待用户 `go test ./...`、`go build ./...` 复验(本环境离线无工具链)。 - 决策:端点直接回写 `Result.Raw`(同档案端点 T-208),完整内容不裁字段;last 按 idCard/phrid/empiId,list 按 checkYear(必填)+idCard+checkType;默认仅绑 127.0.0.1(返回真实档案/名单 PII)。 - 下一步:T-303 老年人查询探针。 + +## 2026-07-08 JKTJ00002 某人全部体检查询打通 + +- 状态:DONE +- 变更:`osi/codes.go` 登记 `ServiceIDJKTJQuery=JKTJ00002` → `/auto/jktj/query`;`contract/jktj.go` 加 `HealthCheckRecordSummary`(驼峰 idCard、checkId 可空);`osi/jktj.go` 加 `QueryHealthChecks`(返回数组);`handler/health_check.go` 加 `/api/health-check/all` 端点;`server.go` 注册路由;`osi/jktj_test.go`/`handler/health_check_test.go` 加测试(含 null checkId 场景);`docs/01 §5.2`、`docs/04 §11.1` 校准。 +- 验证:Python 探针实测 JKTJ00002 `code=01`,返回 8 条体检历史(2013–2026)。Go 侧待用户 `go test ./...`。 +- 发现(实测校准):① JKTJ00002 身份证字段是**驼峰 `idCard`**(≠ 最近一次小写 `idcard`;体检三接口 last 独用小写);② **`checkId` 仅近年记录有值,历史记录为 `null`**(本样本仅最近 2 条有编号)——历史体检只能按 `checkDate` 定位;③ 数组元素结构同 §11.3。 +- 决策:数组查询只强类型化定位字段(checkId/checkDate/idCard/personName),完整体检走 Result.Raw;单独建 `HealthCheckRecordSummary`(驼峰 idCard)不复用最近一次的 `HealthCheckSummary`(小写 idcard),因平台字段大小写不一致。 +- 下一步:go test 复验后提交;体检查询三接口(最近一次/全部/名单)osi+HTTP 全齐。 diff --git a/tasks.md b/tasks.md index 5df21f7..639b1a4 100644 --- a/tasks.md +++ b/tasks.md @@ -74,7 +74,8 @@ | ID | 任务 | 依赖 | 验收要点 | 状态 | | --- | --- | --- | --- | --- | | T-301 | 体检查询打通:`contract/jktj.go` + `osi/jktj.go`(最近一次 JKTJLSJL00002) | T-004 | 真实请求拿到 `code="01"` 与体检数据;响应字段(~260 项/7 节点)记入 docs/04 §11 | DONE(单条 JKTJ00002 平台未部署,见 §11) | -| T-302 | 体检 HTTP 查询端点(复用 T-208 handler 模式) | T-301 | server 模式 `GET /api/health-check/last`(最近一次)+ `/list`(名单)curl 返回完整 JSON;默认仅绑本机 | DONE | +| T-302 | 体检 HTTP 查询端点(复用 T-208 handler 模式) | T-301 | server 模式 `GET /api/health-check/last`+`/all`+`/list` curl 返回完整 JSON;默认仅绑本机 | DONE | +| T-306 | 某人全部体检查询 JKTJ00002(`osi.QueryHealthChecks` + `/api/health-check/all`)| T-004 | 实测已部署,按 idCard 返回全部体检数组;驼峰 idCard、历史记录 checkId 可空,契约见 docs/04 §11.1 | DONE | | T-303 | 老年人查询打通:自理 LNRZLPG / 体质 LNRZYTZ(查询 serviceId 部分待确认) | T-004 | 真实请求打通;缺失 serviceId 先向厂家确认(docs/06 B4) | TODO(部分待 B4) | | T-305 | 体检已检/未检名单查询 JKTJLIST00002(`osi` 方法 + 契约)| T-004 | `auto/jktjlist/query` 探针实测已部署(code=01 返回名单);`osi.ListHealthCheckPeople` 按 checkYear+idCard 返回名单(含 checkType 状态),契约见 docs/04 §11.4 | DONE | | T-304 | 列表类查询(**档案 / 老年人自理·体质 / 中医指导** 列表,serviceId docx 缺漏)| T-004 | 各列表路径+serviceId 到位后返回分页数组 | BLOCKED(待 docs/06 B1/B2 厂家回填)|