Skip to content

方案设计:生鲜损耗控制

← 上一阶段:需求探索 | 下一阶段:开发资产 →


业务规则设计

基于需求探索阶段的分析,我们设计了以下业务规则:

1. 差异容忍规则

条件动作触发通知备注
实际重量 = 采购重量 ± 2%直接入库,系统自动平账允许 2% 正常误差
实际重量 > 采购重量 + 2%暂停入库,通知采购员决策采购员(微信/短信)可能需要退货或补单
实际重量 < 采购重量 - 2%生成损耗单,通知财务审核财务、采购员需要审核确认后入库

规则说明:

  • 2% 是基于行业经验的合理误差范围
  • 可以针对不同品类设置不同的容忍度(例如:冻品 3%,生鲜 2%)

2. 自动平账逻辑

场景 A:正常误差(± 2% 以内)

实际重量:490kg
采购重量:500kg
差异:-10kg(-2%)

系统自动处理:
1. 入库重量:490kg
2. 采购单价:30元/kg
3. 应付金额:490kg × 30元 = 14,700元
4. 自动生成入库单和财务凭证
5. 记录损耗:10kg(自然损耗)

场景 B:多收(> +2%)

实际重量:520kg
采购重量:500kg
差异:+20kg(+4%)

系统处理流程:
1. 暂停入库
2. 微信/短信通知采购员
3. 采购员选择:
   a) 全部收货 → 补签采购单
   b) 退回多余部分 → 按 500kg 入库
4. 完成采购员确认后,系统自动入库和平账

场景 C:少收(< -2%)

实际重量:480kg
采购重量:500kg
差异:-20kg(-4%)

系统处理流程:
1. 生成损耗单(待审核)
2. 通知采购员和财务
3. 财务审核:
   a) 正常损耗 → 审核通过,按 480kg 入库和结算
   b) 异常损耗 → 要求供应商补货或赔偿
4. 审核通过后,系统自动完成入库和平账

业务流程图

总体流程

详细流程说明

步骤 1:收货称重

  • 仓管员扫描采购单二维码
  • 系统自动显示:采购品名、规格、采购重量
  • 仓管员将货物放上电子秤
  • 系统自动读取实际重量

步骤 2:自动判断

typescript
// 伪代码示例
function checkWeightDifference(actualWeight, purchaseWeight) {
  const difference = actualWeight - purchaseWeight;
  const percentage = (difference / purchaseWeight) * 100;
  
  if (Math.abs(percentage) <= 2) {
    return { status: 'AUTO_APPROVE', action: '直接入库' };
  } else if (percentage > 2) {
    return { status: 'NEED_BUYER_APPROVE', action: '通知采购员' };
  } else {
    return { status: 'NEED_FINANCE_APPROVE', action: '生成损耗单' };
  }
}

步骤 3:执行动作

根据判断结果,系统自动执行相应动作(见流程图)

数据结构设计

收货记录表

typescript
interface ReceiptRecord {
  id: string;                    // 收货单号
  purchaseOrderId: string;       // 采购单号
  supplierId: string;            // 供应商ID
  productId: string;             // 商品ID
  
  // 重量信息
  purchaseWeight: number;        // 采购重量(kg)
  actualWeight: number;          // 实际重量(kg)
  difference: number;            // 差异(kg)
  differencePercentage: number;  // 差异百分比(%)
  
  // 处理状态
  status: 'AUTO_APPROVED' | 'PENDING_BUYER' | 'PENDING_FINANCE' | 'COMPLETED';
  
  // 处理结果
  finalWeight: number;           // 最终入库重量
  finalAmount: number;           // 最终结算金额
  
  // 审核信息
  buyerApproval?: {
    approver: string;
    decision: 'ACCEPT_ALL' | 'RETURN_EXCESS';
    approvedAt: Date;
  };
  
  financeApproval?: {
    approver: string;
    decision: 'APPROVED' | 'REJECTED';
    approvedAt: Date;
    reason?: string;
  };
  
  // 时间戳
  receivedAt: Date;              // 收货时间
  completedAt?: Date;            // 完成时间
}

界面设计要点

仓管员收货界面(移动端)

┌─────────────────────────┐
│   收货:海鲜-大虾        │
│                         │
│  采购重量:500.00 kg     │
│  实际重量:490.00 kg     │
│  差异:-10 kg (-2%)      │
│                         │
│  [✓ 自动入库]            │
│                         │
│  系统已自动处理:         │
│  • 入库:490kg           │
│  • 损耗:10kg(正常)     │
│  • 应付:14,700元        │
└─────────────────────────┘

采购员处理界面(微信通知)

【收货异常通知】
商品:海鲜-大虾
采购重量:500kg
实际重量:520kg
多收:+20kg (+4%)

请选择处理方式:
[ ] 全部收货(需补签采购单)
[ ] 退回多余部分

[查看详情] [立即处理]

关键技术点

1. 电子秤集成

  • 支持蓝牙电子秤
  • 实时读取重量数据
  • 自动传输到系统

2. 规则引擎

  • 可配置的容忍规则
  • 支持不同品类设置不同规则
  • 规则变更不需要改代码

3. 通知机制

  • 微信公众号/企业微信通知
  • 短信通知(备用)
  • 系统内消息推送

方案验证

我们通过以下方式验证了方案的可行性:

  1. 原型演示(3 天完成)

    • 快速搭建收货界面
    • 模拟自动判断逻辑
    • 客户确认流程合理
  2. 小范围试用(1 周)

    • 选择 2 个供应商试用
    • 收集仓管员、采购员反馈
    • 调整容忍规则(从 3% 优化到 2%)
  3. 全面上线(2 周后)

    • 逐步推广到所有供应商
    • 持续优化规则和流程

下一步

方案设计已完成并验证可行,下一步进入 开发资产 → 阶段,沉淀可复用的开发规则和代码。


相关链接

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