Skip to content

生鲜损耗控制规则

适用于中央厨房、生鲜配送场景的收货与损耗控制规则。

规则文件内容

请复制以下内容,保存为 .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 检查

## 适用场景

- **中央厨房收货**:处理蔬菜、肉类等非标品的重量差异。
- **生鲜配送签收**:处理运输过程中的水分流失。
- **门店盘点**:处理日常损耗。

基于 AI 辅助开发,快速、灵活、可靠