docs: 同步 T-002 完成状态并重排看板为查询先行

- T-001/T-002 标记 DONE,current-state 更新 Go 骨架现实
- 看板重排 Phase 1/2 → Q(查询)/M(映射)/D(字典+创建),查询档案不依赖字典
- osi/jkda.go 拆为 T-203(Find)/T-206(Create),显式化 Create 对字典缓存的依赖
- docs/05 加执行顺序注记

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ila
2026-07-06 21:52:56 +08:00
co-authored by Claude Opus 4.8
parent 2bff3cf6cc
commit 4a5134093b
4 changed files with 64 additions and 27 deletions
+7 -2
View File
@@ -7,12 +7,16 @@
## 阶段 0 · 脚手架与契约骨架
- [x] 初始化 Go module、单 `main.go`(`-mode server|deliver`)、`config/`(viper)。
- [ ] 落地 `osi/sign.go`(MD5 签名)+ 单测:用文档约定的 `ts/ask` 校验 `password` 形态(32 位小写)。
- [x] 落地 `osi/sign.go`(MD5 签名)+ 单测:用文档约定的 `ts/ask` 校验 `password` 形态(32 位小写)。
- [ ] 移植旧项目 `transport.go`/`http_client.go` → `osi/transport.go`(保留 SOCKS5/超时,去 cookiejar 与拟态头)。
- [ ] `osi/client.go` 的 `Call(serviceId, body, out)`:注入头+信封+发送+判码(成功码实测 `"01"`,按去前导零判定;`405` 可重试,见 docs/01 §1)。
- [ ] `contract/envelope.go` + `osi/codes.go`(serviceId 常量 + `pathOf` 路由)。
- **验收**:对任一最简查询接口(如机构查询 CXJG00002)发真实请求,拿到 `code/message`。
> **执行顺序注记**:`tasks.md` 已按"查询先行"重排为 Q(查询)→ M(映射)→ D(字典+创建)。
> 原因:查询档案(Find)不依赖字典、映射单测只需码表+假字典快照,只有真实创建闭环才需字典反查主数据。
> 下面阶段 1/2 是能力全景,实际领取顺序以 `tasks.md` 为准。
## 阶段 1 · 字典服务打通
- [ ] 实现 `public.go` 四个查询:网格/责任医生/药品/机构。
@@ -87,4 +91,5 @@
- 映射层:**与旧项目相当或略增**(但从"逆向猜"变为"照文档写",更确定、更可测)。
- 投递流水线:**基本复用**旧项目经验,少量适配。
- 净效果:总复杂度显著下降,且代码意图清晰可交接。
+9 -7
View File
@@ -6,11 +6,11 @@
## 当前快照
- 日期:2026-07-06
- 阶段:**Phase 0 已起步**;T-001 已完成,Go module 与 CLI/config 骨架已建立
- 阶段:**Phase 0 进行中**;T-001/T-002 已完成,Go module、CLI/config 骨架与 MD5 签名已建立
- 技术栈:Go 1.24 单二进制;`main.go -mode server|deliver`;配置读取使用 viper
- 生产代码:已有 `main.go`、`config/`、`go.mod`/`go.sum`;`osi/ contract/ mapping/` 等业务目录仍待后续任务建立
- 生产代码:已有 `main.go`、`config/`、`osi/sign.go`、`go.mod`/`go.sum`;`contract/ mapping/ pipeline/` 等业务目录仍待后续任务建立
- 联调现实:**JKDA00002 个人档案查询已用 Python 脚本打通真实沙箱**(`code="01"`),实测契约沉淀在 `docs/04 §8`
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析与 `config.yaml.example` 加载
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析、`config.yaml.example` 加载、MD5 签名和头部组装
- 标准启动路径:`./init.sh`(需要 bash/WSL 环境;当前 Windows 环境未安装 WSL,直接运行会失败)
- 标准验证路径:`go test ./...`、`go build ./...`
- 当前 blocker:无硬 blocker。软阻塞:厂家侧 B1/B2/B4/B5 契约缺口(见 `docs/06`),只影响阶段 4,不阻塞阶段 0~3
@@ -21,17 +21,18 @@
| --- | --- | --- |
| `main.go` | 已有 | 单入口,解析 `-mode server|deliver` 与 `-config` |
| `config/` | 已有 | viper 配置加载,含最小单测 |
| `osi/sign.go` | 已有 | OSI 请求头 MD5 签名与 headers 组装 |
| `config.yaml.example` | 已有 | 占位配置,不含真实凭据 |
| `go.mod` `go.sum` | 已有 | module `chis_osi`,依赖 viper |
| `docs/` | 已有 | 设计文档集 01~06 + 本快照;`账号.txt` 本地留存不入库 |
| `tasks.md` `progress.md` | 已有 | 任务看板 / 执行流水(根目录) |
| `scripts/` | 已有·不入库 | Python 联调脚本(硬编码真实凭据与身份证,勿提交) |
| `config.yaml` | 已有·不入库 | 真实凭据;不要提交 |
| `osi/` `contract/` `mapping/` 等 | 待建 | 路线图阶段 0~2 后续任务 |
| `contract/` `mapping/` `pipeline/` 等 | 待建 | 路线图阶段 0~2 后续任务 |
## 已验证事实(写代码时直接依赖)
- 签名:`password = md5("ts=<13位毫秒ts>&ask=<ask>")` 32 位小写,与平台一致(Python 已打通)。
- 签名:`password = md5("ts=<13位毫秒ts>&ask=<ask>")` 32 位小写,与 Python `hashlib` 向量一致。
- 信封:查询也走 `{"serviceId", "uploadinfo": {"baseInfo", "manageInfo"}}`,见 `docs/04 §8`。
- 成功码:字符串 `"01"`(判定按去前导零 == `"1"`),见 `docs/01 §1`。
- 机构码分层:请求头 `orgCode`=18 位统信码 ≠ `manaUnitId`=9 位机构码 ≠ 12 位区划码,见 `docs/01 §3`。
@@ -43,6 +44,7 @@
# Go 骨架验证
go test ./...
go build ./...
go test ./osi
go run . -mode server -config config.yaml.example
go run . -mode deliver -config config.yaml.example
@@ -55,8 +57,8 @@ python3 scripts/query_health_record.py
## 下一步
1. T-002:`osi/sign.go` MD5 头签名 + 单测。
2. T-003:`osi/transport.go` 传输层骨架。
1. T-003:`osi/transport.go` 传输层骨架,保留 SOCKS5/超时。
2. T-004:`osi/client.go` + `contract/envelope.go` + `osi/codes.go`。
## 维护规则