## MODIFIED Requirements

### Requirement: B2 可购买套餐列表接口

系统 SHALL 提供 `GET /api/c/v1/asset/packages?identifier=xxx`，并且 MUST 要求个人客户认证。接口 MUST 在归属校验通过后返回可购买套餐列表。价格规则 MUST 为：代理渠道取分配记录上的生效售价，平台渠道取套餐生效售价。若建议零售价未配置，系统 SHALL 使用成本价作为生效售价。过滤规则 MUST 同时满足：`Package.status=1`、`shelf_status` 可售、加油包前置主套餐条件成立，并且 MUST 排除赠送套餐。结果 MUST 按展示价格升序。响应体 SHALL 包含 `packages[]`，每项至少含 `package_id`、`package_name`、`package_type`、`retail_price`、`cost_price`、`validity`、`is_addon`。错误码/消息 MUST 至少包含：`INVALID_PARAM/参数错误`、`FORBIDDEN/无权限操作该资产或资源不存在`、`PACKAGE_NOT_AVAILABLE/当前无可购买套餐`。

#### Scenario: 代理渠道价格与过滤生效
- **WHEN** 客户查询可购套餐且其销售链路为代理渠道，部分套餐建议零售价未配置
- **THEN** 系统仅返回可售且满足价格约束的套餐，并按生效价格升序输出

#### Scenario: 赠送套餐不出现在可购列表
- **WHEN** 赠送套餐已存在于后台数据中
- **THEN** C 端可购买套餐列表 MUST 不返回该套餐
