# 模块需求卡生成规范

本规范用于后续生成各业务模块需求卡，统一采用 `港口码头主数据需求卡.md` 的非表格条目式格式。需求卡应便于产品、前端、后端、测试共同理解，重点描述功能行为、异常边界和反例，不写成测试用例表格。

## 一、文件命名

- 文件名格式：`{模块名称}需求卡.md`
- 示例：`港口码头主数据需求卡.md`、`币种汇率管理需求卡.md`
- 模块名称应使用业务侧可识别名称，避免仅使用接口名、表名或英文缩写。

## 二、文档结构

需求卡固定包含以下结构：

```md
# {模块名称}需求卡

## 目录

- [REQ-{模块编码}-01 {功能标题}](#req-模块编码-01-功能标题)
- [REQ-{模块编码}-02 {功能标题}](#req-模块编码-02-功能标题)
- [通用规则](#通用规则)

REQ-{模块编码}-01 {功能标题}

- 功能点：{对该功能的简要概括描述}
- 异常与边界：①{异常或边界 1}；②{异常或边界 2}；③{异常或边界 3}。
- 反例：①{不允许的规则或错误用法 1}；②{不允许的规则或错误用法 2}；③{不允许的规则或错误用法 3}。

REQ-{模块编码}-02 {功能标题}

- 功能点：{对该功能的简要概括描述}
- 异常与边界：①{异常或边界 1}；②{异常或边界 2}。
- 反例：①{不允许的规则或错误用法 1}；②{不允许的规则或错误用法 2}。

## 通用规则

- {模块通用规则 1}
- {模块通用规则 2}
- {模块通用规则 3}
```

目录生成要求：

- 标题后必须立即生成 `## 目录`。
- 目录必须包含所有 `REQ` 需求项和 `## 通用规则`，顺序与正文保持一致。
- 目录使用 Markdown 链接，锚点与正文标题保持可跳转对应关系。
- 后续新增、删除、调整 `REQ` 项时，必须同步更新目录。

## 三、编号规则

- 每个功能描述使用 `REQ-{模块编码}-{两位序号}`。
- `{模块编码}` 使用 3 到 8 位大写英文，优先取模块英文简称。
- 序号从 `01` 开始递增，不跳号。
- 同一模块内编号不得重复。

示例：

- 港口/码头主数据：`REQ-PORT-01`
- 币种汇率管理：`REQ-CURR-01`
- 车辆管理：`REQ-VEH-01`

## 四、功能拆分规则

功能拆分应围绕用户可感知的业务能力展开，一个编号只描述一个清晰功能点。

优先拆分以下类型：

- 列表展示
- 条件查询
- 新增或手工录入
- 编辑或更新
- 启用
- 停用
- 删除或禁止删除
- 批量导入
- 模板下载
- 批量导出
- 状态流转
- 编码或唯一性规则
- 必填和格式校验
- 业务关联校验
- 权限控制
- 审计追踪

不得把多个互相独立的操作硬塞进同一个需求项。例如“新增、编辑、删除”应拆成多个 `REQ`，除非它们确实共享同一套规则且业务风险很低。

## 五、字段写作规范

### 1. 功能点

用于描述该功能“做什么”，要求简短、明确、面向业务。

写法要求：

- 使用一句话概括功能。
- 说明操作对象和业务目的。
- 可列出关键字段，但不要堆砌全部数据库字段。
- 不写技术实现细节，例如组件名、接口路径、方法名。

推荐写法：

- `功能点：支持手工新增港口主数据，录入港口编码、港口名称、所属城市、经纬度、备注等信息，默认数据来源为手工导入，默认状态为启用。`

不推荐写法：

- `功能点：调用 /submit 接口保存表单。`
- `功能点：点击按钮打开弹窗，然后 avue-crud 触发 rowSave。`

### 2. 异常与边界

用于描述系统遇到异常、极端输入、权限限制、业务冲突时应如何处理。

写法要求：

- 使用 `①②③` 分点描述。
- 每点应描述“条件 + 处理方式”。
- 优先覆盖必填、格式、范围、重复、引用、权限、接口失败、文件格式、状态冲突等场景。
- 不只写“提示错误”，要尽量说明何时提示、是否阻止提交、是否刷新列表、是否保持原状态。

推荐写法：

- `异常与边界：①编码为空时阻止提交并提示；②重复编码时由后端校验并返回明确原因；③接口提交失败时保留用户输入，方便修正后重新提交。`

不推荐写法：

- `异常与边界：报错。`
- `异常与边界：需要校验。`

### 3. 反例

用于描述明确不允许发生的行为、错误用法或违反规则的输入。

写法要求：

- 使用 `①②③` 分点描述。
- 反例应直接表达“不允许什么”。
- 可以写非法输入示例，如 `CNSH1`、`-1`、`181`。
- 反例不写系统应如何处理，处理方式放在“异常与边界”。

推荐写法：

- `反例：①录入无上级港口的码头；②将 CNSHG 作为码头编码；③上级港口为 CNSHG 时录入 CNNGB-CT1。`

不推荐写法：

- `反例：用户乱填。`
- `反例：后台报错。`

## 六、通用规则写作规范

文末必须保留 `## 通用规则`，用于汇总跨多个功能项重复出现的模块级规则。

通用规则适合放：

- 编码规则
- 必填规则
- 金额、经纬度、备注等统一校验
- 数据来源规则
- 启停和删除约束
- 权限和审计约束
- 新增、更新、导入后刷新规则

通用规则不应替代具体功能项。若某规则会影响具体操作，应同时在对应 `REQ` 的“异常与边界”或“反例”中体现。

## 七、内容约束

- 不使用表格。
- 不写测试步骤、预期结果、测试数据列。
- 不写接口路径、组件名、代码方法名，除非用户明确要求。
- 不写冗长背景介绍，首屏直接进入需求卡内容。
- 不凭空增加用户未提及且现有业务无法推断的复杂能力。
- 当需求明确“不支持删除”时，应单独拆出“禁止删除”需求项，并在通用规则中再次强调。
- 当涉及导入时，通常需要同时拆出“批量导入”和“模板下载”。
- 当涉及状态时，通常需要分别拆出“启用”和“停用”。
- 当涉及用户可见审计字段时，优先使用姓名字段，避免直接展示用户 ID。

## 八、生成流程

1. 先理解用户提供的模块说明和现有参考需求卡。
2. 梳理模块核心对象、关键字段、数据来源、允许操作、不允许操作。
3. 按业务能力拆分 `REQ` 编号。
4. 在标题下生成 `## 目录`，覆盖所有 `REQ` 项和 `## 通用规则`。
5. 为每个 `REQ` 编写三行：功能点、异常与边界、反例。
6. 汇总重复规则到 `## 通用规则`。
7. 检查是否误用表格、是否遗漏用户强调的禁止项、是否出现互相矛盾描述，并确认目录链接与正文一致。

## 九、质量检查清单

- 是否在标题下生成 `## 目录`。
- 目录是否覆盖所有 `REQ` 项和 `## 通用规则`。
- 目录顺序是否与正文顺序一致，链接是否可跳转。
- 每个 `REQ` 是否只有一个明确功能主题。
- 每个 `REQ` 是否都有功能点、异常与边界、反例。
- 异常与边界是否包含处理方式，而不只是问题名称。
- 反例是否使用“不允许”口径。
- 编号是否连续且无重复。
- 是否覆盖新增、更新、导入、导出、启停、权限、审计等常见管理功能。
- 是否把用户明确禁止的能力写成了可用能力。
- 是否保持非表格格式。
