Skip to content

申込状態 (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.tsREGISTRATION_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=取消済)。