برنامج متابعة الذمم المدينة هو نظام يحفظ في مكان واحد كل حركة مدينة ودائنة مع عملائك، ويُظهر من يدين بكم، ومتى يستحق المبلغ، وفي أي مرحلة يقف التحصيل. يتكون من أربعة أجزاء: دفتر حساب للعميل يحفظ كل حركة كسجل لا يُحذف أبدًا، وتقرير أعمار الديون الذي يجمع المبالغ المفتوحة حسب تاريخ الاستحقاق، وسلسلة تذكيرات للمبالغ المستحقة والمتأخرة، ومطابقة الأرصدة التي تقارن رقمك برقم الطرف الآخر. يكفي جدول البيانات مع العملاء الأوائل؛ وعندما يزداد البيع الآجل والدفعات الجزئية يصبح جواب سؤال «كم يدين لنا هذا العميل فعلًا» مختلفًا باختلاف من تسأله. نشرح في هذا المقال نموذج البيانات الصحيح، وسير التحصيل، وتقسيم العمل مع برنامج المحاسبة، وقرار البرنامج الجاهز أم البرمجية الخاصة. هذه هي الموضوعات التي نبدأ بها عندما نبني متابعة الذمم ضمن الحلول المؤسسية.
هل متابعة حسابات العملاء هي نفسها برنامج المحاسبة؟
جزئيًا. برنامج المحاسبة يحفظ السجلات الرسمية: دفتر اليومية وميزان المراجعة والإقرارات الضريبية. أما متابعة حسابات العملاء فتجيب عن أسئلة التشغيل: فريق المبيعات يريد رؤية الرصيد المفتوح قبل قبول طلب جديد، وفريق المالية يريد معرفة من يجب الاتصال به هذا الأسبوع. في شركة صغيرة قد تكفي وحدة العملاء في برنامج المحاسبة. وعندما تكون المبيعات والشحن والتحصيل فرقًا منفصلة لا تصل إلى برنامج المحاسبة، تحتاج إلى شاشة مستقلة. في الإعداد الصحيح لا يتنافس النظامان: تنتقل الفواتير والتحصيلات إلى المحاسبة، وتمنح شاشة الذمم الفرق التشغيلية رؤية واضحة. شرحنا طريقة بناء هذا النقل في مقال تكامل برنامج المحاسبة، والفاتورة نفسها في مقال تكامل الفاتورة الإلكترونية.
الأساس: الرصيد دفتر قيود وليس حقلًا
أكثر جزء يُبنى بشكل خاطئ هو الرصيد. إضافة عمود «الرصيد» إلى بطاقة العميل وتحديثه مع كل فاتورة وتحصيل تنجح لشهر؛ لكن عندما يتوقف تحديث في منتصفه أو يسجل مستخدمان في الوقت نفسه، ينحرف الرقم بصمت ولا يبقى أثر يفسر السبب. النموذج الصحيح يسجل كل فاتورة وتحصيل ومرتجع وتسوية كقيد مستقل، والرصيد هو مجموع هذه القيود. القيد الخاطئ لا يُحذف بل يُعكس بقيد مقابل. وتُحفظ المبالغ كأعداد صحيحة بأصغر وحدة للعملة لا كأعداد عشرية، وإلا تراكمت فروق التقريب. المثال التالي يحسب الرصيد والمبلغ المتأخر من القيود.
type LedgerEntry = {
accountId: string;
kind: 'invoice' | 'payment' | 'credit_note' | 'adjustment';
amountMinor: number; // debit positive, credit negative (minor units)
dueDate?: Date;
postedAt: Date;
};
export function summarize(entries: LedgerEntry[], today: Date) {
const balance = entries.reduce((sum, e) => sum + e.amountMinor, 0);
// Payments settle the oldest due invoice first (FIFO).
let credit = -entries
.filter(e => e.amountMinor < 0)
.reduce((sum, e) => sum + e.amountMinor, 0);
let overdueMinor = 0;
const invoices = entries
.filter(e => e.amountMinor > 0)
.sort((a, b) => (a.dueDate?.getTime() ?? 0) - (b.dueDate?.getTime() ?? 0));
for (const inv of invoices) {
const covered = Math.min(credit, inv.amountMinor);
credit -= covered;
const open = inv.amountMinor - covered;
if (open > 0 && inv.dueDate && inv.dueDate < today) overdueMinor += open;
}
return { balance, overdueMinor };
}لا يُحذف أي قيد في حساب العميل، بل يُعكس فقط. النظام الذي يستخرج الرصيد من قيوده هو الوحيد القادر بعد عام على الإجابة دون جدال عن سؤال «من أين جاء هذا الرقم؟».
تواريخ الاستحقاق وتقرير أعمار الديون
الرصيد الإجمالي لا يخبر فريق التحصيل بمن يتصل أولًا. هذا ما يفعله تقرير أعمار الديون: تُجمع المبالغ المفتوحة حسب تاريخ الاستحقاق، ويظهر لكل عميل أي مبلغ ينتظر ومنذ متى. ولكي يكون التقرير موثوقًا تُوضع هذه القواعد من البداية:
- لكل فاتورة تاريخ استحقاق خاص بها؛ يُنسخ من شروط العميل العامة لكن يمكن تغييره في الفاتورة.
- يعرف التحصيل أي فاتورة يغلقها. إذا لم يختر المستخدم، تُغلق الفاتورة الأقدم استحقاقًا أولًا.
- الفئات ثابتة (غير مستحق بعد، 1-30، 31-60، 61-90، أكثر من 90 يومًا) وموحدة في كل التقارير.
- تُتابع حسابات العملات الأجنبية بعملتها؛ ويُسجل فرق سعر الصرف كقيد مستقل.
- يمكن إعادة إنتاج التقرير بتاريخ أي يوم؛ ولا يتغير وضع نهاية الشهر الماضي لاحقًا.
تذكيرات الدفع وسير التحصيل
يأتي معظم التحصيل بعد التذكير، ويجب أن يكون التذكير منتظمًا. تعمل مهمة مجدولة كل صباح، فتجد الفواتير التي اقترب استحقاقها أو تأخرت، وترسل إلى العميل بريدًا إلكترونيًا أو رسالة واتساب، وتسجل الإرسال في بطاقة العميل؛ ولا تُرسل رسالة ثانية للفاتورة نفسها في اليوم نفسه. شرحنا تشغيل هذه المهمة بأمان في مقال المهام المجدولة، وقناة الرسائل في مقال تكامل واتساب للأعمال. الدفعة التي تتم عبر الرابط في الرسالة تُسجل تلقائيًا كقيد تحصيل عند وصول إشعار مزود الدفع؛ والتحقق من هذا الإشعار موضوع مقال الويب هوك. أما العملاء المتأخرون طويلًا فيخرجون من السلسلة الآلية ويُسندون كمهمة إلى موظف محدد.
مطابقة الأرصدة وحد الائتمان
مطابقة الرصيد تؤكد في تاريخ محدد أن الرصيد في دفاترك يطابق رصيد العميل. يُنتج البرنامج خطاب المطابقة مع كشف القيود ويسجل موافقة الطرف الآخر أو اعتراضه؛ وعند الاعتراض يُفحص الفرق قيدًا بقيد. للمتطلبات القانونية والإقرارات استشر محاسبك؛ هذا المقال ليس استشارة قانونية أو مالية. وحد الائتمان هو المقابل في جانب المبيعات: إذا تجاوز الرصيد المفتوح والمبلغ المتأخر الحد، يذهب الطلب الجديد إلى الموافقة. الشركات التي تبيع عبر الوكلاء تحتاج هذا الفحص لحظة الطلب؛ ويشرح مقالا نظام طلبات الوكلاء B2B وبرنامج تتبع الطلبات هذا الربط.
برنامج جاهز أم برمجية خاصة؟
لشركة تبيع غالبًا نقدًا ويتابع حساباتها شخص واحد، تكفي عادة وحدة العملاء في برنامج المحاسبة أو أداة جاهزة. وتصبح البرمجية الخاصة منطقية عندما يجب أن يظهر الرصيد في شاشات الطلبات والشحن والمبيعات الميدانية معًا، أو عندما تكون حدود الائتمان والموافقات خاصة بالشركة، أو عند وجود عدة فروع وعملات، أو عندما يجب ربط التذكيرات بالقنوات القائمة. أما من يحق له تسجيل التحصيل وتغيير الحدود فهو شأن نموذج الصلاحيات (أدوار المستخدمين والصلاحيات). وللإطار العام للقرار راجع مقال برمجية خاصة أم حل جاهز.
الخلاصة
برنامج متابعة الذمم المدينة ليس قائمة أرصدة، بل دفتر يحفظ كل حركة مدينة ودائنة بتاريخها. في النظام المبني جيدًا يُستخرج الرصيد من القيود، وتُعكس السجلات ولا تُحذف، ويتحول تقرير أعمار الديون إلى قائمة مهام لفريق التحصيل، وتُرسل التذكيرات في موعدها، وتُحل فروق المطابقة قيدًا بقيد. إذا أردت ربط حسابات عملائك بعمليات الطلبات والشحن والمحاسبة، فاطلع على الحلول المؤسسية أو اطلب عرض سعر مباشرة.