# 応援スコア リセット機能

| 項目 | 内容 |
|---|---|
| **ステータス** | 要件定義中 |
| **担当者** | Tomohiro Abe |
| **カテゴリ** | 管理 / ユーザー体験 |
| **機能種別** | 推し活プラス |
| **作成日時** | 2026年6月11日 |
| **最終更新日時** | 2026年6月11日 |

---

## プロジェクト概要

推し活プラスの「応援スコア」に、**一定期間（ターム）が経過するとスコアをリセットし、次のタームを開始する**機能を追加する。リセットを行うかどうか、およびタームの期間は**オーナーごとに任意で設定**できるようにする。

現状の応援スコアは「累計型（リセットなし）」のみだが、本機能により、オーナーは自分のコミュニティ運営方針に合わせて「ターム制（期間リセット）」と「永続（従来の累計）」を選択できるようになる。

---

## 課題

応援スコアは現在、付与履歴（月額利用・キャンペーン付与・ウェルカムボーナス）を**累計合算する方式のみ**で、期間で区切る概念が存在しない。このため以下の課題がある。

- **古参ユーザー有利で新規が追いつけない**：累計型では先行ユーザーが永久に上位を維持し、新規ユーザーが「自分も上を狙える」というモチベーションを持ちにくい
- **継続的な応援を促す仕組みが弱い**：一度スコアを積み上げると、その後の継続的な応援（課金・利用）に対する「今期の手応え」が可視化されない
- **オーナーごとに運用方針が異なる**：「期間でリセットして盛り上げたい」オーナーと「永続の実績として積み上げたい」オーナーが混在しうるが、現状は一律で累計型のため選択肢がない

---

## 解決策

**応援スコアに「ターム（期間）」の概念を導入し、オーナー単位で「ターム制（リセットあり）」か「永続（従来の累計）」かを選択できるようにする。**

- ターム制を選んだオーナーは、**開始日・終了日でタームを設定**する。期間が終了すると、現タームのスコアはリセットされ、設定済みの次タームが開始する。**次のタームは事前に登録**しておける
- ターム制では、**称号（owner_badges）も今期スコアを基準に再判定**される。タームが切り替わると称号はリセットされ、新タームのスコア獲得に応じて改めて付与される
- **過去タームのスコア・称号は履歴として保持**し、ユーザー・管理画面の双方から振り返れるようにする
- 永続を選んだオーナーは、**従来どおりの累計型のまま**変化しない（既存仕様を維持）

これにより、「リセットして盛り上げたい」「永続で積み上げたい」という異なる運営方針を、オーナー設定ひとつで両立させる。

---

## 実現サービスイメージ

**管理画面：オーナー設定（応援スコア）**

```
┌──────────────────────────────────────────────────────────────┐
│ 応援スコア設定                                               │
│                                                              │
│ スコア集計方式   ( ) 永続（累計）   (●) ターム制（期間リセット）│
│                                                              │
│ ── ターム制の設定 ──────────────────────────────────────── │
│  現在のターム   第3期  2026/04/01 〜 2026/06/30  [編集]      │
│  次のターム     第4期  2026/07/01 〜 2026/09/30  [編集][削除] │
│                                          [＋ 次のタームを追加] │
│  ※ 終了日を過ぎると現タームのスコア・称号はリセットされ、     │
│    次のタームが自動的に開始します                            │
└──────────────────────────────────────────────────────────────┘
```

**ユーザー画面：応援スコアマイページ（ターム制オーナー）**

```
┌──────────────────────────────────────────────────────────────┐
│ 第3期（2026/04/01〜06/30） 残り12日                           │
│ あなたの今期の応援スコア   1,250 pt                           │
│ 獲得した称号（今期）  🥈 シルバーサポーター                  │
│                                                              │
│ [過去のタームを見る ▼]                                       │
│   第2期：3,400 pt / 🥇 ゴールドサポーター                    │
│   第1期：   980 pt / 🥉 ブロンズサポーター                   │
└──────────────────────────────────────────────────────────────┘
```

- ターム制オーナーでは「現在のターム名・期間・残り日数・今期スコア・今期称号」を表示
- 過去タームのスコアと獲得称号は履歴として閲覧可能
- 永続オーナーでは従来どおり累計スコア・累計称号を表示（表示変更なし）

---

## やらないこと・開発対象外

- **ランキング・順位表示**（ターム別の順位機能は別フェーズ）
- タームをまたいだスコアの**繰り越し・減衰（持ち越しボーナス等）**
- 永続オーナーに対する称号リセット（**永続は称号も累計のまま**）
- ポイント付与ロジック・換算率そのものの変更
- リアルタイムの途中順位通知・ターム終了のプッシュ通知
- 過去タームの**スコア手動編集・再集計をまたいだ訂正**（履歴は閲覧のみ）

---

## 計測したい項目

（後日定義）

---

## リリース希望スケジュール

**リリース目標：2027年3月**
最初に応援スコアのリセットが発生する**チムニー生活**のタームに間に合わせることを目安とする。

| 優先度 | 対象 |
|---|---|
| 高 | オーナー設定（永続／ターム制の切替）＋ ターム期間設定（開始日・終了日） |
| 高 | タームリセット処理（スコア集計のターム単位化・称号の再判定） |
| 高 | ユーザー画面での今期スコア／今期称号の表示（現在のターム期間・残り日数を含む） |
| 中 | 過去タームの履歴表示（ユーザー・管理画面） |
| 中 | 次タームの事前登録（複数ターム先まで登録） |
| 低 | ターム終了・切替時の告知・演出UI（類似サービスを参考に継続検討） |

---

## 機能・プロダクトの概要

- **集計方式の選択（オーナー単位）**：`永続（累計）` / `ターム制（期間リセット）` をオーナー設定で切替。デフォルトは現行どおり永続
- **ターム設定**：開始日・終了日でタームを定義。次タームを事前登録でき、現タームの終了日経過で次タームへ自動的に切り替わる
- **タームリセット処理**：終了日を過ぎたら、現タームのスコア集計対象を締め、次タームを開始（スコアは新タームで0から）。バッチ／日次処理での実行を想定
- **称号の再判定**：ターム制では称号も今期スコアで判定。タームが切り替わると今期称号はリセットされ、新タームで改めて付与（必要スコア `required_support_score` の判定基準を「累計」から「今期累計」へ）
- **過去タームの履歴保持**：過去タームのスコア・獲得称号を保持し、ユーザー／管理画面から閲覧可能にする
- **永続モードの維持**：永続オーナーは既存の累計ロジック・累計称号をそのまま使用（リグレッション防止）

詳細な画面仕様・設定項目・データ設計は仕様書にて別途定義する。

---

## 設計上の検討事項（要件定義フェーズで詰める）

> ※ ドラフト段階の論点メモ。仕様確定時に解消する。

- **称号の登録負荷とターム間の引き継ぎ（要重点検討）**：1タームあたり**8個程度**の称号が存在しうえ、今タームと次タームで**同じ／類似の称号を使い回す**ケースが想定される。ターム毎に称号を一から登録するのは運用負荷が大きいため、**前タームの称号セットを複製・引き継ぎできる仕組み**（テンプレート化、まとめて次タームへコピー等）で登録を省力化できないか併せて検討する
- **タームとスコア付与履歴の紐付け方**：既存は `target_month`(YYYYMM) で月を保持。ターム期間が月境界をまたぐ／月途中で区切る場合、付与レコードをどのタームに帰属させるか（付与日基準 or `target_month`基準）
- **集計クエリの変更範囲**：`SupportScoreLog` ビュー / `TotalScoreQuery` の合算をターム期間で絞る形に拡張する必要。永続モードと両立させる実装方針
- **称号再集計ワーカーとの整合**：既存の `OwnerBadgeRecalculationWorker` をターム切替時のリセット・再判定に流用するか、専用処理を設けるか
- **リセットの実行タイミングとタイムゾーン**：終了日「23:59:59 JST」で締めるか、翌日0:00で締めるか。バッチ実行の冪等性
- **過去タームのデータ保持形式**：付与レコードにターム識別子を付与して残すか、タームごとのサマリーを別テーブルに集約するか
- **ターム未設定・空白期間の扱い**：次タームが未登録のまま終了日を過ぎた場合の挙動（スコア付与を止める／暫定で累計継続 など）
- **キャンペーン付与・ウェルカムボーナスのターム帰属**：3系統の付与（月額利用・キャンペーン・ウェルカムボーナス）それぞれのターム帰属ルール

---

## ワイヤーフレーム・画面仕様書

- ワイヤーフレーム：Google Slide のリンクを入れる（作成予定）
- 詳細仕様：`仕様書_応援スコアリセット機能.md`（作成予定）

---

## 参考資料

- **関連ドキュメント**
  - Notion「応援スコア：年間リセット機能」（2026/02/25 起票）
- **既存実装（point-mall / develop）**
  - スコア付与：`SupportScoreGrant` / `SupportScoreCampaignGrant` / `WelcomeBonusGrant`
  - 集計：`SupportScoreLog`（ビュー）/ `SupportScore::TotalScoreQuery`
  - 称号：`OwnerBadge`（`required_support_score`）/ `SupportScore::BadgeEvaluationService` / `OwnerBadgeRecalculationWorker`
  - オーナー設定：`owners` テーブル（`reward_score` ほか応援スコア関連カラム）
