回数券・保管 v0.3仕様 — 穴チェック結果(部下2人+一次情報)

2026-06-08 / 敵対的レビュー。自動で直す=こちらで設計修正に反映済/予定。PM判断=決めていただきたい。

骨子(写真不使用・6ヶ月失効・属性生成・スパイク合格)は妥当。ただし実装前に潰すべき重大な穴が6つ出ました。多くはこちらで設計修正できますが、4点だけPMのご判断が要ります(末尾)。

🔴 最優先(放置すると 法務違反/恒久欠配/返金事故)

#対応区分
H1無料枠と購入券の「混在管理」が、法律で避けるべき項目に正面衝突。残数を合算表示・合算消費すると、無料分の毎月失効が購入券の期限管理に波及=6ヶ月除外を崩しかねない+会計でも無料分(対価0)と購入券(前受金)が分離できない。無料枠と購入券を物理的に別管理(別テーブル・別残数・別表示・別台帳)。消費は内部で「無料→購入」の順でよいが、表示も「無料○回/購入券○枚」の2行に分ける。自動で直す
H2自動お気に入りの満杯デッドロック。「絵本生成で自動お気に入り化」+「満杯なら追加不可」だと、お気に入りが10件埋まった状態で絵本を作ると自動登録が詰まり、基本動作の絵本生成がブロックされる。1冊で私服枠・パジャマ枠を同時に食う。絵本生成は満杯でも必ず通す。「お気に入り(手元に残す10枠)」と「直近で使った履歴」を分け、生成時は履歴に積む→ユーザーが10枠へ昇格を選ぶ方式 等。下のPM判断①PM判断①
H3使用中/配信前アンカーの削除で恒久欠配。非お気に入り(1ヶ月)や手動削除・期限切れが、(a)その子が今使っているアンカー、(b)補填便・遅延配信・再生成がこれから参照するアンカー、を消すと画像404=別人化・欠配。さらにパジャマは私服を元に作るので私服が先に消えるとパジャマ再生成不能「使用中・未配信参照あり・私服に依存するパジャマ」は削除しない保護ガード(既存の本棚保持と同型)。絵本に使った瞬間に必ず1年保護へ昇格。自動で直す
H4退会時にカスタム画像が残る/台帳にPII残存。退会の匿名化はURL文字列を空にするだけでR2の実画像は消さない(プリセットは共有素材なので正しいが、カスタムは個人専用生成物)。新規の券テーブルも匿名化対象外で生のLINE IDが残る。匿名化処理にカスタムアンカーのR2物理削除+新テーブルのID匿名化を追加。自動で直す
H5「課金は単品流用で足りる」は誤解。単品テーブルは「1冊の注文」用で残高/束/期限の概念ゼロ。流用できるのは決済の作法だけ、データは新規(束・台帳・無料枠の3表)が必須。spec表現を「決済フローのみ流用・データは新規3表」に修正。自動で直す
H6本当の山場=生成器のアンカーURLバイパス。本番Cloud Run改修+Docker再ビルド+実生成検証が必須(/health疎通だけでは過去importエラー事故を見抜けない領域)。パジャマ欠落時の「私服で代用」も、既存だと無関係なプリセットpajamaを引くのでカスタム専用の新分岐が要る。本番反映は canary(--no-traffic)+サンプル実生成1冊を必須手順に固定。カスタム経路専用フォールバック(custom pajama無→custom casual)を実装。自動で直す

🟠 中(クレーム・返金・会計の運用)

#対応区分
M1券の消費は「予約→確定」方式が必要。生成はCloud Run非同期。減算(D1)と生成が別。タイムアウトで「成功とも失敗とも言えない宙ぶらりん」だと券が戻らない(既存の生成20分固着と同型)。券を hold(予約)→ 生成成功callbackで commit、失敗/stallで release。dead-letterで自動release・冪等キーで二重防止。自動で直す
M2消費税は3状態で管理が必要。販売時=前受金(不課税)/生成実行時=課税売上/6ヶ月失効=雑収入(不課税)。「使用/失効で売上」だけだと税の認識時点を誤る。後付け不可なので設計時に分離。台帳から3状態を機械的に出せる設計に。税理士確認は据置。自動で直す
M3返金は「束単位の未使用」を機械判定。FIFOで古い束から使うため、新しく買った束でも先に使われ得る→「7日以内なのに返金不可」の誤解。Stripe手数料は戻らず少額多発で赤字。束単位の未使用フラグで判定(H1の分離が前提)。確認画面に「古い束から使う」旨を1行。少額返金多発を抑える文言。自動で直す
M4確認画面に「有効期限の実日付」欄が無い(単品流用だと欠落)。特商法上、購入時刻+6ヶ月の実日付明示が必須。確認画面データに 有効期限(実日付) を追加。数量/税込/単価/期限実日付/返金特約 の表示を必須化。LP・規約にも返金不可を二重記載。自動で直す
M5やり直し券切れ・確定前離脱・childrenの半端更新。確定の瞬間に残券0だとパジャマが作れず確定不能。私服だけ更新でちぐはぐ。やり直し時に「パジャマ用にもう1枚必要」を残数に織り込む。私服+パジャマ揃って初めてchildrenをコミット(部分更新禁止)。券切れ時は「今の私服で確定(パジャマは私服で代用)」導線。自動で直す
M6解約/ダウングレード時の扱いが未定義。お気に入り・購入済み券は解約後どうなるか。購入券は買い切りなので解約後も6ヶ月有効=未契約でも生成可(前払の利用権・資金決済法的にも自然)が妥当。お気に入り保持/再契約時復元は下のPM判断②PM判断②

🟡 軽微・文書整合(即修正)

#対応
L1プレミアム無料回数が文書間で 14 と 16 で不一致(LEGAL_AND_PLAN=14/設計書=16)。PM確定の16に統一(原価率3.3%へ再計算)。修正済。
L2月間上限が「なし」と「50回」で不一致PM確定の「なし」に統一。HTMLの50回記述を廃止。修正済。
L3目の形の採否が文書間で矛盾(CREATION_METHOD旧記述「不採用」 vs 現行「採用」)。現行=採用(眉の向きは廃止)に統一。修正済。
L4枠別満杯(私服は空きだがパジャマ満杯)の文言・導線が未定義。枠別の満杯メッセージ+「どれを外すか」選択UIを明記。

PMに決めていただきたい 4点

  1. 判断①(H2の解消方針):お気に入り満杯でも絵本は作れるようにします。方式は——
     (a) 「お気に入り10枠」と「最近作った履歴」を分離。生成は履歴に積み、ユーザーが「残す」を押した10件だけお気に入り=1年保護(推奨)。
     (b) 自動お気に入りで満杯なら一番古い(最終生成が古い)ものを自動で押し出す(LRU)
    どちらにしますか?
  2. 判断②(H6/M6 解約時):解約後、購入済み回数券は6ヶ月有効のまま使える(買い切りなので)。お気に入り画像は「最後の絵本生成から1年」で自然に消えます。これでよいですか?(再契約時の復元は無し=シンプル、で提案)
  3. 判断③(返金の手間):少額返金はStripe手数料(¥3.6)が戻らず赤字。「未使用束のみ・購入後7日以内・申告制」に限定でよいですか?(自動返金ボタンは付けない)
  4. 判断④(専門家確認):税務(前受金/消費税3状態)・返金不可条項・特商法文言の3点だけ、実装後に行政書士/税理士へ1回確認(保険)。入れる前提でよいですか?

①〜④をいただければ、設計書v0.3を「穴反映版(v0.3.1)」に更新し、その後プロトタイプ実装に入ります。H1〜H6・M1〜M5・L1〜L4はこちらで設計反映します。