contract_id: stripe-kpi-v1
purpose: "自社管理指標。Stripe公式値との突合は別列"
account_id: "acct_実アカウントID"
mode: "live または sandbox/test。両者を混ぜない"
customer_key: "account_id + Stripe customer ID"
customer_model: "Customers v1。本例はcustomer_accountを混在させない"
paid_customer_definition: "本例は正のMRR。初回支払完了を別要件にはしない"
stripe_comparison:
  settings_observed_at: "未確認なら未確認と書く"
  recurring_discount_setting: "画面の実設定を記録"
  one_time_discount_setting: "画面の実設定を記録"
  subscriber_activation: "subscription開始時か初回入金時か、画面の実設定を記録"
  official_value_confirmed: false
period:
  timezone: Asia/Tokyo
  start: "2026-09-01T00:00:00+09:00"
  end_exclusive: "2026-10-01T00:00:00+09:00"
  opening_snapshot: "start直前の状態"
  closing_snapshot: "end_exclusive直前の状態"
  event_window: "start <= effective_at < end_exclusive"
mrr:
  type: "時点の月額換算。請求・入金・会計売上とは別"
  currency: "USDのみ。JPY等は別集計"
  amount_unit: "元データは通貨のminor unit。USDはcent、JPYはyen"
  eligible_statuses: [active, past_due]
  tax: exclude
  one_off_items: exclude
  metered_items: exclude
  trial: "その時点で試用中の範囲を除外"
  permanent_discount: subtract
  temporary_recurring_discount: "本例では有効期間中に控除"
  one_time_discount: "本例ではMRRから控除しない。請求・返金表へ別記"
  cancel_at_period_end: "本例では実効終了まで含め、予約MRRを別表示"
  pause_collection: "本例では状態がactiveなら含め、回収停止額を別表示"
  refund: "一度の返金はMRRから引かない。継続価格の変更は別に反映"
  month_normalization: "month額/interval_count、year額/(12*interval_count)"
  unsupported: "週・日、段階料金、複数割引、税込、item試用等は専用確認。推測で0にしない"
churn:
  logo_name: "月初コホートの顧客解約率"
  numerator: "月初MRR>0 かつ 月末MRR=0 の顧客数"
  denominator: "月初MRR>0 の顧客数"
  mid_period_cancel_and_return: "月末に正のMRRがあれば分子から除外。イベント表は別"
  new_then_cancel: "月初コホートには含めない。イベント表には記録"
  stripe_rolling_30d: "公式値・期間・分母を別取得し、独自式で置換しない"
retention:
  cohort: "月初有料顧客集合を固定"
  grr: "sum(min(opening_mrr, closing_mrr)) / opening_mrr_total"
  nrr: "同一コホートのclosing_mrr_total / opening_mrr_total"
precision:
  calculation: "整数、Decimalまたは有理数。floatで金額を積み上げない"
  rounding: "途中で丸めず、最後に通貨表示と百分率だけ四捨五入"
  division_by_zero: "N/A"
verification:
  require_complete_pages: true
  require_source_refs: true
  incomplete_data_result: "確定値を出さず、未取得範囲と理由を返す"
