# 农牧户数据填报 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 农牧户数据填报 |
| 目标 | 按**村 × 所属年月**登记农牧户基本情况；导入 upsert；导出按模板填充 |
| 关联系统 | 业务后台；`sys_dept`（乡镇、村） |
| 修订依据 | 交接表 `农牧户数据填报.xlsx`；运行模板 `farmer_household_import_template.xlsx` |

---

## 2. 填报粒度

- 一条记录：某一自然年、某一自然月、某一行政村农牧户基本情况快照。
- 保存时由所选村反推所属乡镇。
- 唯一键：所属年份 + 所属月份 + 所属村。
- 导入：存在则更新、不存在则插入（非增幅累加，也不按年月先删后插）。
- 派生（保存时计算）：
  - 草场承包总面积 = 禁牧面积 + 草畜平衡面积
  - 补助奖励总资金 = 禁牧补助 + 草畜平衡奖励
  - 补助合计金额 = 补助奖励总资金 + 封顶保底后享受补助奖励总资金 + 村级草原监督员补助
- 封顶保底六项（是否是纯牧户等）按模板填写「是 / 否」。
- 草畜失衡预警（交接表注 7；**不依赖**「草畜平衡计算」模块）：
  - 导入 / 新增 / 修改保存后：若该年该月该村 **核定年末草畜平衡载畜量 &lt; 年底牲畜存栏（绵羊单位）** → 写入/更新 `biz_grass_livestock_imbalance_warning`（`data_source=farmer_household`，`source_key=FH-{id}`）
  - 后续修改后 **核定载畜量 ≥ 年底存栏**（或字段不全无法判定）→ 对应预警记录删除
  - 删除填报记录时同步清除预警

---

## 3. 功能范围

| 能力 | 说明 |
| --- | --- |
| 分页列表 | 筛选：年、月、乡镇；列：年、月、乡镇、村、户数、人数、草场承包总面积 |
| 新增 / 修改 | 选村（级联）；新增默认本年本月；不展示派生小计（保存后详情可见） |
| 详情 | 全部字段含派生 |
| 删除 | 物理删除（级联清预警） |
| Excel 导入 | 多级表头；另选年月；按唯一键 upsert；任一行失败整批不写 |
| Excel 导出 | 另选年月；**所属乡镇与列表一致**（打开时带入列表当前乡镇，可清空表示全部）；填表人=登录用户 |

---

## 4. 权限

`dataModel:farmerHousehold:list|query|add|edit|remove|import|export`

---

## 5. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 首版：CRUD + upsert 导入 + 导出；派生三项；村级唯一键 |
| 1.1 | 补草畜失衡预警：写入疾病预警表 type=6 |
| 1.2 | 预警改写独立表；规则对齐交接注 7（载畜量&lt;存栏触发，≥则预警消失；不走草畜平衡计算） |
