# 退款政策简化 + 预订须知必填校验

## 日期
2026-03-22

---

## 一、退款政策管理简化

### 变更说明
退款政策现在**直接绑定到产品**，不再区分退款类型，不再有默认政策概念。

### 删除的字段

| 接口 | 删除字段 | 说明 |
|------|---------|------|
| 退款政策列表/详情 VO | `refundType` | 不再区分定金/全款/尾款类型 |
| 退款政策列表/详情 VO | `isDefault` | 不再有默认政策概念 |
| 退款政策创建/修改请求 | `refundType` | 同上 |
| 退款政策创建/修改请求 | `isDefault` | 同上 |
| 产品详情 VO | `refundPolicyId` | 已废弃，用 refundPolicyIds |
| 产品详情 VO | `refundPolicyName` | 已废弃 |

### 退款政策列表页（退款管理 > 退款政策）

**需要删除的列：**
- ~~退款类型~~
- ~~生效开始~~
- ~~生效结束~~
- ~~默认~~

**保留的列：**
- 政策名称
- 规则数（规则条数）
- 状态（启用/禁用）
- 创建时间
- 操作

### 退款政策创建/修改表单

**需要删除的字段：**
- ~~退款类型（DEPOSIT/BALANCE/FULL 下拉）~~
- ~~是否默认（开关）~~

**保留的字段：**
- 政策名称（必填）
- 备注（选填）
- 退款规则列表（必填，每条规则包含：距出发天数 + 退款比例%）

### 接口无变化
- `GET /admin/order/refund-policy/list` — 退款政策列表
- `GET /admin/order/refund-policy/enabled` — 启用的政策列表（产品设计选择用）
- `GET /admin/order/refund-policy/{policyId}` — 政策详情
- `POST /admin/order/refund-policy` — 创建政策
- `PUT /admin/order/refund-policy/{policyId}` — 修改政策
- `DELETE /admin/order/refund-policy/{policyId}` — 删除政策（不再限制"默认不能删"）
- `PUT /admin/order/refund-policy/{policyId}/toggle?enabled=true/false` — 启用/禁用

---

## 二、产品退款政策绑定（按支付方式映射）

### `refundPolicyIds` 字段格式（Map，不变）

```json
{
  "refundPolicyIds": {
    "FULL": "3",
    "DEPOSIT": "1",
    "BALANCE": "4"
  }
}
```

- key = 支付类型：`FULL`（全款）、`DEPOSIT`（定金）、`BALANCE`（尾款）
- value = 退款政策ID（从 `GET /admin/order/refund-policy/enabled` 获取）
- 退款政策本身不再区分类型，任何政策都可以绑定到任何支付类型

### 退款政策与支付方式的关系

| 支付方式 | 需要配置的退款政策 |
|---------|------------------|
| 全款支付 (FULL) | FULL |
| 定金+尾款 (DEPOSIT) | DEPOSIT + BALANCE |

**上架/完成时自动校验**：系统根据产品的支付方式（`product_pricing.payment_type`）检查 `refundPolicyIds` 中是否配置了对应的退款政策。缺少则校验不通过。

---

## 三、产品上架/完成新增必填校验

以下字段在**上架（PUBLISHED）**和**定制完成（COMPLETED）**时必须填写，否则校验不通过：

| 字段 | 说明 | 选择来源 |
|------|------|---------|
| `bookingTermsId` | 预订条款 | `GET /admin/product/booking-terms/enabled` |
| `refundPolicyIds` | 退款政策（按支付方式映射） | `GET /admin/order/refund-policy/enabled` |
| `warmTipsId` | 温馨提示 | `GET /admin/product/warm-tips/enabled` |
| `insuranceSchemeId` | 保险方案 | 已有 |
| `contractSchemeId` | 合同方案 | 已有 |

---

## 四、所有产品改为预约产品

所有产品的 `isBooking` 已设为 `true`（预约产品）。产品列表"预约"列应全部显示"是"。
