# 牦牛出栏数据填报 — 功能需求

## 1. 文档说明

| 项 | 说明 |
| --- | --- |
| 模块名称 | 牦牛出栏数据填报 |
| 目标 | 按**村 × 所属年月**填报、导入、维护农牧户牲畜出栏及自食情况；**每月导入一次**当月快照 |
| 关联系统 | 业务后台；`sys_dept`（乡镇、村） |
| 修订依据 | 交接表 `牦牛出栏数据填报.xlsx`；运行模板 `yak_outbound_report_import_template.xlsx` |

---

## 2. 术语与统计口径

### 2.1 填报粒度

- 一条记录：**某一自然年、某一自然月、某一行政村**的出栏及自食汇总。  
- 保存时由所选村反推所属乡镇。  
- 唯一键：所属年份 + 所属月份 + 所属村。  
- 导入按唯一键（年+月+村）**存在则更新、不存在则插入**；不按年月先删后插。

### 2.2～2.4 年月 / 乡镇 / 村

与存栏模块一致：年份向前 6 年、月份 1～12 不可未来月；乡镇为 `sys_dept` 二级合法节点；村为三级叶子；表单只选村。

### 2.5 指标

**录入（新增/修改可编辑）**：农牧户数、农牧人数；牦牛、黄牛/奶牛/犏牛、绵羊、山羊、马骡、驴出栏；自食牛、自食绵羊、自食山羊；备注。  

**计算字段（不入库）**：

| 名称 | 计算规则 | 展示位置 |
| --- | --- | --- |
| 牲畜总出栏数 | 六类出栏之和 | 列表、详情、Excel 导出；**新增/修改不展示** |
| 自食牲畜总数 | 三类自食之和 | 列表、详情、Excel 导出；**新增/修改不展示** |

自食大于对应出栏时允许保存，导入可返回警告。

---

## 3. 功能范围

| 能力 | 说明 |
| --- | --- |
| 分页列表 | 见 **§5.1** |
| 新增 / 修改 | 见 **§5.2** |
| 详情 | 见 **§5.3** |
| 删除 | 物理删除 |
| Excel 导入 / 导出 / 下载模板 | 见 **§5.4～5.5** |

---

## 5. 详细功能需求

### 5.1 列表查询

**筛选**：所属年份、所属月份、所属乡镇、所属村（均可清空；进入页不默认年月）。

**列表展示列**

| 列名 | 说明 |
| --- | --- |
| 所属年份 | `stat_year` |
| 所属月份 | `stat_month`（展示为「N 月」） |
| 所属乡镇 | `town_name` |
| 所属村 | `village_name` |
| 农牧户数 | `farmer_household_count` |
| 农牧人数 | `farmer_population_count` |
| 牦牛出栏数 | `yak_outbound_count` |
| 牲畜总出栏数 | 六类出栏之和（前端计算） |
| 自食牛数 | `self_consumption_cattle_count` |
| 自食牲畜总数 | 三类自食之和（前端计算） |
| 操作 | 查看、修改、删除 |

### 5.2 新增 / 修改

| 项 | 要求 |
| --- | --- |
| 必填 | 所属年份、所属月份、所属村 |
| 录入项 | **§2.5** 全部可编辑明细（不含两项合计） |
| 乡镇 | 由村反推，表单不单独选择 |
| 默认值 | 新增时年月默认当前年月 |
| 唯一性 | 同年同月同村已存在则禁止新增 |
| 合计 | **不展示**牲畜总出栏数、自食牲畜总数 |

### 5.3 详情

展示与新增录入字段一致的全部明细，并额外展示：**所属乡镇**、**牲畜总出栏数**、**自食牲畜总数**（只读计算）。

### 5.4 Excel 导入

选填报年月 → 解析乡镇+村 → 任一行失败则不写库 → 成功则按 `(年,月,村)` upsert。

### 5.5 Excel 导出

导出该月已填报村行；可选所属乡镇（不选则全部）；合计行合并序号+乡镇+村；自户数起按列求和；填表时间为导出当日年月。

Excel 列：序号、乡镇、村、户数、人数、六类出栏、出栏合计、三类自食、自食合计。

---

## 6. 权限

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

---

## 10. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0～1.x | 乡镇粒度、按年月、upsert 等历史版本 |
| 2.0 | 按村填报；列含村；导入全量覆盖；导出合计按列求和；对齐交接模板 |
| 2.1 | 列表增牲畜总出栏数/自食牲畜总数；详情展示全部明细+合计；新增/修改不展示合计 |
| 2.2 | 导入改为按 `(年,月,村)` upsert；导出增加可选所属乡镇筛选 |
