### 1. 介绍
#### 1.1 简介
本文档旨在描述即期年金发放批处理逻辑的更新,以及即期年金犹豫期后开始领取判断逻辑的实现。同时,针对“即期年金犹豫期后开始领取”方式,详细说明保单承保时回执日期生成后的首个年金给付日计算规则。
#### 1.2 原始需求
**需求一:即期年金发放批处理增加抽取条件**
- 增加即期年金责任判断逻辑。
- 系统日期需满足:系统日 >= 保单首个年金给付日。
- 根据产品设定,设置保单的首个年金给付日:
- 若设定为“即期年金保单生效日发放”,则首个年金给付日 = 保单生效当日。
- 若设定为“即期年金犹豫期后发放”,则首个年金给付日 = 犹豫期结束日。
**需求二:即期年金过犹发放产品-首个年金给付日客制**
- 在保单承保且生成回执日期后,设置首个年金给付日 = 回执签收日 + 15天(即犹豫期结束日)。
- 承保时生成年金给付数据时不设置开始给付时间、首个年金给付日和生调日,其他数据正常生成。
- 在回执日期生成后,更新给付计划中的开始给付时间和首个年金给付日期。
#### 1.3 开发任务
- 更新年金发放批处理逻辑以支持新增抽取条件。
- 实现保单承保时回执日期生成后的首个年金给付日计算逻辑。
- 验证首次及后续派发日期(pay_due_date)更新的准确性。
#### 1.4 过程概述
- 分析现有年金发放逻辑及数据结构。
- 设计新的逻辑以支持即期年金发放条件和首个年金给付日计算。
- 编写代码实现新增功能,并进行单元测试和集成测试。
- 验证功能是否符合需求,确保派发金额和日期正确。
### 2. 功能实现
#### 2.1 功能一:即期年金发放批处理增加抽取条件
**2.1.1 简要描述**
在年金发放批处理中,增加以下逻辑:
- 判断保单险种是否有即期年金责任。
- 检查系统日期是否大于等于保单的首个年金给付日。
- 根据产品设定,动态计算首个年金给付日。
**2.1.2 重要逻辑**
- **判断保单险种是否有即期年金责任**:查询保单险种表,检查是否存在即期年金责任。
- **检查系统日期与首个年金给付日的关系**:
- 若设定为“即期年金保单生效日发放”,则首个年金给付日 = 保单生效日。
- 若设定为“即期年金犹豫期后发放”,则首个年金给付日 = 犹豫期结束日。
- **动态计算首个年金给付日**:根据产品配置表中的设定,计算保单的首个年金给付日。
**2.1.3 代码实现**
```python
def calculate_first_annuity_payment_date(policy_id):
# 查询保单险种是否有即期年金责任
has_immediate_annuity = check_policy_for_immediate_annuity(policy_id)
if not has_immediate_annuity:
return None
# 获取产品设定
product_setting = get_product_setting(policy_id)
if product_setting == "IMMEDIATE_EFFECTIVE_DATE":
first_payment_date = get_policy_effective_date(policy_id)
elif product_setting == "AFTER_COOLING_PERIOD":
cooling_period_end_date = get_cooling_period_end_date(policy_id)
first_payment_date = cooling_period_end_date
return first_payment_date
```
#### 2.2 功能二:即期年金过犹发放产品-首个年金给付日客制
**2.2.1 简要描述**
- 在保单承保时,生成年金给付数据但不设置开始给付时间、首个年金给付日和生调日。
- 在回执日期生成后,更新给付计划中的开始给付时间和首个年金给付日期。
**2.2.2 重要逻辑**
- **保单承保时生成年金给付数据**:
- 给付计划中暂不设置开始给付时间、首个年金给付日和生调日。
- 其他数据(如金额、频率等)正常生成。
- **回执日期生成后更新给付计划**:
- 线下:通过核心线下保单回执确认功能,更新回执日期时触发给付计划更新。
- 线上:通过E销线上回执签收接口(1003920),回执签收数据落地核心时触发更新。
- **验证支付日期和金额**:
- 验证首次及后续派发日期(pay_due_date)根据年领或月领规则更新正确。
- 验证派发金额无误。
**2.2.3 代码实现**
```python
def update_annuity_payment_plan(policy_id, receipt_date):
# 计算犹豫期结束日
cooling_period_end_date = receipt_date + timedelta(days=15)
# 更新给付计划中的开始给付时间和首个年金给付日
update_payment_plan_start_date(policy_id, cooling_period_end_date)
update_payment_plan_first_payment_date(policy_id, cooling_period_end_date)
# 验证支付日期和金额
validate_payment_dates_and_amounts(policy_id)
```
### 3. 界面图
截取相关页面截图,展示用户界面变化。
### 4. 用例图
描绘新增功能的用例图。
### 5. 流程图
绘制新增逻辑的流程图。
### 6. 数据库
#### 6.1 E-R图
更新实体关系图以反映新增字段和表。
#### 6.2 表设计
展示涉及的数据表及其字段。
#### 6.3 新增表说明
描述新增表的用途和字段含义。
### 7. 数据字典
更新数据字典以包含新添加的字段和表。
### 8. 附加说明
其他需要说明的事项或注意事项。
---
请确认以上内容是否符合您的要求,或者您有其他具体的需求或细节希望加入开发文档中?