gp_hybk 行业源实测通过(prefix写法); count语义写清楚; 收尾文档

This commit is contained in:
zlt 2026-07-31 11:30:22 +08:00
parent ff97024b3a
commit a22875573d
3 changed files with 26 additions and 3 deletions

View File

@ -207,7 +207,7 @@ QMT ──trade/order_update──▶ pms-ws ──落 pms_qmt_inbox──▶
|---|---|---|
| 1 | ~~ws 通道的账本侧改造(清单 4~6~~ | ✅ 2026-07-29 |
| 2 | ~~上游选股计划接入(`/plan`~~ | ✅ 2026-07-31候选池独占来源、交易日龄硬校验、盘前昨收兜底、ST 剔除、PMS 侧主题限额、页面抽屉与探活脚本。口径与实测记录见 `UPSTREAM_PLAN_API.md` |
| 3 | **行业硬拦截开闸** | 数据源换成 `gp_hybk`199 库行业板块表,三级 884*,每票只认 bk_code 最小的主行业;`gp_stock_category` 作废——无 `stock_code` 列)。代码写法与 database 均做了自适应/显式报错。**待验证**`PMS_SECTOR_SOURCE=gp_hybk` 后查 `GET /api/industry``probe.form``ready`,再看 `/api/positions``sector` 有没有填上。详见 `UPSTREAM_PLAN_API.md` §8 |
| 3 | ~~行业硬拦截开闸~~ | ✅ 2026-07-31`PMS_SECTOR_SOURCE=gp_hybk`199 库,三级 884*,每票只认 bk_code 最小的主行业),实测 `ready=true`、代码写法 `prefix`。**这是 PMS 第一次有可用的行业源。**待账本重建后回看 `PMS_SECTOR_MAX_RATIO=40%` 对三级粒度是否偏松(参考项目三级用 20%。详见 `UPSTREAM_PLAN_API.md` §8 |
| 4 | **账本重建**:清账后账本为空,需对端持仓就绪后 `POST /api/ops/reconcile?apply_fix=true` 以下游为准补回 | 阻塞:等 QMT 侧按真实成本价重建模拟持仓(`QMT_SIDE_S3_CLOSEOUT.md` §5 |
| 5 | **ws 通道联调收尾**(协议 §9 S3 | 阻塞:`trade_no` 格式不合 §5.5`QMT_SIDE_S3_CLOSEOUT.md` §1这条挡住切 ws |
| 6 | 上游计划的剩余待确认口径 | 等上游:`UPSTREAM_PLAN_API.md` §4 剩 5 条 + §7.3 新增两条(同一 `date` 计划不幂等、档位规模与文档不符) |

View File

@ -508,3 +508,23 @@ curl -s http://127.0.0.1:38100/api/industry | python3 -m json.tool
`status.probe.form` (认出来的代码写法) 与 `status.ready`。ready=true 之后再看
`/api/positions` 里持仓票的 `sector` 有没有真填上。
### 实测结果 (2026-07-31, 已通)
```json
{"source": "gp_hybk", "ready": true, "level": "l3",
"probe": {"form": "prefix", "error": null,
"columns": ["bk_code", "bk_name", "gp_code"]}}
```
- **代码写法 = `prefix`** (`SH600000`)。表里就是前缀式, 三种写法的自适应第二轮命中。
- 列与参考实现完全一致; `gp_hybk` 确实在 `DB_MYSQL_URL` (199/db_gp_cj) 那个库里, `.env` 不用改。
- **行业集中度硬拦截自此真正生效** —— 这是 PMS 第一次有可用的行业源。
`status.count` (= `cached_today`) 是**按需查询的日缓存计数**, 不是"表里有多少条"。账本空、
还没下过命令时它就是 0。这跟 `gp_stock_category` 时代那个恒为 0 的假 count 是两回事
(那个统计的是另一张表, 跟数据源通不通毫无关系)。hint 里已经把这句写死, 免得再被误读。
> 提醒: 行业源通了以后 `PMS_SECTOR_MAX_NAMES=4` / `PMS_SECTOR_MAX_RATIO=40%` 才真正开始
> 拦人。参考项目在**三级**上用的阈值是 20%。40% 是当初按"二级或更粗"的粒度定的, 三级粒度下
> 偏松 —— 等账本重建、有真实持仓分布之后再回头看这个数, 现在不动。

View File

@ -137,11 +137,14 @@ def status() -> dict:
return st
st["probe"] = {k: pr.get(k) for k in ("form", "error", "columns", "tried")}
st["level"] = level()
st["count"] = sum(1 for v in _hybk["data"].values() if v)
st["cached_today"] = sum(1 for v in _hybk["data"].values() if v)
st["count"] = st["cached_today"] # count 沿用旧字段名, 含义见 hint
if pr.get("form"):
st["hint"] = (f"gp_hybk 可用 (代码写法 {pr['form']}, 取 {st['level']}"
f"bk_code {industry_repo.LEVEL_PREFIX[st['level']]}*, "
f"每票只认 bk_code 最小的那个主行业); 本日已缓存 {st['count']}")
f"每票只认 bk_code 最小的那个主行业); "
f"本日已解析 {st['cached_today']} 只 —— 这是**按需查询的日缓存计数**, "
f"0 只表示今天还没查过任何票 (账本空/没下过命令), 不是查不到")
else:
st["ready"] = False
st["hint"] = ("gp_hybk **用不了** —— 行业约束按未配置停用。" + str(pr.get("error"))