技能|台账体系SPECS驱动扩展法
适用场景
系统里有多个结构相似、但列不同的业务表(如家庭治理/健康/财务/资产/法律等 N 个台账),不想为每张表写一套建表、增删改、列表、导出代码时。触发词:台账体系、十体系、一套代码管多表、加个新台账。核心思想:一份字段定义驱动全部表,新增体系只改一段定义。
操作步骤
- 一份 SPECS 驱动 N 体系:
SPECS是列表,每项{key, title, main, alert, tip, fields};fields是元组列表(列名, 标签, 类型, 必填, 选项串)。新增一个体系 = 往 SPECS 加一段 dict,不写任何建表/CRUD 代码。 - 字段类型收敛为 6 种:
text / date / number / area / select / tail4;tail4= 隐私字段(证件号类),入库只留后四位(mask_tail)。 - 表名白名单:
table_of(key)只返回'ledger_'+key或'form_'+key,杜绝任何外部输入拼接 SQL(防注入的第一道闸)。 - 建表 + 补列循环:
ledger_init遍历SPECS+ 配套表单;先CREATE TABLE IF NOT EXISTS,再逐字段ALTER TABLE ADD COLUMN(捕获OperationalError忽略已存在)。老库加字段不丢老数据。 - 通用增删改查:
ledger_save / ledger_list / ledger_get / ledger_delete全部用cols(spec)取列名,走白名单;新增字段时视图零改动。 - 表单归一:
clean(spec, form)按类型归一(tail4 打码、number 默认值 0)+ 必填校验,返回(值字典, 缺失必填标签列表),视图层直接用。 - 配套表单 F 系列:
FORMS与SPECS同构,入口放各域台账页底部(导航已定稿不动);ALL = SPECS + FORMS合并,共用一套路由与视图。 - 到期预警:
alert字段指向日期列,days_left(d)算剩余天数,≤30 标红(证照/复查/续费类)。 - 动态选项:表单里填的新类别 → 登记到动态选项表 →
with_dynamic_options并入下拉,同时生成"制度待修订建议",经户主一键应用写回权威源。
注意边界
SPECS是唯一字段来源(一数一源):改字段只改定义,不要在视图里另写列名。- 手工维护的表单优先,不被母本自动生成的同名表单覆盖(
load_auto里continue跳过)。 - 配套表单(对应表格)不属于制度总目,入口与导航解耦,避免动已定稿的导航结构。
反例避雷
- 在视图/SQL 里手拼表名或列名(来自用户输入)→ SQL 注入。
- 新增一个台账就复制粘贴一套 CRUD → 屎山,且字段口径迟早漂移。
tail4字段没走mask_tail就入库 → 触碰隐私红线(证件号全量落库)。- 老表加字段只改
CREATE不写ALTER补列 → 老库按列名取不到,整页报错。
关联笔记
- [[技能|纯标准库本地Web系统搭建法]]
- [[技能|Word母本驱动的表单自动生成流程]]
实战战绩
2026-09-28 实测:十体系台账 + 5 张配套表单,零重复 CRUD 代码;证照号类字段全库入库只留后四位。
版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0.0 | 2026-09-28 | 首版实战固化:SPECS/FORMS 双驱动 + 白名单表名 + ALTER 补列 + tail4 打码 |