共同订单 · Group Order Portal Prototype

共同注文
Group Order.

发起方与参与方联合下单,以达到单独下单无法获得的低价。
本 Portal 集中呈现 Anchor / Joiner / 管理员三类角色的完整流程,便于整体浏览与确认。

Chapter 01

项目概览 Project Overview

10 周开发计划、关键里程碑、人员配置、风险与交付物的完整说明。
§ 01

时间线

三线并行 · 10 周
阶段 / 周
W14/22
W24/27
W35/4
W45/11
W55/18
W65/25
W76/1
W86/8
W96/15 ★
W106/22
W117/1 ★★
需求 / 决策4/22 – 4/28
需求冻结1 周
UI 设计4/28 – 5/29(5 周)
UI 高保真设计5 周
开发(BE + FE)5/1 – 5/29(4 周)
功能开发 → UI 集成4 周
Bug 修复2 周
QA / 内部测试5/18 – 6/5(3 周)
用例设计 → 全体 E2E3 周
UAT / 客户验收6/1 – 6/12(2 周·分段)
Anchor → Joiner → Admin → 回归2 周
部署 / 运维6/15 – 7/3 及以后
本番部署 → 内测2 周
🎉 一般公开
需求 UI 开发 QA UAT 部署 一般公开 ★ = 里程碑
周 / 日期 当周核心内容
W14/22 周二 原型内部走查 → 客户评审 1 轮(4/24)→ OQ 清单整理
W24/27 周一 4/28 需求冻结节点 ★ 同日 UI 启动 · 开发基盘先行(ER 图 / migration / API 契约)
W35/4 周一 UI W2:核心 4 画面高保真 开发 W1:Anchor 流程
W45/11 周一 UI W3:其余 5 画面 开发 W2:Joiner 流程
W55/18 周一 UI W4:Admin + 5/22 UI 冻结 开发 W3:Admin 流程 QA:用例设计开始
W65/25 周一 UI W5:polish / 设计 QA 开发 W4:横串 + 高保真 UI 集成 QA:分段测试启动
W76/1 周一 全体 E2E 测试 UAT 启动:Anchor 流程(6/1-6/3)/ Joiner 流程(6/4-6/5)
W86/8 周一 UAT:Admin 流程(6/8-6/10)+ 回归(6/11-6/12) Critical bug 修复
W96/15 周一 ★ 6/15 本番部署 内测启动(限定 3-5 社,Hypercare 体制)
W106/22 周一 内测持续 实邮件 / 支付流程最终验证 公开前 go / no-go 判断(6/26)
W116/29 周一 ★★ 7/1 周三 一般公开 随后 2 周 Hypercare 延续 → 7/13 转入常规运维
§ 02

六个阶段的结构

Phase-by-phase
1

需求冻结 + UI 启动

4/22 – 4/28 (1 周)
1 周
原型走查 → 客户评审 → OQ / UI 方向在 4/28 前全部签署冻结。开发基盘(DB migration / API 契约)水面下先行启动,为 5/1 开发抢出 3 天。
交付物 需求冻结确认书 UI 方向确认书 OQ close list
2

开发(原型 UI 打底,后期替换高保真)

5/1 – 5/29 (4 周)
4 周
每周主题制:W1 Anchor / W2 Joiner / W3 Admin / W4 横串。前 2 周用原型 UI 实现业务 logic,后 2 周随着设计稿冻结逐页替换为高保真。每周五必做 demo。
交付物 SIT 环境可用版本 API 文档 ER 图
3

内部测试(全体 E2E)

5/25 – 6/5 (2 周,与开发末期重叠)
2 周
约 50 条用例覆盖 3 角色 × 4 步骤 × 正常/异常流。状态迁移矩阵、同时并发、通知邮件都要跑通。Critical / Major bug = 0 是 UAT 开放的硬条件。
交付物 测试用例书 Bug 报告
4

UAT 客户验收(分段)

6/1 – 6/12 (2 周)
2 周
不一次性交付,分段验收:Anchor → Joiner → Admin → 回归。每天 10:00 / 17:00 Bug triage,当日分级、当日分配。Critical 翌日 commit、Major 2 日内。
交付物 UAT 结果书 修改差分清单
5

本番部署 + 内测

6/15 – 6/30 (2 周 Hypercare)
2 周
6/15 周一 Kamal 部署。招募 3-5 社进行内测,在本番环境验证真实邮件 / 支付流程。dev ×1 + QA ×0.5 常驻响应,当日修复体制。
交付物 部署文档 用户操作手册 源码 运维手册 FAQ
6

一般公开 + 持续运维

7/1 及以后
持续
7/1 周三一般公开,随后 2 周 Hypercare。7/13 起转入常规运维契约模式(SLA 另议)。
交付物 运维手册 故障处理台账
§ 03

每周 Sync 机制

三条线协同运营
时间
周一
周二
周三
周四
周五
09:30站会
每日文字站会 · Slack #group-order-daily · 每人一句话:昨日 / 今日 / 阻塞
10:0030 min
设计 → 开发 交接会
10:00 – 10:30
设计师 + FE 负责人
上周冻结的设计稿交付给 FE。走查 token / 组件 / icon,解决实现疑点。
12:00
— 午休 —
15:0030 min
客户 UI Review
15:00 – 15:30
PM + 设计师 + 客户 PO
把还在做的设计稿提前给客户看,周末冻结前抓到认知差异 —— 并行推进的最重要防线。
17:0030 min
周例会 + demo
17:00 – 17:30
全员 + 客户
三条线进度 demo、bug / 阻塞项 triage、下周 scope 锁定。
§ 06

人员配置

Team composition
角色 人数 投入期间 工作内容
PM(乙方)1全周期项目推进、客户对接、风险监控
设计师14/28 – 5/29(5 周)UI 高保真化、设计 token、画面交付、设计 QA
BE 工程师(Rails)25/1 – 6/12Model / 状态机 / API / Mailer / Admin API
FE 工程师(Next.js)25/1 – 6/1213 画面实装、高保真 UI 集成、API 连接
QA15/18 – 6/12用例设计、执行、bug triage
Infra(部署 / 监控)0.56/10 – 6/20Kamal 配置、监控告警、dry-run
客户 PO1全周期决策、UI Review、UAT 统筹(周 6h+)
Chapter 02

用户流程 User Flows

Anchor(发起方)/ Joiner(参与方)/ Admin(管理员)三角色的完整流程走查。
01

Anchor · 发起方流程

Proposer Flow
0Landing 1预申请 2等待审核 3契约① 同意 4招募中管理 5成团后
02

Joiner · 参与方流程

Participant Flow
0Landing 1寻找项目 2预报名 3我的项目 4参与详情 5制造跟踪
03

Administrator · 管理员流程

Admin Flow
0通常注文一覧 1项目列表 2公开前审查 3招募中管理 4参与方详情 5制造准备
04

全体流程图 · 跨角色生命周期

Cross-Role Lifecycle Swimlanes

沿生命周期 5 个阶段,展示 3 角色各自的关键动作与协作点。橙色高亮 = 状态机关键转换点。

阶段 / 角色
1
提案
pending_review
2
公開準備
contract_pending
3
募集中
published
4
成団判定
finalizing
5
製造納品
ordered → completed
Anchor
発案者
仮申請 提出
規格 + 数量 + 目標 + 設計稿 をフォーム送信
★ 契約① 同意
最終確認 + 双重チェック → complete_public_procedure!
自家管理
編集 (title / 数量 / 目標 / 一言);其他 spec 自 published_at 起 lock
契約② 確認
Admin 送付の契約② にサイン
入稿 / 校了 / 製造跟踪
SKU 設計稿アップロード + 進捗 / 出荷確認
Admin
管理者
審査
approve / reject;spec 全項目直接編集も可(並行編集 + audit log)
— Anchor 同意待ち
監視
参加状況 / KPI / 一括メール / CSV 出力
★ 成団判定 + 契約② 送付
手動 confirm → 個別 / バッチで契約② 発送 (OQ-05)
製造 / 出荷管理
入稿確認 / 支払凭証受取 / 出荷文件管理
Joiner
参加者
— 案件未公開
— 案件未公開
★ 仮申込
数量 + 納品先 + 支払方法;recruitment_ends_at までキャンセル可 (OQ-19)
契約② 確認
Admin 送付の契約② にサイン
入稿 / 校了 / 製造跟踪
SKU 設計稿アップロード + 進捗 / 出荷確認
契約① 公開トリガー Anchor 同意 → contract_pendingpublishedpublished_at = now。同一遷移内で発生(D1 で first_contracted_at 列削除済み)。
成団判定 trigger recruitment_ends_at 到達 → cron job → finalize! 自動推進。残 draft Participation → applied。anchor-only 成団も許容 (OQ-28)。
契約② 送付 システム自動送付しない。Admin 手動 confirm 後 individual / bulk 送付(OQ-05)。生成された group-origin orders は通常注文一覧から非表示(OQ-20 方案 C2)。
Chapter 03

状态对照 Status Mapping

系统内部状态值与 UI 显示标签的对应关系,开发与客户沟通共享。
内部状态 UI 显示 Anchor Tab 管理员 Tab
pending_review规格确认中公开前公开前
contract_pending契约① 待签公开前公开前
published招募中招募中招募中
ordered制造准备制造准备制造准备
rejected / cancelled已取消已取消已取消
02

GroupOrder 状态机图

State Machine · AASM

5 个主状态 + 3 个 terminal 状态、关键转换事件、guard 与触发源(cron · admin · anchor)。

仕様確認中 pending_review 契約①待ち contract_pending 募集中 published 成団判定中 finalizing 成団 / 製造中 ordered → completed 却下 rejected 強制キャンセル cancelled 成団失敗 failed approve (Admin) reject (Admin) 同意 (Anchor) → published_at = now force_cancel (Admin) cron @ recruitment_ ends_at fail_finalizing retry_finalizing (Admin) finalize (async job) → orders 生成
通常状态
当前 active(範例:募集中)
terminal(不可再变更)
error / 失败状态(可恢复)
cron 自动触发
异常 / 强制 path
Chapter 04

待确认事项 Open Questions

原型设计阶段尚未敲定、仍需客户拍板的事项,按阻塞程度排序。
以下事项是原型设计阶段尚未敲定、仍需客户最终确认的 Open Question,按阻塞程度排序: P0 必须 4/28 前决定(否则 6/15 上线受影响);P1 在开发开工前必须敲定;P2 / P3 可在开发中后期决定。

截至 2026-05-11 已收到客户答复 / 决议 21 / 21 项 ✓(全部已解决,默认展开 — 点击单条可折叠)。
分布:客户答复 17 项(OQ-01/02/04/05/06/07/08/10/11/12/14/15/16/17/19/20/21)· 乙方决议 2 项(OQ-09/18)· 移出本表 2 项(OQ-03 转项目管理 / OQ-13 转合同流程)。 详见 plan.html
P0 阻塞项 · 需求冻结前必决 3 项 · 全部已解决 ✓ 4/28 前
OQ-01

Admin 列表 "支付 / 契约 / 确定单价" 列的显示时机

查看 ↗

"招募中" tab 就展示支付状态和确定单价,还是只在"制造准备"及以后的 tab 显示?招募中单价尚未确定,是否有展示的意义?

客户答复2026-05-10(mantee §11.9):Admin 列表在 募集中 状态下不显示支払 / 契約 / 確定単価 这 3 列。这些列只在 製造準備 起的 tab 才有意义(成団 / Order 生成后单价和合同状态才存在)。当前 UI 行为已与此一致。
OQ-04

v1 / v1.1 范围最终切分

查看 ↗

AI 文案生成、热门尺寸排行、3D 预览、内部立项书 PDF 输出 —— 这些是 v1(7/1 必达)还是 v1.1(7 月中旬以后)?

客户答复2026-05-10逐项决议 ——热门尺寸排行:v1 必须做(仅做 admin 手动维护的简单 presets,不做自动统计 / 推荐算法);AI 文案生成:不做(v1 / v1.1 都不做);3D 预览:不做内部立项书 PDF 输出:不做.ai 原稿下载槽位:v1 必须做(admin UI 后续再调整)。
OQ-20

成团后订单的数据模型归属(架构级)

查看 ↗

成团后为每个参与方生成的订单,是 "=通常订单"(方案 A · 统一)、"≠通常订单"(方案 B · 隔离)、还是 "=通常订单 + 共同注文由来标记"(方案 C · 混合)?影响:(a) 普通注文一览是否显示这些订单;(b) 发票 / 物流 / 文件系统是否复用既存 Brixa 功能;(c) 两个入口(マイ案件 / 通常注文)的数据一致性。

客户答复2026-05-10UI 必须与通常订单分离,使用共同注文专用 admin UI。这是 UI 分离,不是 DB 全隔离 —— 采用方案 C2:成団时自动生成隐藏的 group-origin orders,打上 source='group_order' + group_order_participation_id默认从通常注文一览隐藏。发票 / 物流 / 文件复用既存 Brixa 基础设施。
P1 高优先级 · 开发开工前必决 10 项 · 全部已解决 ✓ 5/10 前
OQ-02

"规格确认中" 状态下 Anchor 的编辑 / 取消权限

查看 ↗

管理员审核前,Anchor 是否可以编辑或取消自己的项目?Sheet 规格说允许,但 Canva 原型的弹窗说"发起后不可取消",文字存在矛盾。

客户答复2026-05-10 / 强化 05-11(design doc §2.8 / §6.1.2 / §6.1.4):pending_review(仕様確認中)阶段 Anchor 可以编辑和取消自己的提案。Canva 原型 "発起後不可取消" 的提示以客户答复为准 ignore。强化(05-11):审查段阶 Admin 也可以直接编辑 spec 全项目后 approve,与 Anchor 并行可编辑(race condition 用 last-writer-wins + group_order_edit_histories audit log 处理)。Admin 编辑过的项目在 contract① 同意画面 Anchor 最终确认,确保 Anchor 不会被无知地变更混入。
OQ-21

发案表单是否完全沿用 Brixa 既存字段集

查看 ↗

Anchor 发案表单(§2 袋仕様 / §3 素材構成 / §4 形状加工)目前按 brixa-fe 的通常注文画面 全量沿用:袋タイプ 9 种 / 素材構成 8 种 / 加工选项 9 种 + 特殊印刷 / 角加工 / ノッチ / チャック / SKU 数 / 内容物 / 全面印刷有無 / シール幅 / バリア。
共同注文是否也需要同一套 full set?还是精简为常用子集以降低发案门槛?

客户答复2026-05-10沿用通常注文的同一字段结构(不做 DB 拆分),但共同注文使用不同的选项集 / 校验group_order context)。袋タイプ / 素材構成 沿用通常的选项集。特殊印刷 / 特别印刷只允许 UV / 箔印刷,其他选项在 UI 隐藏 + 后端拒收。全面印刷有無 不展示且不接受(payload 须 normalize 为 nil / false)。
OQ-05

契约② 的签订时机与形式

招募成团后与 Joiner 的单独合约(契约②),是逐个电子签名还是批量方式?何时发送?支付何时跟进?

客户答复2026-05-10个别发送可,批量发送首选。招募截止 / 成団後 Admin 先手动确认,再手动发送契约②(系统不在成団瞬间自动发送)。支付方式 / 付款凭证上传 沿用通常 Brixa 订单方式,v1 不做新的在线收款。成団时可自动生成契约② 草稿与材料,但发送须有 Admin 确认 gate。
OQ-06

Anchor 特别单价参数

查看 ↗

Anchor 最大 15% OFF / 最低保证 5% OFF 是最终值吗?Joiner 为 0 家时的最低保证触发条件具体是什么?

客户答复2026-05-10Joiner ≥ 1 家时 → Anchor 最低 -15%;Anchor 最大 -42%;Joiner = 0 家时 → Anchor 最低 -5%。实装:min_disc = joiner_count == 0 ? 0.05 : 0.15; max_disc = 0.42
OQ-07

最小起订量数值

查看 ↗

Anchor 首次订货 500 个 / Joiner 最小参与 300 个 —— 这两个数值在所有项目类型下都适用,还是按产品类别差异化?

客户答复2026-05-10Anchor 500 / Joiner 300 全品类统一。v1 不做按 product_type / package_type / 素材的差异化分支。
OQ-08

Joiner 公司名遮掩(masking)规则

查看 ↗

browse 页显示为 "株式会社 J*****",保留几位?是前 X 个字符 + 星号,还是别的规则?主要用于避免被同行识别。

客户答复2026-05-11(强化):不做名字遮掩,改用匿名编号 B001 / B002 / B003 ...。代码必须稳定且不从公司名派生任何状况下,非 Admin 利用者只能看到自己公司的全名,他社(Anchor / Joiner 不分)永久匿名,包括 pre-申込 / post-申込 / 成団後 全部状态。Admin 全名可见。
OQ-09

通知邮件文案最终确认

Anchor / Joiner / Admin 各自场景约 7-8 封邮件的文案,由客户提供最终话术,还是乙方出草案后客户校对?

乙方决议2026-05-11采用当前假设关闭:乙方基于 Canva 原型文字提供草案5/15 前客户校对确定。已在 plan.html 时间表加节点。如客户希望提供最终话术由乙方校对,可在 5/15 校对会议上反向调整。
OQ-17

browse 列表卡片的双按钮(Joiner View / Anchor Demo)

查看 ↗

Canva 原型在每张案件卡上放了「参加する(Joiner View)」+「管理する(Anchor Demo)」2 个按钮。本番环境下是否同时显示?还是按登录用户身份动态切换(自家案件显示"管理",别家案件显示"参加")?

客户答复2026-05-10本番不显示双按钮。卡片 CTA 按登录用户身份动态切换为单按钮:自家案件 → 「管理する」;他家案件 → 「参加する」(资格满足时)。双按钮模式仅用于原型 demo 视角切换,不是本番行为
OQ-18

Anchor 侧双视图(案件管理 / 募集情況確認)的使用场景

查看 ↗

Anchor 一个案件对应 2 个详情页:案件管理(运营视角 · 价格梯度 / 参与方 / 削減额)+ 募集情況確認(自家订单视角 · SKU / 纳品先 / 文件)。确认这种双视图设计是否符合实际使用预期?信息边界是否清晰?

乙方决议2026-05-11采用当前假设关闭。理由:mantee §7.1 serializer 规则已经接纳了双视角设计(运营视角看价格梯度 / 参加方匿名码、订单视角看自家 SKU / 纳品 / 稿件),二者信息边界清晰,无需合并。保留 anchor/case-detail.html + anchor/participation-detail.html 双页面。
OQ-19

Joiner 取消期限的计算规则

查看 ↗

Joiner 仮申込后的"取消期限"是否固定为募集截止日前 15 天?还是按产品类别 / 案件规模 / 生产前置时间不同而可配置?超过期限后"金額確定と製造準備に入るためキャンセル不可" —— 这个 15 天窗口是否足够覆盖所有商品的制造前置期?

客户答复2026-05-10Joiner 可取消直到募集截止日。v1 规则全品类统一:cancellation_deadline = recruitment_ends_at采用 recruitment_ends_at − 15 天 截断。到 recruitment_ends_at 时剩余的 draft participations 自动推进到 applied,之后金額確定 / 製造準備开始,不再允许取消。
P2 中等优先级 · 开发中期决定 3 项 · 全部已解决 ✓ 5/25 前
OQ-10

支付方式支持范围

查看 ↗

支持预付款 / 月结 / 发票后付 的哪些组合?各 Joiner 的支付方式是否可以独立设置?

客户答复2026-05-10支付行为沿用既存通常订单prepayment(先付):同既存通常订单,配置后参与者上传付款凭证;monthly(月结):不卡付款凭证,校了后可直接进入生产;invoice_afterpay(请求后払):若 Brixa 既存正单设置含此项则复用,v1 不做新流程。每个 Anchor / Joiner 参加可独立设置 payment_method。v1 新建在线收款引擎,仅复用既存付款凭证上传 + 确认。
OQ-11

公开后 Anchor 可编辑的字段范围

查看 ↗

Canva 原型说"发起后仅可编辑:标题 / 数量 / 目标 / 寄语,其他不可改"。数量也能改吗?改后已参与的 Joiner 如何通知?

客户答复2026-05-10公开后 Anchor 可编辑:title / Anchor 自身数量 / target_quantity / joiner_message数量允许编辑给 Joiner 发邮件通知(不 enqueue notification job)。规格 / 制造字段在 published_at 后锁定。所有允许的编辑写入 group_order_edit_histories
OQ-12

稿件提交规范

查看 ↗

支持的文件格式(AI / PDF / PSD)、大小上限(50MB)、印刷色数要求 —— 沿用 Brixa 现有规范?还是共同订单有特殊要求?

客户答复2026-05-10沿用既存 Brixa 稿件提交规范。共同订单特殊文件格式 / 大小 / 印刷色数要求。复用既存 validation 即可。除非通常 Brixa 规范本身变更,否则不创建共同订单专用规则集。
移出 已转移到其他流程(不在 OQ 列表跟踪) 2 项
OQ-03

UI "重绘" 的范围等级划分

A 高保真化 / B 局部重构 / C 完全重设计?

已转项目管理决议2026-05-11非设计 OQ,属于乙方与客户的项目管理决策。已转入 plan.html 每周三 15:00 UI Review 例会,5/15 前由 PM 与客户拍板。
OQ-13

Hypercare 期间 SLA 定义

6/15-7/13 Hypercare 故障响应 SLA?

已转合同流程2026-05-11SLA 属于法务 / 合同条款,由客户 + 乙方共同签署,不阻塞开发。乙方提案:工作时间 受理 1h / 缓解 4h / 修复 24h;非工作时间 best effort。
P3 低优先级 · 全部已答复 ✓ 3 项 · 全部已解决 ✓ 原 7/15 以后
OQ-14

AI 文案生成的具体策略

查看 ↗

"给 Joiner 的寄语" 和 "内部立项报告" 的 AI 文案 —— 用 Gemini?prompt 由谁设计?生成后人工修改还是直接使用?

客户答复2026-05-10不做 AI 文案生成(v1 / v1.1 都不做,除非客户重新开启 scope)。「Joinerへの一言」只保留手动输入。内部立项报告 / 提案 copy 生成不需要。不接入 Gemini 或任何其他 LLM API
OQ-15

3D 预览功能是否需要?

① 是否需要此功能? ② 需要的话:展示位置(项目详情页 / 稿件提交时 / 两者)、数据来源(Brixa 现有 3D 素材库 / 根据稿件动态渲染 / 其他)、展示精度要求?

客户答复2026-05-10当前不需要3D 预览。案件详情页 / 稿件提交时都不做。不接入 Brixa 3D 素材库 / 动态渲染。功能保持 Out of Scope。
OQ-16

热门尺寸排行功能是否需要?

查看 ↗

① 是否需要此功能? ② 需要的话:展示位置(Anchor 预申请表单 / browse 列表 / 独立的统计页)、统计维度(按产品类别 / 按时间窗口 / 按成团率)、Top N 数量?

客户答复2026-05-10v1 需要做但不用复杂。在 Anchor 预申请表单做轻量 quick-select 列表。使用 admin 维护的 presets(含 display order / active flag / size values)。做自动 popularity 聚合 / 趋势分析 / 推荐算法。