# iot-card-import-task Delta Specification

## MODIFIED Requirements

### Requirement: Excel 文件格式规范

系统 SHALL 要求 Excel 文件必须包含 ICCID 和 MSISDN 两列。

**文件格式要求**:
- **文件格式**: 仅支持 `.xlsx` (Excel 2007+)
- **Sheet**: 读取第一个sheet,或优先读取名为"导入数据"的sheet
- **表头行**: 第1行(可选,但建议包含)
- **表头识别关键字**: 
  - ICCID列: iccid/ICCID/卡号/号码
  - MSISDN列: msisdn/MSISDN/接入号/手机号/电话/号码
- **列数要求**: 至少2列(ICCID和MSISDN)
- **列格式**: 应设置为文本格式(避免长数字被转为科学记数法)

**解析规则**:
- 自动检测表头(第1行包含识别关键字则跳过)
- 自动去除单元格首尾空格
- 跳过空行
- ICCID 为空的行记录为失败
- MSISDN 为空的行记录为失败

**示例Excel内容**:
```
| ICCID                | MSISDN      |
|----------------------|-------------|
| 89860012345678901234 | 13800000001 |
| 89860012345678901235 | 13800000002 |
```

#### Scenario: 解析标准双列 Excel 文件

- **GIVEN** Excel 文件内容为:
  ```
  | ICCID                | MSISDN      |
  | 89860012345678901234 | 13800000001 |
  | 89860012345678901235 | 13800000002 |
  ```
- **WHEN** 系统解析该 Excel 文件
- **THEN** 解析结果包含 2 条有效记录,每条包含 ICCID 和 MSISDN

#### Scenario: 支持中文表头

- **GIVEN** Excel 文件内容为:
  ```
  | 卡号                 | 接入号      |
  | 89860012345678901234 | 13800000001 |
  ```
- **WHEN** 系统解析该 Excel 文件
- **THEN** 系统正确识别列,解析结果包含 1 条有效记录

#### Scenario: 拒绝非Excel格式文件

- **GIVEN** 上传文件扩展名为 .csv
- **WHEN** 系统尝试解析该文件
- **THEN** 系统返回错误 "不支持的文件格式 .csv,请上传Excel文件(.xlsx)"

#### Scenario: Excel文件无工作表

- **GIVEN** Excel 文件不包含任何工作表
- **WHEN** 系统尝试解析该 Excel 文件
- **THEN** 系统返回错误 "Excel文件无工作表"

#### Scenario: MSISDN 为空的行记录失败

- **GIVEN** Excel 文件内容为:
  ```
  | ICCID                | MSISDN      |
  | 89860012345678901234 | 13800000001 |
  | 89860012345678901235 |             |
  ```
- **WHEN** 系统解析该 Excel 文件
- **THEN** 第一条记录解析成功,第二条记录标记为失败,原因为 "MSISDN 不能为空"

#### Scenario: ICCID 为空的行记录失败

- **GIVEN** Excel 文件内容为:
  ```
  | ICCID                | MSISDN      |
  | 89860012345678901234 | 13800000001 |
  |                      | 13800000002 |
  ```
- **WHEN** 系统解析该 Excel 文件
- **THEN** 第一条记录解析成功,第二条记录标记为失败,原因为 "ICCID 不能为空"

#### Scenario: 长数字无损解析

- **GIVEN** Excel 文件中ICCID列设置为文本格式,包含20位数字 "89860012345678901234"
- **WHEN** 系统解析该 Excel 文件
- **THEN** ICCID 完整保留为 "89860012345678901234",无精度损失,无科学记数法

## REMOVED Requirements

### Requirement: CSV 文件格式规范

**Reason**: 替换为Excel格式,解决长数字被转为科学记数法的问题

**Migration**: 
- 运营人员使用Excel模板替代CSV模板
- 前端提供Excel模板下载功能
- 历史CSV导入任务记录保持可查询,但不支持重新导入
