メンバーシップと請求ルール — 中央メンバーシップ & SSO ハブ
1. ドキュメントの目的
このドキュメントは、システムの中心メンバーシップ & SSO ハブで適用する必要がある主要なビジネス ルールをすべて説明します。
このドキュメントは、以下の役割の指針として機能します。
- プロダクト オーナー
- プログラマー
- UI/UX デザイナー
- テスター
- オペレーショナル チーム
プログラマーは、ここで定義されていないルールについての仮定を立てることはできません。
2. 一般原則
- 1 つのメンバー アカウントは、複数の SaaS プロダクトに同時にサブスクリプションを購入できます。
- 各プロダクトは、独立したパッケージと価格を定義します。
- ライセンスは、有効なアクティベーション (無料または支払いが確認された場合) が実行された後のみ有効になります。
- メンバー データはプライベートであり、メンバー オーナーとスーパー アドミンだけが有効な理由でアクセスできます。
- 支払いプロセスは原子的です: ライセンスは支払いが確認されていない場合に有効になりません。
- メンバー データは、ライセンスのステータスが変化した場合に永久に削除されません。
- すべての重要なアクションは追跡可能でなければなりません。
3. メンバー アカウント ルール
3.1 登録
- メール アドレスはシステム全体で一意でなければなりません。
- メール アドレスは小文字化され、スペースが削除され、保存される前に正規化されます。
- パスワードはテキストとして保存されず、ハッシュ化されます。
- アカウントは
unverified状態で保留され、メール アドレスが確認されるまでです。 unverifiedアカウントはライセンスを有効化または SaaS アプリにログインできません。- メール アドレス確認リンクには有効期間があります (例: 24 時間)。
- メンバーは再送リンクを要求できます。
3.2 ログイン
- ログインはメール アドレスとパスワードを使用します。
- メール アドレスはログインの際に正規化されます。
- ログインの失敗は制限されます (レート制限)。
suspendedアカウントはログインできません。unverifiedアカウントは SSO を介して SaaS アプリにログインできません。
3.3 プロフィール
- メンバーは自分のプロフィールのみを変更できます。
- メール アドレスの変更には新しいメール アドレスへの確認メールが必要です。
- パスワードの変更はすべてのアクティブ セッションを終了します。
4. プロダクトとパッケージ ルール
- 各 SaaS プロダクトは一意のプロダクト コード (例:
NTO) で識別されます。 - 各プロダクトは独立したパッケージを定義します。
- パッケージの価格は IDR で保存されます。
- 無料パッケージには有効期間がありません。
- 有料パッケージには有効期間 (日数) があります。
- スーパー アドミンはパッケージを追加、変更、または非活性化できます。
- パッケージの価格変更は既存のサブスクリプションに影響しません。
- 非活性化されたパッケージは新規メンバーによって選択できませんが、既存のサブスクリプションは有効期限まで続きます。
5. ライセンス ルール
5.1 ライセンス作成
- 1 つのメンバーは 1 つのプロダクトあたり 1 つのライセンスを同時に有効化できます。
- ライセンス ID は最初にプロダクトを有効化したときに 1 回だけ作成されます。
- ライセンスの更新はライセンス ID を変更しません。
- ライセンス ID はライセンスがキャンセルされた場合にのみ再生成されます。
- ライセンス ID はシステム全体で一意でなければなりません。
5.2 ライセンス有効化
- 無料パッケージの有効化はライセンスを
active状態にします。 - 有料パッケージの有効化は、支払いが確認された Webhook の受信と検証後に実行されます。
- システムは有効な支払い確認なしで有料パッケージを有効化できません。
5.3 ライセンス ID のフォーマット
[プロダクト プレフィックス]-[XXXX]-[XXXX]-[XXXX]
- プレフィックス: 2-4 桁の大文字のプロダクト コード
- セグメント: 4 桁のアルファ数字の大文字、ランダムに生成されます
- 例:
NTO-A1B2-C3D4-E5F6
5.4 ライセンス ステータス
active: ライセンスが有効grace_period: 有料、期限切れ、トレーニング期間中suspended: トレーニング期間が終了し、アクセスがブロックされましたcancelled: キャンセルされました
ステータス遷移:
active → grace_period (有料パッケージのみ、期限切れ時に)
grace_period → active (更新が成功した場合)
grace_period → suspended (トレーニング期間が終了した場合)
suspended → active (メンバーが再度支払った場合)
6. 支払い ルール
6.1 オーダー
- チェックアウト セッションごとに、ステータス
pending_paymentのオーダーが作成されます。 - オーダーには一意の
order_idが割り当てられ、支払いゲートウェイへの参照として使用されます。 - オーダーが一定期間未決着の場合、自動的に期限切れになります。
6.2 支払い確認 Webhook
- システムは支払いゲートウェイから受信した Webhook の確認後にのみライセンスを有効化します。
- Webhook は支払いゲートウェイから提供される署名検証メカニズムを使用して検証されます。
- 1 つの
order_idは Webhook を受信した場合にのみ 1 回だけ有効化されます (idempotency)。 - 支払いゲートウェイから受信した Webhook が検証できなかった場合、無視され、ログに記録されます。
6.3 支払い失敗
- 支払い失敗はライセンスを有効化しません。
- メンバーは新しいオーダーを作成して再度チェックアウトできます。
6.4 トランザクション履歴
- 各トランザクションは永久保存されます。
- メンバーは請求書をダウンロードできます。
- トランザクション履歴は変更または削除できません。
7. トレーニング期間 ルール
- トレーニング期間は有料パッケージのみに適用されます。
- トレーニング期間の長さは各プロダクトで構成されます (デフォルト: 7 日)。
- トレーニング期間は
expired_atが達成された時点から始まります。 - トレーニング期間中:
- メンバーはアプリケーションにアクセスできます。
- システムはメンバー ダッシュボードとアプリケーション内で警告メッセージを表示します。
- 指定されたスケジュールに基づいてメール通知が送信されます。
- トレーニング期間が終了すると、ライセンスは
suspended状態になります。 - トレーニング期間中に再度支払った場合、
expired_atの元の日付に基づいてexpired_atが