Files
ledgerly-docs/dev/rule-engine.md
T
rosercode d94d4e1ed5 docs: 补充收支记录页 AI 生成规则、CORS/反向代理与邮箱检查进度时间戳
同步近期 ledgerly 功能与配置变更到文档站:新增收支记录页「AI 生成规则」入口的用户与开发说明、补充新接口与规则应用逻辑、修正 CORS/反向代理与运行环境编码说明,并更新邮箱检查进度时间戳描述。

变更内容:
- guide/transactions.md 批量操作区新增「AI 生成规则」按钮与「AI 生成规则(从勾选账单)」小节(含「同时应用到勾选账单」),引用新截图。
- guide/ai.md、guide/rules.md、guide/pages.md 补充两处生成入口与「同时应用」说明。
- dev/api.md 新增 POST /api/ai/rule/apply-transactions;dev/rule-engine.md、dev/ai.md 补充 applyToTransactions 与两个生成入口。
- dev/build-deploy.md 将 CORS 更新为放开全部来源并信任反向代理转发头,新增运行环境 UTF-8 locale 说明。
- guide/email-bills.md 补充「立即检查」进度每行带 HH:mm:ss 时间戳。
- scripts/ts/capture-elements.ts 新增 captureAiRuleFromTransactions 截图场景(交易页 AI 生成规则弹窗)。

说明:
- 新截图 elements/ai-rule-transactions.png 已上传 OSS,正文以 OSS 长期地址引用。
2026-10-13 22:39:40 +08:00

56 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 规则引擎
规则引擎用于在账单导入与新建记录时,按条件自动应用分类与标签。
## 数据模型
- `t_rule`:`name`、`enabled`、`sort_order`(优先级,越小越优先)、`type`(限定收支类型,可空)、`keyword`(关键词)、`min_amount` / `max_amount`(金额区间)、`category_id`(目标分类)。
- `t_rule_tag`:规则与标签的多对多关联。
## 匹配逻辑
`RuleServiceImpl.matchBatch` 的核心流程:
1. 一次性加载当前用户**已启用**的规则,按 `sort_order`、`id` 升序排序;预加载规则标签与引用分类。
2. 拼接匹配文本 = `交易对方 + 商品名称 + 备注`,统一转小写。
3. 逐条判断是否命中:
- **类型**:规则指定了 type 且与记录类型不一致则跳过。
- **关键词**:包含匹配(忽略大小写)。
- **金额区间**:`min_amount ≤ amount ≤ max_amount`(含边界,任一为空表示不限制)。
4. 命中后:
- **分类**:取首个命中且与记录类型一致的规则分类。
- **标签**:取所有命中规则标签的并集(去重)。
5. 返回结果与入参一一对应。
## 应用位置
| 场景 | 行为 |
|---|---|
| 账单解析预览 | 展示命中的规则名与建议分类/标签 |
| 账单确认导入 | 规则建议分类优先于面板默认分类;标签与默认标签合并去重 |
| 新建/编辑记录 | 不自动应用,但可借助 AI 推荐 |
## 列表查询与分页
- `GET /api/rule/list`:返回当前用户全部规则(按优先级排序),供内部复用。
- `GET /api/rule/page`:分页查询,支持 `keyword`(匹配规则名称或关键词)、`enabled`、`type` 筛选,返回 `PageResult<RuleVO>`。
- `DELETE /api/rule/batch`:批量删除(body `{ ids }`);先按 `userId` 过滤归属,清理规则-标签关联后删除,返回实际删除数。
## AI 生成规则
`AiRuleServiceImpl` 提供两个入口:规则管理页(生成 + 创建)与收支记录页批量操作(生成 + 可选应用到账单)。
- 生成建议(`suggest`,`POST /api/ai/rule/suggest`):依据用户勾选的记录生成规则建议;规则管理页限定**已打标签记录**,收支记录页为**任意勾选账单**。输入字段为记录的类型、备注、交易渠道、已有分类与标签(不含金额与原始账单数据),并按「类型 + 备注 + 渠道 + 标签」组合去重。
- 创建规则(`apply`,`POST /api/ai/rule/apply`):输出规则经 `RuleService.create` 落库,必要时新建分类/标签,规则默认启用。
- 应用到交易(`applyToTransactions`,`POST /api/ai/rule/apply-transactions`):**纯本地匹配、不调用大模型**,按规则的类型/关键词/金额条件匹配指定交易,命中则聚合分类与标签,委托 `AiSuggestionService.apply` 落库(覆盖分类、追加标签,必要时新建)。
- **去重**:以「类型 + 归一化关键词 + 分类 + 排序标签集合」为签名;与已有规则或同批已创建规则重复时跳过(`apply` 返回实际创建数),建议阶段则标记 `duplicate` 供前端禁止勾选。
## 校验
`RuleServiceImpl.validate` 会校验:`type` 白名单、金额下限不大于上限、目标分类归属当前用户且类型一致。保存规则标签时采用全量替换。
## 相关文档
- [规则管理(使用说明)](/guide/rules)
- [账单解析](/dev/bill-parsing)