サブスクのプラン変更時の日割り料金計算
このサブスクリプションの日割り計算では、現在の請求期間が終了する前にお客様のプランを変更した場合の金額を確認できます。現在のプランと新しいプランの1期間分の価格、未利用の日数、請求期間の総日数を入力してください。結果には、未利用期間に対する現在のプランの返金額と、同じ期間に対する新しいプランの請求額が分けて表示されます。さらに、その差額と、追加請求・返金・調整なしのいずれになるかも示されます。
無料で実行
同じ条件のプラン価格と請求日数を入力します
各プランについて、請求期間1回分の価格を入力してください。2つの価格は同じ通貨で、同じ期間に対応している必要があります。月額同士または年額同士で比較してください。次に、進行中の請求期間の総日数と、変更が有効になる時点で残っている未利用の整数日数を入力します。期間の最終日に切り替える場合、残り日数は0にでき、すべての調整額も0になります。残り日数が請求期間の総日数を超えると、時間条件に矛盾があるためエラーになります。負の価格、小数の日数、有限でない値、1日未満の請求期間も受け付けません。税金、割引、アカウント残高、従量料金、決済手数料はこの計算に含まれません。必要な場合は、まずここで基本となるプラン差額を求め、その後に組織の請求規則を別の監査可能な工程として適用してください。このように分けると、お客様への説明と請求書の照合が容易になります。
返金額、請求額、差額の意味を確認します
未利用割合は、残り日数を請求期間の総日数で割って求めます。日割り返金額は現在のプラン価格にこの割合を掛けた金額で、支払い済みでありながら利用していないサービスの価値を表します。日割り請求額は新しいプラン価格に同じ割合を掛けた金額で、同じ日数に提供する変更後のサービス料金を表します。それぞれの金額は小数第2位まで丸めてから差額を計算します。これは、請求書上で返金と請求を別の明細にする一般的な方法に対応しています。差額は日割り請求額から日割り返金額を引いた値です。正の値は追加請求で、上位プランへの変更差額をお客様が支払います。負の値は返金で、下位プランへの変更に伴う絶対値の金額をアカウントへ付与します。0の場合は調整なしです。返金額と請求額は負でない明細として表示し、符号付きの差額で最終的な残高を明確に示します。
請求業務で結果を一貫して利用します
差額だけを理由なしに保存するのではなく、出力全体を追跡可能な計算記録として利用してください。元の4つの入力値に加えて、未利用割合、日割り返金額、日割り請求額、差額、調整の方向を保存します。これにより、経理部門やサポート部門は、後から日付を復元しなくても計算を再現できます。請求明細を確定する前に、変更の発効日を利用済みと数えるか、未利用と数えるかを組織内で確認してください。この方針によって残り日数が変わります。また、請求システムが整数日ではなく暦上の秒数で日割りするかも確認してください。この機能は意図的に整数日を使用するため、秒単位の方針と混在させないでください。税込価格では、地域の規則により税額の返金を分ける必要があるか確認します。割引契約では、割引を日割りに含める場合、実際に適用される1期間分の価格を入力してください。APIの料金は1計算あたり$0.002で、ネットワーク、現在日時、保存状態を使用しないため、同じ有効な入力からは常に同じ結果が得られます。
活用例
期間途中のアップグレードを見積もる
確定前に、未利用プランの返金額、新しいプランの請求額、追加で必要な金額をお客様へ提示できます。
契約のダウングレードを処理する
残りの日数に対して安価なプランへ変更する際に、アカウントへ付与する返金額を計算できます。
請求調整を照合する
保存済みのプラン価格と請求日数から日割りを再現し、経理またはサポートの確認に利用できます。
よくある質問
計算料金はいくらですか?
APIでは1回の計算につき$0.002です。ブラウザー版はこのページ上でローカルに実行できます。
日割り返金額はどのように計算しますか?
現在のプランの1期間分の価格に、総日数に対する残り日数の割合を掛け、小数第2位まで丸めます。
日割り請求額はどのように計算しますか?
新しいプランの1期間分の価格に同じ未利用割合を掛け、小数第2位まで丸めます。
差額が負の場合は何を意味しますか?
日割り返金額が日割り請求額を上回っています。方向は返金となり、差額の絶対値が付与する返金額です。
残り日数は請求期間より長くできますか?
できません。矛盾する入力としてエラーになります。税金や割引は自動追加されないため、適用価格を入力し、税金は組織の方針に従って処理してください。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/ecom/subscription-proration-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"current_plan_price":30,"new_plan_price":60,"days_remaining":10,"billing_cycle_days":30}'const res = await fetch("https://api.kit.forhosting.com/ecom/subscription-proration-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"current_plan_price": 30,
"new_plan_price": 60,
"days_remaining": 10,
"billing_cycle_days": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ecom/subscription-proration-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"current_plan_price": 30,
"new_plan_price": 60,
"days_remaining": 10,
"billing_cycle_days": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ecom/subscription-proration-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"current_plan_price":30,"new_plan_price":60,"days_remaining":10,"billing_cycle_days":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"current_plan_price":30,"new_plan_price":60,"days_remaining":10,"billing_cycle_days":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ecom/subscription-proration-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"current_plan_price": 30,
"new_plan_price": 60,
"days_remaining": 10,
"billing_cycle_days": 30
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ecom.subscription_proration_calc",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |