# 草畜失衡预警 — 测试用例

> **接口 Base Path**：`/dataModel/grassLivestockImbalanceWarning`  
> **建表**：执行 `sql/biz_grass_livestock_imbalance_warning.sql`  
> **权限**：`dataModel:grassLivestockImbalanceWarning:list|query`  
> **说明**：写入由填报模块触发，本模块无手工增删改；判定规则不依赖「草畜平衡计算」模块。

---

## 1. 判定规则（单测）

| 编号 | 场景 | 期望 |
| --- | --- | --- |
| UT-001 | 核定载畜量 &lt; 年底存栏绵羊单位 | `isImbalanced` = true |
| UT-002 | 核定载畜量 = 年底存栏 | `isImbalanced` = false |
| UT-003 | 核定载畜量 &gt; 年底存栏 | `isImbalanced` = false |
| UT-004 | 载畜量或存栏任一为 null | `isImbalanced` = false |

对应单测：

- `FarmerHouseholdDerivedSupportImbalanceTest`
- `FamilyRanchDerivedSupportImbalanceTest`
- （养殖大户同源逻辑：`LargeLivestockFarmerDerivedSupport.isImbalanced`）

---

## 2. 填报触发写入（联调 / API）

| 编号 | 场景 | 期望 |
| --- | --- | --- |
| SYNC-001 | 农牧户新增/修改：载畜量 &lt; 存栏 | `biz_grass_livestock_imbalance_warning` 有记录；`data_source=farmer_household`，`source_key=FH-{id}` |
| SYNC-002 | 农牧户改平衡（载畜量 ≥ 存栏）后保存 | 对应 `FH-{id}` 预警记录消失 |
| SYNC-003 | 农牧户删除填报 | 对应预警清除 |
| SYNC-004 | 家庭牧场新增/修改失衡 | `data_source=family_ranch`，`source_key=FR-{id}`；文案含年月/乡镇村/主体/两数值 |
| SYNC-005 | 家庭牧场恢复平衡或删除 | `FR-{id}` 预警消失 |
| SYNC-006 | 养殖大户新增/修改失衡 | `data_source=large_livestock_farmer`，`source_key=LLF-{id}` |
| SYNC-007 | 养殖大户恢复平衡或删除 | `LLF-{id}` 预警消失 |
| SYNC-008 | 导入导致失衡（三处填报任一） | upsert 预警；同 `source_key` 不产生重复行 |
| SYNC-009 | 再次保存仍失衡 | 更新载畜量/存栏/文案/`alert_time`，主键不变 |
| SYNC-010 | 疾病预警表不再写入 type=6 | 保存失衡后 `biz_yak_disease_warning` **无** `warning_type=6` 新记录 |

---

## 3. 查询接口

| 编号 | 场景 | 期望 |
| --- | --- | --- |
| API-001 | GET `/list` 有权限 | 分页返回；默认按预警时间倒序 |
| API-002 | 按 `dataSource` 筛选 | 仅返回对应来源 |
| API-003 | 按 `subjectName` 模糊 | 命中主体名称 |
| API-004 | `startDate`/`endDate` | 仅返回 `alert_time` 落在闭区间内的记录 |
| API-005 | 开始日期晚于结束日期 | 业务错误：「开始日期不能晚于结束日期」 |
| API-006 | GET `/{id}` 存在 | 返回完整字段（含 `sourceKey`） |
| API-007 | GET `/{id}` 不存在 | 「预警记录不存在」 |
| API-008 | 无 list/query 权限 | 403 |

---

## 4. 前端 UI

| 编号 | 场景 | 期望 |
| --- | --- | --- |
| UI-001 | 列表筛选 | 预警日期、数据来源、主体名称可用；查询/重置正常 |
| UI-002 | 列表列 | 含预警时间、来源、年月、乡镇、村、主体、载畜量、存栏、预警信息 |
| UI-003 | 查看详情 | 只读弹窗展示上述字段 + 业务键；无编辑保存 |
| UI-004 | 空数据 | 空状态提示，无报错 |
| UI-005 | 来源文案 | `family_ranch` / `farmer_household` / `large_livestock_farmer` 显示中文标签 |

---

## 5. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初稿：判定单测 + 三处填报同步 + 列表详情 |
