## ADDED Requirements

### Requirement: 批量设置卡的套餐系列

系统 SHALL 允许代理批量为 IoT 卡设置套餐系列分配。只能设置当前店铺被分配且启用的套餐系列。

#### Scenario: 成功批量设置
- **WHEN** 代理提交多个 ICCID 和一个有效的 series_allocation_id
- **THEN** 系统更新这些卡的 series_allocation_id 字段

#### Scenario: 系列未分配给店铺
- **WHEN** 代理尝试设置一个未分配给卡所属店铺的系列
- **THEN** 系统返回错误 "该套餐系列未分配给此店铺"

#### Scenario: 系列分配已禁用
- **WHEN** 代理尝试设置一个已禁用的系列分配
- **THEN** 系统返回错误 "该套餐系列分配已禁用"

#### Scenario: ICCID 不存在
- **WHEN** 提交的 ICCID 中有不存在的卡
- **THEN** 系统返回错误，列出不存在的 ICCID

#### Scenario: 卡不属于当前店铺
- **WHEN** 代理尝试设置不属于自己店铺的卡
- **THEN** 系统返回错误 "部分卡不属于您的店铺"

---

### Requirement: 清除卡的套餐系列关联

系统 SHALL 允许代理清除卡的套餐系列关联（将 series_allocation_id 设为 0）。

#### Scenario: 清除单卡关联
- **WHEN** 代理将卡的 series_allocation_id 设为 0
- **THEN** 系统清除该卡的套餐系列关联

#### Scenario: 批量清除关联
- **WHEN** 代理批量提交 ICCID 列表，series_allocation_id 为 0
- **THEN** 系统清除这些卡的套餐系列关联

---

### Requirement: 查询卡的套餐系列信息

系统 SHALL 在卡详情和列表中返回套餐系列关联信息。

#### Scenario: 卡详情包含系列信息
- **WHEN** 查询卡详情
- **THEN** 响应包含 series_allocation_id、关联的系列名称、佣金状态

#### Scenario: 卡列表支持按系列筛选
- **WHEN** 代理按 series_allocation_id 筛选卡列表
- **THEN** 系统只返回关联该系列的卡

---

### Requirement: IotCard 模型新增字段

系统 MUST 在 IotCard 模型中新增以下字段：
- `series_allocation_id`：套餐系列分配 ID
- `first_commission_paid`：一次性佣金是否已发放（默认 false）
- `accumulated_recharge`：累计充值金额（默认 0）

#### Scenario: 新卡默认值
- **WHEN** 创建新的 IoT 卡
- **THEN** series_allocation_id 为空，first_commission_paid 为 false，accumulated_recharge 为 0

#### Scenario: 字段在响应中可见
- **WHEN** 查询卡信息
- **THEN** 响应包含这三个新字段
