العقود الدورية والاشتراكات

فاتورتان عن شهر واحد: العطب الذي لا يُصلحه الانتباه

September 4, 2026 · KEMTOVA ERP · 9 دقائق قراءة

حادثةٌ تتكرّر بصيغةٍ واحدة تقريباً في كل شركةٍ تعيش على عقود: يشتكي عميلٌ أنه استلم فاتورتين عن الشهر نفسه. يُفتح النظام فيُوجد الأمر صحيحاً: فاتورتان، بالمبلغ نفسه، بفارق يومين. ثم يبدأ البحث عن «من كتبها»، وينتهي بإشعارٍ دائنٍ واعتذار.

والخلاصة التي تُقال بعدها دائماً: «لازم ننتبه». وهي خلاصةٌ خاطئة. الانتباه لا يُصلح هذا العطب لأنه ليس عطبَ انتباه؛ إنه عطبٌ في السؤال الذي يعرف النظامُ أن يجيب عنه.

سؤالان يبدوان واحداً

أي نظام فوترةٍ دوريةٍ يجيب عن أحد سؤالين، ولا ثالث:

السؤال الأول: «ما تاريخ اليوم؟» — وهو سؤال المؤقّت. قاعدته: إن كان اليوم هو الأول من الشهر، أنشئ فاتورةً لكل عقدٍ نشط. بسيطٌ ومفهوم، ويعمل بلا خطأ ما دام كل شيءٍ يمرّ مرّةً واحدةً بالضبط.

السؤال الثاني: «أيّ فتراتٍ من هذا العقد لم تُفوتر بعد؟» — وهو سؤال السجل. قاعدته: انظر ما غُطّي فعلاً، وولّد الفارق.

الفرق بينهما لا يظهر في اليوم العادي؛ يظهر في اليوم الذي يختلّ فيه شيء. وهذا اليوم يأتي دائماً.

خمسة أيامٍ يختلّ فيها شيء

الخادم توقّف ليلة الأول. المؤقّت يفوته الموعد ولا يعود إليه — الأول لن يتكرّر إلا بعد شهر. دورةٌ كاملةٌ ضاعت، ولا أحد يعلم لأن غياب فاتورةٍ لا يُصدر إنذاراً.

التشغيلة انقطعت في منتصفها. فُوتر ستون عقداً من مئةٍ ثم انقطع الاتصال بقاعدة البيانات. حين يُعاد التشغيل: هل يبدأ من الواحد والستين أم من الأول؟ المؤقّت لا يعرف، لأنه لم يكتب أين وصل.

محاسبٌ ضغط الزر مرّتين. تأخّرت الشاشة ثانيتين فظنّ أن النقرة لم تصل. مع المؤقّت: فاتورتان.

شخصان في وقتٍ واحد. واحدٌ في الفرع وواحدٌ في الإدارة فتحا شاشة التوليد في الدقيقة نفسها.

عقدٌ عُدّل بأثرٍ رجعي. اكتُشف أن عقداً كان يجب أن يبدأ في يونيو لا في أغسطس. المؤقّت لا يستطيع تدارك يونيو ويوليو؛ سيبدأ من الشهر القادم وكأن الشهرين لم يكونا.

في هذه الخمسة كلّها، النظام الذي يعرف فتراته يتصرّف تصرّفاً واحداً هادئاً: يقارن ما يجب أن يكون مفوتراً بما هو مفوتر فعلاً، ويولّد الفارق. لا أكثر ولا أقل. أعد تشغيله عشر مرّات في الدقيقة نفسها فلن يُخرج في التاسعة شيئاً، لأن الفارق صار صفراً.

الصفّ الذي يصنع الفرق

الآلية في جوهرها بسيطة إلى حدّ الخيبة: صفٌّ محفوظٌ لكل فترةٍ فُوترت، يحمل رقم العقد وبداية الفترة ونهايتها ورقم الفاتورة التي غطّتها ووقت التوليد. هذا كل شيء.

وحين يعمل المولّد لا يسأل التقويم، بل يسأل هذا السجل: العقد رقم ١٤ يبدأ في ١ مارس ويفوتر شهرياً، وآخر فترةٍ مسجّلةٍ له تنتهي في ٣١ يوليو، واليوم ٣ سبتمبر — إذاً تنقصه فترتان: أغسطس وسبتمبر. يولّدهما، ويكتب صفّيهما. وفي المرّة القادمة لن يجد نقصاً.

وميزة هذا التصميم أنه يحوّل ثلاثة أسئلةٍ كانت تُجاب بالذاكرة إلى أسئلةٍ تُجاب بالاستعلام: هل فُوتر هذا العقد عن أغسطس؟ ما الفواتير التي غطّت الربع الأول؟ أي العقود عليها فتراتٌ غير مغطّاة منذ أكثر من شهرين؟ الأخير تحديداً هو تقرير «الإيراد المتسرّب»، وهو أهمّ تقريرٍ في الباب وأقلُّه وجوداً في الأنظمة.

وفي موديول العقود الدورية في كمتوفا ERP هذا الصفّ هو حجر البناء: لا تُولَّد فاتورةٌ لفترةٍ لها صفٌّ قائم، مهما تكرّر التشغيل ومهما تعدّد المشغّلون.

ولماذا لا يكفي أن يفحص المولّد الفواتير نفسها؟

سؤالٌ وجيه: لِمَ لا يبحث المولّد في الفواتير عن فاتورةٍ لهذا العميل بهذا المبلغ في هذا الشهر، فإن وجدها امتنع؟ لأن الفاتورة لا تعرف الفترة التي تمثّلها. عميلٌ له عقدان في موقعين بالمبلغ نفسه سيبدو مفوتراً مرّتين وهو ليس كذلك. وفاتورةٌ عُدّل مبلغها بعد خصمٍ لن تُطابق. وفاتورةٌ أُلغيت ستُترك فجوةً لا يعرف أحدٌ إن كانت مقصودة.

الفاتورة مستندٌ ماليّ يجيب عن سؤال «كم على العميل؟». وسجلّ الفترات يجيب عن سؤال «ما الذي غُطّي؟». والخلط بينهما هو أصل أكثر أعطاب الفوترة الدورية.

تفصيلةٌ تقنيةٌ تُسقط أنظمةً كاملة

حتى مع سجلّ فترات، يبقى فخٌّ يُسقط تشغيلة الدفعة الأولى: ترقيم المستندات داخل الحلقة. حين يولّد النظام مئة فاتورة، إن حسب رقم كل فاتورةٍ من «أكبر رقمٍ موجود + ١» ثم حفظ المئة دفعةً واحدة في النهاية، فالمئة كلّها ستحمل الرقم نفسه — لأن أكبر رقمٍ لم يتغيّر في القاعدة إلا بعد الحفظ.

هذا عطبٌ لا يظهر في اختبار عقدٍ واحد، ولا في عقدين. يظهر في أول دفعةٍ حقيقية، وغالباً على بيانات عميل. والعلاج معروف: الحفظ داخل الحلقة، فاتورةً فاتورة. وهو درسٌ اصطدنا به في مولّدٍ سابقٍ عندنا وصحّحناه قبل أن يخرج، ثم طبّقناه قاعدةً على كل مولّدٍ دفعيٍّ في النظام.

وحين تُقيّم نظاماً، هذه تجربةٌ تكشف الكثير: اطلب توليد دفعةٍ من ثلاثين عقداً، وانظر أرقام الفواتير الناتجة. إن تكرّر رقمٌ واحد فالمنتج لم يُختبر على حجمٍ حقيقي.

ثلاث تجارب قبل التوقيع

١) شغّل التوليد مرّتين في اليوم نفسه. النتيجة الصحيحة: المرّة الثانية تقول «لا شيء مستحق». أي نتيجةٍ أخرى إنذار.

٢) أوقف العامل الخلفي أسبوعاً ثم شغّله. النتيجة الصحيحة: يُدرك الفائت في تشغيلةٍ واحدة، لا أن يبدأ من اليوم ويترك الأسبوع خلفه.

٣) أضف عقداً تاريخ بدايته قبل ثلاثة أشهر. النتيجة الصحيحة: ثلاث فترات مستحقّة تظهر في المعاينة قبل التوليد، فتقرّر أنت أتُفوترها أم تبدأ من الشهر الحالي.

وهذه الثالثة تحديداً تكشف فرقاً في الفلسفة: النظام الجيّد يعاين قبل أن يولّد. شاشةٌ تُريك ما سيصدر وبكم ولأيّ عملاء، وتترك القرار لك — لا زرٌّ يولّد مئة فاتورةٍ ثم تكتشف بعدها ما فعل.

اطّلع على موديول العقود الدورية والاشتراكات، أو على بقية ميزات كمتوفا ERP، أو راجع صفحة الأسعار.

كل المقالات