Appearance
申込状態 (registration status) の意味と表示ルール
申込 (tournament_registrations.status) の各状態の意味・遷移条件と、画面ごとの 表示(ラベル/色)を一覧化する。表記揺れ防止のため canonical なラベル定義は apps/web/src/lib/registration-status.ts に集約する。
状態と遷移条件
| status | ラベル | 意味 | ここに入る条件 |
|---|---|---|---|
draft | 下書き | 申込フォーム入力中(枠ロック前) | 申込開始時 |
holding | 決済待ち | カード決済を待っている。15分間だけ枠を仮押さえ | hold 時に paymentMode=card かつ支払額 > 0 |
confirmed | 支払済 | 決済完了(申込確定) | ① card 決済成功 (Stripe payment_intent.succeeded、hold 未期限切れ) / ② 当日現金、または クーポン/ポイント等で total=0(Stripe は0円不可)は hold 時点で即時 |
filled | メンバー確定 | (旧仕様) 全枠が join 済みの完了状態。現在は新規には付かない | — (下記「枠充足との分離」参照) |
cancelled | キャンセル | キャンセル済み | 本人キャンセル等 |
refunded | 返金済 | 返金済み | 返金処理 |
holding は「決済待ち」だけ
holding は カード決済が必要なときのみ発生する(当日現金/全額ポイントは即 confirmed)。なので参加者には「決済待ち」と表示する。hold は 15分 で、過ぎると 枠は解放され、その後に決済が成功しても confirmed にはならず手動返金対象になる。
クーポン/ポイントで 0 円になったとき
card 払いでも クーポン/ポイントで total=0 になった場合は、Stripe を経由できない (0円決済は作れない)ため holding を飛ばして hold 時点で即 confirmed。同じ transaction 内でクーポン使用回数・ポイント残量を実消費し、申込完了メールを送る (決済完了メールではない)。holding(決済待ち)になるのは card で 1 円以上残るときだけ。
枠充足とは分離(重要)
参加メンバーの枠 (registration_invites) が全部埋まらなくても申込は成立する。 申込の status は 決済状態だけで決まり、枠の充足には関与しない。
- 決済が済めば枠が空いていても
confirmedのまま - 枠の埋まり具合は invite 単位の status(open / filled / expired / revoked)と 「○/○ 名 充足」表示で表現する
- そのため、決済成功時 (
handle-succeeded) や join 完了時 (join.ts) にconfirmed → filledへ昇格させる処理は廃止した(filledは旧データ用に enum と ラベルだけ残す)
画面ごとの表示
ラベル文言は全画面で統一(holding=決済待ち 等)。色はテーマで異なる。
| 画面 | 参照 | テーマ/色 |
|---|---|---|
| マイページ TOP / 申込一覧 / 申込詳細 / チーム詳細(参加者) | lib/registration-status.ts の REGISTRATION_STATUS_LABEL(canonical) | ダーク(amber/emerald/stone の半透明) |
| 当日 check-in(運営) | 同ページ内の light テーマ用マップ | ライト(bg-amber-100 等)。文言は canonical に合わせる |
新しい画面で状態バッジを出すときは、原則 canonical (REGISTRATION_STATUS_LABEL) を import して使う。ライトテーマ等で色を変える必要がある場合のみ、ラベル文言は canonical に合わせた上で色だけローカル定義にする。
招待スロット (invite) の状態
参考: 各枠の状態 (registration_invites.status) のラベルは同ファイルの INVITE_STATUS_LABEL(open=未充足(受付中) / filled=充足 / expired=期限切れ / revoked=取消済)。