我把「物业账单管家」开源了:一个零依赖、场景驱动的轻量账单系统
EN: Today I’m open-sourcing Property Billing System — a lightweight, scenario-driven billing tool I built for property managers, landlords, and small commercial parks. This post explains what it does and why it’s designed the way it is.
CN: 今天我把 物业账单管家(Property Billing System) 开源了。它是一个面向物业公司、二房东、商铺园区的轻量化综合账单系统。这篇推广文聊聊它解决什么问题,以及为什么这样设计。

它解决什么问题 / What problem it solves
EN: Billing tenants every month shouldn’t require an ERP. Most small property managers still live in Excel — rent, parking, waste fees, and a pile of water/electricity meters per unit. Producing a clean, professional dunning notice each month is tedious and error-prone.
CN: 每月给租户出账单,本不该上一个重型的 ERP。但大量中小物业、二房东、商铺园区依然活在 Excel 里:租金、停车费、垃圾清运费,再加上每一户绑着的好几个水表电表。每个月产出一张干净、专业、带催款单的账单,既繁琐又容易出错。
EN: Property Billing System turns that whole loop into one click:
CN: 物业账单管家把这一整套流程收敛成「一键」:
- 🧾 一份账单自动汇总 月租金 + 停车费 + 垃圾清运费 + 所有水/电表费用
- 💧 一户多表计,每个表计单价独立设置
- 🔁 抄表自动追溯上期读数,
用量 = 本期 − 上期,读数异常自动提醒 - 🏛️ 电子公章 + 微信/支付宝收款码自动叠加到账单落款
- 📤 输出为 打印 / PDF / PNG 图片 / 纯文本催款话术(PNG 特别适合微信直接发)
设计理念 / Design philosophy
EN: The core idea is scenario-driven, not generic. I optimized for the person who actually runs a small property, not for a feature checklist. CN: 核心理念是场景驱动,而非堆功能。我为真正在管小物业的人优化,而不是为了凑一份功能清单。
1. 零依赖、零构建 / Zero dependencies, zero build
EN: It’s plain Node.js + hand-written responsive CSS + JSON file persistence. No npm install, no bundler, no framework. Install Node and run node server.js — done. Maintenance cost is near zero.
CN: 整套系统就是原生 Node.js + 手写响应式 CSS + JSON 文件持久化。没有 npm install、没有构建步骤、没有框架。装好 Node 跑一句 node server.js 就能用,维护成本极低。
2. 文件即数据库 / Files are the database
EN: All data lives in three JSON files under data/. Backup = copy a folder. That’s a deliberate choice — for a lightweight internal tool, a full database engine is overkill and a liability.
CN: 全部数据就是 data/ 下的三个 JSON 文件。备份 = 复制一个目录。这是刻意的取舍:对一个轻量内部工具来说,上全套数据库引擎属于过度设计,反而是负担。
3. 落在真实工作流里 / Built around the real workflow
EN: The features that matter to a property manager are the “unglamorous” ones: Excel one-click import (download template → fill → upload), e-stamp overlay, RMB capital amounts (“叁仟贰佰壹拾元整”), and exporting a PNG to send over WeChat. I prioritized exactly where the friction actually is.
CN: 对物业来说真正有用的,往往是那些”不起眼”的能力:Excel 一键导入(下载模板→填好→上传)、电子公章叠加、人民币大写金额(“叁仟贰佰壹拾元整”)、以及导出 PNG 直接微信发送。我把精力放在这些真正卡人的环节上。

4. 抄表可追溯到源 / Readings are traceable
EN: Every reading snapshot stores the meter’s unit price at that time, so historical bills are immune to later price changes. The system also auto-detects readings lower than the previous month and flags them — because real meters occasionally go backwards or get mis-keyed.
CN: 每条抄表记录都会快照当时表计单价,所以历史账单不受后续改价影响。系统还会自动识别”本期读数低于上期”的异常并提示——因为真实场景里电表偶尔会倒走、或录错。
核心能力一览 / Feature highlights
EN: A quick map of what’s inside:
CN: 一份能力清单:
| 能力 | 说明 |
|---|---|
| 多表计抄表 | 一户绑定多个水/电表,单价独立,自动算用量与金额 |
| 自动追溯 | 调取上月读数计算用量,异常自动提醒 |
| Excel 导入 | 官方模板 + 兼容旧版电费/水费宽表,可重复导入不重复 |
| 电子公章 | 透明底 PNG 自动叠加落款,附收款码与付款指引 |
| 三种输出 | 打印 / PDF / PNG 图片 / 纯文本催款话术 |
| 一键部署 | Docker、宝塔/云服务器、PM2 守护进程皆可 |

如何部署 / How to run it
EN: Two commands and you’re up:
CN: 两条命令即可跑起来:
# 方式一:直接运行(需 Node.js >= 18)
node server.js
# 打开 http://localhost:3000
# 方式二:Docker 一键部署
docker compose up -d
EN: Ship it to a VPS (Aliyun / Tencent Lightweight) behind a reverse proxy with PM2, attach a domain + HTTPS, and it’s production-ready.
CN: 上云也很简单:用 PM2 守护进程跑在云服务器(阿里云 / 腾讯云轻量),前面挂反向代理并绑域名 + HTTPS,即可用于生产。
为什么开源 / Why open source
EN: This is part of Juntiy Workspace — my line of lightweight micro-SaaS and automation for small businesses and independent operators. I believe tools like this should be transparent, self-hostable, and free to adapt. If it saves you an afternoon of monthly billing pain, that’s the win.
CN: 这是 Juntiy Workspace 系列的一员——我面向小微企业与个人运营者打造的轻量 micro-SaaS 与自动化产品线。我相信这类工具应当透明、可自托管、可自由改造。如果它能帮你省下每个月出账单的那半天折腾,这个开源就值了。
EN: 👉 Repo: github.com/Juntiy/property-billing-system CN: 👉 仓库地址:github.com/Juntiy/property-billing-system
喜欢的话点个 Star ⭐,也欢迎提 Issue 和 PR。Joint Intelligence, Unified Solutions.