تسوية مصاريف المجموعة
أدخل الرصيد الصافي لكل شخص واحصل على قائمة قصيرة بمن يدفع لمن: إذا كان لأليس 50 وعلى بوب 30 وعلى كارول 20، فإن دفعتين إلى أليس تسوّيان حساب المجموعة كلها. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
بعد رحلة أو سكن مشترك أو عشاء فريق، يعرف الجميع تقريبًا من دفع ماذا، لكن تحويل تلك الأرصدة الصافية إلى تحويلات بنكية فعلية أمر مربك. تأخذ أداة تسوية مصاريف المجموعة هذه الرصيد الصافي لكل شخص (المبلغ المدفوع ناقص المبلغ المستحق) وتعيد قائمة مختصرة بمن يدفع لمن وكم، حتى تُصفّى المجموعة بالكامل دون ديون دائرية. الأرصدة الموجبة تعني أن شخصًا ينبغي أن يستلم مالًا؛ والسالبة تعني أنه ما زال مدينًا. يجب أن تُغلق المجاميع عند الصفر؛ وإن لم تفعل، ترفض الحاسبة المدخلات بدل اختراع باقٍ صامت.
معنى الأرصدة الصافية ولماذا يجب أن يكون مجموعها صفرًا
الرصيد الصافي أبسط ملخص للمصاريف المشتركة: لكل شخص، اطرح ما كان عليه تغطيته مما دفعه فعليًا. إذا دفعت Alice ستين نحو فاتورة مشتركة وكانت حصتها العادلة أربعين، فصافيها زائد عشرين — ينبغي أن تسترد عشرين. إذا لم يدفع Bob شيئًا من إجمالي ما زال مدينًا بثلاثين منه، فصافيه ناقص ثلاثين.
عندما يُدرج كل أشخاص مجموعة مغلقة، تلغي الصوافي الموجبة والسالبة بعضها بعضًا: المال الذي خرج من جيوب المجموعة يجب أن يظهر مجددًا كدفعة زائدة لشخص آخر. لذلك تتطلب حاسبة التسوية هذه أن يجمع الأرصدة إلى صفر ضمن تسامح رقمي ضئيل. إن لم يكن المجموع صفرًا، فالجدول ناقص — شخص مفقود أو حصة كُتبت خطأ أو خُلطت العملات — واختراع تحويلات سيخفي الخلل.
يُشترط شخصان على الأقل؛ لا يمكن لاسم واحد أن يسوّي مع نفسه. يجب أن يكون كل اسم فريدًا حتى لا تلتبس قائمة التحويلات فيمن يدفع لمن. الأرصدة الصفرية مسموحة: من هم متساوون أصلًا لا يظهرون مرسلين ولا مستلمين في النتيجة.
كيف تُبنى قائمة التحويلات الدنيا
الخوارزمية هي تدفق النقد الأدنى الجشع الكلاسيكي لتطبيقات التسوية: تقسيم المجموعة إلى مدينين (رصيد سالب، ما زالوا مدينين) ودائنين (رصيد موجب، ينبغي أن يستلموا). تتتبع نسخ العمل كم ما زال كل مدين يحتاج إلى دفعه وكم ما زال كل دائن يحتاج إلى تحصيله. في كل خطوة يدفع أكبر مدين متبقٍ أقصى ما يمكن لأكبر دائن متبقٍ، فينتج تحويلًا بذلك المبلغ، ثم تتقلص الالتزامات.
عندما يصل المتبقي لدى شخص إلى صفر يغادر الطابور؛ ويستمر العمل حتى تُصفّى كل صافٍ غير صفري. عدد التحويلات على الأكثر أقل بواحد من عدد الأشخاص ذوي رصيد غير صفري — أقل بكثير من توجيه كل دين عبر أمين صندوق واحد حين يمكن إلغاء كثير من المدفوعات الثنائية محليًا. تُحذف الحقول الاختيارية بدل null.
متى تفيد هذه الطريقة في التسوية
يلصق منظمو الرحلات الصوافي من جدول ويرسلون للأصدقاء قائمة دفع قصيرة بدل جمع لقطات من ثلاثة تطبيقات مختلفة. الشقق المشتركة ومجموعات السكن التي توفق مرافق شهرية تريد خطة قابلة للتكرار تعمل حتى عندما يكون صافي زميل صفرًا. مضيفو الهاكاثونات واللقاءات الذين يقدّمون مكانًا أو طعامًا يحتاجون تصفية عادلة دون بناء Splitwise من الصفر.
فرق المنتجات التي تدمج مالية المجموعة في بوتات الدردشة تستدعي الوحدة الصرفة نفسها التي تستخدمها أداة الويب المجانية، فلا تتباعد العروض والإنتاج على حالات حافة مثل مجموعات مُسوّاة أصلًا أو مبادلات بين شخصين. فشل التحقق — أشخاص ناقصون أو أسماء مكررة أو أرصدة غير منتهية أو مجموع غير صفري — لا يستهلك رصيدًا. أبقوا الطلبات صغيرة وثبّتوا قائمة التحويلات في الاختبارات لتحصلوا على خطة موثوقة لمن يدين لمن للفعاليات والمنازل والأتمتة دون إقامة دفتر مصاريف كامل.
حالات الاستخدام
تصفية رحلة وعطلة نهاية أسبوع
حوّلوا صافي المدفوع ناقص المستحق لكل مسافر إلى قائمة قصيرة من التحويلات البنكية حتى لا يبقى أحد حاملًا إقرار دين بعد العطلة.
مرافق شهرية بين زملاء السكن
بعد جمع الإيجار والكهرباء والمشتريات، سوّوا الصوافي المتبقية بأقل عدد من المدفوعات من غرفة إلى غرفة في الشهر.
الأسئلة الشائعة
كيف أحسب تحويلات التسوية من أرصدة المجموعة؟
أرسلوا people كمصفوفة من {name, balance} حيث balance هو المدفوع ناقص المستحق. الموجب يعني استلام مال؛ والسالب يعني الدين.
لماذا يجب أن يجمع الأرصدة إلى صفر؟
في مجموعة مغلقة تلغي الدفعات الزائدة والناقصة بعضها.
ماذا يعني رصيد موجب أو سالب؟
رصيد موجب: دفع الشخص زيادة وينبغي أن يستلم مالًا. رصيد سالب: دفع أقل وينبغي أن يدفع. الصفر يعني مُسوّى أصلًا ولن يظهر في التحويلات.
هل هذا مثل تقسيم الفاتورة بالأوزان؟
لا. مقسّم المصاريف المشتركة يحوّل مبالغ البنود والأوزان إلى حصة كل شخص. أداة التسوية هذه تبدأ بعد وجود الصوافي وتخطط فقط من يدفع لمن.
كم عدد التحويلات اللازمة لتسوية حساب مجموعة؟
على الأكثر عدد الأشخاص الذين رصيدهم غير صفري ناقص واحد. فمع ثلاثة أشخاص لهم أو عليهم مبالغ تكفي دفعتان، ومن كان رصيده صفرًا لا يظهر في القائمة.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/math/who-owes-who-settle-up \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}'const res = await fetch("https://api.kit.forhosting.com/math/who-owes-who-settle-up", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/who-owes-who-settle-up",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/who-owes-who-settle-up", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"people":[{"name":"Alice","balance":50},{"name":"Bob","balance":-30},{"name":"Carol","balance":-20}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/who-owes-who-settle-up", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"people": [
{
"name": "Alice",
"balance": 50
},
{
"name": "Bob",
"balance": -30
},
{
"name": "Carol",
"balance": -20
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.who_owes_who_settle_up",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
المنطق الحتمي نفسه يغذي ودجت المتصفح المجاني ومسار API، فترى تطبيقات المنازل وبوتات المالية ومنظمو الفعاليات دائمًا خطة التحويل نفسها للأرصدة الصافية نفسها.
معنى الأرصدة الصافية ولماذا يجب أن يكون مجموعها صفرًا
يفشل endpoint إذن بـ invalid_input ورسالة واضحة بأن الأرصدة يجب أن تجمع إلى صفر، حتى تصحّح المدخلات قبل أن يرسل أحد مالًا.
كيف تُبنى قائمة التحويلات الدنيا
حقول المخرجات تشمل person_count وbalance_sum (صفر دائمًا عند النجاح) وtransfer_count وtotal_transferred (مجموع مبالغ الدفع) وtransfers كمصفوفة من from وto وamount وسلسلة ملخص قصيرة. تُقرَّب المبالغ لاستقرار JSON. اقرن هذا endpoint بواجهة دفتر الأستاذ الخاصة بكم إن احتجتم إيصالات أو تحويل عملات متعددة؛ القدرة تخطط فقط تحويلات رقمية صرفة بوحدة حساب واحدة.
متى تستحق واجهة API للتسوية العناء
لأن التنفيذ parse صرف من المستوى A، تكلف كل مكالمة ناجحة السعر الأساسي المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة.
حالات التكامل
أتمتة بوت الدردشة والجداول
مرّروا صفوف أرصدة مغلقة من ورقة أو بوت إلى API وانشروا خطة التحويلات مجددًا في قناة المجموعة.
أسئلة تقنية
كم تكلفة حاسبة تسوية مصاريف المجموعة؟
أداة المتصفح مجانية. طلبات API تستخدم رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل مكالمة ناجحة؛ والمدخلات غير الصالحة لا تُفوتر.