Product Requirements Document (PRD)
asset-light - 个人资产管理桌面应用
版本: 1.0.0 (MVP)
日期: 2025-12-20
状态: Validated
作者: PM Agent
关联文档: Product Brief
1. 概述
1.1 文档目的
本文档详细定义 asset-light MVP 版本的产品需求,将 Product Brief 中的愿景转化为可执行的功能规格,为后续的架构设计和开发实施提供明确指导。
1.2 产品定位
asset-light 是一款基于 Dioxus (Rust) 技术栈的个人资产管理桌面应用,核心价值主张:
让个人投资者能够系统化地管理资产配置,追踪配置偏离度,并获得清晰的收益归因分析。
1.3 目标用户
| 特征 | 描述 |
|---|---|
| 身份 | 个人投资者,具备一定理财知识 |
| 现状 | 使用表格工具管理资产,感到效率低下 |
| 痛点 | 无法追踪历史变化、无法分析收益来源、无法监控配置偏离 |
| 期望 | 快速盘点、偏离监控、收益分析、纪律执行 |
2. 功能需求
2.1 功能模块总览
asset-light MVP
├── F1. 资产盘点模块
├── F2. 配置方案模块
├── F3. 资产视图模块
└── F4. 收益分析模块
2.2 F1: 资产盘点模块
2.2.1 功能描述
提供结构化的资产录入和盘点能力,支持按分类管理资产条目,记录每次盘点的完整快照。
2.2.2 用户故事
| ID | 用户故事 | 优先级 |
|---|---|---|
| US-F1-01 | 作为用户,我希望能够新增一个资产条目(包含名称、类别、当前市值),以便记录我持有的资产 | P0 |
| US-F1-02 | 作为用户,我希望能够编辑已有资产条目的信息,以便修正录入错误或更新资产状态 | P0 |
| US-F1-03 | 作为用户,我希望能够删除不再持有的资产条目,以便保持资产列表的准确性 | P0 |
| US-F1-04 | 作为用户,我希望资产条目能够按类别(现金类/稳健类/进阶类)组织展示,以便快速定位和管理 | P0 |
| US-F1-05 | 作为用户,我希望能够执行一次"盘点"操作,批量更新所有资产的当前市值,并自动记录盘点时间戳 | P0 |
| US-F1-06 | 作为用户,我希望能够查看历史盘点记录列表,以便回顾资产变化轨迹 | P0 |
| US-F1-07 | 作为用户,我希望能够查看某次历史盘点的详细快照,以便了解当时的资产状态 | P1 |
| US-F1-08 | 作为用户,我希望能够自定义资产子类别(如将"进阶类"细分为"宽基指数"和"行业ETF"),以便更精细地管理资产 | P1 |
2.2.3 功能规格
FR-F1-01: 资产条目数据模型
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | UUID | 是 | 资产条目唯一标识 |
| name | String | 是 | 资产名称(如"余额宝"、"沪深300ETF") |
| category | Enum | 是 | 一级分类:Cash / Stable / Advanced |
| sub_category | String | 否 | 用户自定义子类别 |
| current_value | Decimal | 是 | 当前市值(单位:元) |
| notes | String | 否 | 备注信息 |
| created_at | DateTime | 是 | 创建时间 |
| updated_at | DateTime | 是 | 最后更新时间 |
FR-F1-02: 资产类别定义
| 类别 | 英文标识 | 描述 | 预设子类别 |
|---|---|---|---|
| 现金类 | Cash | 高流动性、低风险资产 | 活期存款、货币基金、定期存单、借出款项 |
| 稳健类 | Stable | 固定收益、中低风险资产 | 银行理财、债券基金、纯债基金 |
| 进阶类 | Advanced | 权益类、中高风险资产 | 宽基指数、行业ETF、主动基金、个股 |
FR-F1-03: 盘点快照数据模型
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | UUID | 是 | 盘点快照唯一标识 |
| snapshot_date | Date | 是 | 盘点日期 |
| created_at | DateTime | 是 | 快照创建时间 |
| total_value | Decimal | 是 | 资产总额 |
| items | Array | 是 | 资产条目快照列表 |
FR-F1-04: 盘点快照条目结构
| 字段 | 类型 | 说明 |
|---|---|---|
| asset_id | UUID | 关联的资产条目 ID |
| asset_name | String | 资产名称(快照时冗余存储) |
| category | Enum | 资产类别 |
| sub_category | String | 子类别 |
| value | Decimal | 盘点时的市值 |
2.2.4 业务规则
| 规则ID | 描述 |
|---|---|
| BR-F1-01 | 资产名称不可为空,最大长度 100 字符 |
| BR-F1-02 | 市值必须为非负数,精度为小数点后 2 位 |
| BR-F1-03 | 删除资产条目时,历史快照中的该条目数据保留(快照不可变) |
| BR-F1-04 | 每天最多允许创建 5 次盘点快照(防止误操作) |
| BR-F1-05 | 盘点时至少需要有 1 个资产条目存在 |
2.2.5 界面要求
UI-F1-01: 资产列表页
- 按类别分组展示所有资产条目
- 每个类别显示:类别名称、资产数量、类别总市值
- 每个资产条目显示:名称、子类别(如有)、当前市值
- 支持操作:新增资产、编辑资产、删除资产、发起盘点
- 类别折叠/展开支持
UI-F1-02: 资产编辑表单
- 模态框或侧边栏形式
- 字段:名称(输入框)、类别(下拉选择)、子类别(输入框/下拉)、市值(数字输入)、备注(文本域)
- 保存/取消按钮
- 实时验证反馈
UI-F1-03: 盘点流程
- 盘点按钮触发进入盘点模式
- 盘点模式下,资产列表变为可编辑状态,市值字段可直接修改
- 显示上次盘点市值作为参考
- 完成盘点按钮:保存快照并退出盘点模式
- 取消盘点按钮:放弃本次修改
UI-F1-04: 盘点历史页
- 时间线形式展示历史盘点记录
- 每条记录显示:盘点日期、资产总额、相比上次变化金额/百分比
- 点击可查看该快照的详细资产明细
2.3 F2: 配置方案模块
2.3.1 功能描述
支持用户定义多套目标资产配置方案,采用核心+卫星的层级结构,可切换当前激活的方案用于偏离度计算。
2.3.2 用户故事
| ID | 用户故事 | 优先级 |
|---|---|---|
| US-F2-01 | 作为用户,我希望能够创建一个配置方案,定义各资产类别的目标占比,以便作为资产配置的参照标准 | P0 |
| US-F2-02 | 作为用户,我希望能够编辑已有的配置方案,以便根据投资策略变化调整目标配置 | P0 |
| US-F2-03 | 作为用户,我希望能够删除不再使用的配置方案,以便保持方案列表简洁 | P1 |
| US-F2-04 | 作为用户,我希望能够将某个方案设为"当前激活",用于计算配置偏离度 | P0 |
| US-F2-05 | 作为用户,我希望配置方案能够支持两层结构(核心/卫星),以便实现更精细的配置管理 | P1 |
| US-F2-06 | 作为用户,我希望系统提供一个预设的"平衡型"配置方案作为起点,以便快速开始使用 | P1 |
2.3.3 功能规格
FR-F2-01: 配置方案数据模型
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | UUID | 是 | 方案唯一标识 |
| name | String | 是 | 方案名称(如"保守型"、"进取型") |
| description | String | 否 | 方案描述 |
| is_active | Boolean | 是 | 是否为当前激活方案 |
| allocations | Array | 是 | 配置项列表 |
| created_at | DateTime | 是 | 创建时间 |
| updated_at | DateTime | 是 | 更新时间 |
FR-F2-02: 配置项结构(MVP 简化版)
| 字段 | 类型 | 说明 |
|---|---|---|
| category | Enum | 资产类别:Cash / Stable / Advanced |
| target_percentage | Decimal | 目标占比(0-100) |
| min_percentage | Decimal | 最低占比(可选,用于偏离提示) |
| max_percentage | Decimal | 最高占比(可选,用于偏离提示) |
FR-F2-03: 配置项结构(扩展版 - 支持子类别)
| 字段 | 类型 | 说明 |
|---|---|---|
| category | Enum | 资产类别 |
| layer | Enum | 层级:Core(核心)/ Satellite(卫星) |
| sub_category | String | 子类别(可选) |
| target_percentage | Decimal | 目标占比 |
| tolerance | Decimal | 容忍偏离度(默认 5%) |
2.3.4 业务规则
| 规则ID | 描述 |
|---|---|
| BR-F2-01 | 方案名称不可为空,最大长度 50 字符 |
| BR-F2-02 | 同一方案内,所有配置项的 target_percentage 之和必须等于 100% |
| BR-F2-03 | 系统始终有且仅有一个激活方案 |
| BR-F2-04 | 不能删除当前激活的方案(需先切换激活方案) |
| BR-F2-05 | 系统至少保留一个配置方案 |
2.3.5 界面要求
UI-F2-01: 配置方案列表页
- 展示所有配置方案,当前激活方案高亮显示
- 每个方案显示:名称、描述摘要、激活状态
- 支持操作:新建方案、编辑方案、删除方案、激活方案
UI-F2-02: 配置方案编辑器
- 方案基础信息:名称、描述
- 配置项可视化编辑:
- 使用滑块或输入框调整各类别占比
- 实时显示占比总和(必须 = 100%)
- 饼图预览目标配置
- 保存时自动校验规则
UI-F2-03: 预设方案模板
MVP 提供以下预设模板供用户快速创建:
| 模板名称 | Cash | Stable | Advanced |
|---|---|---|---|
| 保守型 | 30% | 50% | 20% |
| 平衡型 | 20% | 40% | 40% |
| 进取型 | 10% | 20% | 70% |
2.4 F3: 资产视图模块
2.4.1 功能描述
提供资产的全局视图,展示当前资产配置与目标配置的对比,可视化偏离情况,帮助用户快速了解资产健康状态。
2.4.2 用户故事
| ID | 用户故事 | 优先级 |
|---|---|---|
| US-F3-01 | 作为用户,我希望在首页看到资产总额和各类别的分布情况,以便快速了解资产全貌 | P0 |
| US-F3-02 | 作为用户,我希望能够直观对比当前配置与目标配置的差异,以便判断是否需要调整 | P0 |
| US-F3-03 | 作为用户,我希望当某类别偏离目标超过阈值时,系统能够高亮提示,以便及时关注 | P0 |
| US-F3-04 | 作为用户,我希望看到各类别的偏离百分比(如"+5%"、"-3%"),以便量化偏离程度 | P0 |
| US-F3-05 | 作为用户,我希望能够一键查看再平衡所需的资金调整方向,以便规划调仓 | P2 |
2.4.3 功能规格
FR-F3-01: 资产总览数据
| 指标 | 计算方式 |
|---|---|
| 资产总额 | 所有资产条目 current_value 之和 |
| 类别市值 | 该类别下所有资产条目 current_value 之和 |
| 类别占比 | 类别市值 / 资产总额 × 100% |
| 偏离度 | 当前占比 - 目标占比 |
| 偏离状态 | 超出容忍阈值则标记为"偏离" |
FR-F3-02: 偏离度计算逻辑
deviation = current_percentage - target_percentage
if abs(deviation) > tolerance:
status = "deviating" (偏离)
else:
status = "normal" (正常)
if deviation > 0:
direction = "overweight" (超配)
else:
direction = "underweight" (低配)
2.4.4 界面要求
UI-F3-01: 资产总览页(首页)
布局结构:
┌─────────────────────────────────────────────────────────────┐
│ 资产总额 │
│ ¥ 1,234,567.89 上次盘点: 2025-12-15│
├─────────────────────────────────────────────────────────────┤
│ │
│ [饼图: 当前配置] [饼图: 目标配置] │
│ │
├─────────────────────────────────────────────────────────────┤
│ 类别配置对比 │
│ ┌──────────┬──────────┬──────────┬──────────┬───────────┐ │
│ │ 类别 │ 当前占比 │ 目标占比 │ 偏离度 │ 状态 │ │
│ ├──────────┼──────────┼──────────┼──────────┼───────────┤ │
│ │ 现金类 │ 25% │ 20% │ +5% │ ⚠️ 超配 │ │
│ │ 稳健类 │ 38% │ 40% │ -2% │ ✓ 正常 │ │
│ │ 进阶类 │ 37% │ 40% │ -3% │ ✓ 正常 │ │
│ └──────────┴──────────┴──────────┴──────────┴───────────┘ │
└─────────────────────────────────────────────────────────────┘
UI-F3-02: 偏离提示样式
| 偏离状态 | 视觉表现 |
|---|---|
| 正常( | 偏离度 |
| 轻度偏离( | 偏离度 |
| 严重偏离( | 偏离度 |
UI-F3-03: 配置对比可视化
- 双饼图并列展示:左侧当前配置,右侧目标配置
- 同类别使用相同颜色,便于对比
- 鼠标悬停显示具体金额和百分比
2.5 F4: 收益分析模块
2.5.1 功能描述
基于盘点快照数据,计算和展示资产收益情况,支持按时间周期和类别维度分析收益来源。
2.5.2 用户故事
| ID | 用户故事 | 优先级 |
|---|---|---|
| US-F4-01 | 作为用户,我希望看到选定时间段内的资产总收益(金额和百分比),以便了解整体收益情况 | P0 |
| US-F4-02 | 作为用户,我希望能够按季度/年度查看收益,以便对比不同周期的表现 | P0 |
| US-F4-03 | 作为用户,我希望看到各资产类别的收益贡献,以便了解哪些类别在产生收益 | P0 |
| US-F4-04 | 作为用户,我希望看到资产总额的历史变化趋势图,以便直观感受资产增长轨迹 | P1 |
| US-F4-05 | 作为用户,我希望能够选择任意两个盘点时间点进行收益对比,以便灵活分析 | P2 |
2.5.3 功能规格
FR-F4-01: 收益计算逻辑(快照模式简化版)
# 时间段收益计算
period_return = end_snapshot.total_value - start_snapshot.total_value
period_return_rate = period_return / start_snapshot.total_value × 100%
# 类别收益计算
category_return = end_category_value - start_category_value
category_contribution = category_return / period_return × 100% # 收益贡献度
注意: MVP 采用快照模式,不追踪资金流入/流出,因此计算的是"市值变动"而非"真实收益率"。
FR-F4-02: 时间周期定义
| 周期 | 定义 |
|---|---|
| 季度 | 自然季度(Q1: 1-3月, Q2: 4-6月, Q3: 7-9月, Q4: 10-12月) |
| 年度 | 自然年(1月1日 - 12月31日) |
| 自定义 | 用户选择的起止日期 |
FR-F4-03: 收益分析数据结构
| 字段 | 类型 | 说明 |
|---|---|---|
| period | Object | 时间段 {start_date, end_date} |
| start_value | Decimal | 期初总市值 |
| end_value | Decimal | 期末总市值 |
| absolute_return | Decimal | 绝对收益金额 |
| return_rate | Decimal | 收益率(%) |
| category_breakdown | Array | 各类别收益明细 |
FR-F4-04: 类别收益明细结构
| 字段 | 类型 | 说明 |
|---|---|---|
| category | Enum | 资产类别 |
| start_value | Decimal | 期初市值 |
| end_value | Decimal | 期末市值 |
| absolute_return | Decimal | 绝对收益 |
| contribution_rate | Decimal | 收益贡献度(%) |
2.5.4 业务规则
| 规则ID | 描述 |
|---|---|
| BR-F4-01 | 至少需要 2 个盘点快照才能计算收益 |
| BR-F4-02 | 期初市值为 0 时,收益率显示为"N/A" |
| BR-F4-03 | 季度/年度收益使用该周期内最早和最晚的快照计算 |
| BR-F4-04 | 若某周期内无快照数据,该周期收益显示为"暂无数据" |
2.5.5 界面要求
UI-F4-01: 收益分析页
布局结构:
┌─────────────────────────────────────────────────────────────┐
│ 周期选择器: [季度 ▾] [2025年 ▾] [Q4 ▾] [自定义日期] │
├─────────────────────────────────────────────────────────────┤
│ 本期收益概览 │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 收益金额 │ │ 收益率 │ │
│ │ +¥ 12,345.67 │ │ +3.2% │ │
│ │ (期初 → 期末) │ │ │ │
│ └─────────────────┘ └─────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 收益归因分析 │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │ 类别 │ 收益金额 │ 收益率 │ 贡献度 │ │
│ ├──────────┼──────────┼──────────┼──────────┤ │
│ │ 现金类 │ +¥ 1,234 │ +1.5% │ 10% │ │
│ │ 稳健类 │ +¥ 3,456 │ +2.8% │ 28% │ │
│ │ 进阶类 │ +¥ 7,655 │ +5.2% │ 62% │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 资产趋势图 │
│ [折线图: 历史盘点时间点的资产总额变化] │
│ │
└─────────────────────────────────────────────────────────────┘
UI-F4-02: 收益归因可视化
- 横向条形图展示各类别的收益贡献
- 正收益绿色,负收益红色
- 支持点击展开查看该类别下各资产的收益明细
UI-F4-03: 资产趋势图
- X 轴:盘点日期时间线
- Y 轴:资产总额
- 数据点标注具体金额
- 支持缩放和时间范围选择
3. 非功能需求
3.1 性能需求
| ID | 需求 | 指标 |
|---|---|---|
| NFR-P-01 | 应用启动时间 | < 2 秒(冷启动) |
| NFR-P-02 | 页面切换响应 | < 200ms |
| NFR-P-03 | 盘点保存时间 | < 500ms(100 个资产条目以内) |
| NFR-P-04 | 数据加载时间 | < 1s(1000 条历史快照) |
3.2 可用性需求
| ID | 需求 | 说明 |
|---|---|---|
| NFR-U-01 | 首次使用引导 | 提供简洁的功能引导,帮助用户快速上手 |
| NFR-U-02 | 键盘快捷键 | 支持常用操作的快捷键(如 Cmd+N 新增资产) |
| NFR-U-03 | 操作反馈 | 所有操作提供明确的成功/失败反馈 |
| NFR-U-04 | 数据校验 | 输入时实时校验,防止无效数据 |
| NFR-U-05 | 确认机制 | 删除等破坏性操作需二次确认 |
3.3 数据需求
| ID | 需求 | 说明 |
|---|---|---|
| NFR-D-01 | 本地存储 | 所有数据存储在本地,不依赖网络 |
| NFR-D-02 | 数据格式 | SQLite 数据库或 JSON 文件 |
| NFR-D-03 | 数据备份 | 支持手动导出数据文件 |
| NFR-D-04 | 数据完整性 | 操作失败时保证数据不被损坏 |
3.4 安全需求
| ID | 需求 | 说明 |
|---|---|---|
| NFR-S-01 | 隐私保护 | 数据仅存储在用户本地设备 |
| NFR-S-02 | 无网络传输 | MVP 版本不进行任何网络通信 |
3.5 兼容性需求
| ID | 需求 | 说明 |
|---|---|---|
| NFR-C-01 | macOS 支持 | 支持 macOS 12.0+ |
| NFR-C-02 | 分辨率适配 | 支持 1280×720 及以上分辨率 |
| NFR-C-03 | 深色模式 | 支持系统深色模式(P1) |
4. 信息架构
4.1 页面结构
asset-light
├── 首页(资产总览)
│ ├── 资产总额卡片
│ ├── 配置对比图表
│ └── 偏离状态列表
│
├── 资产管理
│ ├── 资产列表(按类别分组)
│ ├── 新增/编辑资产表单
│ └── 盘点模式
│
├── 盘点历史
│ ├── 历史时间线
│ └── 快照详情
│
├── 配置方案
│ ├── 方案列表
│ └── 方案编辑器
│
└── 收益分析
├── 周期选择器
├── 收益概览
├── 收益归因表
└── 资产趋势图
4.2 导航设计
- 采用侧边栏导航
- 一级导航项:首页、资产管理、盘点历史、配置方案、收益分析
- 当前激活项高亮显示
- 支持键盘导航
5. 数据模型概览
5.1 核心实体关系
┌─────────────┐ ┌─────────────────┐
│ Asset │◄────│ SnapshotItem │
│ (资产条目) │ │ (快照明细) │
└─────────────┘ └────────┬────────┘
│
▼
┌─────────────────┐
│ Snapshot │
│ (盘点快照) │
└─────────────────┘
┌─────────────┐ ┌─────────────────┐
│ AllocationPlan │◄────│ Allocation │
│ (配置方案) │ │ (配置项) │
└─────────────┘ └─────────────────┘
5.2 数据量估算
| 实体 | 预估数量(个人用户) |
|---|---|
| 资产条目 | 10 - 50 个 |
| 盘点快照 | 50 - 200 条(5年使用) |
| 配置方案 | 2 - 5 套 |
6. MVP 成功标准
6.1 功能完成标准
| 标准 | 验收条件 |
|---|---|
| 资产盘点 | 能够在 3 分钟内完成 10 个资产条目的盘点 |
| 配置管理 | 能够创建、编辑、切换至少 2 套配置方案 |
| 偏离监控 | 能够清晰看到当前配置与目标配置的偏离情况 |
| 收益分析 | 能够查看季度/年度收益率及各类别收益贡献 |
6.2 技术完成标准
| 标准 | 验收条件 |
|---|---|
| 应用稳定性 | 无崩溃或数据丢失 |
| 性能达标 | 满足 3.1 节性能指标 |
| 代码质量 | Clippy 无警告,代码结构清晰 |
6.3 用户体验标准
| 标准 | 验收条件 |
|---|---|
| 易用性 | 无需文档即可完成基本操作 |
| 视觉一致性 | UI 风格统一,无明显违和感 |
| 操作反馈 | 所有操作有明确的状态反馈 |
7. 范围外事项(Out of Scope)
以下功能明确不在 MVP 范围内:
| 功能 | 延后原因 | 计划版本 |
|---|---|---|
| 自动获取净值 | 需对接外部 API | Phase 3 |
| 分红/调仓记录 | 增加数据模型复杂度 | Phase 2 |
| 具体调仓建议 | 需要更复杂计算逻辑 | Phase 3 |
| 月度收益分析 | MVP 聚焦季度/年度 | Phase 2 |
| 多端同步 | 本地优先 | Phase 4 |
| 数据导入/导出 | 可作为独立迭代 | Phase 4 |
| Windows/Linux 支持 | macOS 优先 | TBD |
8. 开放问题
| 问题 | 状态 | 备选方案 |
|---|---|---|
| 数据存储格式选择 SQLite vs JSON? | 待定 | 倾向 SQLite(查询能力更强) |
| 是否支持多币种? | 决定:MVP 仅支持人民币 | 后续版本考虑 |
| 深色模式是否为 MVP 必需? | 待定 | 建议作为 P1 功能 |
| 子类别层级是否支持嵌套? | 决定:MVP 仅支持一层子类别 | 后续可扩展 |
9. 术语表
| 术语 | 定义 |
|---|---|
| 快照式盘点 | 每次记录资产当前市值的完整状态,不追踪中间变动 |
| 配置偏离度 | 当前资产配置与目标配置的百分比差异 |
| 核心资产 | 追求稳定和安全的资产,通常占比 70-80% |
| 卫星资产 | 追求更高收益、容忍更高波动的资产,通常占比 20-30% |
| 再平衡 | 调整资产配置使其回归目标比例的操作 |
| 收益归因 | 分析各资产/类别对整体收益的贡献程度 |
10. 修订历史
| 版本 | 日期 | 作者 | 变更说明 |
|---|---|---|---|
| 1.0.0 | 2025-12-20 | PM Agent | 初始版本,定义 MVP 需求 |
This PRD transforms the Product Brief into detailed, implementable requirements.
Next: Architecture design workflow will define the technical solution based on these requirements.