أنظمة الكاشير ونقاط البيع

العمل دون إنترنت في أنظمة الكاشير: ما معنى Offline-First ولماذا هو ضروري في أسواقنا

بقلم أحمد قطف · · 4 دقائق قراءة

في يوم عادي في كثير من المدن العربية قد ينقطع الإنترنت أو الكهرباء أكثر من مرة. نظام كاشير يتوقف عن البيع عند كل انقطاع يكلّف صاحب المحل زبائن ومالاً وأعصاباً. لهذا نعتبر العمل دون إنترنت شرطاً أساسياً، لا ميزة إضافية.

ثلاثة أنواع من الأنظمة

النظام المحلي التقليدي: برنامج مثبت على حاسوب واحد، وقاعدة البيانات على قرصه. يعمل دون إنترنت دائماً، لكن البيانات حبيسة الجهاز: لا ترى مبيعاتك من البيت، والنسخ الاحتياطي مسؤوليتك، وتعطل القرص كارثة.

النظام السحابي البحت: صفحة ويب تتصل بالخادم مع كل عملية. مريح للتقارير عن بعد والتحديثات، لكنه يتوقف تماماً عند انقطاع الاتصال، ويتباطأ مع الإنترنت الضعيف لأن كل ضغطة زر رحلة إلى خادم قد يكون في قارة أخرى.

نظام Offline-First: يجمع الميزتين. البيانات تُحفظ أولاً على الجهاز نفسه، والبيع يتم محلياً بسرعة كاملة، ثم تتم مزامنة الفواتير مع الخادم في الخلفية متى توفر الاتصال. الإنترنت هنا وسيلة للمزامنة والنسخ الاحتياطي، وليس شرطاً للعمل.

كيف يعمل من الداخل؟

في تطبيقات الويب الحديثة يتم ذلك عادة بثلاثة مكونات. الأول Service Worker: سكربت يعمل في الخلفية ويخزّن ملفات التطبيق نفسها (الصفحات والأكواد والخطوط)، فيفتح التطبيق حتى لو كان الجهاز بلا إنترنت تماماً. الثاني قاعدة بيانات داخل المتصفح مثل IndexedDB، تحفظ الأصناف والأسعار والفواتير. الثالث طابور مزامنة: كل عملية جديدة (فاتورة، تعديل سعر، استلام بضاعة) تُسجل كحدث في قائمة انتظار، وعند عودة الاتصال تُرسل الأحداث بالترتيب إلى الخادم، ويستلم الجهاز بالمقابل التغييرات التي حدثت على الأجهزة الأخرى.

المبدأ المهم أن كل فاتورة تأخذ معرّفاً فريداً يُولد على الجهاز نفسه (وليس رقماً تسلسلياً يعطيه الخادم)، حتى لا يتكرر رقم فاتورتين أُنشئتا على جهازين مختلفين أثناء الانقطاع. أما رقم الفاتورة المطبوع للزبون فيمكن أن يحمل بادئة الجهاز، مثلاً A-1043 وB-1043.

مشكلة التعارض: جهازان غيّرا الشيء نفسه

تخيل محلاً فيه جهازا كاشير، وانقطع الإنترنت ساعة. خلالها باع الجهاز الأول ثلاث قطع من صنف، وباع الثاني قطعتين من الصنف نفسه. عند عودة الاتصال يجب أن تُخصم خمس قطع، لا أن «يفوز» أحد الجهازين بقيمته. لهذا لا تُزامن الكمية كرقم نهائي («الكمية الآن 12»)، بل كحركات («بيع 3»، «بيع 2»)، والخادم يجمعها. هذا التصميم يسمى أحياناً تسجيل الأحداث، ويجعل التعارض في الكميات شبه مستحيل.

التعارض الحقيقي يبقى في البيانات التي يعدّلها شخصان في الوقت نفسه، مثل سعر صنف غيّره المدير من البيت بينما غيّره البائع في المحل. القاعدة الشائعة هنا «آخر تعديل يفوز» مع تسجيل التعديلين في السجل، أو منع تعديل الأسعار من أجهزة البيع أصلاً، وهو الأبسط والأسلم.

ماذا عن الكهرباء؟

العمل دون إنترنت لا يفيد إذا انطفأ الجهاز. الحل البسيط جهاز يعمل ببطارية (حاسوب محمول أو جهاز لوحي) بدل حاسوب مكتبي، أو وحدة UPS صغيرة تكفي لإغلاق الأمور بهدوء. والطابعة الحرارية تستهلك طاقة قليلة نسبياً، فيمكن تشغيلها على UPS صغير أو اختيار طابعة محمولة ببطارية. وفي التطبيقات المبنية على مبدأ Offline-First تُحفظ كل فاتورة لحظة إنشائها، فلا تضيع حتى لو انطفأ الجهاز فجأة قبل المزامنة.

أسئلة تسألها قبل اعتماد أي نظام

  1. افصل الإنترنت أمام البائع: هل يكمل البيع؟ هل تُطبع الفاتورة؟
  2. بِع عدة فواتير دون اتصال ثم أعد الاتصال: هل ظهرت كلها في التقارير وبالترتيب الصحيح؟
  3. بِع الصنف نفسه من جهازين أثناء الانقطاع: هل خُصمت الكمية مرتين بشكل صحيح؟
  4. أغلق التطبيق وأعد فتحه دون إنترنت: هل يفتح أصلاً؟
  5. كم يوماً يستطيع العمل دون مزامنة؟ وهل ينبهك إذا طالت المدة؟

هذه الاختبارات الخمسة تكشف في ربع ساعة ما لا تكشفه الكتيبات التسويقية. وهي من صلب الأسئلة العشرة لاختيار نظام الكاشير.

أمان البيانات على الجهاز

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

مثال من يوم عمل حقيقي

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

الفرق هنا ليس تقنياً فقط، بل نفسي: البائع لا يتوتر، والزبون لا ينتظر، وصاحب المحل لا يقضي الليل في مطابقة أوراق.

ما الذي لا يعمل دون إنترنت؟

بالطبع هناك أشياء تحتاج اتصالاً بطبيعتها: الدفع بالبطاقة عبر جهاز نقاط البيع البنكي (رغم أن بعض الأجهزة تخزن العمليات مؤقتاً)، والتحقق من رصيد بطاقة هدية مركزية، ورؤية مخزون فرع آخر لحظياً، وإرسال الفاتورة الإلكترونية للجهة الضريبية في الدول التي تشترط الإرسال الفوري. النظام الجيد يوضح للمستخدم بوضوح ما الذي ينتظر الاتصال، مثل علامة صغيرة بجانب الفواتير التي لم تتم مزامنتها بعد، بدل أن يخفي ذلك ويترك الجميع في حيرة.

لماذا بنينا كاسب بهذه الطريقة؟

لأننا رأينا بأعيننا محلات تعود إلى الدفتر الورقي كلما انقطع الإنترنت، ثم تنسى إدخال ما كُتب في الدفتر، فتختل الكميات والأرباح. الهدف من كاسب أن يبقى الكاونتر يعمل مهما حدث، وأن تصل البيانات إلى صاحب المحل عندما يعود الاتصال، دون أن يفكر في الموضوع. والفكرة نفسها، أي أن يعمل التطبيق من الجهاز أولاً، هي ما يجعل مواقعنا الثابتة سريعة جداً، كما شرحنا في مقال بناء ميقات.

اقرأ أيضاً