核对范围:
brand-partner-spec-v1-20260915.md(24 条已拍板规则)、
brand-partner-mockup-v2-20260915.html第七组(品牌码开通入口/二次确认弹窗/
品牌码与开通整页/导出对账表 4 帧)、phase48-brand-code-tech-20260916.md
(端点与字段清单)。方法:grep 物理代码 + 读关键函数体,非凭印象。
已知且不需要再报(长官已指出):机构自助登录看自己的码、公开接口防刷限流、
家长平板端 —— 以下不再重复列出。
| # | 规则 | 现状 | 证据 |
|---|---|---|---|
| 1 | 只有「机构码」一种码,无 brand 类型 | ✅ 完全做到 | app/models/brand_code.py:BrandCode 只有 org_id,organization.py 无 kind 字段 |
| 2 | 卡片只印品牌方码 | N/A(业务/物料,非代码) | — |
| 3 | 品牌码带新家长计开通数;机构认领已在系统内的家长不计数 | ✅ 完全做到 | brand_code_claim_service.py::claim_patient 只写 service_org_id,不调用 _record_activation |
| 4 | 一孩子一门店,绑定挂档案级不是席位级 | ✅ 完全做到 | Patient.service_org_id(flywheel.py),非 users 表字段 |
| 5 | 门店不继承品牌方 Logo/头图 | ✅ 完全做到(无代码可违反) | claim_patient 只改 2 列,未触碰任何品牌/展示字段 |
| 6 | 已有子席位合并到原账号,没有的新开 | ✅ 做到(按品牌机构精确匹配) | brand_code_service.py::_find_existing_family_seat |
| 7 | 未绑定品牌方可见;绑定后不可见;解绑回落品牌方 | ✅ 完全做到 | refractive_record_service.py:130-131(_org_visibility_clause)+ release_patient_claim 清空两列 |
| 8 | 扫码即激活,365 天有效期 | ✅ 完全做到 | brand_code_service.py:38 ACTIVATION_VALID_DAYS = 365 |
| 9 | 双向绑定:家长扫门店码 / 门店扫家长码 | 🟡 只做了一半 | 「门店扫家长码」有后端 app/api/brand_code_claim.py(family-scan/resolve+claim),但零前端;「家长扫门店码」无后端、无前端 |
| 10 | 换店:现绑机构看全部历史,曾绑不绑只看自己录的 | ✅ 完全做到(今日刚修) | commit 3007b296,refractive_record_service.py:936-949 |
| 11 | 来源标记维持两档不细化 | ✅ 未改动(符合"维持不动") | 本批未触碰 parent_patients.py 的 source 计算逻辑 |
| 12 | 扫 A 又扫 B,各自计入 A/B 统计 | ✅ 完全做到 | 唯一约束 (brand_org_id, wechat_unionid) 按机构区分,不同 brand_org_id 各插一行 |
| 13 | 机构在孩子列表中选择绑定哪一个 | ✅ 后端做到,🟡 前端未做 | list_family_children 返回全部孩子供选择;无前端"选孩子"UI |
| 14 | 建档+绑定合一步 | 🟡 部分:认领本身已一步(后端),但前端整条链路不存在 | 同上 |
| 15 | 机构只看机构录入的记录,不看家长自录 | ✅ 未改动(既有逻辑维持) | 本批未涉及该判据 |
| 16 | 不加"品牌方"机构类型字段 | ✅ 完全做到 | 同 #1 |
| 17 | 4L 展示区家长自助绑定点亮 | ⬜ 完全未做(Phase 48C,非本批范围) | 全仓无 4L 设备库相关新代码 |
| 18 | 编辑权跟着归属走(能看=能改) | ✅ 完全做到 | refractive_record_service.py:750-751(get_org_patient 归属判据)+ update_patient/bind_patient_seat 复用同一判据 |
| 19 | 管理页落在机构详情 tab,不新开菜单 | ✅ 完全做到 | 路由 /admin/orgs/[id]/brand-code,机构列表点按钮进入,非独立菜单项 |
| 20 | 不设名额上限,按累计开通结算 | ✅ 完全做到 | brand_codes/brand_code_activations 表无任何配额字段 |
| 21 | 4L 排版横排四格 | ⬜ 完全未做(Phase 48C) | 同 #17 |
| 22 | 任何机构可开品牌码,默认不开,二次确认 | ✅ 完全做到 | enable_brand_code BOOLEAN NOT NULL DEFAULT false;前端确认弹窗文案与 spec 三条要点逐字对应 |
| 23 | 独立整页非弹窗;导出右上角;openid 平台可见 | ✅ 完全做到(品牌方自助可见项已被告知范围外) | brand-code/page.tsx 整页布局;ActivationRecord.wechat_openid |
| 24 | 同名同生日不再提醒重复;查重只回数量不回 PII | ✅ 完全做到(今日刚修) | commit 8b654707,refractive_record_service.py:475 duplicate_suspect_count |
全部逐元素核对,除标 25(近 30 天开通趋势)外均已实装,标 25 已由本次任务 A 补齐。
未发现其他遗漏元素(按钮/筛选/列/文案/交互均与效果图一致,见任务 A 报告的字段对照)。
brand-scan、brand-code 整页、orgs 列表按钮)seat_auth.py:seat_wx_identity + 前端 chat/page.tsx 均已接线,闭环生效brand_code_claim.py/brand_code_claim_service.py,48B 认领链路):不在 tech 文档 §3.3/§3.4 范围内(文档本身未规划这批的前端页面),是长官另外派单加的后端 —— 前端从未被规划过,不是"漏做",是"从未排期"family-code/family-scan/resolve/claim/release 4 个端点已实现且有集成测试(test_brand_code_claim.py),但家长端「我的二维码」页面、门店端「扫一扫」页面、「已绑别家确认转入」弹窗 —— 三处前端全部不存在。且「家长扫门店码」方向连后端也没有(只做了"门店扫家长码"一个方向)。