2026-07-04 22:17:05 +08:00
|
|
|
|
# 当前实现状态
|
|
|
|
|
|
|
|
|
|
|
|
> 本文是可覆盖的当前快照,记录代码与任务看板的现实状态。历史执行流水追加到 [../progress.md](../progress.md)。
|
|
|
|
|
|
|
|
|
|
|
|
## 当前快照
|
|
|
|
|
|
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 日期:2026-07-05
|
|
|
|
|
|
- 阶段:MVP 起步 / Phase 1 CHIS 登录与会话验证推进中
|
2026-07-05 11:01:30 +08:00
|
|
|
|
- 技术栈:当前系统 Python 3.8、Flask 3.0.3 application factory、pytest 8.3.5、requests[socks] 2.32.4、gmssl 3.2.2;不创建虚拟环境
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 生产代码:`app/__init__.py`、`app/api/health.py`、`app/config.py`、`run.py`、`app/chis/auth.py`、`app/chis/crypto.py`,以及 `app/middleware/`、`app/services/`、`app/mappers/`、`app/chis/`、`app/repositories/`、`app/validators/` 包目录;`ChisLoginClient` 已支持登录和 `getLanderInfo` 会话验证
|
2026-07-05 11:01:30 +08:00
|
|
|
|
- 测试:`tests/test_app_factory.py`、`tests/test_config_and_structure.py`、`tests/test_project_setup.py`、`tests/test_chis_auth.py`
|
2026-07-04 22:17:05 +08:00
|
|
|
|
- 数据 / 资料:`reverse_file/` 下已有 CHIS HAR、前端脚本和 schema;`D:\hans\chupd\chis\login_client_v2.py` 可作为登录链路参考
|
2026-07-04 23:20:40 +08:00
|
|
|
|
- 标准启动路径:`python run.py`
|
2026-07-04 23:34:05 +08:00
|
|
|
|
- 标准验证路径:`python -m pytest`
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 当前 blocker:无硬阻塞;后续实现需要接入 Redis 会话缓存,并在失效时清理缓存和重登一次
|
2026-07-04 22:17:05 +08:00
|
|
|
|
|
|
|
|
|
|
## 当前目录要点
|
|
|
|
|
|
|
|
|
|
|
|
| 路径 | 状态 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| `docs/` | 已有 | 项目规范化文档 |
|
|
|
|
|
|
| `reverse_file/` | 已有 | CHIS 逆向资料,当前重要事实来源 |
|
|
|
|
|
|
| `reverse_file/20260704_query_health_check.har` | 已有 | 体检详情只读查询 HAR,包含 `getHMNIListOfHTML` 和 `getCheckInfoDetail` |
|
|
|
|
|
|
| `D:\hans\chupd\chis\login_client_v2.py` | 外部参考 | CHIS 登录、SM2 加密、角色选择、cookie 拼接、`getLanderInfo` 会话验证 |
|
2026-07-04 23:20:40 +08:00
|
|
|
|
| `app/` | 已有 | Flask application factory 和 health check API |
|
2026-07-05 11:13:34 +08:00
|
|
|
|
| `app/chis/` | 已有 | CHIS integration layer;T-101 已包含登录客户端与 SM2 加密,T-102 已包含 `getLanderInfo` 会话验证 |
|
2026-07-04 23:24:51 +08:00
|
|
|
|
| `app/mappers/` | 已有 | 数据转换层包目录 |
|
|
|
|
|
|
| `app/middleware/` | 已有 | 中间件包目录 |
|
|
|
|
|
|
| `app/repositories/` | 已有 | 存储 / 缓存包目录 |
|
|
|
|
|
|
| `app/services/` | 已有 | 应用服务层包目录 |
|
|
|
|
|
|
| `app/validators/` | 已有 | 请求校验包目录 |
|
2026-07-04 23:34:05 +08:00
|
|
|
|
| `tests/` | 已有 | pytest 可收集的测试 |
|
|
|
|
|
|
| `pytest.ini` | 已有 | pytest 测试入口配置,限制测试目录为 `tests` |
|
2026-07-05 11:01:30 +08:00
|
|
|
|
| `requirements.txt` | 已有 | Python 依赖,固定 `Flask==3.0.3`、`pytest==8.3.5`、`requests[socks]==2.32.4`、`gmssl==3.2.2` |
|
2026-07-04 23:24:51 +08:00
|
|
|
|
| `.env.example` | 已有 | 环境变量占位示例,不含真实密钥 |
|
2026-07-04 22:17:05 +08:00
|
|
|
|
|
|
|
|
|
|
## 任务看板状态
|
|
|
|
|
|
|
|
|
|
|
|
任务状态以 [06-tasks.md](06-tasks.md) 为准。
|
|
|
|
|
|
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 已完成:DOC-001 建立 harness coding 项目文档;DOC-002 更新 CHIS 登录与只读查询验证路线;DOC-003 明确使用系统 Python 3.8;DOC-004 明确 Flask factory 模式;DOC-005 明确日志与请求归档方案;DOC-006 明确 CHIS SOCKS5 代理配置;T-001 初始化 Flask 项目骨架;T-002 建立基础配置与目录;T-003 建立最小测试框架;T-101 迁移 CHIS 登录链路;T-102 接入账号信息查询验证会话。详见 [../progress.md](../progress.md)。
|
2026-07-04 22:17:05 +08:00
|
|
|
|
- 正在进行:无。
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 下一个可领取任务:T-103 实现 Redis 会话缓存。
|
2026-07-04 22:17:05 +08:00
|
|
|
|
|
|
|
|
|
|
## 已确认技术事实
|
|
|
|
|
|
|
|
|
|
|
|
- CHIS public key 可通过配置文件或环境变量提供。
|
2026-07-04 22:46:26 +08:00
|
|
|
|
- 使用当前系统 Python 3.8 环境,不创建虚拟环境;T-001 创建 `requirements.txt` 固定依赖。
|
2026-07-04 23:34:05 +08:00
|
|
|
|
- pytest 8.3.5 已固定到 `requirements.txt`;标准测试命令为 `python -m pytest`。
|
2026-07-05 11:01:30 +08:00
|
|
|
|
- requests[socks] 2.32.4 和 gmssl 3.2.2 已固定到 `requirements.txt`,用于 CHIS 登录请求、SOCKS5 代理和 SM2 加密。
|
2026-07-04 23:13:00 +08:00
|
|
|
|
- Flask 应用使用 application factory 模式,`app/__init__.py` 暴露 `create_app(config_object=None)`。
|
2026-07-04 23:30:53 +08:00
|
|
|
|
- 基础配置通过环境变量读取:`CHIS_BASE_URL`、`CHIS_PUBLIC_KEY`、`CHIS_PROXY`、`REDIS_URL`、`LOG_DIR`、`ARCHIVE_DIR`。
|
2026-07-05 11:01:30 +08:00
|
|
|
|
- `CHIS_BASE_URL` 兼容完整地址和旧项目 host 写法;未带 scheme 时按 `http://<host>/chis` 处理。
|
2026-07-04 23:30:53 +08:00
|
|
|
|
- CHIS 外呼支持可选 SOCKS5 代理配置:`CHIS_PROXY` 为空直连;有值时后续 CHIS client 对登录、会话验证、查询和保存请求统一走代理。
|
2026-07-04 23:24:51 +08:00
|
|
|
|
- `.env.example` 只保留占位符和非敏感默认值,不写真实密钥。
|
2026-07-05 11:01:30 +08:00
|
|
|
|
- 登录链路已迁移到 `app/chis/auth.py`:`myRoles` -> 选择 `责任医生助理` / `责任医生` -> `myApps` -> 提取 `JSESSIONID` -> 拼接 cookie。
|
|
|
|
|
|
- SM2 加密已迁移到 `app/chis/crypto.py`,兼容 `hans_chis.sm2.sm2_encrypt`:`gmssl.sm2.CryptSM2(mode=0)`,返回带 `04` 前缀密文。
|
2026-07-05 11:13:34 +08:00
|
|
|
|
- 会话验证已接入 `ChisLoginClient.get_lander_info(cookie)`,请求 `chis.myPageService / getLanderInfo`;CHIS 非 200 业务码会抛出 `chis_session_invalid`。
|
2026-07-04 22:17:05 +08:00
|
|
|
|
- 体检详情查询第一版可用 `healthCheck + phrId + idCard` 调 `getHMNIListOfHTML`,用 `idCard + checkDate` 调 `getCheckInfoDetail`。
|
|
|
|
|
|
- 当前不能证明只传 `healthCheck` 就能查完整详情。
|
2026-07-04 23:13:00 +08:00
|
|
|
|
- 运行日志保存到 `logs/`,每天一个综合日志文件,保留 1 年。
|
|
|
|
|
|
- 每个 API 请求保存一个 `archives/` JSON 归档文件,包含完整 API 和 CHIS 请求 / 响应,archive 不脱敏,仅用于内网前置机本地受控排查。
|
2026-07-04 22:17:05 +08:00
|
|
|
|
|
|
|
|
|
|
## 当前可运行内容
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-07-04 23:20:40 +08:00
|
|
|
|
python -m pip install -r requirements.txt
|
2026-07-04 23:34:05 +08:00
|
|
|
|
python -m pytest
|
2026-07-04 23:20:40 +08:00
|
|
|
|
python run.py
|
2026-07-04 22:17:05 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 开始编码前检查
|
|
|
|
|
|
|
|
|
|
|
|
1. 读 [../AGENTS.md](../AGENTS.md)。
|
|
|
|
|
|
2. 读 [00-ai-start-here.md](00-ai-start-here.md)。
|
|
|
|
|
|
3. 读 [05-coding-rules.md](05-coding-rules.md)。
|
|
|
|
|
|
4. 从 [06-tasks.md](06-tasks.md) 领取第一个 `TODO` 且依赖均完成的任务。
|
|
|
|
|
|
5. 将该任务状态改为 `DOING` 后再改代码。
|
|
|
|
|
|
|
|
|
|
|
|
## 维护规则
|
|
|
|
|
|
|
|
|
|
|
|
当实际代码状态发生变化时,同步更新本文件:
|
|
|
|
|
|
|
|
|
|
|
|
- 新增或移动入口文件。
|
|
|
|
|
|
- 初始化框架或模块。
|
|
|
|
|
|
- 任务从 `TODO` 进入 `DOING` 或 `DONE`。
|
|
|
|
|
|
- 新增可运行命令。
|
|
|
|
|
|
- 发现文档和代码现实不一致。
|