vault backup: 2026-05-25 13:59:37

This commit is contained in:
Willie
2026-05-25 13:59:37 +08:00
parent b8d6c1501f
commit 0e53ade17c
4 changed files with 575 additions and 2 deletions

View File

@@ -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卡]] — 售出的数据来源
- [[场景-审计-月底现金对账]] — 财务对账
- [[场景-审计-作废事由抽查]] — 第三种对账
## 异常分支
- 物理少了 → 内部排查
- 系统少了 → 找漏录单 / 补登记
- 多个月持续不一致 → **必查清** 不能拖

View File

@@ -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流-小程序下单+微信支付]] — 收据生成的另一种触发
- [[场景-收据-现场打印纸质收据]] — 纸质替代方案
- [[场景-收据-重打丢失收据]] — 业务人员协助补打
## 异常分支
- 公司要纸质 → 走 [[场景-收据-现场打印纸质收据]]
- 信息错 → [[场景-已收款作废]] + 重做
- 想要发票 → 单独申请流程(超出本系统)

View File

@@ -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]] — 自助下载电子版
## 异常分支
- 打印机坏 → 手写三联 + 后续补录系统
- 业户要发票 → 单独流程