### 开发设计文档
#### 变更历史
| 日期 | 作者 | 版本 | 备注 | 复核人 |
|------------|--------|------|--------------|--------|
| 2024-07-19 | San.zhang | V0.1 | 初稿 | |
#### 相关文档
- **发布日期**: [具体日期待填]
- **文档名称**: [具体名称待填]
- **版本**: [具体版本待填]
#### 文档签收单
- **文档名**: xxx
- **签收人**: [待签收]
- **签名**: [待签名]
- **角色**: [待填]
- **签收日期**: [待填]
#### 目录
1. **介绍**
- 简介
2. **原始需求**
3. **开发任务**
4. **过程概述**
5. **功能实现**
- 功能描述
- 重要逻辑
- 代码实现
6. **流程图**
7. **界面图**
8. **用例图**
9. **数据库**
- E-R图
- 表设计
- 新增表说明
10. **数据字典**
11. **附加说明**
---
### 内容详情
#### 介绍
##### 简介
本需求旨在对年金发放批处理逻辑进行调整,增加即期年金犹豫期后开始领取的判断逻辑。
#### 原始需求
年金发放批处理需增加即期年金犹豫期后开始领取的判断逻辑:
- 保单险种有即期年金责任。
- 系统日 >= 保单首个年金给付日。
- 根据产品设定,设置保单的首个年金给付日:
- 若设定为“即期年金保单生效日发放”,则首个年金给付日 = 保单生效当日。
- 若设定为“即期年金犹豫期后发放”,则首个年金给付日 = 犹豫期结束日。
- 当发放方式为“2-即期年金犹豫期后开始领取”时,派发年金需已过犹豫期。
- 业务上即期年金无需生调,系统现状符合此要求。
#### 开发任务
实现年金发放批处理逻辑调整,确保满足上述需求。
#### 过程概述
通过调整年金发放批处理逻辑,新增即期年金犹豫期后开始领取的判断逻辑,并确保系统现状符合业务要求。
#### 功能实现
##### 功能描述
新增即期年金犹豫期后开始领取的判断逻辑,具体包括:
- 判断保单险种是否有即期年金责任。
- 根据产品设定,计算保单的首个年金给付日。
- 确保派发年金时已过犹豫期。
##### 重要逻辑
- **首个年金给付日计算逻辑**:
- 若设定为“即期年金保单生效日发放”,则首个年金给付日 = 保单生效当日。
- 若设定为“即期年金犹豫期后发放”,则首个年金给付日 = 犹豫期结束日。
- **年金发放条件**:
- 系统日 >= 首个年金给付日。
- 发放方式为“2-即期年金犹豫期后开始领取”时,需已过犹豫期。
##### 代码实现
```java
public class AnnuityPaymentProcessor {
public void processAnnuityPayment(Policy policy, LocalDate systemDate) {
// 判断保单是否有即期年金责任
if (!policy.hasImmediateAnnuityResponsibility()) {
return;
}
// 获取首个年金给付日
LocalDate firstAnnuityPaymentDate = calculateFirstAnnuityPaymentDate(policy);
// 判断是否满足发放条件
if (systemDate.isBefore(firstAnnuityPaymentDate)) {
return;
}
// 发放年金
distributeAnnuity(policy);
}
private LocalDate calculateFirstAnnuityPaymentDate(Policy policy) {
if (policy.getProductSetting().isImmediateAnnuityOnEffectiveDate()) {
return policy.getEffectiveDate();
} else if (policy.getProductSetting().isImmediateAnnuityAfterHesitationPeriod()) {
return policy.getHesitationEndDate();
}
throw new IllegalArgumentException("Invalid product setting for immediate annuity.");
}
private void distributeAnnuity(Policy policy) {
// 年金发放逻辑
System.out.println("Distributing annuity for policy: " + policy.getPolicyNumber());
}
}
```
#### 流程图
(此处插入年金发放批处理的流程图)
#### 界面图
(此处插入相关界面截图)
#### 用例图
(此处插入用例图)
#### 数据库
##### E-R图
(此处插入E-R图)
##### 表设计
| 表名 | 字段名 | 类型 | 描述 |
|---------|-----------------|--------|----------------|
| Policy | policy_id | INT | 保单ID |
| | start_date | DATE | 保单生效日期 |
| | end_date | DATE | 保单结束日期 |
##### 新增表说明
无新增表。
#### 数据字典
(此处插入数据字典)
#### 附加说明
无。