# 产品需求文档 (PRD):ProjectMoneyX ## 1. 产品概述 **ProjectMoneyX** 是一款专为 FireFlyIII 设计的个人财务自动化数据清洗与导入中间件。它通过统一的数据标准,将分散在支付平台、银行、生活服务及加密货币交易所的零散账单,转化为结构化的财务数据,并无缝对接至 FireFlyIII 的 DataImporter,实现全资产的自动化流转与管理。 ## 2. 核心痛点与解决思路 * **痛点**:多平台账单格式各异,手动整理耗时且易错;跨账户转账(如从建行转入支付宝)容易被重复记账(一笔支出,一笔收入)。 * **解决思路 (核心价值)**: * **标准化**:将千奇百怪的源数据映射为统一的内部数据模型(Standard Schema)。 * **智能化去重与合并**:识别跨账户转账,将单边记录闭环为完整的复式记账流(Double-Entry Journal)。 * **无缝对接**:作为前置清洗层,让 FireFlyIII 专注财务分析,而非脏数据处理。 ## 3. 产品架构与数据流转规则 ### 3.1 规则映射策略:两段式分离(解答您的疑问) 强烈建议**不要**在 ProjectMoneyX 中做业务类的分类映射(如“买菜”映射到“餐饮”),这会与 FireFlyIII 的 Rule Engine 功能重叠且难以维护。 * **第一阶段(ProjectMoneyX 负责 - 数据对齐)**:负责**字段级映射**。将各平台的异构字段(如支付宝的“交易对方”、银行的“附言”)统一映射为标准数据字段(Date, Amount, Payee, Description, Source Account)。 * **第二阶段(FireFlyIII 负责 - 业务分类)**:利用 FireFlyIII 本身的规则引擎,基于整理好的 Payee 和 Description,自动分配 Budget、Category 和 Tags。 ### 3.2 数据流转拓扑 `多源账单导入` -> `解析器 (Parser)` -> `标准化入库 (SQLite)` -> `链路合并与去重 (Deduplication)` -> `格式化输出 (API)` -> `DataImporter / FireFlyIII` ## 4. 核心功能需求 ### 4.1 多源数据接入 (Data Ingestion) 系统需支持通过插件化/模块化的方式接入各类账单文件(CSV/Excel/API): * **支付平台**:支付宝(Alipay)、微信支付(WeChat Pay)。 * **传统银行**:建设银行、工商银行、中信银行、汇丰银行(需考虑不同语言/地区的账单格式兼容)。 * **电商/生活平台**:美团、京东(主要用于细化支付平台的笼统账单,例如将微信支付的“美团订单”替换为具体的“外卖-商家名”)。 * **加密货币**:Binance、ByBit(需支持将 Crypto 交易折算为基础法币,或保留原始币种对接 FireFlyIII 的多货币系统,需考虑手续费剥离)。 ### 4.2 本地数据清洗与存储 (Cleanse & Store) * **统一数据模型**:所有解析后的数据写入本地 SQLite。核心字段应包含:`Original_ID`, `Platform`, `Transaction_Time`, `Amount`, `Currency`, `Transaction_Type` (入账/出账), `Opposite_Party` (交易对手), `Remark`。 * **数据幂等性校验**:基于平台提供的唯一交易流水号(Original_ID)进行绝对去重,确保同一份账单多次上传不会重复落库。 ### 4.3 智能去重与链路合并 (Deduplication & Linkage) 这是本系统的**核心亮点**。针对跨账户资金流动,进行模糊匹配与链路合并: * **时间与金额双重校验(Time-Amount Window)**: * 设置可配的时间容差(如 $\pm 5$ 分钟)。 * 金额精准匹配(考虑可能存在的手续费,可设置极小金额容差)。 * **转账链路闭环**: * *场景*:银行卡支出 1000 元(流向支付宝),支付宝收入 1000 元。 * *动作*:系统在 SQLite 中扫描到这两笔符合“时间窗+金额”匹配的相反流水,将其从“两笔独立的支出和收入”合并为“一笔内部转账 (Transfer)”,源账户为银行卡,目标账户为支付宝。 ### 4.4 自动化导出与推送 (Export & Integration) * **标准 CSV 生成**:基于 SQLite 中已清洗且合并的数据,生成完全符合 FireFlyIII DataImporter 规范的 CSV 文件。 * **API 推送集成**:支持通过 Webhook 或直接调用 DataImporter 的 API 接口,实现“本地清洗完毕 -> 自动触发 DataImporter 导入任务”的丝滑体验。 ## 5. 非功能需求与产品设计优化建议 * **本地优先原则**:鉴于财务数据的极度敏感性,项目应完全采用本地化部署(Docker/本地命令行),SQLite 数据库仅存在于本地。 * **插件化架构**:银行和平台的账单格式随时可能变更。建议在代码架构上将“解析器(Parser)”设计为独立模块。未来当某银行格式改变时,只需更新对应 Parser 脚本,而无需重构主程序。 * **对账可视化(可选进阶)**:提供一个简单的本地 Web UI 页面,展示“未成功匹配的孤儿转账记录”,允许用户手动干预合并。