Files
chis_osi/docs/current-state.md
T

77 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 当前实现状态
> 可覆盖的当前快照:记录仓库现实、可运行命令、blocker 和下一步,防止只看计划而忽略现状。
> 历史流水追加到 [`../progress.md`](../progress.md);任务状态以 [`../tasks.md`](../tasks.md) 为准。
## 当前快照
- 日期:2026-07-06
- 阶段:**Phase 0 已完成**;T-001~T-005 已验收,下一步进入 Phase Q 的 T-201
- 技术栈:Go 1.24 单二进制;`main.go -mode server|deliver`;配置读取使用 viper,支持环境变量覆盖;OSI 客户端已具备签名、信封、传输、基础判码与 JKDA00002 验证入口
- 生产代码:已有 `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`、`mapping/`、`pipeline/` 等业务模块仍待后续任务建立
- 联调现实:**JKDA00002 个人档案查询已用 Go 侧真实请求打通**,返回 `code="01" message="操作成功" data_count=1`;Python 联调样本和实测契约沉淀在 `docs/04 §8`
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析、配置加载与环境变量覆盖、MD5 签名、请求头组装、JSON POST 传输、头名大小写保留、超时配置、SOCKS5 代理地址校验、信封结构、serviceId 路由、成功/重试判码、Client.Call 请求与响应解析、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|deliver`、`-config`,并提供 `-verify-jkda-id-card` 联调验证入口 |
| `config/` | 已有 | viper 配置加载,支持 `OSI_*` 等环境变量覆盖 |
| `contract/envelope.go` | 已有 | OSI 通用信封与 `manageInfo` 结构 |
| `osi/sign.go` | 已有 | OSI 请求头 MD5 签名与 headers 组装 |
| `osi/transport.go` | 已有 | OSI JSON POST 传输层;原始 HTTP/1.1 写请求以保留头名大小写;支持超时与可选 SOCKS5 |
| `osi/codes.go` | 已有 | serviceId 路由与成功/可重试判码 |
| `osi/client.go` | 已有 | 通用 `Call`:签名头 + 信封 + 传输 + 响应解析 |
| `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/` `pipeline/` 等 | 待建 | 后续任务 |
## 已验证事实(写代码时直接依赖)
- 签名:`password = md5("ts=<13位毫秒ts>&ask=<ask>")` 32 位小写,与 Python `hashlib` 向量一致。
- 信封:查询也走 `{"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` 的原始大小写。
## 当前可运行内容
```bash
# 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 提供真实凭据;不要提交真实值)
go run . -mode server -config config.yaml -verify-jkda-id-card <idCard>
# 本地 Python 联调查询(脚本硬编码凭据,勿提交)
python3 scripts/query_health_record.py
```
## 下一步
1. T-201:`contract/jkda.go`,按 `docs/04 §8` 实测契约建立 JKDA00002 查询响应结构体。
2. T-203:在结构体就绪后实现 `osi/jkda.go` 的 Find / FindRqbj。
## 维护规则
发生以下变化时覆盖更新本文:入口/目录变动、任务状态变化、新增可运行命令、发现文档与代码现实不一致。本文只留当前快照,不留历史。