[ { "flow": "SETUP", "case": "华南销售部 leader=admin", "verdict": "✅", "detail": "" }, { "flow": "SETUP", "case": "seed 销售甲(华南销售部/在职/启用)", "verdict": "✅", "detail": "id=760000000000000001" }, { "flow": "SETUP", "case": "甲乙丙 assign→BUDDY", "verdict": "✅", "detail": "" }, { "flow": "F-13", "case": "preview 圈定 3 条(甲乙丙+残留)", "verdict": "✅", "detail": "实际 3 条" }, { "flow": "F-13", "case": "initiate reason 缺失 → 67011", "verdict": "✅", "detail": "code=67011 如预期" }, { "flow": "F-13", "case": "toDirectorId 不在可交接范围 → 67011", "verdict": "✅", "detail": "code=67011 如预期" }, { "flow": "F-13", "case": "initiate resign → 交接单 JG202609040003(D22 自动推导罗伟健)", "verdict": "✅", "detail": "status=0 totalCount=3" }, { "flow": "F-13", "case": "totalCount=圈定全量(无 customerIds 字段=名下全量口径)", "verdict": "✅", "detail": "totalCount=3 vs 预览 3" }, { "flow": "F-13", "case": "存在未完成交接单重入 → 67010", "verdict": "✅", "detail": "code=67010 如预期" }, { "flow": "F-13", "case": "initiate 后客户 owner→接收总监(整批原子)", "verdict": "✅", "detail": "owner=739564171091247104" }, { "flow": "F-13", "case": "商机 owner 三列联动(owner/快照/部门)", "verdict": "✅", "detail": "e2c-联动-交割 owner=739564171091247104" }, { "flow": "F-13", "case": "oplog 含交接编号+发起交接叙事", "verdict": "✅", "detail": "交割单【JG202609040003】发起交接:客户归属由【曾偲青】移交【罗伟健】" }, { "flow": "F-13", "case": "detail 明细齐且全待分配", "verdict": "✅", "detail": "minutes=3" }, { "flow": "F-13", "case": "assignable 含销售甲且排除发起人/总监", "verdict": "⚠", "detail": "接口 30s×2 稳定超时未返回 → 登记 D-07" }, { "flow": "F-13", "case": "assign 单条 甲→销售甲", "verdict": "✅", "detail": "fails=[]" }, { "flow": "F-13", "case": "重复分配已分配明细 → 67012(失败行)", "verdict": "✅", "detail": "{'id': '750844484425613312', 'reason': 'ASSIGN_INVALID', 'message': '该客户已分配'}" }, { "flow": "F-13", "case": "分配给当前负责人 → 67012(失败行)", "verdict": "✅", "detail": "{'id': '750844485444829184', 'reason': 'ASSIGN_INVALID', 'message': '不能分配给当前负责人'}" }, { "flow": "F-13", "case": "分配对象不存在 → 67012(spec 66001 偏差记录)", "verdict": "✅", "detail": "code=67012 fails=[]" }, { "flow": "F-13", "case": "批量 assign 剩余成功 2/2", "verdict": "✅", "detail": "fails=[]" }, { "flow": "F-13", "case": "assignedCount==totalCount → 自动置已完成(D23)", "verdict": "✅", "detail": "assigned=3/3 status=1" }, { "flow": "F-13", "case": "交接单已完成不可再分配(67004 或失败行收口)", "verdict": "✅", "detail": "code=0 fails=[{'id': '750844484425613312', 'reason': 'STATUS_NOT_ALLOWED', 'message': '交接单已完成,不可再分配'}]" }, { "flow": "F-13", "case": "assign 后客户/商机 owner→销售甲", "verdict": "✅", "detail": "cust=760000000000000001 opp=760000000000000001" }, { "flow": "F-13", "case": "page 交接编号过滤命中", "verdict": "✅", "detail": "命中 1 条" }, { "flow": "F-13", "case": "交接编号当日续号不重号", "verdict": "✅", "detail": "max=JG202609040003 vs 本单 JG202609040003" }, { "flow": "F-14", "case": "模板下载(RFC5987 文件名+xlsx 魔数)", "verdict": "✅", "detail": "CD=attachment; filename*=UTF-8''%E5%AE%A2%E6%88%B7%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D" }, { "flow": "F-14", "case": "importMode 非法 → 67013", "verdict": "✅", "detail": "code=67013 如预期" }, { "flow": "F-14", "case": "模板表头不符 → 67013", "verdict": "✅", "detail": "code=67013 如预期" }, { "flow": "F-14", "case": "文件内无数据行 → 67013", "verdict": "✅", "detail": "code=67013 如预期" }, { "flow": "F-14", "case": "APPEND_ONLY 预检:t=7 insert=1 fail=5(含已存在) suspect=1", "verdict": "✅", "detail": "t=7 i=1 u=0 f=5 s=1" }, { "flow": "F-14", "case": "行级判定:已存在 FAIL / 文件内重复组 FAIL(D24) / 相似 SUSPECT", "verdict": "✅", "detail": "r2=FAIL r3=文件内多行匹配同一客户(重复时不导入),请合并为 r7=SUSPECT" }, { "flow": "F-14", "case": "UPDATE_ONLY 预检:update=1(按编号) insert=0", "verdict": "✅", "detail": "u=1 i=0" }, { "flow": "F-14", "case": "UPSERT 同名(新编号)→SUSPECT 不按名称匹配", "verdict": "✅", "detail": "r1=SUSPECT 疑似重复:客户名称与已有客户相似,本次不写入,请走新增/编辑" }, { "flow": "F-14", "case": "confirm DRAFT→RUNNING 异步执行", "verdict": "✅", "detail": "taskId=750875703951491072" }, { "flow": "F-14", "case": "重复 confirm → 67014", "verdict": "✅", "detail": "code=67014 如预期" }, { "flow": "F-14", "case": "执行终态", "verdict": "⚠", "detail": "status=FAILED fail_reason=导入执行异常,请联系管理员(D-05 导入 INSERT 缺省列阻断)" }, { "flow": "F-14", "case": "失败明细 0 行", "verdict": "⚠", "detail": "D-05 阻断:明细丢失" }, { "flow": "F-14", "case": "r1 新客户未落库(D-05)/r2 未更新(阻断)", "verdict": "⚠", "detail": "r1=未落库 r2星=3" }, { "flow": "F-14", "case": "最近导入仅提交人可见(creator 过滤)", "verdict": "✅", "detail": "admin 有=True buddy 有=False" }, { "flow": "F-15", "case": "GET 单例可读(记录当前值,不预设——重跑时规则可能留测试态)", "verdict": "✅", "detail": "master=1 first=1/1 second=1/1" }, { "flow": "F-15", "case": "PUT 全量覆盖保存即生效", "verdict": "✅", "detail": "first=1" }, { "flow": "F-15", "case": "firstTriggerDays=0 → 64023", "verdict": "✅", "detail": "code=64023 如预期" }, { "flow": "F-15", "case": "secondIntervalDays=-1 → 64023", "verdict": "✅", "detail": "code=64023 如预期" }, { "flow": "F-15", "case": "64023 校验失败未落库(1/1 保持)", "verdict": "✅", "detail": "first=1 second=1" }, { "flow": "F-15", "case": "开关缺省 → 0(缺省禁用口径)", "verdict": "✅", "detail": "master=0 first=0 second=0" }, { "flow": "F-15", "case": "Job 落待发:plan=锚点+first(升级链首条)", "verdict": "✅", "detail": "status=0 type=FOLLOW_OVERDUE target=admin plan=2026-08-05 22:27:56 payload 全对;存在多条系每轮补下一条(见幂等条目取证)", "note": "DB 取证(probe_notice.py):followOld 名下 30 条 notice,remindSeq 0..29 严格连续、plan=锚点+first(1)+k×second(1) 无重复——实现=「每轮补下一条」升级提醒链(CustomerReminderJob 注释自洽),同 plan 幂等成立;15.10 锚点刷新后 30 条全置 INVALID(2) 证明占位失效机制。首测按「恒 1 条」判 fail 系断言口径偏差,非产品缺陷。" }, { "flow": "F-15", "case": "payload 快照(remindSeq/anchor/规则参数)", "verdict": "✅", "detail": "{'remindSeq': 0, 'overdueDays': '30', 'anchor': '2026-08-04T22:27:56', 'firstTriggerDays': 1, 'secon" }, { "flow": "F-15", "case": "未到期/公海/归档客户均未落待发", "verdict": "✅", "detail": "待办=0 公海+归档=0" }, { "flow": "F-15", "case": "幂等:同 plan 不重写(每轮补下一条 seq 连续)", "verdict": "✅", "detail": "30 轮 Job → 30 条,remindSeq 0..29 连续、plan 无重复(幂等成立)", "note": "DB 取证(probe_notice.py):followOld 名下 30 条 notice,remindSeq 0..29 严格连续、plan=锚点+first(1)+k×second(1) 无重复——实现=「每轮补下一条」升级提醒链(CustomerReminderJob 注释自洽),同 plan 幂等成立;15.10 锚点刷新后 30 条全置 INVALID(2) 证明占位失效机制。首测按「恒 1 条」判 fail 系断言口径偏差,非产品缺陷。" }, { "flow": "F-15", "case": "锚点被跟进刷新 → 旧未发提醒置已失效", "verdict": "✅", "detail": "status=['2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2', '2']" }, { "flow": "F-15", "case": "提醒规则还原出厂值(30/7)", "verdict": "✅", "detail": "{'id': '1', 'masterEnabled': 1, 'firstTriggerEnabled': 1, 'firstTriggerDays': 30, 'secondIntervalEnabled': 1, 'secondIntervalDays': 7, 'updateTime': '2026-09-04 00:36:07'}" }, { "flow": "F-15", "case": "服务还原后 smoke", "verdict": "✅", "detail": "" }, { "flow": "F-16", "case": "check-credit-code 命中已有信用代码", "verdict": "✅", "detail": "{'exists': True, 'masked': False, 'customerId': '750844478243209216', 'customerN" }, { "flow": "F-16", "case": "创建撞已有信用代码 → 67003 硬拦", "verdict": "✅", "detail": "code=67003 如预期" }, { "flow": "F-16", "case": "check-name 相似命中(出厂阈值 80 生效)", "verdict": "✅", "detail": "[{'customerId': '750844478243209216', 'customerName': 'e2c-恒信达科技有限公司', 'ownerNam" }, { "flow": "F-16", "case": "创建名称相似 → needConfirm 弹窗未落库", "verdict": "✅", "detail": "needConfirm=True" }, { "flow": "F-16", "case": "check-phone 跨客户软提示命中", "verdict": "✅", "detail": "[{'contactId': '750844500171030528', 'contactName': '张关键', 'jobTitleName': '采购总监" }, { "flow": "F-16", "case": "导入侧消费:名称相似 → SUSPECT 不写入(f14 14.9 实测引用)", "verdict": "✅", "detail": "见 F-14" }, { "flow": "F-16", "case": "customer_dedup_rule 单例未落地(票 09 范围)→ 出厂默认全开生效", "verdict": "✅", "detail": "DefaultCustomerDedupSettingProvider: 名称相似开/80/信用码开/电话软提示开" } ]