交付出件箱

← 返回出件箱

Phase 48A 查漏清单(2026-09-17)

核对范围:brand-partner-spec-v1-20260915.md(24 条已拍板规则)、
brand-partner-mockup-v2-20260915.html 第七组(品牌码开通入口/二次确认弹窗/
品牌码与开通整页/导出对账表 4 帧)、phase48-brand-code-tech-20260916.md
(端点与字段清单)。方法:grep 物理代码 + 读关键函数体,非凭印象。
已知且不需要再报(长官已指出):机构自助登录看自己的码、公开接口防刷限流、
家长平板端 —— 以下不再重复列出。

一、spec 24 条规则逐条核对

# 规则 现状 证据
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

二、效果图第七组 4 帧核对(品牌码开通入口 / 二次确认弹窗 / 整页 / 导出对账表)

全部逐元素核对,除标 25(近 30 天开通趋势)外均已实装,标 25 已由本次任务 A 补齐。
未发现其他遗漏元素(按钮/筛选/列/文案/交互均与效果图一致,见任务 A 报告的字段对照)。

三、tech 文档端点/字段核对

四、漏项汇总(按处理方式分类)

本次已补(不再列入漏项)

下批做

  1. spec 规则 9/13/14(48B 互扫绑定全链路前端):后端 family-code/family-scan/resolve/claim/release 4 个端点已实现且有集成测试(test_brand_code_claim.py),但家长端「我的二维码」页面、门店端「扫一扫」页面、「已绑别家确认转入」弹窗 —— 三处前端全部不存在。且「家长扫门店码」方向连后端也没有(只做了"门店扫家长码"一个方向)。
  2. 影响:不影响 48A 自身验收(品牌码开通/管理页与此无关),但 48B 作为独立功能目前完全不可用(无入口),若长官现在想看"互扫绑定"效果会立即发现打不开。
  3. 建议:下批做,工作量含双向绑定 UI + 冲突转入弹窗,不适合塞进本次任务。
  4. spec 规则 17/21(4L 展示区,Phase 48C):完全未开始,全仓无相关代码。
  5. 影响:不影响 48A/48B 验收,48C 本身是独立子 Phase。
  6. 建议:按原计划排期,可与 48B 并行。

不用做(无需处理,说明理由)

五、是否挡住 test 验收