# 物资归还验收处理功能指南

## ✅ 功能概述

物资归还验收功能已完整实现，支持：
- ✅ 根据归还申请单自动带出物品清单
- ✅ 显示申报归还的数量和状态
- ✅ 逐项输入每个物品的完好程度
- ✅ 实时验证数量分配
- ✅ 保存验收结果并更新状态

## 🔄 完整验收流程

### 1. 打开验收对话框
在"归还处理"标签页，点击待验收记录的"开始验收"按钮

**系统自动执行：**
```typescript
// 自动初始化验收数据
setVerificationItems(selectedReturn.items.map(item => ({
  itemId: item.id,
  actualQuantity: item.returnedQuantity,        // 申报归还数量
  normalQty: item.condition === '正常' ? item.returnedQuantity : 0,
  damagedQty: item.condition === '损坏' ? item.returnedQuantity : 0,
  lostQty: item.condition === '遗失' ? item.returnedQuantity : 0,
  maintenanceQty: item.condition === '需要保养' ? item.returnedQuantity : 0,
  verificationNotes: item.conditionNotes || '',
})));
```

### 2. 查看归还申请信息
对话框顶部自动显示：
- 归还单号
- 关联领用单号
- 归还人/部门
- 登记时间

### 3. 逐项验收物品清单

对话框会自动列出所有归还物品，每个物品显示：

#### 物品基本信息（自动显示）
- 物资名称
- 物资类型
- 借出数量
- 申报归还数量
- 申报状态（正常/损坏/遗失/需保养）
- 批次号（如有）

#### 验收录入（需要操作）

**左侧：实际验收数量**
```
┌─────────────────────────┐
│ 实际验收数量 *           │
│ [输入框: 默认=申报数量]  │
│ 现场清点后的实际数量     │
└─────────────────────────┘

┌─────────────────────────┐
│ 验收备注                │
│ [多行文本框]            │
│ 记录验收情况、问题等     │
└─────────────────────────┘
```

**右侧：物资状态分配**
```
物资状态分配 * (总计：X/Y 件)

┌───────────┬───────────┐
│  ✓ 正常   │  ⚠ 损坏   │
│ [输入框]  │ [输入框]  │
│ 可直接入库│ 转维修流程│
├───────────┼───────────┤
│  ✗ 遗失   │  🔧 需保养│
│ [输入框]  │ [输入框]  │
│ 记录损失  │ 安排保养  │
└───────────┴───────────┘

✓ 数量分配正确
⚠ 状态数量总和需等于实际验收数量
```

### 4. 完好程度输入规则

#### 数量分配原则
```
正常数量 + 损坏数量 + 遗失数量 + 需保养数量 = 实际验收数量
```

#### 状态说明
- **正常**：物资完好无损，可直接入库使用
- **损坏**：物资有损坏，需要维修后才能使用
- **遗失**：物资丢失，无法归还
- **需保养**：物资需要保养维护后才能使用

#### 实时验证
系统会实时检查：
- ✅ 各状态数量总和是否等于实际验收数量
- ✅ 显示绿色提示："数量分配正确"
- ❌ 不匹配则显示红色警告

### 5. 查看验收汇总
对话框底部实时显示全部物资的汇总统计：
```
┌────────┬────────┬────────┬────────┐
│ ✓ 正常 │ ⚠ 损坏│ ✗ 遗失 │🔧 需保养│
│   180  │   15  │    5   │   20   │
└────────┴────────┴────────┴────────┘
```

### 6. 确认验收
点击"确认验收并更新库存"按钮

**系统自动执行：**
1. 验证所有物资都已完成验收
2. 验证数量分配是否正确
3. 更新归还记录状态为"已验收"
4. 保存验收人、验收时间
5. 保存验收结果数据
6. 显示验收结果摘要

## 📋 使用示例

### 示例1：正常归还
```
物资：滴灌管
借出数量：200米
申报归还：200米
申报状态：正常

验收录入：
├─ 实际验收数量：200
├─ 正常：200
├─ 损坏：0
├─ 遗失：0
└─ 需保养：0

结果：正常物资 200 件已入库
```

### 示例2：部分损坏
```
物资：喷雾器
借出数量：5台
申报归还：4台
申报状态：损坏

验收录入：
├─ 实际验收数量：4
├─ 正常：3
├─ 损坏：1
├─ 遗失：0
└─ 需保养：0
备注：1台机器喷头损坏，需要更换配件

结果：正常物资 3 件已入库；损坏物资 1 件已转维修
```

### 示例3：需要保养
```
物资：手推车
借出数量：3辆
申报归还：3辆
申报状态：需要保养

验收录入：
├─ 实际验收数量：3
├─ 正常：0
├─ 损坏：0
├─ 遗失：0
└─ 需保养：3
备注：轮胎磨损，需要润滑保养

结果：需保养物资 3 件已安排保养
```

### 示例4：复杂情况
```
物资：水管
借出数量：100米
申报归还：80米
申报状态：部分遗失

验收录入：
├─ 实际验收数量：80
├─ 正常：70
├─ 损坏：5
├─ 遗失：0  （注：申报时已说明20米遗失）
└─ 需保养：5
备注：70米正常，5米破损，5米老化需更换，20米已在施工中遗失

结果：
- 正常物资 70 件已入库
- 损坏物资 5 件已转维修
- 需保养物资 5 件已安排保养
- 遗失物资已在登记时记录（领用单中体现）
```

## 🔍 验收规则详解

### 数量验证规则
```typescript
// 1. 实际验收数量不能超过借出数量
actualQuantity <= borrowedQuantity

// 2. 各状态数量总和必须等于实际验收数量
normalQty + damagedQty + lostQty + maintenanceQty === actualQuantity

// 3. 每个状态数量不能为负数
normalQty >= 0 && damagedQty >= 0 && lostQty >= 0 && maintenanceQty >= 0

// 4. 每个状态数量不能超过实际验收数量
normalQty <= actualQuantity
damagedQty <= actualQuantity
lostQty <= actualQuantity
maintenanceQty <= actualQuantity
```

### 状态处理规则
```typescript
// 验收完成后的处理
if (normalQty > 0) {
  // 正常物资：直接入库，增加可用库存
  inventory.available += normalQty;
  inventory.total += normalQty;
}

if (damagedQty > 0) {
  // 损坏物资：转维修流程
  createMaintenanceOrder({
    quantity: damagedQty,
    status: '待维修',
  });
}

if (lostQty > 0) {
  // 遗失物资：记录损失
  createLossRecord({
    quantity: lostQty,
    responsible: returner,
  });
}

if (maintenanceQty > 0) {
  // 需保养物资：安排保养任务
  createMaintenanceTask({
    quantity: maintenanceQty,
    type: '保养',
  });
}
```

## 💡 操作提示

### 快速验收技巧
1. **简单正常归还**：如果物资全部正常，只需确认实际验收数量即可（系统已默认填充）
2. **批量同状态**：如果多件物资都是同一状态，可以使用相同的数量分配
3. **验收备注**：详细记录有助于后续追溯和责任认定

### 常见问题处理

**Q1：实际清点数量少于申报数量怎么办？**
```
A：修改"实际验收数量"为实际清点的数量，然后按实际状态分配
例如：申报5台，实际只有4台
- 实际验收数量改为4
- 根据4台的实际状态分配数量
- 在备注中说明情况
```

**Q2：物资状态与申报不符怎么办？**
```
A：按实际状态重新分配数量
例如：申报"正常"，实际发现有损坏
- 实际验收数量：5
- 正常：3
- 损坏：2
- 在备注中详细说明损坏情况
```

**Q3：发现额外问题怎么办？**
```
A：使用验收备注详细记录
- 物资外观问题
- 功能异常
- 配件缺失
- 使用痕迹
- 其他异常情况
```

## 📊 验收数据保存

### 保存的数据内容
```typescript
{
  // 更新归还记录
  status: '已验收',
  processor: '仓库-张',
  processDate: '2024-10-22 15:00:00',
  processNotes: '验收完成：正常180件，损坏20件',
  
  // 验收结果统计
  actualCondition: {
    normal: 180,
    damaged: 20,
    lost: 0,
    needMaintenance: 0,
  },
  
  // 每个物品的详细验收数据
  items: [
    {
      materialId: 'mat-4',
      materialName: '滴灌管',
      actualQuantity: 200,
      normalQty: 180,
      damagedQty: 20,
      lostQty: 0,
      maintenanceQty: 0,
      verificationNotes: '20米破损需维修',
    }
  ]
}
```

## 🎯 功能特点

### 1. 智能初始化
- ✅ 自动带出归还申请单的所有物品
- ✅ 自动填充申报数量作为默认验收数量
- ✅ 根据申报状态智能分配初始数量

### 2. 实时验证
- ✅ 实时检查数量分配是否正确
- ✅ 即时显示验证结果（成功/错误）
- ✅ 防止提交不完整或错误的验收数据

### 3. 直观展示
- ✅ 清晰的视觉分区（左侧数量，右侧状态）
- ✅ 颜色编码（正常=绿色，损坏=红色等）
- ✅ 实时汇总统计

### 4. 完整记录
- ✅ 保存完整的验收数据
- ✅ 记录验收人和时间
- ✅ 支持详细备注

### 5. 智能更新
- ✅ 自动更新库存
- ✅ 自动生成维修工单
- ✅ 自动记录损失
- ✅ 自动安排保养任务

## 🔄 状态流转

```
待验收 → 已验收 → 已核销
  ↓         ↓         ↓
[登记]   [验收]    [核销]
```

### 验收环节的作用
1. **质量把关**：确保归还物资的实际状况
2. **数量核对**：核实实际归还数量
3. **状态分类**：按物资状况分类处理
4. **责任明确**：通过详细记录明确责任
5. **库存准确**：确保库存数据准确无误

## 📝 验收记录示例

### 完整验收记录
```
归还单号：GH202410220001
关联领用单：LY202410140003
归还人：张三 / 种植一队
登记时间：2024-10-22 14:30:00

验收清单：
1. 滴灌管
   - 借出：200米
   - 申报归还：200米，状态：正常
   - 实际验收：200米
   - 状态分配：正常200米
   - 验收备注：外观完好，无破损

2. 喷雾器
   - 借出：5台
   - 申报归还：4台，状态：损坏
   - 实际验收：4台
   - 状态分配：正常3台，损坏1台
   - 验收备注：1台喷头损坏需更换

验收汇总：
- 正常：203件
- 损坏：1件
- 遗失：0件
- 需保养：0件

验收人：仓库-张
验收时间：2024-10-22 15:00:00
```

## 🚀 快速测试

### 测试步骤
1. 先创建一个归还登记
2. 在"归还处理"标签页找到该记录
3. 点击"开始验收"
4. 验证清单是否自动显示
5. 修改各物品的状态数量
6. 检查实时验证是否生效
7. 点击"确认验收"
8. 查看状态是否更新为"已验收"

### 验证要点
- ✅ 物品清单自动显示
- ✅ 默认数量正确填充
- ✅ 可以修改验收数量
- ✅ 可以分配状态数量
- ✅ 数量验证实时生效
- ✅ 验收汇总正确计算
- ✅ 保存后状态正确更新
- ✅ 验收结果正确保存

## 🎓 最佳实践

### 验收前
1. 准备好清点工具（秤、尺、计数器等）
2. 提前了解归还申请的物品清单
3. 准备好记录工具（纸笔或平板）

### 验收中
1. 逐项清点，不要遗漏
2. 仔细检查物资状态
3. 发现问题立即记录
4. 不确定的情况及时咨询

### 验收后
1. 复核验收数据
2. 确认数量分配正确
3. 检查备注是否完整
4. 及时提交验收结果

## 📞 技术支持

如有问题，请参考：
- 功能文档：`RETURN_VERIFICATION_COMPLETE.md`
- 快速测试：`RETURN_REGISTRATION_QUICK_TEST.md`
- 系统总结：`RETURN_SYSTEM_SUMMARY.md`
