账户体系篇目大多讲"钱怎么动",这篇讲另一类问题:账户不动了怎么办。国内证券账户存量以亿计,其中大量是当年一人多户放开后开出来的空户、僵尸户。监管层面对这类账户有两套处理口径——休眠户管理和不合格账户清理——听起来都是运营动作,落到券商系统里其实是一组可执行的批量数据清洗任务。这篇把口径翻译成筛选条件,再讲清洗批次的工程实现。
两套口径:休眠户 vs 不合格账户
休眠户是中登公司的口径,认定标准大致三条(具体数值以当期《证券账户业务指南》为准):
- 证券账户里没有任何证券余额;
- 资金账户里的人民币余额不超过一个极小的门槛(历史口径是 100 元);
- 最近连续三年无交易(含申购、逆回购等主动委托,不包括结息、扣费这类系统动账)。
三条同时满足才休眠。注意这个定义的设计意图:它要保证休眠不会损害客户利益——有钱、有票、有交易的户都不能睡。任何一条不满足,哪怕客户十年没登录,也不是休眠户。
不合格账户是证监会的口径,针对的是实名制问题,分三类:身份不明(早期凭证缺失)、身份虚假(冒名开户)、违规使用他人账户(出借)。这类账户的处置方向不是"限制等激活",而是中止交易 + 通知规范,属于合规清理,不是客户运营。
两套口径的共同点是:认定完全靠数据。没有一份"休眠户名单"从监管下发下来让你照抄,监管只给定义,名单要券商自己从自己的库里算出来。这就是数据清洗任务的由来。
从口径到 SQL:筛选条件工程化
把休眠户三条标准逐条翻译成对账库的查询,没想象中直白,每条都有坑:
- 无持仓:要查名下所有证券账户(一个客户可能挂多个股东代码),且注意当天的在途——T 日卖出未交收的持仓算不算?算,交收完成前证券还在账上。用上一交易日终的余额快照判断,别用实时值。
- 小额资金:余额门槛比较的是可取资金还是账面余额?口径上按资金账户余额(含冻结),因为冻结资金也是客户的钱。多币种账户要把外币折人民币加总。
- 三年无交易:查的是全市场还是本券商?客户可能在别家交易。监管口径以中登为准,券商侧能查到的是本券商交易记录 + 中登下发的全市场交易统计数据,实务上用后者。
每年(或每半年)跑一轮批量:全量客户快照 → 逐条口径筛选 → 生成休眠候选清单 → 按营业部维度下发通知(休眠前要有告知期)→ 到期仍不满足激活条件的,置休眠标志。
休眠标志的作用域:限制什么,不限制什么
休眠户的限制是只许卖不许买(卖出、赎回、转出的出金方向保留,买入、转入、新开户关联全部拒绝),同时冻结新业务权限的开通。设计上要注意作用域是"账户级"而不是"客户级":客户名下一个户休眠了,另一个正常户不受影响;但一人多户本身就是当年监管要治理的对象,新开户时柜台要对已有休眠户做提示甚至强制先清理。
还有一个反直觉的点:休眠户也要结息、也要对账。它账上那几十块钱产生的利息、银行的第三方存管对账,一条不能少。治理批次不能把休眠户从日终流水里摘出去,否则利息就丢了——账户状态是业务属性,账务生命周期是另一回事,两套状态机别混在一起。
激活:治理的逆流程
客户带着休眠户回来,激活流程在开户篇里已经出现过,这里强调它和治理批次的并发交互:客户来激活的当天,可能恰好治理批次刚把他的户置了休眠。如果激活和休眠是两个独立任务各自改标志位,就会出现"刚激活又睡回去"或者"休眠中却激活成功"的竞争。工程上的规矩是:
- 休眠/激活的状态迁移走同一状态机,任何批量任务不允许直接 UPDATE 标志位,只能提交状态迁移请求;
- 迁移请求带业务日期和版本号,旧版本的批次请求不得作用于已被新流程改变过的账户;
- 激活成功后,"三年无交易"的观察期重新起算——这个状态字段要落库,否则明年批次又会把它睡回去,客户每年来激活一次,体验极差。
不合格账户清理的工程特殊性
相比休眠户,不合格账户清理有两个额外难点。一是证据链:冒名开户的认定需要身份核查记录、开户资料影像、联网核查结果的比对,清理动作本身要留痕以备行政复议和诉讼——这批数据的保存期限比账户流水还长。二是处置不可逆性更强:身份虚假的账户要上报中登注销股东代码,注销前必须确认无持仓无资金,而这类客户往往联系不上,流程经常卡在最后一步。实务中很多券商把"联系不上"本身做成一个超时状态:公告满一定期限后按无主资产处理,资金划入专门的待领科目,证券卖出所得挂账——这又回到复式记账篇的挂账科目设计。
治理类系统的共同教训是:口径变了怎么办。休眠标准里的金额门槛、年限,监管历史上调过好几次,每次都要改批处理代码里硬编码的数字。把口径参数化(阈值、年限、告知期天数全部进参数表),治理批次只消费参数,这是这类系统最值得做的一次性投入。