diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 5f9b3ae..8dc4fe8 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -186,6 +186,9 @@ }, "active": "b06ed69835363258", "lastOpenFiles": [ + "prop-acc/一次性收费/场景-审计-IC卡库存与售出数对账.md", + "prop-acc/一次性收费/场景-收据-小程序自助下载PDF.md", + "prop-acc/一次性收费/场景-收据-现场打印纸质收据.md", "prop-acc/一次性收费/场景-异常-同业户跨社区Pending单.md", "prop-acc/一次性收费/场景-异常-支付分账失败.md", "prop-acc/一次性收费/场景-异常-业户重复下单.md", @@ -209,9 +212,7 @@ "prop-acc/一次性收费/概念-CollectionOrder与Receipt.md", "prop-acc/一次性收费/概念-A流与B流.md", "prop-acc/index.md", - "prop-acc/一次性收费/index.md", "prop-acc/一次性收费", - "Welcome.md", "prop-acc", "Untitled" ] diff --git a/prop-acc/一次性收费/场景-审计-IC卡库存与售出数对账.md b/prop-acc/一次性收费/场景-审计-IC卡库存与售出数对账.md new file mode 100644 index 0000000..8b8fc88 --- /dev/null +++ b/prop-acc/一次性收费/场景-审计-IC卡库存与售出数对账.md @@ -0,0 +1,203 @@ +--- +title: 场景 - 审计 - IC 卡库存与售出数对账 +tags: + - prop-acc + - 一次性收费 + - 业务场景 + - 审计对账 +audience: + - 业务人员 +status: stable +last_reviewed: 2026-05-25 +code_version: 2026-05-22 +--- + +# 场景:IC 卡库存与售出数对账 + +物业月底核对:**系统记录卖出的 IC 卡数量** 是否等于 **库存盒里减少的物理 IC 卡数量**。 + +> [!warning] 系统不直接管物理库存 +> 本系统**只管财务**(收了多少钱),**不管实物**(IC 卡盒里还剩几张)。物理库存盘点是物业**独立的内部流程**,本场景描述如何用系统数据**辅助核对**物理库存。 + +## 典型情境 + +> [!example] 真实情境 +> 5 月 31 日,物业财务王姐做月度库存盘点。 +> +> - 月初库存:100 张工本卡(已制好的空白 IC 卡) +> - 月底盘点:剩 47 张 +> - 推断:**这个月用掉 53 张** +> +> 在 Filament 后台查"5 月 IC 卡售出数",**应该等于 53 张**。如果不等,需要排查。 + +## 业务人员视角 + +### 步骤 1:盘点物理库存 + +``` +1. 月初库存(从上月结存) 100 张 +2. 本月入库(新采购) +50 张 +3. 本月理论可用 150 张 +4. 月底盘点(数库存盒) -47 张 +───────────────────────────────────── +5. 本月实际"消耗" 103 张 +``` + +### 步骤 2:从系统拉售出数据 + +```sql +SELECT + COUNT(*) AS 售出订单数, + SUM(quantity) AS 卡总张数 +FROM acc_ad_hoc_events ahe +JOIN acc_rate_plans rp ON ahe.rate_plan_id = rp.id +WHERE rp.name LIKE '%IC 卡%' + AND ahe.occurred_at BETWEEN '2026-05-01' AND '2026-05-31 23:59:59' + AND ahe.status = 'completed'; +``` + +输出例: +``` +售出订单数:90 单 +卡总张数:103 张 (有些订单买多张) +``` + +### 步骤 3:对账 + +``` +物理消耗 vs 系统售出 + 103 vs 103 ✅ 完美一致 +``` + +或者: + +``` +物理消耗 vs 系统售出 + 103 vs 101 ❌ 差 2 张 + → 物理少了 2 张 / 系统多算 2 张 +``` + +### 步骤 4:差额排查 + +#### 差额 > 0(物理消耗 > 系统售出) + +**意味着**:卡发了但没记账。可能原因: + +| 原因 | 处理 | +|---|---| +| 给 VIP 业户**免费**发卡(没收钱也没记录)| 物业政策合规,要补登记 0 元订单 | +| 测试卡(写卡测试用了几张)| 算损耗 | +| 业务人员私发 | **严重**,核查员工 | +| 卡丢失 / 制卡失败报废 | 算损耗 | + +#### 差额 < 0(物理消耗 < 系统售出) + +**意味着**:记账了但卡没发。可能原因: + +| 原因 | 处理 | +|---|---| +| 业户已付款但实物没拿(走 [[场景-异常-支付完成但实物发不出]])| 检查"待补发清单",物业还在保管 | +| 录单时数量填错(多录了)| 检查录入异常订单,可能要 [[场景-取消-录错金额作废重做]] | +| 业户付了款作废后忘了取回卡 | 物业归档 | + +## 物理库存管理建议 + +> [!tip] 建议物业建一份独立的库存台账 +> 不在系统里(系统不管物理库存),但用 Excel / 纸质本子记: + +``` +=== IC 卡库存台账 === + +日期 操作 数量 余额 经办人 备注 +2026-04-30 月初余结存 100 上月结存 +2026-05-03 采购入库 +50 150 李四 合同 #2026005 +2026-05-15 发给业户 -1 149 张三 房号 12-3-501 +2026-05-15 发给业户 -2 147 张三 房号 8-2-301 +...(每天明细) +2026-05-31 月底盘点 47 王姐 实物数对 +``` + +每周/每月与系统数据对照。 + +## 系统流程 + +```mermaid +sequenceDiagram + participant 财务 + participant 物理库存 + participant Filament/DB + participant 业务人员 + + Note over 财务: 月底 + 财务->>物理库存: 数库存盒 + 物理库存-->>财务: 47 张 + + 财务->>财务: 计算消耗 = 100 + 50 - 47 = 103 + + 财务->>Filament/DB: 查 5 月 IC 卡售出数 + Filament/DB-->>财务: 103 张 + + 财务->>财务: 对账 ✅ + + Note over 财务: 若不一致 + + 财务->>业务人员: 找差额 + 业务人员-->>财务: 解释(免费发卡 / 录入错误 / 报废等) +``` + +## 其他实物的对账方法 + +同样的方法可以对账: + +| 实物 | 系统侧查询 | +|---|---| +| **装修出入证** | `SUM(quantity) WHERE rate_plan.name LIKE '%装修出入证%'` | +| **泳票(纸质)** | `SUM(quantity) WHERE rate_plan.name LIKE '%泳票%'` | +| **充值码 / 充值卡** | `COUNT(*) WHERE rate_plan.name LIKE '%充值%'` | + +## 常见问题 + +> [!question] 为什么系统不直接管物理库存? +> 物理库存涉及**采购 / 入库 / 报废 / 盘点** 等独立流程,可能跨多个仓库 / 多种实物。**绑到收费系统里会让收费系统过重**。最佳实践: +> - 库存独立做(Excel / 专门的 ERP) +> - 收费系统专注于"卖出与收钱" +> - 月底用对账连接两者 + +> [!question] VIP 业户免费发卡,系统里要建 0 元订单吗? +> **强烈建议建**。便于库存对账。Filament 后台支持金额 = 0(不会失败)。备注栏注明"VIP 免费 + 审批单号"。 + +> [!question] 制卡过程中报废的卡怎么入账? +> 系统侧**不录任何订单**(没有交易发生)。在库存台账里**算损耗**: +> ``` +> 日期 制卡失败报废 -1 余额 X 备注 测试新读卡器 +> ``` + +> [!question] 差额超过 10 张能不能不查? +> **强烈不建议**。差额是**审计预警信号**,长期不查可能掩盖: +> - 员工私发 +> - 财务挪用 +> - 系统漏录 +> +> 建议:**月度差额 > 5 张必须给出书面解释**。 + +## 与"现金对账"的区别 + +| 对账类型 | 对账对象 | 数据源 | 频率 | +|---|---|---|---| +| [[场景-审计-月底现金对账\|现金对账]] | 系统订单 vs 收银抽屉 | 数据库 + 物理现金 | 每月 | +| **库存对账(本场景)** | 系统订单 vs 物理库存盒 | 数据库 + 物理盘点 | 每月 | +| 作废抽查 | 作废订单的事由记录 | 数据库 meta 字段 | 每季 | + +三种对账**独立做但互相印证** —— 现金对账过了但库存不对,可能是 VIP 免费发卡;反之可能是手工卖了卡没录系统。 + +## 相关概念 + +- [[场景-A流-前台购买IC卡]] — 售出的数据来源 +- [[场景-审计-月底现金对账]] — 财务对账 +- [[场景-审计-作废事由抽查]] — 第三种对账 + +## 异常分支 + +- 物理少了 → 内部排查 +- 系统少了 → 找漏录单 / 补登记 +- 多个月持续不一致 → **必查清** 不能拖 diff --git a/prop-acc/一次性收费/场景-收据-小程序自助下载PDF.md b/prop-acc/一次性收费/场景-收据-小程序自助下载PDF.md new file mode 100644 index 0000000..b66d877 --- /dev/null +++ b/prop-acc/一次性收费/场景-收据-小程序自助下载PDF.md @@ -0,0 +1,200 @@ +--- +title: 场景 - 收据 - 小程序自助下载 PDF +tags: + - prop-acc + - 一次性收费 + - 业务场景 + - 收据凭证 +audience: + - 业户 +status: stable +last_reviewed: 2026-05-25 +code_version: 2026-05-22 +--- + +# 场景:小程序自助下载 PDF 收据 + +业户在小程序里**自己下载电子收据**。无需联系物业,24h 自助。 + +> [!success] 推荐路径 +> 这是最方便的收据获取方式。任何时候、任何手机、任何业户都能自助操作。 + +## 典型情境 + +> [!example] 真实情境 +> 周三晚上 10 点,陈太太需要把上个月在物业买充电桩电费的收据 PDF 发给公司财务报销。她不想等明天物业上班,**直接在小程序里下载**。 + +## 业户视角 + +### 第 1 步:打开小程序 + +进入"我家 → 我的订单" + +### 第 2 步:找到目标订单 + +在"已完成"列表里找: + +``` +我的订单 → 已完成 +├── 游泳卡 × 2 ¥40 2026-05-20 +│ 订单号 CO-20260520-XXX +│ [查看详情] [📥下载收据] +│ +├── 充电桩电费 ¥200 2026-05-15 ← 这一笔 +│ 订单号 CO-20260515-YYY +│ [查看详情] [📥下载收据] +│ +└── ... +``` + +### 第 3 步:点"下载收据" + +``` +正在生成 PDF... +✅ 收据已生成 +[在微信中打开] [保存到手机] +``` + +### 第 4 步:转发给财务 + +- **转发到微信好友**(公司财务) +- **保存到手机相册**(图片格式更通用) +- **保存到微信文件**(后续打开还能用) +- **打印** —— 微信里支持调用蓝牙打印机 + +> [!success] 完成 +> 全程 1 分钟,无需任何外部协助。 + +## 您能下载的所有收据 + +> [!info] 全部历史 +> 小程序"已完成"列表展示**该业户的所有历史订单**,无时间限制。理论上 5 年前的订单还能下载收据。 + +如果列表太多,可以筛选: +- 按时间(月 / 季 / 年) +- 按项目类型(IC 卡 / 装修证 / 泳票 / 充电桩) +- 按金额范围 + +## PDF 收据长什么样? + +``` +┌─────────────────────────────────────┐ +│ 鸿基物业管理有限公司 │ +│ 收 据 │ +│ │ +│ 收据号:R-20260515-XXX │ +│ 日期:2026-05-15 14:30 │ +│ ───────────────────────────────── │ +│ 收款方:鸿基物业管理有限公司 │ +│ 付款方:陈XX(房号 12-3-501) │ +│ ───────────────────────────────── │ +│ 项目 数量 金额 │ +│ ───────────────────────────────── │ +│ 充电桩电费充值 1 ¥200.00 │ +│ ───────────────────────────────── │ +│ 合计 ¥200.00 │ +│ │ +│ 支付方式:微信支付 │ +│ 支付时间:2026-05-15 14:30:25 │ +│ 订单号:CO-20260515-YYY │ +│ │ +│ [电子公章] │ +└─────────────────────────────────────┘ +``` + +> [!info] 关于电子公章 +> PDF 上的电子公章是**预先嵌入模板**的物业印章图像。**与纸质收据法律效力相同**,但部分公司财务可能要求另开纸质章 —— 取决于公司政策。 + +## 系统流程 + +```mermaid +sequenceDiagram + participant 业户 + participant 小程序 + participant 系统 + participant PDF生成器 + + 业户->>小程序: 点击"下载收据" + 小程序->>系统: GET /receipts/{id}/pdf + 系统->>系统: 查 Receipt 数据 + alt 收据状态正常 + 系统->>PDF生成器: 渲染 PDF + PDF生成器-->>系统: PDF 流 + 系统-->>小程序: 返回 PDF + 小程序-->>业户: 显示"在微信中打开" + else 收据已作废 + 系统-->>小程序: 返回 PDF (含"已作废"水印) + 小程序-->>业户: 显示带水印的 PDF + end +``` + +> [!info] 重新下载多少次都不影响 +> 每次下载都是从数据库**实时生成 PDF**,不修改任何数据。下载 100 次和下载 1 次效果一样。 + +## 几种特殊情况 + +### 1. 收据已被作废 + +如果订单走过 [[场景-已收款作废]]: + +- PDF 上会加 **"已作废" 红色水印** +- 业户依然能下载,作为"作废存档" +- **不能拿这张报销**(财务会看出水印) + +### 2. 业户的微信换了手机 + +> [!question] 换手机后还能看到历史订单吗? +> **能**。订单关联**业户档案**(身份证 / 手机号),不绑定具体设备。新手机登录同一微信即可。 + +### 3. 业户换了手机号 + +> [!warning] 这种情况要联系物业 +> 业户手机号变了 → **小程序登录账号变了**。需要物业**人工绑定新手机号**到原业户档案。否则新账号看不到旧订单。 + +### 4. 已经离开小区的前业户 + +> [!info] 还能下载 +> 即使业户**搬走了**(`CommunityUserProfile.status = inactive`),只要数据没删,小程序里依然能看历史订单。**收据是历史凭证,不应该因离开而消失**。 + +## 常见问题 + +> [!question] 我能批量下载多张收据吗? +> 当前**一次只能下一张**。如果你要把一整年的收据打包下载(报销季),可以联系物业: +> - 物业可在 Filament 后台**导出某业户所有订单的 Excel** +> - 部分物业有"年度账单 PDF"功能(待补) + +> [!question] PDF 文件多大? +> 通常 50-150 KB。微信里直接打开预览,不占流量。 + +> [!question] PDF 能修改吗? +> **不能**(无密码,但 PDF 本身不可编辑)。如果想加密 / 防伪,需要技术升级(挂 TODO)。 + +> [!question] 我的收据上信息错了(房号错)怎么办? +> 走 [[场景-已收款作废]] + 重做。重做时收据信息自动正确。**不能直接改 PDF**(也不能改数据库 Receipt 记录,违反审计完整性)。 + +> [!question] 收据上的电子公章会不会过期? +> 不会。电子公章是 PDF 图像,长期有效。 + +## 与现场打印的对照 + +| 维度 | 现场打印纸质收据 | 小程序下载 PDF(本场景) | +|---|---|---| +| 时机 | 仅前台营业时间 | **24h 自助** | +| 形态 | 纸质 + 物理章 | PDF + 电子章 | +| 适用 | 严格的财务 / 老人 | 大多数业户 | +| 物业人力 | 需要 | 完全不需要 | +| 报销 | 大多数公司认可 | 取决于公司政策 | + +## 相关概念 + +- [[概念-CollectionOrder与Receipt]] — Receipt 表 +- [[场景-A流-前台购买IC卡]] — 收据生成的原始流程 +- [[场景-B流-小程序下单+微信支付]] — 收据生成的另一种触发 +- [[场景-收据-现场打印纸质收据]] — 纸质替代方案 +- [[场景-收据-重打丢失收据]] — 业务人员协助补打 + +## 异常分支 + +- 公司要纸质 → 走 [[场景-收据-现场打印纸质收据]] +- 信息错 → [[场景-已收款作废]] + 重做 +- 想要发票 → 单独申请流程(超出本系统) diff --git a/prop-acc/一次性收费/场景-收据-现场打印纸质收据.md b/prop-acc/一次性收费/场景-收据-现场打印纸质收据.md new file mode 100644 index 0000000..9b690e9 --- /dev/null +++ b/prop-acc/一次性收费/场景-收据-现场打印纸质收据.md @@ -0,0 +1,169 @@ +--- +title: 场景 - 收据 - 现场打印纸质收据 +tags: + - prop-acc + - 一次性收费 + - 业务场景 + - 收据凭证 +audience: + - 业户 + - 业务人员 +status: stable +last_reviewed: 2026-05-25 +code_version: 2026-05-22 +--- + +# 场景:现场打印纸质收据 + +业户买完东西要**纸质收据**(贴在公司报销单上、归档保存)。前台**当场用收据打印机出**。 + +## 典型情境 + +> [!example] 真实情境 +> 王经理是某公司的行政,买了 5 张装修证(¥150)给装修工。要拿纸质收据回公司报销,**普通的微信电子收据不够**(财务要纸质,而且最好有印章)。 + +## 业户视角 + +### 您能拿到的纸质形态 + +| 类型 | 说明 | 是否能报销 | +|---|---|---| +| **打印机出小票** | 热敏纸 + 二维码 | 部分公司能,大公司通常不行 | +| **正规收据(三联单)** | 物业印章 + 手写 / 打印 | 大多数公司可报销 | +| **正规发票** | 国税局开具 | 全部公司可报销 | +| 微信电子收据 | 微信卡包 | 报销取决于公司政策 | + +> [!info] 收据 ≠ 发票 +> **收据**:证明"我付了钱给物业",有物业印章。 +> **发票**:税务凭证,公司报销/抵扣进项税必需。 +> +> 本系统**生成的是收据**,**不是发票**。要发票需要走独立的发票开具流程。 + +### 怎么要? + +到前台: +> "麻烦给我打张纸质收据,要盖章的那种。" + +物业职员会: +1. 在打印机上出一张**预打印收据**(已盖物业公章的纸质单据) +2. 在系统里同步把电子收据状态更新 +3. 把纸质单交给您 + +或者更简单的:**让打印机直接出小票**(热敏纸,系统自动出)。 + +## 业务人员视角 + +### 出收据的几种方式 + +``` +方式 A:热敏小票(最简单,1 秒出单) +├── Filament 后台订单详情 → 点"打印收据" +├── 热敏打印机直接出单 +└── 适用:业户不在意是不是"正规收据" + +方式 B:预打印套打收据(正规) +├── 物业有库存的"三联收据单"(纸质 + 物业印章) +├── 在 Filament 后台填套打数据,系统按收据格式打印到三联单上 +├── 业户拿走第一联;前台留第二联;财务存第三联 +└── 适用:业户要报销 + +方式 C:手写收据(应急) +├── 打印机故障 / 系统宕机 +├── 手写三联单 + 盖章 +└── 后续在系统里补录订单(注明手写编号) +``` + +### 推荐:**默认热敏小票,业户要"正规"再出预打印** + +``` +1. 业户付完款 → 自动出热敏小票 +2. 业户走的时候问:"我能拿张能报销的吗?" + ├── 是 → 出预打印收据 + └── 否 → 完事 +``` + +## 系统流程 + +```mermaid +sequenceDiagram + participant 业户 + participant 前台 + participant Filament + participant 热敏打印机 + participant 套打打印机 + + 业户->>前台: 我要纸质收据 + 前台->>Filament: 订单详情 → "打印收据" + Filament->>热敏打印机: 默认走热敏 + 热敏打印机-->>前台: 出小票 + 前台->>业户: 给小票 + + Note over 业户: 业户:"我要能报销的" + + 前台->>Filament: 切换 "正规收据" 模式 + Filament->>套打打印机: 按三联格式打印 + 套打打印机-->>前台: 三联收据 + 前台->>业户: 第一联(您拿) + 第二联(前台留)+ 第三联(财务存) +``` + +## 纸质收据应包含的字段 + +``` +[物业 LOGO] [物业公章] +───────────────────────────────── + 收 据 +───────────────────────────────── +日期: 2026-05-25 +收据号: R-20260525-001 + +收款方: 鸿基物业管理有限公司 +付款方: 王XX(123-4-501) + +项目 数量 金额 +───────────────────────────────── +装修出入证 5 ¥150.00 +───────────────────────────────── + 合计 ¥150.00 +支付方式: 现金 / 微信 / POS + +[业务人员签字] +``` + +## 常见问题 + +> [!question] 热敏小票能不能盖章后报销? +> 取决于公司财务。**严格的公司只认正规收据/发票**,热敏小票会被退回。**保守做法**:给业户预打印收据。 + +> [!question] 套打打印机的"三联单"哪里有? +> 是物业预先采购的**带印章的空白三联单**(税务局有售卖或物业自行定制)。一般物业大厅 + 财务办公室都备一份。 + +> [!question] 印章会不会被滥用? +> 印章在**财务办公室管理员**手里,套打前先盖章再打印。每笔订单单独打 1 张。审计可对照系统订单数和领用印章次数。 + +> [!question] 业户要的是发票,不是收据怎么办? +> 让业户填**发票申请表**(公司抬头 + 税号),走税务开票流程。**这超出本系统范围**,通常需要财务部门用税控盘开。 + +> [!question] 后期能补打吗? +> 当然可以 —— 走 [[场景-收据-重打丢失收据]] 流程。 + +## 与其他收据场景的对照 + +| 收据需求 | 解决方案 | +|---|---| +| 当场要小票 | 本场景(热敏) | +| 当场要正规报销凭证 | 本场景(预打印套打) | +| 已经走了发现丢了 | [[场景-收据-重打丢失收据]] | +| 想自助下载电子版 | [[场景-收据-小程序自助下载PDF]] | +| 要正规发票(非收据) | 单独发票申请流程(超出本系统) | + +## 相关概念 + +- [[概念-CollectionOrder与Receipt]] — Receipt 表 + ReceiptItem 关联 +- [[场景-A流-前台购买IC卡]] — 标准买票流程 +- [[场景-收据-重打丢失收据]] — 事后补打 +- [[场景-收据-小程序自助下载PDF]] — 自助下载电子版 + +## 异常分支 + +- 打印机坏 → 手写三联 + 后续补录系统 +- 业户要发票 → 单独流程