pub fn classify_account(
trd_market: Option<i32>,
security_firm: Option<i32>,
uni_card_num: Option<&str>,
) -> AccountKindExpand description
账户类型识别 — 对齐 C++ INNData_Trd_CommonCurrency::GetAccountValidCurrency
(cpp:92-126) 的 3 分支结构:
if (enTrdMkt == NN_TrdMarket_Futures) → futures set per broker
else if (enTrdMkt == NN_TrdMarket_SG /*6*/) → universal set per broker
else → single currency from
GetTrdMarketCurrency(enTrdMkt)
(HK→HKD / US→USD / CN/HKCC→CNH /
default→Unknown+warn)本 fn 是 Rust cache normalization defense, 不是 C++ direct copy. (Per v1.4.106 Finding C from codex source audit 2026-05-01).
C++ 严格按 accItem.enTrdMkt == NN_TrdMarket_SG 判 Universal, 没有任何
fallback. Rust 加 uni_card_num + security_firm fallback 是因为 Rust
cache (CachedTrdAcc.trd_market) 直接存 backend raw Account.market,
raw 值跟 OpenAPI TrdMarket 不一定 1:1 对齐 (e.g. backend raw=13=HK_Fund
vs OpenAPI 113=HK_Fund). 本 fn 防止 cache drift 把真 Universal 账户错认为
SingleCurrency 静默放宽 currency 校验.
risk of fallback: 万一 fallback 路径误把 single-market HK/US 账户认成
Universal, 会让 validate_currency_for_account 走 universal supported set,
可能 reject C++ 接受的 currency. 本 fn 的 fallback 仅当 trd_market 不在
official 表里时启用 — 见 Step 3 实现注释.
现实背景 (用户 2026-04-30 强调): “不论 hk/us/sg 等, 各个券商实体开给
客户的都是 Universal account; single account 是老的账户形态, 已经被
禁用, 只能浏览了”. 所以现代活跃账户99% 是 Universal (trd_market=6),
SingleCurrency 路径仅服务遗留浏览-only 账户.
输入信号 (按优先级 + 与 C++ 对齐 + cache drift 防御):
trd_market = FUTURES (5): Futures 账户 (C++ 第 1 分支, 不受 fallback 影响)trd_market = SG (6) = AccountMarket::UNIVERSAL: Universal (C++ 第 2 分支, canonical)uni_card_num非空 +security_firm已识别: 仍按 Universal 处理 (cache drift 防御 — 真 Universal 账户必有 uni_card_num + security_firm). 必须排在第 4 步前, 防 cache 把 trd_market 错存成 raw NN_TrdMarket 值 (CA=112 / AU=8 / JP=15 / MY=111) 落进 SingleCurrency 静默放行.trd_market∈ legacy single 表 (HK=1 / US=2 / CN=3 / HKCC=4 + backend-raw fund 13/22/23/24 + OpenAPI fund 113/123/124/125/126): legacy SingleCurrency (浏览-only 老账户, C++ 第 3 分支的具体派生路径)- 其他: SingleCurrency (supported 返 None → Unknown, 让 backend 决定)
历史触发 (codex round 1 F1, v1.4.105 review):
之前只看 trd_market == SG (6), 真实 cache 若存 raw NN_TrdMarket 值
(CA=112 / AU=8 / JP=15 / MY=111) 则错落进 SingleCurrency, Layer A 静默放
行 → HKD/SGD silent fallback regression 可能复活.
用户 2026-04-30 进一步纠偏: legacy single-market HK/US/HKCC 账户在现实里 都是浏览-only, 不应早 return 抑制 Universal fallback — 真 Universal 账 户即使 cache 漂移到 1/2/4, fallback 仍要识别正确.