6.2 KiB
6.2 KiB
当前实现状态
可覆盖的当前快照:记录仓库现实、可运行命令、blocker 和下一步,防止只看计划而忽略现状。 历史流水追加到
../progress.md;任务状态以../tasks.md为准。
当前快照
- 日期:2026-07-07
- 阶段:Phase M 映射层基线完成;T-001~T-006、T-201、T-203、T-102、T-202、T-205 已验收,下一步进入 Phase D 的 T-101
- 技术栈:Go 1.24 单二进制;
main.go -mode server|deliver;配置读取使用 viper,支持环境变量覆盖;OSI 客户端已具备签名、信封、传输、基础判码、JKDA00002 Find 与 JKDA00005 FindRqbj - 生产代码:已有
main.go、config/、contract/envelope.go、osi/sign.go、osi/transport.go、osi/codes.go、osi/client.go、verify_jkda.go、go.mod/go.sum;contract/jkda.go已建立 JKDA00002 查询响应契约;osi/jkda.go已实现 Find/FindRqbj;mapping/dict.go已建立码表基线;mapping/health_record.go与mapping/checkid.go已建立映射纯函数基线;映射样本回归基线已完成;pipeline/等业务模块仍待后续任务建立 - 联调现实:JKDA00002 个人档案查询已用 Go 侧真实请求打通,返回
code="01" message="操作成功" data_count=1;Python 联调样本和实测契约沉淀在docs/04 §8 - 测试:
go test ./...通过;当前测试覆盖 mode 解析、配置加载与环境变量覆盖、MD5 签名、请求头组装、JSON POST 传输、头名大小写保留、identity 响应编码声明、超时配置、SOCKS5 代理地址校验、信封结构、serviceId 路由、成功/重试判码、Client.Call 请求与响应解析、JKDA00002 查询响应契约、JKDA00002 Find、JKDA00005 FindRqbj、映射码表双向查找、民族 01~56 完整性、健康档案映射必填/码表校验、checkId 确定性、docx/联调风格映射样本基线、JKDA00002 验证入口 - 标准启动路径:
./init.sh已配置三步:依赖下载、go test ./...、go run . -mode server -config config.yaml.example - 标准验证路径:
go test ./...、go build ./... - 当前 blocker:无硬 blocker。软限制:当前机器从 Git Bash 启动 Go 会出现标准库路径/构建缓存权限异常,
init.sh无法完整跑完;PowerShell 下等价 Go 命令和真实请求通过。厂家侧 B1/B2/B4/B5 契约缺口只影响阶段 4,不阻塞 Phase Q/M/D 的当前路径
当前目录要点
| 路径 | 状态 | 说明 |
|---|---|---|
main.go |
已有 | 单入口,解析 `-mode server |
config/ |
已有 | viper 配置加载,支持 OSI_* 等环境变量覆盖 |
contract/envelope.go |
已有 | OSI 通用信封与 manageInfo 结构 |
contract/jkda.go |
已有 | JKDA00002 查询响应结构体;创建/更新请求结构体留到 T-206 |
osi/sign.go |
已有 | OSI 请求头 MD5 签名与 headers 组装 |
osi/transport.go |
已有 | OSI JSON POST 传输层;原始 HTTP/1.1 写请求以保留头名大小写;支持超时与可选 SOCKS5 |
osi/codes.go |
已有 | serviceId 路由与成功/可重试判码 |
osi/client.go |
已有 | 通用 Call:签名头 + 信封 + 传输 + 响应解析 |
osi/jkda.go |
已有 | JKDA00002 Find 与 JKDA00005 FindRqbj |
verify_jkda.go |
已有 | JKDA00002 真实请求验证辅助入口 |
config.yaml.example |
已有 | 占位配置,不含真实凭据 |
go.mod go.sum |
已有 | module chis_osi,依赖 viper 与 golang.org/x/net/proxy |
docs/ |
已有 | 设计文档集 01~06 + 本快照;账号.txt 本地留存不入库 |
tasks.md progress.md |
已有 | 任务看板 / 执行流水(根目录) |
scripts/ |
已有·不入库 | Python 联调脚本(硬编码真实凭据与身份证,勿提交) |
config.yaml |
已有·不入库 | 真实凭据;不要提交 |
mapping/dict.go |
已有 | 性别/民族/血型/RH/文化程度/职业/婚姻/医保/personSign 双向码表;未命中返回 ValidationError |
mapping/health_record.go mapping/checkid.go |
已有 | 健康档案映射草稿、字典快照注入、必填/码表校验、确定性 checkId |
mapping/health_record_baseline_test.go |
已有 | docx 风格、联调风格、脏数据映射回归样本 |
pipeline/ 等 |
待建 | 后续任务 |
已验证事实(写代码时直接依赖)
- 签名:
password = md5("ts=<13位毫秒ts>&ask=<ask>")32 位小写,与 Pythonhashlib向量一致。 - 信封:查询也走
{"serviceId", "uploadinfo": {"baseInfo", "manageInfo"}},见docs/04 §8。 - 成功码:字符串
"01"(判定按去前导零 =="1"),见docs/01 §1。 405为平台服务调用超时,可重试。- 机构码分层:请求头
orgCode=18 位统信码 ≠manaUnitId=9 位机构码 ≠ 12 位区划码,见docs/01 §3。 deviceSN查询可空。- OSI 代理语义:
socks5_proxy非空即只对 OSI 客户端走 SOCKS5,不做直连回退。 - 真实平台/代理对请求头名大小写敏感;Go
net/http会规范化头名,OSI 传输层需保留orgCode/deviceSN/userName的原始大小写。裸写传输层默认请求Accept-Encoding: identity,避免收到未解压压缩响应。
当前可运行内容
# Go 骨架验证
go test ./...
go build ./...
go test ./contract ./osi
go run . -mode server -config config.yaml.example
go run . -mode deliver -config config.yaml.example
# 统一入口(当前 Git Bash 环境存在 Go 标准库/缓存权限限制)
./init.sh
# Go 侧 JKDA00002 联调验证(需通过环境变量或 config.yaml 提供真实凭据;不要提交真实值)
OSI_VERIFY_ID_CARD=<idCard> go run . -mode server -config config.yaml -verify-jkda
# 本地 Python 联调查询(脚本硬编码凭据,勿提交)
python3 scripts/query_health_record.py
下一步
- T-101:
osi/public.go四个字典查询(网格/责任医生/药品/机构)。 - T-103:字典缓存(T-101 后)。
维护规则
发生以下变化时覆盖更新本文:入口/目录变动、任务状态变化、新增可运行命令、发现文档与代码现实不一致。本文只留当前快照,不留历史。