## ADDED Requirements

### Requirement: 资产域操作日志使用独立数据模型
系统 SHALL 为资产域操作日志使用独立数据模型与数据表，不得复用账号域日志表；资产日志模型 MUST 支持记录资产类型、资产ID、资产标识符、操作动作、操作结果、前后镜像和请求上下文。

#### Scenario: 新增资产日志表并独立于账号日志
- **WHEN** 系统初始化资产域审计能力
- **THEN** 系统使用独立的 `tb_asset_operation_log` 存储资产日志，且不写入 `tb_account_operation_log`

#### Scenario: 资产日志表不使用外键约束
- **WHEN** 创建资产日志表结构
- **THEN** 表间关联通过 ID 字段维护，不创建数据库外键和 GORM 关联标签

### Requirement: 资产敏感写操作必须全量记录
系统 SHALL 对卡和设备相关敏感写操作进行全量审计记录，结果态 MUST 覆盖 `success`、`failed`、`denied`。

#### Scenario: 成功操作写入 success 日志
- **WHEN** 设备分配、卡绑定、手动实名、停用等写操作执行成功
- **THEN** 系统写入 `result_status=success` 的资产操作日志

#### Scenario: 业务失败写入 failed 日志
- **WHEN** 写操作执行过程中发生网关失败或数据库失败
- **THEN** 系统写入 `result_status=failed` 的资产操作日志，并记录错误码与错误摘要

#### Scenario: 权限或规则拒绝写入 denied 日志
- **WHEN** 操作被权限规则、保护期规则或业务前置条件拒绝
- **THEN** 系统写入 `result_status=denied` 的资产操作日志，并记录拒绝原因

### Requirement: 审计日志必须包含完整上下文
系统 SHALL 在资产日志中记录“谁、何时、做了什么、从什么变成什么”，并包含请求链路上下文。

#### Scenario: 记录操作人和时间
- **WHEN** 生成任一资产操作日志
- **THEN** 日志包含 `operator_id`、`operator_type`、`operator_name` 与 `created_at`

#### Scenario: 记录前后镜像
- **WHEN** 记录状态流转或配置修改类操作
- **THEN** 日志同时包含 `before_data` 和 `after_data`，可直接体现变更差异

#### Scenario: 记录请求上下文
- **WHEN** 记录资产操作日志
- **THEN** 日志包含 `request_id`、`ip_address`、`user_agent`、`request_path`、`request_method`

### Requirement: 审计写入异步且不阻塞主流程
系统 SHALL 采用异步方式写入资产审计日志，日志写入失败 MUST 不影响业务主流程结果。

#### Scenario: 异步写入
- **WHEN** 业务操作完成并触发审计记录
- **THEN** 主流程先返回业务结果，日志由异步流程落库

#### Scenario: 日志写入失败降级
- **WHEN** 资产日志落库失败
- **THEN** 系统仅记录 Error 级别应用日志，不回滚已成功的主业务操作

### Requirement: 敏感字段脱敏与日志体积控制
系统 SHALL 对敏感字段执行脱敏处理，并对日志体积设置上限，避免泄露与性能风险。

#### Scenario: 远程配置敏感字段脱敏
- **WHEN** 记录设备 WiFi/密码等敏感配置变更日志
- **THEN** `before_data`/`after_data` 中不得出现明文密码，仅保留掩码或摘要

#### Scenario: 超长数据裁剪
- **WHEN** 业务上下文数据超过日志体积阈值
- **THEN** 系统对超长字段进行裁剪并保留裁剪标记，保证日志写入稳定
