ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LifeOS 收入数据建模实战:从 INCOME.md 模板到 Pulse Finance 收入看板

2026/9/14 2:11:54 拓冰建站 浏览量
LifeOS 收入数据建模实战:从 INCOME.md 模板到 Pulse Finance 收入看板 LifeOS 收入数据建模实战从 INCOME.md 模板到 Pulse Finance 收入看板【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS导读LifeOS 将个人财务语境以结构化 Markdown 文件的形式存放在USER/FINANCES/目录中而INCOME.md正是其中专门负责收入侧数据的核心文件。本文以该文件为骨架逐字段拆解四种收入来源的模板结构讲解如何通过/interview finances会话或直接编辑完成数据填充并结合schema.yaml的字段枚举约束与 Pulse Observability 模块中finances页面的真实消费链路说明这些数据最终如何演变为月度收入汇总、MRR 指标、桑基图与收支趋势图。读完本文你将掌握在 LifeOS 中建模、校验并可视化个人收入全貌的完整方法。一、INCOME.md 在 LifeOS 财务数据层中的定位LifeOS 的私有用户数据树USER/中FINANCES 目录 是个人财务语境的唯一事实来源。LifeOS 会读取这些文件来驱动 Pulse 的 Finance 看板、在日常简报daily brief中浮现待缴义务并基于真实私有数据回答关于你资金状况的问题。该目录内部分工明确文件职责FINANCES.md顶层概览净资产快照、月度现金流、当前关注点INCOME.md收入来源、发放频率、预期金额本文主角EXPENSES.md周期性支出类别与预算INVESTMENTS.md投资账户与资产配置ACCOUNTS.md银行、信用卡、券商账户只允许末四位禁止完整账号GOALS.md带目标金额与截止日期的财务目标TAXES.md税务概览、预估季度税、需追踪的抵扣项obligations.yaml周期性账单订阅、保险、贷款vendors.yaml已知的收付款对手方schema.yaml财务数据的结构定义校验参照其中 INCOME.md 的定义非常清晰Every source of money coming in.一切流入资金的来源。Pulse 基于它完成三件核心工作计算月度收入compute monthly income——把各来源按频率折算成月度口径识别缺口identify gaps——对比预期收入与账单、支出暴露现金流风险与账单流水对账reconcile against deposits seen in account statements——把ACCOUNTS.md与银行对账单中出现的入账与收入来源进行匹配验证。文件的 frontmatter 标注了provenance: template顶部注释也明确说明这是一个 SAMPLE TEMPLATE真实数据需通过/interview会话或手动编辑替换占位符后Pulse Finance 看板才会开始填充真实数值。二、Active Sources四种收入来源模板逐字段拆解INCOME.md的核心章节是## Active Sources活跃收入来源模板内置了四个代表性样本覆盖了从工薪、合同到产品订阅、投资分红的完整场景。值得注意的是这些字段不是自由文本schema.yaml对它们有严格的类型与枚举约束——保持字段名不变是 Pulse 正确读取的前提。2.1 Sample Source 1 — 工资W-2 雇佣- **Type:** W-2 employment (sample) - **Payer:** Sample Employer Inc. - **Frequency:** semi-monthly (sample) - **Gross per period:** $X,XXX - **Net per period:** $X,XXX - **Annual gross (expected):** $X,XXX - **Deposit account:** Sample Bank Checking (...XXXX) - **Started:** YYYY-MM-DD (sample) - **Notes:** Sample notes about this income source.对应 schema.yaml 中income_source对象required: [name, type, payer, frequency]。其中type的合法枚举值为w2 / 1099 / subscription / dividend / interest / royalty / rental / otherfrequency的合法枚举值为weekly / biweekly / semi-monthly / monthly / quarterly / annual / project-based / irregular。工资场景下gross_per_period每期税前与net_per_period每期税后的差值即代扣税额annual_gross用于全年预期校验。2.2 Sample Source 2 — 咨询 / 1099 合同- **Type:** 1099 contract (sample) - **Payer:** Sample Client LLC - **Frequency:** project-based (sample) - **Per-engagement amount:** $X,XXX - **YTD received:** $X,XXX - **Deposit account:** Sample Bank Business Checking (...XXXX) - **Notes:** Sample notes — e.g., quarterly estimated tax implications.1099 收入的特点是按项目结算、金额不固定因此模板提供了Per-engagement amount单次合作金额与YTD received年初至今累计到账两个口径并在 Notes 中提示季度预估税quarterly estimated tax影响——这与其姐妹文件 TAXES.md 的quarterly_estimates结构相呼应。2.3 Sample Source 3 — 订阅制产品收入SaaS / 自有产品- **Type:** SaaS / product income (sample) - **Source:** Sample Platform (e.g., your own product) - **Frequency:** monthly (sample) - **Current MRR:** $X,XXX - **Trend (last 90 days):** sample direction - **Deposit account:** Sample Payment Processor → Sample Bank Business Checking - **Notes:** Sample notes.这是模板中唯一带有MRR月度经常性收入字段的来源类型且Deposit account使用Sample Payment Processor → Sample Bank Business Checking的流向链写法体现了收款工具 → 最终入账账户的资金链路。订阅/分红类收入直接对接到看板上的 MRR 指标见第四节。2.4 Sample Source 4 — 投资 / 分红收入- **Type:** dividend / interest (sample) - **Source:** Sample Brokerage holdings - **Frequency:** quarterly (sample) - **Average per period:** $X - **Notes:** Sample notes — taxable vs. tax-advantaged.分红/利息收入按季度发生模板用Average per period每期平均额平滑波动Notes 提示区分应税taxable与税收优惠tax-advantaged账户——后者对应schema.yaml中investment_account.account_type的taxable / roth_ira / 401k / hsa / 529等枚举。2.5 Expected Monthly Total 与 Inactive / Past Sources## Expected Monthly Total - **Expected monthly income (all sources):** $X,XXX - **Variability:** sample description (e.g., stable ±X%) ## Inactive / Past Sources - Sample past employer — ended YYYY-MM-DD - Sample past client — ended YYYY-MM-DDExpected Monthly Total是收入侧的关键汇总值它把所有来源按频率折算为月度口径后求和Variability则描述收入的稳定性如 stable ±X%为预算与支出侧提供置信度。Inactive / Past Sources记录已结束的来源对应schema.yaml中ended日期字段避免历史收入被误计入当前现金流同时保留审计追溯能力。三、两条数据填充路径与占位符规范FINANCES 目录的 README 明确给出两条等价的填充路径运行财务访谈/interview finances会以对话形式逐文件引导你填写并把结果写回USER/FINANCES/目录直接编辑文件打开每个文件把$X、Sample Bank、Sample Vendor等占位符替换为真实值保持整体结构不变因为 Pulse depends on the field namesPulse 依赖字段名。模板占位符遵循统一约定便于机器识别与校验占位符含义$X任意美元金额$X,XXX较大金额千位分隔$X.XX精确到分的金额Sample Bank/Sample Vendor/Sample Account真实机构/商户名XXXX账户或卡号末四位schema.yaml底部的validation规则进一步收紧了写入边界这五条规则同样适用于INCOME.md的所有字段所有金额字段必须是字符串而非数字以便 onboarding 阶段允许$X,XXX这类占位符存在last_4字段必须恰好 4 个字符数字或X占位符日期必须为 ISO 8601YYYY-MM-DDcategory与枚举字段必须与允许值精确匹配任何地方不得出现完整账号只能使用末四位。四、隐私边界为什么收入数据只存在于本地 USER 树FINANCES 目录属于 LifeOS 的私有 USER 树永远不会被打包进公开的 LifeOS 发布版。README 的提醒非常直白Treat it like your password manager像对待密码管理器一样对待它——真实数字写在这里但它只停留在你的机器上。这也解释了为什么仓库中随附的 INCOME.md 全是占位符模板必须安全地随仓库发布真实数据由用户在本机填充。在 Pulse 看板侧同样的隐私原则通过前端渲染体现finances页面中所有金额元素都带data-sensitive标记页面顶部明确标注 Private. Toggle Observer mode to blur.私有数据可切换观察者模式模糊显示金额数字在 Observer 模式下会被遮蔽防止共享屏幕时泄露财务信息。五、数据如何驱动 Pulse Finance 收入看板源码级消费链路INCOME.md的数据并不是静态文本而是通过 Pulse 的 Observability 模块进入可视化层。以 finances 页面 的实现为例前端通过fetch(/api/life/finances)拉取 v2 信封数据其中与收入直接相关的结构为income?: { streams: Stream[]; // 收入流列表label annual 年化 annual: number; // 年度总收入 monthly: number; // 月度总收入 mrr_monthly: number; // 月度经常性收入 mrr_annual: number; // MRR 年化 };这份数据在IncomeTab中被渲染为两大区块IncomeHero 收入总览卡大字号展示Total Annual Income年度总收入与monthly月度下方四个 KPI 图块分别为Monthly Recurring月经常性收入、MRR AnnualizedMRR 年化、Streams收入流数量非敏感数据不脱敏与Monthly Income。可见INCOME.md中订阅类来源的Current MRR与Trend字段正是 MRR 两个指标的数据来源。Income Streams 收入流列表StreamCard逐条渲染每个收入来源展示年化金额与折算后的annual / 12月度值并按标签自动匹配图标consulting → Briefcase、product → Globe、course → BookOpen 等。此外FinancesSankey组件把income.streams作为桑基图左侧节点汇聚为 Gross Income 池后分流到 Expenses 与 Net直观呈现收入 → 支出 → 净结余的资金流向TrendChart则绘制Income vs Expenses — 12 Month Trend折线图income 为绿色系var(--money)页面同时提示 Flat baseline until Phase 2 collectors accumulate historical monthly data——即历史月度数据需要 Phase 2 收集器逐步积累后趋势线才会丰满起来。从observability.ts的路由清单文件头部注释可以看到该模块不创建独立 HTTP 服务而是由父进程pulse.ts调用handleObservabilityRequest()分发/api/*路由/api/life/finances即由 Pulse 守护进程在本地提供保证了财务数据不经过任何外部服务。六、与其他财务文件的协同收入侧到支出侧的整体闭环INCOME.md不是孤立的LifeOS 的财务建模以现金流闭环为设计目标。顶层概览 FINANCES.md 的Monthly Cash Flow区块正是收入与支出的交汇点——它列出Income (monthly)、Fixed expenses、Variable expenses、Net与Savings rate其中的收入数字来自INCOME.md的Expected Monthly Total。FINANCES.md的Linked Files一节完整列出了这一协同关系Income detail →INCOME.mdExpense detail →EXPENSES.mdRecurring bills →obligations.yaml。而在对账层面obligations.yaml周期性账单与INCOME.md构成流入 vs 流出的对照看板的 Outbound 侧把vendors、obligations、other三组支出年化汇总Overall标签页计算net_pre_tax与net_post_taxeffective_tax_rate则依赖TAXES.md的税率信息。当预期月度收入低于月度义务总和时identify gaps 的能力就体现出来——这也是模板要求填写Variability收入稳定性的原因缺口评估需要知道收入端本身的置信区间。七、实操清单让 INCOME.md 从模板变为真实数据综合模板结构、schema 约束与看板消费逻辑一份合格的INCOME.md应当满足以下清单覆盖全部活跃来源每个来源至少填写type、payer、frequency三个必填字段schema 的required列表金额按占位符约定替换为字符串频率口径统一frequency严格使用枚举值weekly / biweekly / semi-monthly / monthly / quarterly / annual / project-based / irregular因为月度折算依赖它金额字段完整工资类补全gross_per_periodnet_per_periodannual_gross1099 类补per-engagement与YTD订阅类补MRR投资类补average_per_period日期合规started、ended一律使用YYYY-MM-DD格式账户只留末四位deposit_account写成Sample Bank Checking (...XXXX)形态杜绝完整账号更新Expected Monthly Total汇总所有来源的月度折算值并如实描述Variability迁移历史来源已结束的收入移入Inactive / Past Sources并保留ended日期同步相关文件更新FINANCES.md的月度现金流、TAXES.md的预估季度税、ACCOUNTS.md的入账账户保证跨文件一致性。完成填充后重启或刷新 Pulse/api/life/finances返回的income.streams即从空列表变为真实收入流——Income 标签页的年度/月度总收入、MRR 与桑基图将随之被真实数据点亮。若页面显示isFreshInstall引导卡片incomeAnnual 0 incomeStreams.length 0则说明INCOME.md尚未被正确填充或字段名与 schema 不一致需回头按校验规则核查。【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考