同步近期 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 长期地址引用。
56 lines
3.4 KiB
Markdown
56 lines
3.4 KiB
Markdown
# 规则引擎
|
||
|
||
规则引擎用于在账单导入与新建记录时,按条件自动应用分类与标签。
|
||
|
||
## 数据模型
|
||
|
||
- `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)
|