﻿# 08-KASIKA入口页与VISTA首次访问开户

版本：v0.3

## 修订记录

| 日期 | 版本/序号 | 变更类型 | 变更摘要 |
| --- | --- | --- | --- |
| 2026-06-15 | v0.1 | 新建 | 建立 KASIKA入口页与 VISTA 首次访问开户需求。 |
| 2026-08-04 | v0.2 | 重大需求变更 | 明确首次绑定只回写 KASIKA 的 `VISTAURL` 和适用时的 `VISTAPWD`；VISTA 顾客 ID、绑定状态和首次访问完成时间仅在 VISTA 内保存。 |
| 2026-08-07 | v0.3 | 重大需求变更 | 补足 C 端本人确认前的信息展示边界，并将入口页原型同步为 VISTA C 的顾客侧表现。 |

## 1. 模块定位

本文定义 KASIKA 自动回复邮件中的 KASIKA入口页，以及顾客首次访问时由 VISTA 完成项目校验、KASIKA 顾客校验、VISTA 顾客绑定 / 创建、邮箱本人校验、可选密码设置、`customer_status` 保存、首次绑定标签初始化、后续状态自动更新控制，以及进入 VISTA 的业务流程。

该流程用于解决以下问题：

- KASIKA 自动回复邮件是即时发送，不能等待 VISTA 后续同步生成访问 URL 和密码。
- 顾客点击 KASIKA 邮件后，需要在当前访问中完成 VISTA 顾客创建或绑定。
- VISTA 需要保存 KASIKA 的 `customer_status` 字段；首次绑定时必须根据该字段执行一次同名 VISTA 标签初始化，以保证顾客获得初始访问权限。
- 入口链接、KASIKA 顾客、VISTA 顾客和邮箱之间必须一致，避免错误绑定或越权访问。

本流程不替代 `04-统一顾客联动同步流程.md`。`04` 仍负责 KASIKA -> VISTA 批量同步、同步兜底、批量绑定和日志追溯；本文只定义“顾客点击 KASIKA 邮件入口触发的 KASIKA入口页流程”。

## 2. 业务目标

1. KASIKA 自动回复邮件可以在顾客注册后立即提供 VISTA 入口。
2. 顾客点击邮件中的 VISTA 入口后，VISTA 可以确认该项目是否已联动 KASIKA。
3. VISTA 可以校验 `kasikacid` 的合法性，并取得 KASIKA 顾客信息。
4. VISTA 可以判断 `kasikacid` 与 VISTA 顾客是否已存在绑定，并校验绑定账号邮箱一致性。
5. 未绑定但存在同邮箱 VISTA 顾客时，系统仅可在无冲突且该 VISTA 顾客未被标记禁止 KASIKA 再绑定的情况下完成绑定。
6. 未绑定且不存在同邮箱 VISTA 顾客时，系统继续新建绑定流程。
7. 系统根据 KASIKA 设置页“是否需要 VISTA 访问密码”的开关，决定顾客是否需要设置密码。
8. 系统保存 KASIKA 返回的 `customer_status` 字段，并在首次绑定时强制执行一次同名 VISTA 标签初始化；后续状态变化是否自动更新标签 / 权限，再由配置页 `customer_status` 状态权限自动更新开关控制。
9. 成功后写入 KASIKA 识别 Cookie，并跳转进入 VISTA 首页登录或访问流程。

## 3. 前置条件

### 3.1 VISTA 项目侧前置条件

1. VISTA 项目已保存完整 4 个 KASIKA API KEY，具备调用 KASIKA 顾客相关 API 的基础条件。
2. VISTA 项目已绑定稳定且唯一的访问子域名，系统可通过访问 Host 反查唯一 VISTA 项目。
3. VISTA 项目设置页已提供 KASIKA入口页 URL，并由管理员复制到 KASIKA 自动回复邮件模板中。
4. VISTA 项目已配置标签权限模板；首次绑定时，`customer_status` 同名标签命中后，通过标签权限模板取得顾客初始访问权限。
5. VISTA 项目设置页存在“是否需要 VISTA 访问密码”开关，默认开启。
6. VISTA 项目设置页存在 `customer_status` 状态权限自动更新开关，默认开启；该开关只控制首次绑定后的后续状态变化是否自动更新标签和权限，不影响首次绑定时的标签初始化。

### 3.2 KASIKA 邮件模板侧前置条件

1. 使用者需要将 VISTA 提供的入口 URL 模板预先填写到 KASIKA 自动回复邮件模板中。
2. KASIKA 自动回复邮件必须能够插入 KASIKA 顾客 ID 变量。
3. VISTA 后台展示和复制的项目入口 URL 使用当前 VISTA 项目的唯一子域名，不包含具体 KASIKA 顾客 ID。
4. KASIKA 自动回复邮件实际发送给顾客时，需要由 KASIKA 邮件模板或 KASIKA 发送机制追加 / 插入 `kasikacid` 参数。
5. 为兼容已配置过的历史模板，系统可在过渡期兼容读取 `cid` 参数；当 `kasikacid` 与 `cid` 同时存在且值不一致时，按参数冲突处理并跳系统 404 页面。

VISTA 后台展示和复制的 URL 格式：

```text
https://{domain}.homevista.jp/kasika-entry
```

顾客实际收到的 URL 需要在 KASIKA 发送后形成以下效果：

```text
https://{domain}.homevista.jp/kasika-entry?kasikacid={KASIKA顾客ID}
```

## 4. 核心判断逻辑

入口请求必须按以下顺序判断。前置判断失败时，不继续执行后续步骤。

| 顺序 | 判断项 | 失败处理 |
| --- | --- | --- |
| 1 | 通过访问 Host 验证 VISTA 项目是否已联动 KASIKA | 无联动项目、项目不可识别或 API KEY 不完整时，跳系统 404 页面 |
| 2 | 校验 `kasikacid` 参数是否存在、唯一、格式合法 | 非法、缺失、空值、冲突参数时，跳系统 404 页面 |
| 3 | 调用 KASIKA 顾客查询接口取得顾客信息，并确认返回顾客 ID 与 `kasikacid` 一致 | 查询失败、顾客不存在、返回 ID 不一致时，跳系统 404 页面 |
| 4 | 判断 `kasikacid` 是否已绑定 VISTA 顾客，并校验绑定账号邮箱一致性 | 按绑定状态分流 |
| 5 | 顾客只输入邮箱，系统校验邮箱合法性及是否与 KASIKA 顾客邮箱一致 | 不一致或格式非法时在页面报错，允许重试；邮箱校验阶段不展示密码输入框 |
| 6 | 邮箱校验通过后，判断是否存在可绑定的同邮箱 VISTA 顾客 | 可绑定则建立绑定并跳过密码输入；不可绑定则按冲突处理；不存在则进入新建 VISTA 顾客流程 |
| 7 | 仅在需要新建 VISTA 顾客且“是否需要 VISTA 访问密码”开关开启时展示密码设置 | 存在可绑定 VISTA 顾客，或项目关闭访问密码开关时，均跳过密码输入 |
| 8 | 创建 / 绑定 / 激活 VISTA 账号，保存 `customer_status`，并在首次绑定时强制执行一次同名 VISTA 标签初始化 | 无同名标签时不新增标签，不阻塞开户；标签初始化失败不回滚绑定 |
| 9 | 提示成功，写入 KASIKA Cookie，跳转进入 VISTA 首页登录或访问流程 | Cookie 写入失败不阻塞进入，但需记录日志 |

### 4.1 绑定状态分流

| 状态 | 判断条件 | 处理规则 |
| --- | --- | --- |
| 状态 1：已绑定且邮箱相同 | `kasikacid` 已绑定 VISTA 顾客，且 KASIKA 返回邮箱与绑定 VISTA 顾客邮箱一致 | 写入或确认 KASIKA Cookie，跳转 VISTA 首页登录或访问流程；不重复创建顾客，不重复要求设置密码，不刷新 KASIKA 字段快照、`customer_status` 标签或权限 |
| 状态 2：未绑定但存在同邮箱 VISTA 顾客 | `kasikacid` 未绑定；VISTA 存在邮箱相同顾客 | 顾客邮箱校验通过后，如该 VISTA 顾客未绑定 KASIKA、未标记禁止 KASIKA 再绑定，且不属于已删除后恢复但未经过后台治理的历史顾客，则建立绑定并跳过密码输入；如该 VISTA 顾客已绑定其他 KASIKA customer_id、已标记禁止再绑定或存在删除恢复风险，则提示错误 |
| 状态 3：已绑定但邮箱不同 | `kasikacid` 已绑定 VISTA 顾客，但 KASIKA 返回邮箱与绑定 VISTA 顾客邮箱不同 | 提示错误信息，不允许继续，不自动改绑 |
| 状态 4：未绑定且不存在同邮箱 VISTA 顾客 | `kasikacid` 未绑定；VISTA 不存在同邮箱顾客 | 继续新建绑定流程 |

说明：

1. 状态 2 中，如同邮箱 VISTA 顾客存在多条、候选顾客已绑定其他 KASIKA customer_id，或候选顾客已标记禁止 KASIKA 再绑定，均按冲突处理，不自动绑定。
2. 状态 2 中，访问密码开关不影响可绑定的既有 VISTA 顾客；不得因 KASIKA入口页绑定同邮箱既有顾客而要求顾客设置或重置密码。
3. 状态 3 不允许用本次输入邮箱覆盖既有 VISTA 顾客邮箱，也不允许自动改绑到其他 VISTA 顾客。
4. 状态 1 属于既有绑定顾客的直接访问路径，不承担后续同步职责；后续 `customer_status` 变化、标签替换和权限更新统一由 `04` 定义的同步流程处理。
5. 所有错误提示面向顾客应使用通用文案，不展示 KASIKA 顾客 ID、VISTA 顾客 ID、内部绑定对象或接口错误详情。

## 5. 业务流程图

```mermaid
flowchart TB
  A["顾客点击 KASIKA 邮件中的 VISTA 入口"] --> B{"VISTA 项目是否已联动 KASIKA"}
  B -->|否| B1["跳系统 404 页面"]
  B -->|是| C{"kasikacid 参数是否合法"}
  C -->|否| C1["跳系统 404 页面"]
  C -->|是| D["调用 KASIKA 顾客查询接口"]
  D --> E{"KASIKA 顾客是否可取得且 ID 一致"}
  E -->|否| E1["跳系统 404 页面"]
  E -->|是| F{"kasikacid 是否已绑定 VISTA 顾客"}

  F -->|已绑定| G{"绑定顾客邮箱是否与 KASIKA 邮箱一致"}
  G -->|是| G1["写入 / 确认 KASIKA Cookie"]
  G1 --> G2["跳转 VISTA 首页登录或访问流程"]
  G -->|否| G3["提示绑定邮箱不一致错误"]

  F -->|未绑定| J["顾客只输入邮箱"]
  J --> K{"邮箱格式合法且与 KASIKA 邮箱一致"}
  K -->|否| K1["页面报错并允许重试"]
  K -->|是| H{"是否存在同邮箱 VISTA 顾客"}
  H -->|存在且未绑定 KASIKA、未禁止再绑定、无删除恢复风险| H1["建立 kasikacid 与 VISTA 顾客绑定<br/>跳过密码输入"]
  H -->|存在但已绑定其他 KASIKA customer_id<br/>或已禁止再绑定 / 存在删除恢复风险| H2["提示绑定冲突错误"]
  H -->|不存在| I["进入新建 VISTA 顾客流程"]

  I --> L{"项目是否要求 VISTA 访问密码"}
  L -->|是| M["顾客设置访问密码"]
  L -->|否| N["跳过密码设置"]
  M --> O["完成 VISTA 顾客创建 / 绑定处理"]
  N --> O
  H1 --> O
  O --> P["读取并保存 customer_status 字段"]
  P --> R["首次绑定标签初始化<br/>配置 customer_status 同名 VISTA 标签"]
  R --> S["按标签权限模板取得初始权限"]
  S --> T["写入 KASIKA Cookie"]
  T --> U["提示成功并跳转 VISTA 首页登录或访问流程"]
```

## 6. 顾客账号与绑定规则

| 状态 | 含义 | 处理规则 |
| --- | --- | --- |
| 未创建 | VISTA 尚未为该 KASIKA 顾客创建账号 | 点击入口时进入新建绑定流程 |
| 已创建未激活 | VISTA 已存在同邮箱账号，但尚未完成首次访问 | 无绑定冲突时可建立绑定；作为既有可绑定顾客处理，不展示密码设置 |
| 已激活 | VISTA 顾客已可访问 | 已绑定且邮箱一致时直接跳转；未绑定但同邮箱且无其他绑定时可建立绑定，建立绑定后不展示密码设置、不重置密码 |
| 绑定异常 | KASIKA customer_id 与 VISTA 顾客绑定冲突、邮箱不一致或保存失败 | 不自动覆盖；提示通用错误并记录日志 |
| 已删除或禁止再绑定历史 | VISTA 顾客曾被删除导致 KASIKA 有效绑定失效，或被后台处置标记禁止 KASIKA 再绑定 | 不自动恢复原绑定，不绑定到当前或其他 KASIKA 顾客；提示通用错误并记录日志 |

## 7. 邮箱与密码规则

### 7.1 邮箱本人校验

1. 顾客必须输入邮箱。
2. VISTA 前端先做本地必填和格式校验；未输入邮箱或邮箱格式错误时，不提交后端校验，在输入框下方展示红色错误提示并描红输入框。
3. 本地校验通过后，VISTA 再校验输入邮箱是否与 KASIKA 顾客邮箱一致。
4. 邮箱与 KASIKA 顾客邮箱不一致时，页面提示错误并允许重试。
5. 邮箱校验通过后，才允许判断是否绑定既有 VISTA 顾客或进入新建 VISTA 顾客流程。
6. 邮箱校验阶段不展示新密码和确认密码输入框；密码输入只在邮箱校验通过、确认需要新建 VISTA 顾客且项目要求访问密码时展示。
7. 本期不单独提供连续失败次数配置；异常访问和校验失败仍应记录日志，必要的基础防刷策略由系统通用安全策略处理。

### 7.2 访问密码设置

1. 当项目设置页“是否需要 VISTA 访问密码”开关开启时：
   - 仅当邮箱校验通过后确认需要新建 VISTA 顾客时，才展示新密码和确认密码。
   - 系统按 VISTA 现有密码强度规则校验。
   - 密码设置成功后，创建 VISTA 顾客账号。
   - 如存在可绑定的同邮箱 VISTA 顾客，入口页不得展示新密码和确认密码输入框，不得设置或重置既有密码；完成绑定后进入后续流程。
2. 当项目设置页“是否需要 VISTA 访问密码”开关关闭时：
   - 页面不展示新密码和确认密码输入框。
   - 邮箱校验通过后，如存在可绑定 VISTA 顾客则建立绑定；如不存在同邮箱 VISTA 顾客则直接创建 VISTA 顾客账号。
   - 系统仍需在日志中记录本次账号是在“无需访问密码”配置下创建或绑定。
3. 本期不采用入口链接长期免校验访问；即使关闭访问密码，也必须完成项目、`kasikacid`、KASIKA 顾客和邮箱校验。

## 8. `customer_status` 保存、标签配置与初始权限

### 8.1 字段获取

首次访问时，VISTA 通过 KASIKA 顾客查询接口获取顾客信息。权限相关字段本期限定为：

- `customer_id`
- `email`
- `customer_status`

其他 KASIKA 字段可作为日志或后续扩展字段保存，但本期不通过第三方字段映射页配置权限规则。

VISTA 顾客创建或绑定成功后，需要将 `customer_id`、`email`、`customer_status` 作为 KASIKA 关联信息单独保存。其中 `customer_status` 是本期权限变化的唯一 KASIKA 来源字段，不能只保存在完整 KASIKA 字段快照中。

配置约束：

1. `customer_status` 状态权限自动更新开关由 `01-KASIKA联动配置管理.md` 定义。
2. 首次绑定时，无论该开关开启或关闭，入口页流程都必须按本章规则执行一次 `customer_status` 同名 VISTA 标签初始化，并据此取得初始权限。
3. 该开关只控制首次绑定后的后续 `customer_status` 变化是否自动更新 VISTA 标签和权限。
4. 开关关闭时，后续同步取得新的 `customer_status` 仅保存和展示状态，不再自动新增、替换或删除 VISTA 标签，不主动重算权限，不撤销顾客既有标签或既有权限。
5. 已绑定且邮箱相同的顾客再次通过入口页访问时，入口页只确认访问身份并跳转，不刷新 `customer_status`、标签或权限。

### 8.2 标签配置规则

1. 系统读取 KASIKA 返回的 `customer_status` 字段值，并保存为结构化关联字段。
2. 首次绑定时，如字段值为空、缺失或无法解析，则不配置 VISTA 标签，不阻塞开户，但需记录“首次状态为空 / 无法解析”日志。
3. 首次绑定时，如 VISTA 项目中存在与 `customer_status` 字段值文字相同的标签，则必须为该 VISTA 顾客配置该标签，用于初始化顾客访问权限。
4. 首次绑定时，如不存在同名标签，系统不自动创建标签，不新增该状态标签，不阻塞开户，但需记录“首次状态无同名标签”日志，作为配置缺失风险。
5. 首次绑定完成后，如 `customer_status` 状态权限自动更新开关开启，后续 `customer_status` 与上一轮已保存值不一致时，系统按最新状态更新顾客标签：添加新状态对应的同名标签，并删除上一状态对应的旧标签。
6. 首次绑定完成后，如 `customer_status` 状态权限自动更新开关关闭，后续取得的新 `customer_status` 仅保存和展示，不新增、替换或删除 VISTA 标签，不主动触发权限重算。
7. 标签配置完成后，C 端顾客访问权限接口按 `09-C端顾客访问权限接口.md` 的统一规则实时返回可访问内容：标签权限模板并集 + 个人权限追加。

### 8.3 初始权限

1. 首次绑定时，入口页流程必须基于本次 `customer_status` 标签初始化结果计算初始访问权限，不受 `customer_status` 状态权限自动更新开关影响。
2. 如果 `customer_status` 同名标签命中权限模板，系统按顾客当前标签命中的权限模板并集计算初始访问权限。
3. 如果未命中标签或命中标签未配置权限模板，系统不额外赋予默认内容；最终访问内容仍按当前标签权限模板并集和个人权限追加计算，结果可以为空。
4. 首次绑定完成后，开关关闭时，顾客最终可访问内容仍由其当前已有标签和个人权限追加决定；入口页后续访问不因新的 `customer_status` 主动更新权限。
5. 标签配置或权限计算失败不应回滚已通过的邮箱校验和绑定结果，但需记录日志。

## 9. KASIKA 识别 Cookie

顾客通过 KASIKA入口页访问时，VISTA 需要在确认 KASIKA 顾客身份后写入或确认 KASIKA 识别 Cookie，用于后续顾客访问行为上报和 KASIKA 浏览履历归属。

处理规则：

1. VISTA 只有在访问 Host 已解析到唯一项目，且 KASIKA 顾客校验成功后，才允许写入或确认 KASIKA 识别 Cookie。
2. Cookie 值使用已校验的 KASIKA customer_id，即入口参数 `kasikacid` 对应的顾客 ID。
3. 如果浏览器已有其他 KASIKA 顾客 Cookie，入口页应以当前入口链接中已通过 KASIKA 校验的 `kasikacid` 为准。
4. 如果入口 `kasikacid` 缺失、格式不合法、KASIKA 顾客查询失败，或返回 customer_id 与 `kasikacid` 不一致，系统不得覆盖浏览器既有 Cookie。
5. 如果浏览器存在 A 顾客的 VISTA 登录态，但入口链接校验成功后对应 B 顾客，系统不得在 A 登录态下直接进入 B 的私有访问页；应清理或切换 VISTA 登录态，或引导 B 顾客完成登录 / 本人确认流程。
6. Cookie 写入或覆盖失败不阻塞顾客开户、登录或访问，但应记录为访问统计识别失败或降级结果。

## 10. 回写 KASIKA

顾客通过 KASIKA入口页完成首次开户和首次绑定后，VISTA 只向 KASIKA 的两个承接字段回写：

- `VISTAURL`：HOMEVISTA 访问链接。
- `VISTAPWD`：当项目要求设置访问密码且顾客已设置密码时，回写顾客首次访问密码。

说明：

1. 如项目关闭“是否需要 VISTA 访问密码”，则不回写访问密码字段。
2. KASIKA入口页完成首次绑定后，是否触发顾客通知邮件按 `04` 的 KASIKA 自动回复邮件方案执行；入口页流程不追加触发类 KASIKA 顾客标签，也不依赖场景邮件触发。
3. 回写失败不应回滚 VISTA 顾客创建、绑定、密码设置、`customer_status` 保存或标签配置结果，应记录为部分失败。
4. VISTA 顾客 ID、绑定状态、首次访问完成时间，以及 VISTA 侧顾客姓名、邮箱、手机号、公司名等资料均不回写 KASIKA；这些信息只在 VISTA 内保存和追溯。

## 11. 前端 UI

### 11.1 C 端顾客侧页面

C 端本期只设计一个“首次访问设置页”，通过单页多状态覆盖加载、本人校验、密码设置、完成和异常提示。

页面属于 VISTA C 顾客侧页面：使用不遮挡主要内容的半透明玻璃承载当前操作；具体的登录页颜色、排版和状态细节尚未在设计系统中定义，标记为“待设计系统补充”，不得将 VISTA B 后台的表格、侧栏或配置页样式带入该页面。

| 状态 | 页面表现 | 信息展示边界 |
| --- | --- | --- |
| 加载 / 校验中 | 展示确认中提示；校验后进入邮箱校验、跳转登录或错误态 | 不展示顾客姓名、KASIKA customer_id 或权限结果 |
| 本人校验 | 邮箱输入框、主按钮；本地校验错误时输入框描红并在下方展示红色错误提示 | 先做未输入 / 格式错误的前端校验；通过后再校验是否与 KASIKA 顾客邮箱一致 |
| 密码设置 | 新密码、确认密码、主按钮 | 仅在邮箱校验通过、需要新建 VISTA 顾客且项目要求访问密码时展示；不再重复展示邮箱输入 |
| 设置完成 / 同步处理中 | 展示完成或处理中提示；成功后进入 VISTA | 可展示绑定完成和初始权限已适用；回写失败不阻塞进入 VISTA |
| 通用错误提示 | 展示通用错误标题、说明和联系销售等建议动作；不提供重试按钮 | 不展示已确认项目、顾客姓名、KASIKA customer_id 或权限结果 |

在加载、本人校验和密码设置状态中，页面不得展示项目名、顾客姓名、`kasikacid`、KASIKA 顾客 ID、顾客状态或权限结果；设置完成状态可仅展示“绑定完成”和“初始访问设置已适用”等不含身份信息的结果。

异常统一进入通用错误提示状态，不为每种错误拆独立页面，不提供重新校验 / 重试按钮。系统 404 页面用于承接项目未联动、`kasikacid` 非法、顾客不可取得等链接级失败；此类错误不会因顾客在当前页面重复点击而改变结果。

移动端适配要求：

1. 入口页必须适配手机访问，最小按 375px 宽度验收。
2. 移动端使用单列结构：品牌 / 项目状态信息在上，当前操作区在下。
3. 邮箱、密码、确认密码和主要按钮需占满可用宽度；邮箱与密码不在同一状态中同时展示，按钮和输入框高度不低于 44px。
4. 项目状态、错误提示和完成进度不得横向溢出；长项目名或提示说明需要换行。
5. 移动端仍使用同一页面多状态，不新增移动端专用独立页面。

### 11.2 B 端项目设置 UI

在既有 KASIKA 设置页增加只读字段 `VISTA 项目入口 URL` 和复制按钮；增加“是否需要 VISTA 访问密码”开关，以及 `customer_status` 状态权限自动更新开关。复制出的 URL 使用当前项目唯一子域名，不包含具体 `kasikacid`；复制成功后显示 Toast。

本期不新增独立配置页、独立启用开关、KASIKA 邮件模板编辑器、第三方权限映射页入口、本人校验方式或连续失败限制配置。

### 11.3 顾客详情 UI

顾客详情页按 `05B-顾客详情页.md` 展示 KASIKA 联动模块；已绑定 KASIKA 的顾客在基础信息区中邮箱只读。标签和权限调整按 `05B-顾客详情页.md`、`05C-顾客权限页.md`，KASIKA 绑定关系不在权限 tab 中编辑。

## 12. 用户用例

### 用例 12.1 已绑定且邮箱相同

- 前置：`kasikacid` 已绑定 VISTA 顾客，且 KASIKA 返回邮箱与绑定 VISTA 顾客邮箱相同。
- 操作：顾客点击 KASIKA 邮件入口。
- 预期：
  - 系统通过项目、`kasikacid` 和 KASIKA 顾客校验。
  - 写入或确认 KASIKA Cookie。
  - 跳转 VISTA 首页登录或访问流程。
  - 不重复创建顾客，不重复设置密码。
  - 不刷新 KASIKA 字段快照、`customer_status` 标签或权限。

### 用例 12.2 未绑定但存在同邮箱 VISTA 顾客

- 前置：`kasikacid` 未绑定；VISTA 存在同邮箱顾客。
- 操作：顾客点击入口并通过邮箱校验。
- 预期：
  - 如该 VISTA 顾客未绑定 KASIKA，且未标记禁止 KASIKA 再绑定，则建立绑定。
  - 无论该 VISTA 顾客是否已激活，均不展示密码设置，不设置或重置既有密码。
  - 建立绑定后必须执行一次 `customer_status` 同名标签初始化，再进入 Cookie 写入和登录或访问流程。
  - 如该 VISTA 顾客已绑定其他 KASIKA customer_id、已标记禁止 KASIKA 再绑定，或属于已删除后恢复但未经过后台治理的历史顾客，则提示错误，不自动改绑或恢复绑定。

### 用例 12.2A 未绑定且不存在同邮箱顾客，项目要求访问密码

- 前置：`kasikacid` 未绑定；VISTA 不存在同邮箱顾客；项目开启“是否需要 VISTA 访问密码”。
- 操作：顾客点击入口，先输入邮箱并通过校验。
- 预期：
  - 邮箱校验阶段只展示邮箱输入，不展示密码输入。
  - 确认需要新建 VISTA 顾客后，页面进入密码设置状态。
  - 顾客设置密码成功后，系统创建 VISTA 顾客并绑定 `kasikacid`。

### 用例 12.2B 未绑定且不存在同邮箱顾客，项目不要求访问密码

- 前置：`kasikacid` 未绑定；VISTA 不存在同邮箱顾客；项目关闭“是否需要 VISTA 访问密码”。
- 操作：顾客点击入口，输入邮箱并通过校验。
- 预期：
  - 全流程不展示密码输入。
  - 邮箱校验通过并确认需要新建 VISTA 顾客后，系统直接创建 VISTA 顾客并绑定 `kasikacid`。

### 用例 12.3 已绑定但邮箱不同

- 前置：`kasikacid` 已绑定 VISTA 顾客，但 KASIKA 返回邮箱与绑定 VISTA 顾客邮箱不同。
- 操作：顾客点击入口。
- 预期：
  - 页面提示通用错误。
  - 不允许继续开户或登录。
  - 不覆盖 VISTA 顾客邮箱，不自动改绑。

### 用例 12.4 未绑定且不存在同邮箱顾客

- 前置：`kasikacid` 未绑定；VISTA 不存在同邮箱顾客。
- 操作：顾客点击入口，输入邮箱；如确认需要新建 VISTA 顾客且项目要求访问密码，再进入密码设置。
- 预期：
  - 邮箱格式合法且与 KASIKA 顾客邮箱一致后，系统创建 VISTA 顾客并绑定 `kasikacid`。
  - 系统保存 KASIKA `customer_status`。
  - 无论 `customer_status` 状态权限自动更新开关是否开启，系统都必须根据 `customer_status` 执行一次同名 VISTA 标签初始化，并据此取得初始权限。
  - 成功后写入 KASIKA Cookie，并跳转 VISTA 首页登录或访问流程。

### 用例 12.5 `customer_status` 无同名标签

- 前置：KASIKA 返回 `customer_status` 字段值，但 VISTA 项目不存在同名标签。
- 操作：顾客完成邮箱校验和开户。
- 预期：
  - 首次绑定时，无论 `customer_status` 状态权限自动更新开关是否开启，系统都不自动创建标签，不新增该状态标签。
  - 首次绑定完成后，如后续 `customer_status` 变化且状态权限自动更新开关开启，仍按后续更新规则处理旧状态标签；如开关关闭，仅保存状态，不新增标签、不删除上一状态标签、不主动更新权限。
  - 开户流程不被阻塞。
  - 顾客不因该字段新增权限；如已有其他标签或个人权限追加，则按既有配置计算，否则访问内容结果可以为空。

## 13. 验证标准

- 项目未联动 KASIKA、项目不可识别或 API KEY 不完整时，KASIKA入口页跳系统 404 页面。
- `kasikacid` 缺失、为空、格式非法、重复冲突或与兼容参数 `cid` 值冲突时，跳系统 404 页面。
- KASIKA 顾客查询失败、顾客不存在或返回 customer_id 与 `kasikacid` 不一致时，跳系统 404 页面。
- 已绑定且邮箱相同时，写入 / 确认 KASIKA Cookie 后跳转 VISTA 首页登录或访问流程，不刷新 KASIKA 字段快照、`customer_status` 标签或权限。
- 未绑定但存在同邮箱 VISTA 顾客时，仅在该 VISTA 顾客未绑定 KASIKA、未标记禁止再绑定，且不属于已删除后恢复但未经过后台治理的历史顾客时自动绑定；存在可绑定 VISTA 顾客时不展示密码设置、不设置或重置既有密码；已绑定其他 KASIKA customer_id、已标记禁止再绑定或存在删除恢复风险时提示错误。
- 已绑定但 VISTA 顾客邮箱与 KASIKA 顾客邮箱不同时提示错误，不自动改绑。
- 不存在绑定关系且不存在 VISTA 同邮箱顾客时，继续新建绑定流程。
- 顾客输入邮箱必须同时满足格式合法且与 KASIKA 顾客邮箱一致。
- “是否需要 VISTA 访问密码”开关仅在需要新建 VISTA 顾客时生效：开启时邮箱校验通过后进入密码设置，关闭时跳过密码设置；存在可绑定 VISTA 顾客时，无论开关状态均跳过密码设置。
- 创建或绑定 VISTA 顾客后，系统保存 `customer_status` 字段。
- 首次绑定时，系统必须根据 `customer_status` 字段执行一次同名 VISTA 标签初始化并计算初始权限，不受 `customer_status` 状态权限自动更新开关影响。
- 首次绑定完成后，`customer_status` 状态权限自动更新开关开启时，系统根据后续 `customer_status` 变化更新同名 VISTA 标签；无同名标签时不新增状态标签，若本次确认为状态变化，仍需删除上一状态对应的旧标签。
- 首次绑定完成后，`customer_status` 状态权限自动更新开关关闭时，系统不因后续状态变化新增、替换或删除 VISTA 标签，不主动计算权限，不撤销既有标签或既有权限。
- 首次绑定完成后，只向 KASIKA 的 `VISTAURL` 和适用时的 `VISTAPWD` 回写；VISTA 顾客 ID、绑定状态和首次访问完成时间不回写。
- 成功后写入 KASIKA Cookie，并跳转进入 VISTA 首页登录或访问流程。
