# 保险选择性投保 + 出行人线下投保备注

> 自动投保失败时（如婴儿不满1岁），支持选择部分出行人在线投保，并为不可投保的出行人添加线下投保备注。

---

## 一、新增接口

### 1.1 选择部分出行人投保

```
POST /admin/insurance/order/{orderId}/selective-purchase
```

**请求体**：
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| schemeId | Long | 是 | 保险方案ID |
| travelerIds | Long[] | 是 | 要投保的出行人ID列表 |

**响应**：同 `AutoPurchaseResultVO`（success, purchasedCount, failedCount, failureReason）

**使用场景**：自动投保失败后，排除不满1岁的婴儿，只选能投保的出行人。

### 1.2 添加出行人保险备注

```
POST /admin/insurance/order/{orderId}/traveler-note
```

**请求体**：
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| travelerId | Long | 是 | 出行人ID |
| travelerName | String | 否 | 出行人姓名 |
| noteType | String | 是 | OFFLINE=线下投保, SKIP=跳过, OTHER=其他 |
| remark | String | 否 | 备注说明，如"不满1岁，线下购买太平洋保险" |

**响应**：InsuranceTravelerNote 对象

**注意**：同一出行人重复调用会更新已有备注（upsert）。

### 1.3 删除出行人保险备注

```
DELETE /admin/insurance/order/{orderId}/traveler-note/{noteId}
```

### 1.4 查询出行人保险覆盖状态

```
GET /admin/insurance/order/{orderId}/traveler-coverage
```

**响应**：
```json
[
  {
    "travelerId": "123",
    "name": "张三",
    "birthday": "1990-01-01",
    "age": 36,
    "travelerType": "ADULT",
    "coverageStatus": "ONLINE_INSURED",
    "policies": [{ "policyNo": "xxx", "startDate": "2026-04-29", "endDate": "2026-05-04" }]
  },
  {
    "travelerId": "456",
    "name": "小宝宝",
    "birthday": "2025-10-01",
    "age": 0,
    "travelerType": "CHILD",
    "coverageStatus": "OFFLINE_NOTED",
    "noteId": "789",
    "noteType": "OFFLINE",
    "noteRemark": "不满1岁，线下购买太平洋保险"
  },
  {
    "travelerId": "789",
    "name": "李四",
    "coverageStatus": "NOT_COVERED"
  }
]
```

**coverageStatus 枚举**：
| 值 | 说明 |
|----|------|
| ONLINE_INSURED | 在线已投保（含保单详情） |
| OFFLINE_NOTED | 线下已备注（含备注内容） |
| NOT_COVERED | 未投保 |

---

## 二、使用流程

```
1. 自动投保失败（如有不满1岁婴儿）
2. 调用 GET /traveler-coverage 查看每个出行人状态
3. 对能投保的出行人：POST /selective-purchase（传 travelerIds）
4. 对不能投保的出行人：POST /traveler-note（noteType=OFFLINE + remark）
5. 再次调用 /traveler-coverage 确认全部覆盖
```

---

## 三、涉及服务

需重启：**hl-insurance-service**

## 四、数据库变更

新增表 `insurance_traveler_note`（DDL: `sql/insurance_traveler_note.sql`），测试环境已执行。
