生鲜损耗控制规则
适用于中央厨房、生鲜配送场景的收货与损耗控制规则。
规则文件内容
请复制以下内容,保存为 .cursor/rules/fresh-loss.mdc:
markdown
---
description: 生鲜收货与损耗控制业务规则
globs: src/modules/inventory/**, src/modules/receiving/**
---
# 生鲜损耗控制业务规则
## 1. 核心原则
- **数据真实性**:所有称重数据必须来自蓝牙秤自动采集,禁止人工修改。
- **容忍度控制**:允许 ±2% 的重量差异,系统自动平账。
- **异常闭环**:超出容忍度的差异,必须走审批流程。
## 2. 收货差异处理逻辑
### 2.1 差异计算公式
$$ 差异率 = \frac{|实收重量 - 采购重量|}{采购重量} \times 100\% $$
### 2.2 处理策略
| 差异率范围 | 处理动作 | 状态流转 |
| :--- | :--- | :--- |
| **≤ 2%** (合理损耗) | 系统自动平账,按实收重量入库 | `已完成` |
| **> 2%** (异常损耗) | 生成异常单,挂起入库单 | `待审批` |
### 2.3 自动平账规则 (Auto-Reconcile)
当差异率 ≤ 2% 时:
1. 更新库存数量 = 实收数量
2. 记录损耗日志:`type: 'normal_loss'`, `amount: 差异重量`
3. 采购单状态更新为 `completed`
## 3. 代码实现规范 (TypeScript)
### 3.1 差异检查函数
```typescript
/**
* 检查收货差异是否在容忍范围内
* @param orderedQty 采购数量
* @param receivedQty 实收数量
* @returns { isNormal: boolean, diffRate: number }
*/
export function checkTolerance(orderedQty: number, receivedQty: number): ToleranceResult {
const TOLERANCE_RATE = 0.02; // 2%
const diff = Math.abs(receivedQty - orderedQty);
const rate = diff / orderedQty;
return {
isNormal: rate <= TOLERANCE_RATE,
diffRate: rate
};
}4. 数据库模型约束
inventory_logs表必须包含loss_type字段purchase_orders表状态流转必须经过reconciling检查
## 适用场景
- **中央厨房收货**:处理蔬菜、肉类等非标品的重量差异。
- **生鲜配送签收**:处理运输过程中的水分流失。
- **门店盘点**:处理日常损耗。
