لماذا يجب أن يكون الرصيد قيمة محسوبة؟
الرصيد ليس عمودًا يُحدَّث في جدول المستخدمين؛ بل قيمة تُحسب بوصفها حاصل جمع قيود حركات غير قابلة للتعديل. ففي نهج العمود قد تدهس عمليتان متزامنتان إحداهما الأخرى، ولا يمكن التراجع عن تحديث خاطئ، ولا يُعثر على جواب سؤال «لماذا هذا الرصيد؟». أمّا في الدفتر القائم على الحركات فلكلّ تغيير مصدره وتاريخه وقيده المقابل.
المقابل العملي للقيد المزدوج
تُنتج كلّ عملية سطرين على الأقلّ ومجموع السطور صفر: فبينما يُدان حساب، يُدائَن آخر. وعند شحن محفظة يزيد حساب محفظة المستخدم ويزيد في المقابل حساب البنك أو التحصيل. وتحقّق هذه البنية ثلاثة أمور مباشرةً:
- كون المجموع صفرًا على مستوى النظام يمنع «نشوء» مبلغ من العدم.
- كلّ رصيد قابل للتتبّع رجوعًا حتى الحركات التي كوّنته.
- يجري التصحيح بقيد عكسي بدل حذف السجلّ؛ فلا يفسد التاريخ.
ويمكن حفظ ملخّصات أرصدة دورية لأجل الأداء؛ لكن يجب أن يكون الملخّص قابلًا لإعادة الإنتاج من الحركات.
لا تحفظوا المبالغ بأعداد عائمة
يجب حفظ المبالغ أعدادًا صحيحة بأصغر وحدة نقدية (القرش) أو بنوع ذي منازل عشرية ثابتة. فالأعداد العائمة تُنتج فرق تقريب، ويتحوّل هذا الفرق في المطابقة إلى بحث يستغرق أيامًا. كما يجب حفظ رمز العملة إلى جانب كلّ مبلغ؛ ومنع جمع عملات مختلفة على مستوى نموذج البيانات.
ويجب كذلك تعريف قاعدة التقريب في مكان واحد: في أيّ خطوة، وإلى أيّ اتّجاه، وبكم منزلة. فترتيب التقريب في حسابات العمولة والضريبة يغيّر النتيجة.
تكرار العملية وآلة الحالات
تتبع عمليات الدفع مسار حالات محدَّدًا: بُدئت ← أُذن بها ← حُصّلت ← (إرجاع / استرداد جبري). ويجب تعريف كلّ انتقال مع الحالات السابقة المسموح بها، ورفض الانتقالات غير الصالحة. ويُستخدم مفتاح العملية كي لا تُنتج الطلبات المعادة عمليةً جديدة؛ ونتناول هذا الموضوع تفصيلًا في دليل تكامل واجهات API.
المطابقة: قيد النظام مقابل قيد المزوّد
تقارن المطابقة اليومية دفتركم بملفّ مزوّد الدفع أو البنك. وتُعالَج ثلاثة أنواع من الفروق على حدة:
- موجود لديكم وغير موجود لديهم: غالبًا عملية ضاع ردّها ولم تكتمل.
- موجود لديهم وغير موجود لديكم: إشعار فائت؛ ويلزم للتدارك استعلام دوري.
- موجود لدى الطرفين بمبلغ مختلف: بسبب عمولة أو تقريب أو تحويل عملة.
ويجب أن يُسقط مخرَج المطابقة البنودَ غير المقفلة آليًا في طابور، وأن يُتابَع عمر هذا الطابور. ونشرح كيفية ربط بيانات التحصيل بتوقّع النقد الأسبوعي في دليل التدفّق النقدي.
بيانات البطاقة وتضييق النطاق
القرار الأمني الأنجع هو عدم حفظ بيانات البطاقة إطلاقًا. فحين يُستخدم حقل يستضيفه مزوّد الدفع أو ترميز بديل على الجهاز، لا تمرّ بيانات البطاقة الحسّاسة عبر نظامكم ويضيق نطاق الامتثال بوضوح. وهذا ليس ادّعاء شهادة، بل خيار معماري؛ أمّا التقدير النهائي للنطاق فيجري وفق متطلّبات المعيار المعني ومسار التدقيق.
السجلّات وإمكان التتبّع
في الأنظمة المالية ليس السجلّ ميزة إضافية، بل جزء من الوظيفة. فيجب حفظ مَن نفّذ أيّ عملية وبأيّ صلاحية، وأيّ قيمة تغيّرت من ماذا إلى ماذا، وعلى أيّ طلب استند هذا التغيير. ويجب حفظ السجلّات بصورة غير قابلة للتعديل، وأن تكون مدّة الحفظ مكتوبة.
الأسئلة الشائعة
ألا يبطئ استعلامُ الرصيد إذا حُسب بجمع الحركات؟
كي لا يبطئ، تُحفظ أرصدة إقفال دورية ويضيف الاستعلام الحركات الواردة بعد آخر إقفال. وبذلك تُحفظ السرعة وإمكان التتبّع معًا.
ماذا يُفعل إذا لزم حذف عملية؟
لا تُحذف. بل يُنشأ قيد عكسي ويُربط بالقيد الأصلي. فتغيير الماضي في السجلّات المالية يُلغي قابلية التدقيق.
متى ينبغي إضافة دعم تعدّد العملات؟
ينبغي إضافته إلى نموذج البيانات من البداية: فيجب أن يوجد إلى جانب كلّ مبلغ قيدُ العملة وسعر الصرف. أمّا إضافته لاحقًا فتتطلّب إعادة تفسير جميع الحركات القائمة بأثر رجعي.