# 一、需求背景

汇丰银行后台需要基于客户数据标签筛选目标客群，用于权益投放、活动触达、名单圈选等业务场景。

当前《汇丰借记卡权益》PRD 中，"展示客群限制""领取客群限制"依赖标签 ID 关联客群，但标签本身的创建、编辑、维护能力缺失。本需求补齐客户数据标签的后台管理能力，支持运营人员通过可视化方式按客户属性组合规则，生成可被其他业务模块引用的标签。

# 二、需求列表

## （一）后台

入口：定制功能 → 汇丰银行 → 标签管理

1.  标签列表
    
2.  新建标签
    
3.  编辑标签
    
4.  查看标签
    
5.  删除标签
    
6.  启用 / 停用标签
    

# 三、需求详述

## （一）业务流程

```mermaid
flowchart TD
    A[运营人员进入标签管理] --> B{操作类型}
    B -->|新建/编辑| C[填写标签名称与描述]
    C --> D[新增规则组]
    D --> E[组内新增规则]
    E --> E1[选择参数]
    E1 --> E2{参数是否含历史月末值?}
    E2 -->|是| E3[选择时间窗口与聚合方式]
    E2 -->|否| E4[跳过]
    E3 --> E5[选择运算符]
    E4 --> E5
    E5 --> E6[填写/选择比较值]
    E6 --> F{继续新增规则?}
    F -->|是| E
    F -->|否| G[设置组内关系 且/或]
    G --> H{继续新增规则组?}
    H -->|是| D
    H -->|否| J[保存标签]
    J --> K[标签可在权益/活动配置中引用]
    B -->|查看| L[只读展示规则]
    B -->|删除| M{是否被业务引用?}
    M -->|是| M1[阻止删除, 提示先解除引用]
    M -->|否| M2[二次确认, 软删除]
    B -->|启用/停用| N[状态切换, 实时生效]
```

## （二）后台

菜单入口：liso 定制功能 → 汇丰银行 → 标签管理

### 1\. 标签列表

（1）筛选条件

| **字段名称** | **字段类型** | **是否必填** | **说明** |
| --- | --- | --- | --- |
| 标签名称 | 文本输入框 | 否   | 模糊搜索 |
| 标签 ID | 文本输入框 | 否   | 精确匹配 |
| 状态  | 下拉选择 | 否   | 全部 / 启用 / 停用，默认"全部" |
| 创建时间 | 日期范围 | 否   | 起止日期，格式 Y-m-d |
| 创建人 | 文本输入框 | 否   | 模糊搜索创建人姓名/账号 |

（2）操作按钮

-   查询：按筛选条件查询
    
-   重置：清空筛选条件
    
-   新建标签：打开【新建标签】页面
    

（3）列表字段

| 字段名称 | **说明** |
| --- | --- |
| 操作  | • 查看：查看标签详情  <br>• 编辑：编辑标签  <br>• 删除：软删除该标签  <br>• 启用 / 停用：切换标签状态 |
| 标签 ID | 系统生成，唯一，可复制 |
| 标签名称 | 运营定义的名称 |
| 标签描述 | 标签用途说明，超出省略 |
| 规则摘要 | "规则组数 / 规则总数"，如 `2 组 / 5 条` |
| 状态  | 启用 / 停用 |
| 创建人 / 创建时间 | 展示姓名与 Y-m-d H:i:s |
| 最后更新人 / 更新时间 | 展示姓名与 Y-m-d H:i:s |
| 引用数 | 该标签被权益、活动等引用的次数，点击可查看引用明细 |

（4）分页

-   默认每页 20 条
    
-   支持首页、上一页、下一页、末页、跳转至指定页
    

### 2\. 新建标签

采用单页表单布局：**基础信息 + 规则配置**。

2.1 基础信息

| **字段名称** | **字段类型** | **是否必填** | **说明** |
| --- | --- | --- | --- |
| 标签名称 | 文本输入框 | 是   | 最长 40 字符，同一渠道下不可重复 |
| 标签描述 | 文本域 | 否   | 最长 200 字符，便于识别标签用途 |
| 状态  | 开关（Toggle） | 是   | 默认开启 |

2.2 规则配置

规则采用"规则组 + 规则"两级嵌套结构：

-   **规则组之间**：固定为 **且（AND）**
    
-   **规则组内部**：可切换为 **且（AND）** 或 **或（OR）**
    

（1）规则组管理

-   **新增规则组**：页面右上角"+ 新增规则组"按钮；新建标签时默认已有 1 个空规则组
    
-   **删除规则组**：每个规则组右上角提供删除按钮；至少保留 1 个规则组，最后一个不可删除
    
-   **复制规则组**：复制当前组的全部规则到新规则组（含组内关系设置）
    

（2）规则管理（组内）

-   **新增规则**：规则组底部"+ 新增规则"按钮；新建规则组时默认已有 1 条空规则
    
-   **删除规则**：每条规则末尾提供删除按钮；每组至少保留 1 条规则
    
-   **组内关系**：规则组头部切换"且 / 或"
    

（3）单条规则配置

每条规则包含四段输入：**参数 → 时间窗口（仅历史值参数） → 运算符 → 比较值**

| **输入段** | **控件** | **说明** |
| --- | --- | --- |
| 参数  | 级联下拉 / 搜索下拉 | 按分组展示（客户基础 / 资产 / 尊尚与私行 / 跨境资格 / MGM / 投资偏好 / 行为触点），支持中文、参数名双向搜索。详见【附录 A：参数清单】 |
| 时间窗口 | 动态下拉组合 | 仅当参数含"近 12 个月月末值"变体时展示：  <br>① **取值方式**：当前值 / 指定某月 / 近 N 个月（N=1-12）  <br>② **聚合方式**（取值方式为"近 N 个月"时）：任一月满足 / 所有月满足 / 至少 M 个月满足 / 平均值 / 最大值 / 最小值（后三项仅数值类型支持） |
| 运算符 | 下拉  | 根据参数类型动态展示可选项。详见【附录 B：运算符清单】 |
| 比较值 | 动态控件 | 根据运算符类型切换输入控件：  <br>• 单值：文本 / 数字 / 日期选择器 / 布尔下拉（真/假）  <br>• 多值：多选下拉 或 以逗号分隔的批量输入  <br>• 区间：两个输入框或区间选择器  <br>• 为空 / 不为空：不需要输入 |

**参数取值规则：**

-   参数类型为枚举（如私行权益标签、客户持有定存种类、资产大类明细等）时，运算符与比较值均使用枚举选择器，避免手工输入错误
    
-   比较值输入需与参数类型一致：`BigDecimal` 仅允许数字；`YYYY-MM-DD` 仅允许日期；`Boolean` 使用"真/假"下拉选择
    

2.3 操作按钮

-   **取消**：若有未保存修改则二次确认"未保存内容将丢失，确认退出？"；否则直接返回列表
    
-   **保存**：校验必填项与规则完整性，通过后持久化；保存成功 toast "保存成功"并返回列表
    

### 3\. 编辑标签

-   入口：列表"编辑"按钮
    
-   字段同【新建标签】，**标签 ID 不可编辑**
    
-   若标签已被业务引用（引用数 > 0），保存时二次确认："该标签已被 N 个权益/活动引用，修改后将影响其客群匹配，确认保存？"
    
-   操作按钮：取消 / 保存（同新建）
    

### 4\. 查看标签

-   入口：列表"查看"按钮
    
-   字段同【编辑标签】
    
-   所有输入框、选择框、按钮（新增规则组 / 新增规则 / 删除）禁用
    
-   仅展示【返回】按钮
    

### 5\. 删除标签

-   入口：列表"删除"按钮
    
-   若 **引用数 > 0**：弹窗提示"该标签已被 N 个权益/活动引用，请先在对应业务中解除引用后再删除"，**仅显示"我知道了"按钮**，阻止删除
    
-   若 **引用数 = 0**：弹窗二次确认"确定要删除标签「XXX」吗？删除后无法恢复"
    
    -   **确定**：软删除（保留数据用于审计），列表不再展示
        
    -   **取消**：关闭弹窗
        

### 6\. 启用 / 停用

-   入口：列表"启用"/"停用"按钮
    
-   **启用 → 停用**：弹窗二次确认"停用后，引用该标签的业务将视为该客群不命中，确认停用？"
    
-   **停用 → 启用**：无需确认，直接切换
    
-   状态变更实时生效
    

### 7\. 状态定义

| 状态  | 说明  | 可执行操作 |
| --- | --- | --- |
| 启用  | 参与客户匹配，可被业务引用 | 查看 / 编辑 / 停用 / 删除（引用数=0 时） |
| 停用  | 不参与匹配，引用方视为未命中 | 查看 / 编辑 / 启用 / 删除（引用数=0 时） |

## （三）校验与异常

-   **标签名称**：必填、长度 ≤ 40、同渠道下唯一；重复时提示"标签名称已存在"
    
-   **规则组**：至少 1 个；每组至少 1 条完整规则
    
-   **规则完整性**：参数、运算符、比较值（除"为空/不为空"外）均不得为空
    
-   **数值比较值**：须可解析为数字；"区间"运算符要求下限 ≤ 上限
    
-   **日期比较值**：格式须与参数格式匹配（`YYYY-MM-DD` 或 `YYYY-MM`）
    
-   **枚举比较值**：仅允许枚举内取值
    
-   **时间窗口参数**：`近 N 个月`的 N 取值 1-12；`至少 M 个月`的 M 不得大于 N
    
-   **并发编辑**：以保存时间戳为准，后保存覆盖先保存；列表展示最后更新人与时间，便于追溯
    
-   **删除保护**：引用数 > 0 的标签不可删除
    
-   **接口异常**：保存 / 预估接口异常时 toast 报错并保留当前输入，不清空表单
    

# 附录 A：参数清单

> 所有参数仅在存在数据时返回；标签匹配时参数值为空则该条规则判为不匹配（除非运算符为"为空"）。

## A.1 客户基础与身份

| 中文名 | 参数名 | 类型  | 历史值 | 说明 / 取值 |
| --- | --- | --- | --- | --- |
| 客户 MSC Group | mscGroup / mscGroupList | String / List | ✔   | 历史值：近 12 个月月末值 `[{"date":"2025-03","mscGroup":"xxx"}, ...]` |
| 客户类型 MSC | mscCode / mscCodeList | String / List | ✔   | 历史值：近 12 个月月末值 `[{"date":"2025-03","mscCode":"xxx"}, ...]` |
| Current MSC entry date | currentMscEntryDate | String (YYYY-MM-DD) | <br> | 当前 MSC 生效起始日期 |
| 客户 MOB 值（含信用卡） | mob | String | <br> | 取值：0 / 1 / 2 / 3 / 4 / 5 / 6 / … |
| First contact date | firstContactDate | String (YYYY-MM-DD) | <br> | <br> |
| 开户时间 | openDate | String (YYYY-MM-DD) | <br> | <br> |
| 城市  | city | String | <br> | <br> |
| RM 类型 | rmType | String | <br> | <br> |
| 客户姓名 | customerName | String | <br> | <br> |

## A.2 资产与持有

| 中文名 | 参数名 | 类型  | 历史值 | 说明 / 取值 |
| --- | --- | --- | --- | --- |
| End of day balance（所有资金含产品） | endOfBalance / endOfBalanceList | BigDecimal / List | ✔   | 历史值：近 12 个月月末值 `[{"date":"2025-03","endOfBalance":"xxx"}, ...]` |
| TRB 值 - Avg TRB 口径（含家庭账户余额） | avgTrbIncludingHousehold / avgTrbIncludingHouseholdList | BigDecimal / List | ✔   | 历史值：近 12 个月月末值 |
| TRB 值 - Avg TRB 口径（不含家庭账户余额） | avgTrbExcludingHousehold / avgTrbExcludingHouseholdList | BigDecimal / List | ✔   | 历史值：近 12 个月月末值 |
| 资产大类明细 | assetCategoryDetails | String（多选） | <br> | 1-9 依次表示，多个英文逗号分隔：  <br>1 存款（定期 / 通知 / 个人大额存单）  <br>2 结构性存款（自有）  <br>3 基金相关产品（代客境外理财海外基金 / 代销内地证券投资基金 / 代销香港互认基金）  <br>4 理财产品（代销）  <br>5 代客境外理财海外债券型 / 结构性票据型（自有）  <br>6 资产管理计划（代销）  <br>7 信托计划（代销）  <br>8 保险产品（代销）  <br>9 预留 |
| 客户持有定存种类 | fixedDepositTypes | String（多选） | <br> | 1-5 依次表示，多个英文逗号分隔：  <br>1 不持有定存  <br>2 持有普通定存（美金）  <br>3 持有普通定存（人民币）  <br>4 持有普通定存（其他币种）  <br>5 持有大额存单（人民币） |

## A.3 尊尚 / 私行

| 中文名 | 参数名 | 类型  | 历史值 | 说明 / 取值 |
| --- | --- | --- | --- | --- |
| 近 6 个月是否符合尊尚资格 | isQualifiedLast6Months | Boolean | <br> | <br> |
| 私行权益标签 | privateBankTag | String | <br> | 取值：银辉 / 金曜 / 钻皓私人银行客户 |
| 首次升级尊尚的时间 | firstUpgradePremierDate | String (YYYY-MM-DD) | <br> | <br> |
| 私行 ID 卓越理财尊尚编号 | privateBankId | String | <br> | <br> |
| 尊尚资格到期日 | premierValidityDate | String (YYYY-MM-DD) | <br> | <br> |
| 首次达标日期 | firstAchievementDate | String (YYYY-MM) | <br> | <br> |
| 首次升级为 PB 的日期 | firstPBUpgradeDate | String (YYYY-MM) | <br> | <br> |
| PB 活动参与白名单 | isPbActivityWhitelisted | Boolean | <br> | <br> |

## A.4 跨境资格（1+1）

| 中文名 | 参数名 | 类型  | 历史值 | 说明  |
| --- | --- | --- | --- | --- |
| 是否为 1+1 CN-HK 双边客户 | isCrossBorderHK | Boolean | <br> | <br> |
| 是否为 1+1 CN-SG 双边客户 | isCrossBorderSG | Boolean | <br> | <br> |
| 是否为 HK qualifier | isHKQualifier | Boolean | <br> | <br> |
| New to 1+1 CN-HK qualifier 时间 | cnHkQualifierDate | String (YYYY-MM) | <br> | <br> |
| 是否为 SG qualifier | isSGQualifier | Boolean | <br> | <br> |
| New to 1+1 CN-SG qualifier 时间 | cnSgQualifierDate | String (YYYY-MM) | <br> | <br> |

## A.5 MGM / 推荐关系

| 中文名 | 参数名 | 类型  | 历史值 | 说明  |
| --- | --- | --- | --- | --- |
| 某自然月成功推荐人数 | monthlySuccessfulReferrals | List | ✔   | 近 12 个月 `[{"date":"2025-03","successfulReferrals":"xxx"}, ...]` |
| 某自然年成功推荐人数总数 | yearlySuccessfulReferrals | List | ✔   | 近 N 年 `[{"date":"2024","successfulReferrals":"xxx"}, ...]` |
| 是否被成功推荐来开户且达标 | isReferredAndQualified | Boolean | <br> | <br> |
| MGM case ID | mgmCaseId | String | <br> | <br> |
| 某自然月推荐人数 | monthlyReferrals | List | ✔   | 近 12 个月 |
| 某自然年推荐人数 | yearlyReferrals | List | ✔   | 近 N 年 |
| 推荐关系 | referralRelation | List | <br> | `[{customerId:"xxx"}, ...]`；通过被推荐人客户号查询其数据 |

## A.6 投资偏好

| 中文名 | 参数名 | 类型  | 历史值 | 说明  |
| --- | --- | --- | --- | --- |
| 客户持有 valid RPQ 等级 | validRpq | String | <br> | 取值：0 / 1 / 2 / 3 / 4 / 5 / NA |
| Prospects Needs | prospectsNeeds | Boolean | <br> | <br> |

## A.7 行为与触点

| 中文名 | 参数名 | 类型  | 历史值 | 说明  |
| --- | --- | --- | --- | --- |
| 是否关注 "汇丰中国客户服务" 微信服务号且绑定银行账户 | isHsbcWechatLinked | Boolean | <br> | <br> |
| 上个自然月未登录、当前自然月登录过手机银行 1 天或以上 | isPrevMonthInactiveCurMonthActive | Boolean | <br> | <br> |
| 从当前自然月起前序连续 2 个完整月是否登录手机银行 | isPrevTwoMonthsActive | Boolean | <br> | <br> |
| 是否绑定 RM 企业微信 | isRmWeComBound | Boolean | <br> | <br> |
| 是否首次使用 Face ID 或指纹登录手机银行 | firstBiometricLogin | Boolean | <br> | <br> |
| 成功完成模拟资产配置的客户 | isSimulatedAllocationCompleted | Boolean | <br> | <br> |

# 附录 B：运算符清单

## B.1 String（字符串 / 枚举）

| 运算符 | 适用说明 |
| --- | --- |
| 等于 / 不等于 | 单值精确匹配 |
| 包含 / 不包含 | 子串匹配（仅自由文本类参数开放） |
| 属于 / 不属于 | 多值集合，比较值为多选或逗号分隔 |
| 为空 / 不为空 | 无需输入比较值 |

## B.2 BigDecimal / Number（数值）

| 运算符 | 适用说明 |
| --- | --- |
| \= / ≠ | 精确匹配 |
| \>、≥、<、≤ | 单边比较 |
| 区间  | `[下限, 上限]`，支持"含 / 不含端点"设置 |
| 为空 / 不为空 | 无需输入比较值 |

## B.3 Boolean（布尔）

| 运算符 | 适用说明 |
| --- | --- |
| \= / ≠ | 比较值为 `真` / `假`（下拉选择）；`= 假` 与 `≠ 真` 等价 |

## B.4 Date（日期 YYYY-MM-DD / YYYY-MM）

| 运算符 | 适用说明 |
| --- | --- |
| \= / ≠ | 精确日期匹配 |
| \>、≥、<、≤ | 早于 / 晚于 |
| 区间  | 起止日期 |
| 相对当前 | N 日 / 月 / 年内；超过 N 日 / 月 / 年 |
| 为空 / 不为空 | 无需输入比较值 |

## B.5 List（近 N 月 / 近 N 年历史值）

### B.5.1 数值型 List（如 endOfBalanceList、TRB List）

先在"时间窗口"阶段聚合为单值，再套用 B.2 数值运算符：

-   **聚合方式**：任一月满足 / 所有月满足 / 至少 M 个月满足 / 平均值 / 最大值 / 最小值
    

### B.5.2 枚举 / 字符串型 List（如 mscGroupList、mscCodeList）

在"时间窗口"阶段选择匹配策略：

-   任一月等于 X
    
-   所有月等于 X
    
-   至少 M 个月等于 X
    

### B.5.3 推荐关系 List（referralRelation）

-   列表长度（推荐人数）→ 套用 B.2 数值运算符
    
-   是否包含指定客户号 → 精确匹配，比较值为客户号或客户号列表
    

### B.5.4 月度 / 年度推荐人数 List

-   可聚合后套用 B.2（同 B.5.1）
    
-   也可指定月份 / 年份单点匹配
    

<br>