# 04 — 新增/编辑客户的查重校验 + 企查查工商回填 seam Type: research Status: open Blocked by: 02 ## 问题 定新增/编辑客户表单的**查重校验规则**(内建在新增流程、写死不做后台可配)+ **企查查外部服务契约 seam**(调用点/回填范围/异常/精确查重触发)。**A4-6 独立查重页 + 客户合并不做**(chart grill D6)。 ## 一手证据(蓝湖缓存 txt) - `a4-3-3-1_新增客户信息.txt` — 主页面 §3.2 客户名称与自动查重 / §3.3 企业查询与工商信息回填 / §3.4 客户重复校验 / §3.5 联系人明细表 / §3.6 工商信息 - `a4-3-3-2_编辑客户信息.txt` — 编辑页复用新增结构 + 有 seam ## 已知事实(原型明文,节选) - **自动查重(防抖)**:客户名称停止输入→防抖异步查 CRM 相似客户;仅名称输入框下方展示相似列表;只提示、不阻止;无权限的匹配脱敏为「存在匹配记录」不显 name/编号/负责人。 - **企业查询**:`查询企业`→调外部工商服务→候选列表→单选回填。首次选择只回填**当前为空且属于允许范围**的工商字段(工商名称/信用代码/法代/成立时间/注册资本/经营范围/人员规模/年产值/工商注册地址)。已填字段再次选择必须弹「受影响字段确认」再覆盖;空值不覆盖原值。**不覆盖**:客户类型/行业/所属地区/关系星级/负责人/部门/协同人/人脉关系单位/联系人/备注。 - **精确查重触发**:选择企业并回填后立即用统一社会信用代码执行精确查重;保存时再执行一次终查。 - **保存时校验**(服务端最终查重): - 统一社会信用代码在**全部未删除客户**中必须唯一 → 完全相同**硬拦禁止创建**(含无权查看时不显 name/编号,只提示阻断)。 - 客户名称相似但信用代码不同 → 弹「客户相似确认」弹窗,用户可"仍要创建";"仍要创建"后**服务端必须再查一次**(防并发/防中间被人创建同信用代码)。 - **联系人明细表内联查重**:同表格内联系电话相同→禁止提交定位重复行;无电话按「客户+姓名+职务」提示疑似重复;全库按电话查重(对已存在联系人)。→ 联系人查重口径归本票,联系人 CRUD 建模归票 06。 - **父子客户防环**:`是否子客户=是`时父客户必填;父客户不得选择自身及其下级 → 服务端必须校验不得形成循环。 - **人脉关系单位**:标签集(单个≤50字,同 name 不重复),非关联 CRM 客户。 ## 待拍板点 1. **相似客户判定口径**(阈值/算法)——原型说「使用 CRM 后端统一查重服务,不在前端固化阈值」。本票拍板:走什么算法(简单 Trigram / MySQL 全文索引 / 编辑距离 / N-gram 分词)?先给最简可行方案。 2. **企查查外部服务契约 seam**:不深挖服务实现,只定接口(`CustomerCompanyLookupPort`?)+ 请求(name)/响应(候选列表带9项工商字段)/异常语义(无结果/失败/超时);实现可 mock。 3. **信用代码格式校验**:18 位数字或字母组合(原型明说,正则拍死)。 4. **成立时间不得晚于当前日期** 前置校验。 5. **并发建客户**(同信用代码并发提交):DB 唯一约束兜底 + 乐观返回「重复」错误;先查后写做双保险但不依赖它。 6. **相似客户提示的脱敏**:无权限用户命中他人客户时的返回负载最小化(不带 name/编号/负责人/联系方式),只回「命中数量+提示语」。 ## Answer _(待 resolve)_