# 币种汇率管理需求卡

---

### REQ-CR-001 列表与分页

- 功能点：
  - 展示币种编码、币种名称、汇率、生效日期、失效日期、状态、来源、更新时间等字段。
  - 支持按币种编码、币种名称、状态查询。
  - 支持组合查询。
  - 支持分页展示。
  - 默认按币种编码升序、生效日期降序。

- 异常与边界：
  - 查询无数据展示空状态。
  - 当前页无数据时自动调整页码。
  - 数据量较大时分页加载。

- 反例：
  - 不允许分页后丢失查询条件。
  - 不允许一次加载全部数据。


---

### REQ-CR-002 新增汇率

- 功能点：
  - 支持新增币种汇率。
  - 币种编码从币种主数据选择。
  - 币种名称自动带出，不可编辑。
  - 汇率支持最多6位小数。
  - 生效日期必填。
  - 状态默认启用。

- 异常与边界：
  - 币种不存在禁止保存。
  - 汇率为空、小于等于0禁止保存。
  - 同币种+同生效日期禁止重复。

- 反例：
  - 不允许手动填写不存在币种。
  - 不允许保存无效汇率。


---

### REQ-CR-003 编辑汇率

- 功能点：
  - 支持编辑汇率、币种、生效日期、状态、备注。
  - 保存后刷新列表。

- 异常与边界：
  - 修改币种或生效日期时重新校验有效区间。
  - 修改后产生重复记录禁止保存。

- 反例：
  - 不允许编辑失效日期。
  - 不允许产生重复有效区间。


---

### REQ-CR-004 汇率有效期自动维护

- 功能点：
  - 汇率有效期采用左闭右开模型：[生效日期, 失效日期)。
  - 新增汇率时，自动维护同币种历史汇率。
  - 找到同币种上一条有效记录：
    - 上一条记录失效日期 = 新记录生效日期。
  - 新记录失效日期为空，表示长期有效。
  - 失效日期由系统维护，不支持手工编辑。


- 异常与边界：
  - 同币种同生效日期禁止保存。
  - 停用记录不参与有效期计算。
  - 不同币种之间互不影响。

- 反例：
  - 不允许用户修改失效日期。
  - 不允许出现有效期重叠。


---

### REQ-CR-005 启用/停用

- 功能点：
  - 支持启用、停用汇率。
  - 停用后不参与业务换算。
  - 启用后恢复参与业务换算。

- 异常与边界：
  - 停用最后一条有效汇率允许执行。
  - 状态变更后刷新列表。

- 反例：
  - 不允许停用删除数据。
  - 不允许停用修改失效日期。


---

### REQ-CR-006 批量导入

- 功能点：
  - 支持下载导入模板。
  - 支持Excel批量导入。
  - 导入字段：
    - 币种编码
    - 币种名称
    - 汇率
    - 生效日期
  - 失效日期由系统自动计算。
  - 导入前执行数据校验。
  - 导入完成展示成功、失败数量。
  - 存在失败数据时自动生成错误文件：
    - 基于原导入文件增加最后一列「错误原因」。
    - 多个错误原因使用逗号分隔。
  - 用户可下载错误文件修正后重新导入。

- 异常与边界：
  - 文件格式错误提示失败。
  - 单行数据错误不影响其他正确数据。
  - 全部失败时不入库，但仍生成错误文件。

- 反例：
  - 不允许异常数据静默跳过。
  - 不允许错误数据入库。
  - 不允许只提示失败数量，不提供错误明细。


---

### REQ-CR-007 导出

- 功能点：
  - 支持按当前查询条件导出。
  - 导出全部符合条件的数据。

- 异常与边界：
  - 无数据允许导出空文件。
  - 数据量过大提示处理。

- 反例：
  - 不允许只导出当前页。
  - 不允许导出未筛选数据。


---

### REQ-CR-008 汇率查询接口

- 功能点：
  - 根据币种编码、业务日期查询有效汇率。
  - 匹配规则：
    - 生效日期 ≤ 业务日期 < 失效日期。
  - 仅返回状态为启用的数据。

- 异常与边界：
  - 无有效汇率返回未找到。
  - 币种不存在返回异常。

- 反例：
  - 不允许返回最新汇率。
  - 不允许返回停用汇率。


---

### REQ-CR-009 权限与日志

- 功能点：
  - 财务主管、财务专员可操作。
  - 记录新增、编辑、启停、导入操作日志。

- 异常与边界：
  - 无权限访问提示权限不足。

- 反例：
  - 不允许无权限用户操作。
  - 不允许删除操作日志。