حساب الرصيد والرسوم النسبية عند تغيير خطة الاشتراك
توضح حاسبة التناسب لتغيير خطة الاشتراك الأثر المالي لنقل العميل من خطة إلى أخرى قبل انتهاء دورة الفوترة الحالية.
شغّل الأداة مجانًا
أدخل سعر الخطة الحالية وسعر الخطة الجديدة لدورة كاملة، وعدد الأيام غير المستخدمة، وإجمالي مدة الدورة. تفصل النتيجة الرصيد المستحق عن الفترة غير المستخدمة عن رسوم الخطة الجديدة للفترة نفسها، ثم تعرض صافي المبلغ وتبين ما إذا كان الناتج رسوماً إضافية أو رصيداً دائناً أو من دون أي تسوية.
أدخل أسعاراً ومدداً قابلة للمقارنة
استخدم سعر كل خطة لدورة فوترة كاملة. يجب أن يكون السعران بالعملة نفسها وأن يشيرا إلى المدة نفسها، أي قارن الخطة الشهرية بخطة شهرية والخطة السنوية بخطة سنوية. أدخل إجمالي عدد الأيام الكاملة في الدورة النشطة، ثم عدد الأيام الكاملة المتبقية عند سريان التغيير. إذا تم التبديل في نهاية الدورة، فيمكن أن تكون الأيام المتبقية صفراً، وعندئذ تكون جميع مبالغ التسوية صفراً أيضاً. ترفض الحاسبة عدداً للأيام المتبقية يتجاوز طول الدورة الكامل لأن بيانات التوقيت حينها تكون متناقضة. كما ترفض الأسعار السالبة وكسور الأيام والقيم غير المنتهية والدورة التي تقل عن يوم واحد. لا يشمل هذا الحساب الضرائب أو الخصومات أو رصيد الحساب أو رسوم الاستخدام أو تكاليف معالجة الدفع. إذا انطبقت هذه البنود، فاحسب أولاً تسوية الخطة الأساسية هنا، ثم طبّق سياسة الفوترة الخاصة بمؤسستك في خطوة مستقلة قابلة للمراجعة. يساعد هذا الفصل على شرح النتيجة للعميل ومطابقتها مع الفاتورة بسهولة أكبر.
افهم الرصيد والرسوم وصافي المبلغ
تساوي النسبة غير المستخدمة عدد الأيام المتبقية مقسوماً على إجمالي أيام دورة الفوترة. يُحسب الرصيد النسبي بضرب سعر الخطة الحالية في هذه النسبة، ويمثل قيمة الخدمة المدفوعة التي لم تُستخدم. وتُحسب الرسوم النسبية بضرب سعر الخطة الجديدة في النسبة نفسها، وتمثل تكلفة تقديم الخطة البديلة خلال الأيام ذاتها. يُقرّب كل مكوّن مالي إلى منزلتين عشريتين قبل حساب صافي المبلغ، بما يتوافق مع أسلوب شائع يعتمد بنود فاتورة منفصلة. يساوي صافي المبلغ الرسوم النسبية مطروحاً منها الرصيد النسبي. تعني القيمة الموجبة وجود رسوم، أي إن العميل يدفع فرق الترقية. وتعني القيمة السالبة وجود رصيد، أي إن الحساب يتلقى القيمة المطلقة عند الانتقال إلى خطة أقل. أما الصفر فيعني عدم وجود تسوية. يبقى الرصيد والرسوم بندين غير سالبين، بينما يحتفظ صافي المبلغ بإشارته كي يوضح الرصيد النهائي بدقة.
طبّق النتيجة باتساق في عمليات الفوترة
استخدم المخرجات كسجل واضح للحساب بدلاً من الاحتفاظ بصافي مبلغ غامض وحده. خزّن المدخلات الأربعة الأصلية إلى جانب النسبة غير المستخدمة والرصيد النسبي والرسوم النسبية وصافي المبلغ واتجاه التسوية. يتيح ذلك لفريقي المالية والدعم إعادة الحساب من دون الحاجة إلى إعادة بناء التواريخ لاحقاً. قبل تسجيل بنود الفاتورة، تحقق مما إذا كانت مؤسستك تعتبر تاريخ سريان التغيير يوماً مستخدماً أم غير مستخدم، لأن هذه السياسة تحدد عدد الأيام المتبقية. وتحقق أيضاً مما إذا كان نظام الفوترة يحسب التناسب بالثواني التقويمية بدلاً من الأيام الكاملة؛ فهذه الإمكانية تستخدم الأيام الكاملة عمداً ولا ينبغي خلطها بسياسة تعتمد الثواني. بالنسبة إلى الأسعار الشاملة للضريبة، حدد ما إذا كانت القواعد المحلية تفرض فصل رصيد الضريبة. وفي الاشتراكات المخفضة، أدخل الأسعار الفعلية المطبقة على الدورة الكاملة إذا كان الخصم يجب أن يدخل في التناسب. تبلغ تكلفة API مقدار $0.002 لكل حساب، ولا تستخدم الشبكة أو التاريخ الحالي أو حالة مخزنة، ولذلك تعطي المدخلات الصحيحة المتطابقة النتيجة نفسها دائماً.
حالات الاستخدام
تسعير ترقية في منتصف الدورة
اعرض للعميل رصيد الخطة غير المستخدمة ورسوم الخطة البديلة والمبلغ الإضافي المستحق قبل تأكيد الترقية.
معالجة الانتقال إلى خطة أقل
احسب الرصيد الذي يضاف إلى الحساب عندما تحل خطة أقل سعراً محل الخطة الحالية خلال الأيام المتبقية.
مطابقة تسويات الفوترة
أعد إنتاج تناسب الفاتورة من أسعار الخطط وأيام الدورة المخزنة عند إجراء مراجعة مالية أو مراجعة من فريق الدعم.
الأسئلة الشائعة
ما تكلفة الحساب؟
تبلغ تكلفة كل حساب عبر API مقدار $0.002. ويمكن تشغيل نسخة المتصفح محلياً في هذه الصفحة.
كيف يُحسب الرصيد النسبي؟
يُضرب سعر الخطة الحالية لدورة كاملة في عدد الأيام المتبقية مقسوماً على إجمالي أيام الدورة، ثم يُقرب إلى منزلتين عشريتين.
كيف تُحسب الرسوم النسبية؟
يُضرب سعر الخطة الجديدة لدورة كاملة في النسبة غير المستخدمة نفسها، ثم يُقرب إلى منزلتين عشريتين.
ماذا يعني صافي مبلغ سالب؟
يعني أن الرصيد النسبي أكبر من الرسوم. يكون الاتجاه رصيداً، وتكون القيمة المطلقة لصافي المبلغ هي قيمة الرصيد المطبقة.
هل يجوز أن تتجاوز الأيام المتبقية مدة الدورة؟
لا. يؤدي هذا الإدخال المتناقض إلى خطأ في الإدخال. لا تضاف الضرائب والخصومات تلقائياً؛ أدخل الأسعار المطبقة وعالج الضرائب وفق سياسة مؤسستك.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر 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"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |