# ProjectMoneyX — 产品需求文档(PRD) > **版本**:v1.0 | **日期**:2026-03-03 | **状态**:综合定稿 --- ## 1. 产品概述 ### 1.1 产品名称 **ProjectMoneyX** ### 1.2 产品定位 ProjectMoneyX 是一款面向 Firefly III 生态的**本地化多源账单数据治理中间件**。 它并非简单的"导入工具",而是 Firefly III 的前置**数据治理层**——负责将分散在支付平台、银行、生活服务及加密货币交易所的零散账单,经过标准化清洗、智能去重与链路合并后,无缝推送至 Firefly III / Data Importer,实现全资产的自动化流转与管理。 ### 1.3 产品愿景 让用户可以将来自多源账单**一键汇总**为统一结构,经过规则映射与去重合并后,稳定导入 Firefly III,形成**可持续、可审计、可复用**的个人财务数据资产。 --- ## 2. 背景与核心痛点 ### 2.1 当前问题 | # | 痛点 | 说明 | |---|------|------| | 1 | **数据源分散** | 账单来源覆盖支付宝、微信、银行、生活服务平台、交易所,导出格式各异 | | 2 | **字段不统一** | 不同平台对时间、金额、收支方向、交易类型、对手方、备注等字段定义不同 | | 3 | **重复与链路拆分** | 同一笔真实交易可能在多个来源中出现(如银行卡转支付宝同时出现在两方账单),或在单一来源中拆成多条流水(下单、支付、退款、手续费) | | 4 | **导入链路复杂** | Data Importer 偏重"导入",并不擅长承担复杂的本地多源清洗编排 | | 5 | **规则分散** | 若完全依赖 Data Importer 进行规则映射,会导致多来源规则难以统一沉淀和复用 | ### 2.2 真实需求意图 从原始需求分析,用户真正需要的是一个完整的: - **多源账单标准化中台** — 屏蔽平台差异 - **本地清洗去重引擎** — 消除重复与链路碎片 - **可配置规则映射系统** — 沉淀长期积累的分类知识 - **面向 Firefly III 的导入适配层** — 无缝对接现有生态 --- ## 3. 产品目标 ### 3.1 核心目标 1. 支持多源账单文件导入并解析为**统一交易模型** 2. 支持在本地完成清洗、标准化、规则映射、去重与链路合并 3. 支持通过 API 或中间文件方式将数据导入 Data Importer / Firefly III 4. 支持将清洗后的标准交易持久化到本地 SQLite,便于追溯、重跑和校验 ### 3.2 MVP 成功标准 | # | 标准 | |---|------| | 1 | 用户可导入至少 3 类主流账单(支付平台、银行、生活消费平台) | | 2 | 同一批数据可在本地完成去重并输出统一交易记录 | | 3 | 用户可完成从「上传文件 → 预览清洗结果 → 应用规则 → 导入 Firefly III」的完整闭环 | | 4 | 导入失败可追溯到原始文件、解析结果和转换结果 | --- ## 4. 目标用户 ### 4.1 核心用户画像 - 拥有多平台消费/收支记录的个人用户 - 使用 Firefly III 进行个人财务管理的进阶用户 - 有一定技术能力,希望本地掌控账单数据的用户 ### 4.2 用户特征 - 注重隐私,倾向于本地部署 - 可接受文件导入而非完全自动爬取 - 关注财务统计的一致性与长期可维护性 --- ## 5. 产品范围 ### 5.1 本期范围(In Scope) 1. 本地账单文件导入(CSV / Excel / 常见文本格式) 2. 多来源适配器解析(插件化架构) 3. 统一交易模型转换 4. 本地规则映射(分类/账户/标签) 5. 去重与链路合并 6. SQLite 本地持久化 7. 导入结果预览与确认 8. 对接 Firefly III / Data Importer 的导入能力 9. 导入任务日志与失败重试 ### 5.2 非本期范围(Out of Scope) 1. 直接登录第三方平台自动抓取账单 2. 银行/平台开放 API 的在线拉取(后续可扩展) 3. 完整 BI 分析平台 4. 替代 Firefly III 的账本能力 5. 高频实时同步(本期以"批量导入"为主) --- ## 6. 产品架构与数据流转 ### 6.1 数据流转拓扑 ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 多源账单导入 │ -> │ 解析器(Parser) │ -> │ 标准化入库 │ -> │ 去重与链路合并 │ -> │ 规则映射 │ -> │ 导出/推送 │ │ (文件上传) │ │ (Adapter层) │ │ (SQLite) │ │ (Dedup+Link) │ │ (Rule Engine) │ │ (API/CSV) │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ ``` ### 6.2 规则映射策略:两段式分离 > **关键产品决策**:规则映射采用"本地为主,Data Importer 为辅"的两段式策略。 **第一阶段 — ProjectMoneyX 负责(数据对齐 + 业务分类)**: - **字段级映射**:将各平台异构字段(如支付宝"交易对方"、银行"附言")统一映射为标准数据字段 - **业务分类映射**:将交易对手、描述等信息映射到分类(餐饮、交通、工资等)、账户、标签 - **商户名归一化**:统一商户别名(如"美团外卖-xxx店"→ 统一商户名) **第二阶段 — Firefly III / Data Importer 负责(兜底与补充)**: - 最后一层字段兼容适配 - 临时补充规则 - 与 Firefly III 导入格式保持兼容 **选择本地规则映射为主的核心理由:** 1. **多源统一能力更强**:本地能先统一语义,再输出稳定格式 2. **规则可沉淀**:用户长期积累的分类规则、商户别名、账户映射,不应绑定在某个导入器实例里 3. **可解释性更高**:用户能在导入前看到"这条为何被分到餐饮/交通" 4. **迁移性更好**:即使未来不使用 Data Importer,也能复用规则引擎 ### 6.3 分层架构 ``` ┌─────────────────────────────────────────────────────┐ │ Web UI / CLI │ ├─────────────────────────────────────────────────────┤ │ Adapter 层 │ 各平台账单解析器(插件化) │ ├─────────────────────────────────────────────────────┤ │ Normalize 层 │ 字段标准化、统一交易模型转换 │ ├─────────────────────────────────────────────────────┤ │ Match 层 │ 去重与链路合并 │ ├─────────────────────────────────────────────────────┤ │ Rule 层 │ 分类/账户/标签/对手方映射 │ ├─────────────────────────────────────────────────────┤ │ Export 层 │ 导出至 Data Importer / Firefly III │ ├─────────────────────────────────────────────────────┤ │ Storage 层 │ SQLite 持久化 + 审计日志 │ └─────────────────────────────────────────────────────┘ ``` **设计原则:** - 平台差异尽量收敛在 Adapter 层 - 统一模型要稳定,避免被单个平台格式污染 - 导入层与规则层解耦,便于未来替换下游系统 --- ## 7. 核心功能模块 ### 7.1 模块 A:数据源接入模块 负责接收和管理多来源账单文件。 **功能点:** - 支持文件上传(CSV / Excel / 常见文本格式) - 支持来源类型自动识别或用户手动指定 - 支持批量文件导入 - 支持记录原始文件元信息(文件名、来源、导入时间、文件哈希值) **首批支持来源:** | 类型 | 平台 | 备注 | |------|------|------| | 支付平台 | 支付宝、微信支付 | 核心优先级 | | 传统银行 | 建设银行、工商银行、中信银行、汇丰银行 | 需考虑不同语言/地区的格式兼容 | | 生活服务 | 美团、京东 | 用于细化支付平台的笼统账单 | | 加密货币 | 币安(Binance)、ByBit | 优先支持现货/资金流水,衍生品后续扩展 | > **产品建议**:电商/生活平台的账单主要用于**细化**支付平台的笼统记录。例如,将微信支付的"美团订单"替换为具体的"外卖-商家名"。 ### 7.2 模块 B:解析与标准化模块 负责将不同来源账单解析为**统一交易模型**,屏蔽不同平台字段差异。 **统一交易模型核心字段:** | 字段名 | 类型 | 说明 | |--------|------|------| | `transaction_id` | String | 系统内唯一 ID(自动生成) | | `source_platform` | Enum | 来源平台(alipay/wechat/ccb/icbc/...) | | `source_record_id` | String | 原始记录 ID / 交易流水号 | | `trade_time` | DateTime | 交易时间(统一为本地标准时区) | | `amount` | Decimal | 交易金额(高精度,正数) | | `currency` | String | 币种(CNY/USD/USDT/...) | | `direction` | Enum | 收入 / 支出 / 转账 / 退款 / 手续费 | | `counterparty` | String | 交易对手 | | `merchant_name` | String | 商户名 | | `category_raw` | String | 原始分类(平台提供) | | `category_mapped` | String | 映射后分类(规则引擎输出) | | `order_id` | String | 订单号 | | `parent_order_id` | String | 父链路号(用于链路合并) | | `note` | String | 备注 | | `raw_payload` | JSON | 原始记录快照(完整保留) | | `import_batch_id` | String | 导入批次 | | `status` | Enum | 待清洗 / 待导入 / 已导入 / 失败 | **标准化规则:** - 时间统一为本地标准时区(UTC+8) - 金额统一为 Decimal 高精度保存 - 正负号规则统一:独立 `direction` 字段 + 正金额值 - 交易类型统一到平台无关的业务枚举 ### 7.3 模块 C:去重与链路合并模块 这是本系统的**核心亮点**,负责识别重复流水与还原真实交易链路。 #### 7.3.1 去重目标 解决以下典型问题: - 同一账单文件被重复导入 - 同一交易在多个来源重复出现(如银行卡转支付宝同时出现在两方账单) - 同一文件中存在重复记录 #### 7.3.2 链路合并目标 解决以下典型问题: - 一笔真实消费对应多条流水(支付、优惠、退款、手续费) - 同一订单在不同平台产生镜像记录(如京东订单 + 微信支付流水) - 跨账户资金流动产生的两笔独立记录 #### 7.3.3 三层去重策略 采用"**基础去重 → 模糊去重 → 链路合并**"三层递进模型: **A. 基础去重(严格去重 — 精确匹配)** 基于以下唯一性组合进行绝对去重,确保同一份账单多次上传不会重复落库: - 来源平台 + 原始记录 ID(`source_platform` + `source_record_id`) - 文件哈希 + 行指纹 - 订单号 / 交易单号(若可信) **B. 模糊去重(相似去重 — 多因子评分)** 当缺少唯一 ID 时,使用以下组合进行评分匹配: - 时间窗(如 ±5 分钟,可配置) - 金额精准一致(考虑手续费设置极小金额容差) - 交易方向一致 - 对手方相似 - 订单号相同或相近 - 来源平台关联规则命中 > **多因子判定升级**:原始需求中提出"时间窗+金额双重校验"作为起点,实际应升级为**"时间窗 + 金额 + 方向 + 订单号 + 对手方 + 来源规则"的多因子判定机制**,以覆盖真实复杂场景。 **C. 链路合并(转账闭环)** 对跨账户资金流动与同一业务链路的记录进行聚合: - **典型场景**:银行卡支出 1000 元(流向支付宝),支付宝收入 1000 元 → 合并为一笔**内部转账(Transfer)**,源账户=银行卡,目标账户=支付宝 - **主交易 + 附属事件**:消费/收入主体 + 手续费、退款、优惠抵扣、汇率损耗 #### 7.3.4 置信度与人工干预 - 高置信度记录:自动合并 - 低置信度记录:标记为"疑似重复/疑似链路",进入人工确认队列 - 所有合并操作可回溯、可撤销 ### 7.4 模块 D:规则映射模块 负责将标准化交易映射到最终记账语义。 **规则映射内容:** | 映射类型 | 说明 | 示例 | |----------|------|------| | 分类映射 | 交易 → 预设分类 | "美团外卖" → 餐饮 | | 账户映射 | 来源 → 账户名 | 微信支付 → 微信零钱 | | 对手方映射 | 商户名标准化 | "饿了么-xxx店" → "饿了么" | | 标签映射 | 交易 → 标签 | 可标记为:报销、家庭、订阅、投资 | | Firefly III 字段映射 | 内部字段 → FF3 字段 | direction → type (withdrawal/deposit/transfer) | **规则配置能力:** - 支持基于正则、关键词、金额范围等条件的规则定义 - 支持规则优先级排序 - 规则命中结果可精确解释(每条交易展示命中的具体规则) - 支持规则模板库,预置常见映射 ### 7.5 模块 E:导入编排模块 负责将清洗后的数据导入 Firefly III 生态。 **模式 A:API 推送模式(优先)** - 通过 Webhook 或直接调用 Data Importer / Firefly III API - 自动发起导入任务 - "本地清洗完毕 → 自动触发 DataImporter 导入任务"的丝滑体验 - 可追踪返回结果 **模式 B:中间文件导出模式** - 生成完全符合 Data Importer 规范的标准 CSV / JSON - 用户手动导入 - 适合 API 不稳定或权限受限场景 **导入前校验:** - 必填字段完整性校验 - 金额/时间格式校验 - 账户映射完整性校验 - 重复导入拦截 **导入后反馈:** - 导入成功/失败数量统计 - 失败原因分类展示 - 失败记录可单独重试(无需整批重做) ### 7.6 模块 F:本地存储与审计模块 负责数据持久化与全链路可追溯性。 **SQLite 核心数据表:** | 表名 | 说明 | |------|------| | `source_files` | 原始文件表(文件名、哈希、来源、导入时间) | | `raw_records` | 原始解析记录表(原始数据快照) | | `transactions` | 标准交易表(统一模型) | | `dedup_relations` | 去重关系表(记录合并依据) | | `rules` | 规则配置表 | | `import_tasks` | 导入任务表 | | `import_results` | 导入结果表 | | `audit_logs` | 操作日志表 | **设计目标:** - 支持重跑:任意阶段可重新执行 - 支持审计:完整记录每条交易的处理全过程 - 支持回溯:任一交易可追溯到来源文件、来源平台、经过的规则处理链 --- ## 8. 核心用户场景 ### 场景 1:月度账单统一入账 用户每月从支付宝、微信、银行导出账单,批量上传后,系统自动清洗并去重,用户预览确认后一键导入 Firefly III。 ### 场景 2:跨平台订单去重 用户在京东下单,通过微信支付。京东账单与微信账单均包含该笔信息。系统识别为同一订单链路,仅保留主交易并记录来源关联。 ### 场景 3:跨账户转账闭环 用户从建行卡转入 1000 元到支付宝。银行账单显示"支出 1000",支付宝账单显示"收入 1000"。系统匹配时间窗 + 金额,将两笔记录合并为一笔内部转账。 ### 场景 4:交易所流水整理 用户导入币安和 ByBit 资金流水,系统将充提币、手续费、现货买卖拆分为统一的账务事件,并映射到投资类账户与标签。支持将 Crypto 交易折算为基础法币或保留原始币种。 ### 场景 5:导入失败快速修复 某次批量导入中 5 条记录因账户映射缺失而失败。用户在失败列表中查看原因,补充规则后仅重试这 5 条,无需重做整批。 --- ## 9. 功能优先级 ### P0 — 必须有(MVP 核心) | # | 功能 | |---|------| | 1 | 文件上传与批量导入 | | 2 | 来源类型识别/选择 | | 3 | 多来源解析器框架(插件化) | | 4 | 统一交易模型 | | 5 | 本地 SQLite 持久化 | | 6 | 基础去重(严格去重) | | 7 | 链路合并(转账闭环) | | 8 | 基础规则映射(分类/账户) | | 9 | 导入预览与确认 | | 10 | API / 文件两种导入方式 | | 11 | 导入日志与失败重试 | ### P1 — 应该有 | # | 功能 | |---|------| | 1 | 模糊去重(多因子评分) | | 2 | 规则模板库 | | 3 | 商户别名归一化 | | 4 | 用户可配置时间窗与去重阈值 | | 5 | 导入批次管理 | | 6 | 手动合并/手动拆分疑似交易链路 | | 7 | 标签映射 | ### P2 — 可以有 | # | 功能 | |---|------| | 1 | 自动来源识别增强(智能推断文件类型) | | 2 | 可视化规则调试 | | 3 | 简易统计报表(导入概览、分类占比) | | 4 | 多账本导入支持 | | 5 | 对账可视化(展示未匹配的"孤儿"转账记录) | | 6 | 加密货币多币种与法币折算 | --- ## 10. 产品信息架构 ### 10.1 一级模块 ``` ProjectMoneyX ├── 导入中心 # 文件上传、批次管理 ├── 数据清洗 # 解析结果、标准化预览 ├── 去重处理 # 重复记录、链路合并、人工确认 ├── 规则管理 # 分类/账户/标签/对手方规则配置 ├── 导入任务 # 导入执行、结果查看、失败重试 ├── 数据审计 # 全链路追溯、操作日志 └── 系统设置 # Firefly III 连接配置、时间窗参数等 ``` ### 10.2 关键页面 | 页面 | 说明 | |------|------| | 文件上传页 | 拖拽/选择文件,选择或自动识别来源类型 | | 导入批次详情页 | 展示批次内所有记录和处理状态 | | 清洗结果预览页 | 展示标准化后的交易列表,支持逐条查看映射详情 | | 重复记录处理页 | 展示疑似重复/链路合并记录,支持人工确认或拒绝 | | 规则配置页 | 可视化配置分类、账户、标签映射规则 | | 导入结果页 | 展示导入成功/失败统计,失败可重试 | | 审计追溯页 | 查看任一交易的完整处理链路 | --- ## 11. 关键交互原则 1. **先预览,后导入**:任何清洗结果必须允许用户确认后再执行导入 2. **规则可解释**:每条交易应展示命中的具体规则和分类依据 3. **重复可回溯**:被判定重复/合并的记录必须可查看判定依据与原始数据 4. **失败可重试**:导入失败不应要求整批重做,支持单条/选择性重试 5. **操作可逆**:合并、分类等操作均可撤销回滚 --- ## 12. 非功能需求 ### 12.1 安全与隐私 - **本地优先原则**:鉴于财务数据的极度敏感性,完全采用本地化部署(Docker / 本地命令行 / 本地 Web UI) - SQLite 数据库仅存在于本地,敏感账单数据默认不上传云端 - API Token 加密存储 - 操作日志不泄露敏感字段 ### 12.2 性能 - 单次导入 1 万条记录应可完成解析与清洗 - 去重计算应在合理时间内完成(建议 30 秒内完成主流程) ### 12.3 可维护性 - **插件化架构**:解析器(Parser)设计为独立模块,银行/平台格式变更时只需更新对应 Parser,无需重构主程序 - **规则引擎可扩展**:支持新增规则类型和匹配条件 - **去重策略可配置**:时间窗、金额容差、置信度阈值均可配置 ### 12.4 可追溯性 - 任一导入结果必须可追溯至原始文件与原始记录 - 任一规则命中必须可解释 - 任一合并操作必须记录判定依据 --- ## 13. 版本规划 ### V1.0(MVP) - 支付宝 / 微信 / 2 家银行账单支持 - 文件导入、解析、标准化 - SQLite 持久化 - 基础去重(严格去重) - 基础规则映射(分类/账户) - Data Importer API 导入 + CSV 导出 - 导入预览与确认 ### V1.5 - 美团 / 京东账单支持 - 链路合并增强(转账闭环 + 订单链路聚合) - 模糊去重(多因子评分) - 批次管理与失败重试 - 手动修正与确认流程 - 商户别名归一化 ### V2.0 - 币安 / ByBit 交易所流水适配 - 高级规则系统(模板库 + 可视化调试) - 对账可视化(孤儿记录展示 + 手动干预) - 简易统计报表(导入概览、分类占比) - 多账本 / 多环境支持 - 加密货币多币种管理(法币折算 / 多货币对接) --- ## 14. 风险与应对策略 | # | 风险 | 影响 | 应对策略 | |---|------|------|----------| | 1 | 不同平台账单格式频繁变化 | 解析器失效 | 采用插件化解析器 + 版本化适配,格式变更只需更新对应 Parser | | 2 | 去重误判(误合并/漏合并) | 数据准确性受损 | 采用"严格+模糊"分层策略;低置信度记录进人工确认队列 | | 3 | 交易所流水语义复杂 | 解析困难 | V1 仅支持资金流水和基础现货,衍生品/复杂划转后续扩展 | | 4 | 过度依赖 Data Importer | 耦合风险 | 核心规则与标准化能力沉淀在本地,导入器仅作为输出目标之一 | | 5 | 加密货币汇率波动 | 金额折算不稳定 | 支持保留原始币种,汇率折算为可选项,对接 Firefly III 多货币系统 | --- ## 15. 参考项目 | 项目 | 说明 | |------|------| | [double-entry-generator](https://github.com/deb-sig/double-entry-generator) | 复式记账生成工具,核心参考项目 | | [Firefly III](https://github.com/firefly-iii/firefly-iii) | 目标对接的个人财务管理系统 | | [Data Importer](https://github.com/firefly-iii/data-importer) | Firefly III 的数据导入器 | | [Firefly III Docs](https://docs.firefly-iii.org/) | Firefly III 官方文档 | --- ## 16. 总结 ProjectMoneyX 不是一个"简单导入工具",而是一个面向 Firefly III 的**本地账单数据治理中台**。 其核心价值可以浓缩为: > 1. **汇聚多源账单** — 一站式接入支付平台、银行、生活服务、交易所 > 2. **统一交易语义** — 屏蔽平台差异,建立标准化交易模型 > 3. **智能去重合并** — 消除重复,还原真实交易链路与转账闭环 > 4. **本地规则沉淀** — 分类/账户/标签映射可长期积累、可解释、可迁移 > 5. **无缝对接导入** — 丝滑推送至 Firefly III / Data Importer **核心产品决策:** > - **规则映射以本地为主,Data Importer 为辅** > - **去重策略从"时间窗+金额"升级为多因子判定** > - **SQLite 不仅是缓存,更是清洗结果与审计链路的核心数据底座** > - **插件化架构确保可持续维护**