اسأل فريقًا ماليًا عن تقارير نقاط البيع في Odoo وستسمع الشكوى نفسها. الأرقام موجودة. والمشكلة في جمعها في رقم واحد قابل للدفاع عنه.
يعرض Odoo نقطة البيع جلسة بجلسة — أغلِق الصندوق، ورحِّل القيود، واقرأ ذلك الملخّص. وهذا كافٍ لمحل واحد بصندوق واحد. لكنه يتوقّف عن العمل لحظة تُشغّل ستة فروع في ثلاث دول ويسأل أحدهم عن حصيلة المجموعة أمس. ولا يوفّر Odoo تقرير Z موحّدًا، فيقع العمل على من يمسك جدول البيانات.
وتُنهي Octivex Retail Analytics إعادة البناء هذه. إنها لوحة تحليلات تجزئة لنقاط البيع في Odoo تُصدر تقاريرها عبر الشركات والفروع والتواريخ في شاشة واحدة، مع إمكانية تتبّع كل رقم إلى سجل مُرحَّل في Odoo.
راجعها محاسبون، لا مطوّرون فحسب
معظم لوحات نقاط البيع يصمّمها مهندسون يسألون عمّا يبدو جميلًا في رسم بياني. أما هذه فقد رُوجعت سطرًا سطرًا مع محاسبين ومسؤولي دفاتر — أناس مطالَبون بتفسير الرقم، لا بالإعجاب به.
المطوّر يسأل إن كان الاستعلام صحيحًا. أما مسؤول الدفاتر فيسأل السؤال الأصعب: بأي قيد في دفتر الأستاذ يرتبط هذا الرقم، وماذا يحدث عند إقفال الشهر؟ وكان على كل مؤشر أن يجتاز ذلك قبل إطلاقه. ويظهر هذا في ملخّص المبيعات الذي يسير في سلسلة من الإجمالي إلى الصافي بترتيب دفتر الأستاذ — وهو تقرير Z الموحّد الذي لا يوفّره Odoo:
إجمالي المبيعات ← خصم المبيعات ← مستردات المبيعات ← صافي المبيعات ← الضرائب ← صافي المبيعات شاملًا الضريبة ← البقشيش ← الإجمالي الكلي
وكل سطر وسيط ظاهر، فحين يختلف الإجمالي الكلي مع البنك يكون الاختلاف معزولًا في صفّ بعينه بدل أن يكون مدفونًا داخل رقم مجمّع.
الأرقام تُطابق تمامًا، بحكم التصميم
الدقة هنا ليست ادّعاءً بحساب متأنٍّ، بل نتيجة لطريقة بناء الوحدة.
فاللوحة لا تخزّن شيئًا — لا جداول إضافية، ولا مجاميع مخبّأة، ولا إعادة بناء ليلية. وكل رقم يُحتسب لحظة القراءة عبر ORM الخاص بـ Odoo، من السجلات المُرحَّلة نفسها التي يُعدّ محاسبك تقاريره منها. وطبقة تقارير تحتفظ بمجاميعها الخاصة قد تختلف مع الحسابات، وستختلف معها في النهاية — بعد عكس استرداد، أو إعادة فتح جلسة، أو تصحيح قيد في الإدارة الخلفية. أما هذه فليس لديها ما تختلف معه: صحِّح قيدًا في Odoo وسيُظهره التحديث التالي، لأن اللوحة لم تكن تعرض شيئًا آخر أصلًا.
يوم العمل يبدأ حين تقرّر أنت
المطعم الذي يتوقّف عن التقديم في الثانية فجرًا ليس لديه يوما عمل. لديه يوم واحد، والتقويم يخالفه.
ومعظم الأدوات تقسم تلك المبيعات على منتصف الليل، فتُفسد كل مقارنة يوم بيوم يجريها المدير، وكل مقارنة مماثلة يجريها مسؤول الدفاتر بعدها. أما لوحتنا فتستخدم ساعة بداية يوم قابلة للضبط، افتراضها 07:00، حتى تقع الوردية الممتدّة إلى ما بعد منتصف الليل في اليوم الذي جرى فيه البيع فعلًا. إعداد صغير، لكنه الفارق بين تقرير يثق به المشغّل وآخر يكفّ عن فتحه.
النقد والإلغاءات والمدفوعات والخصومات
أرقام المبيعات تخبرك كيف سارت التجارة. وأرقام النقد والإلغاءات تخبرك إن كان شيء قد سار على نحو خاطئ.
فلوحة النقد تعرض الرصيد النقدي الافتتاحي، والمقبوضات النقدية، والتسويات الداخلة والخارجة، والمستردات، والرصيد الختامي — أي إجابة سؤال درج النقد. ولوحة الإلغاءات تعرض المبلغ وعدد الطلبات وعدد الأصناف ونسبة مبلغ الإلغاءات إلى المبيعات. فطلب ملغى واحد أمر اعتيادي؛ أما فرع يُلغي باستمرار أكثر من نظرائه فمسألة رقابية.
وتقرير طرق الدفع يفصّل كل طريقة إلى عدد الوارد والمبلغ والبقشيش وعدد الصادر والمستردات والإجمالي، حتى ترتبط تسوية بطاقات تصل إلى البنك كرقم واحد بتجارة اليوم. وتُعرض الخصومات على حدة — فهي من أسهل الطرق التي يتسرّب بها الهامش بهدوء.
جدول الموظفين: المبيعات بالساعة، والربح بالساعة
اسأل مدير متجر عمّا يريده من تقرير المبيعات حسب الموظف وستأتي الإجابة متسقة: المبيعات بالساعة، وعدد المعاملات، ومتوسط السلة، وتصوّر ما عمّن يحقّق ربحًا. ومعظم تقارير نقاط البيع تقدّم الثلاثة الأولى. أما هذا فيقدّمها كلها، لكل شخص، ولكل فرع، ولكل فترة:
| الساعات | المشتغَلة خلال الفترة |
| المبيعات ونسبتها من المبيعات | المساهمة في إجمالي الفرع |
| المستردات والخصم | الممنوحة من ذلك الموظف |
| التكلفة والربح | مع نسبة الربح |
| المبيعات / ساعة | مقياس الإنتاجية المعتاد |
| الربح / ساعة | المقياس الذي يحسم جدولة الورديات فعليًا |
| المعاملات ومتوسط المعاملة | عدد المعاملات ومتوسط قيمة المعاملة (ATV) |
| الكمية والكمية / معاملة | عدد الوحدات لكل معاملة (UPT) |
والربح بالساعة هو العمود الجدير بالتوقّف عنده. فترتيب الموظفين بحسب المبيعات يكافئ من عمل في الوردية المزدحمة؛ أما الترتيب بحسب الربح بالساعة فيقارن الأشخاص بالساعات التي دُفع لهم مقابلها. ومعظم تقارير أمناء الصندوق لا تستطيع إنتاجه، لأنها لا تحمل التكلفة أصلًا — وهو السبب نفسه الذي يمنعها من إظهار الهامش.
وقراءته إلى جانب ATV وUPT تفصل بين نوعَي الموظف المتميّز: من يخدم عددًا أكبر من الناس، ومن يبيع أكثر لكل واحد منهم. وهذان يحتاجان توجيهًا مختلفًا.
واعتماد واحد نصرّح به بصدق: الساعات تأتي من سجلات الحضور لديك في Odoo. فإن لم يكن الموظفون يسجّلون الدخول والخروج، فلن يكون للأعمدة المحسوبة بالساعة ما تقسم عليه.
وإلى جانبها تقف الجداول التي يفتحها مسؤول العمليات فعلًا — أفضل المنتجات وأفضل العملاء وأعلى الطلبات وأعلى الجلسات — إضافة إلى مخطّط اتجاه المبيعات بالساعة. وترتيب الجلسات بدل الأيام يُظهر أي وردية، في أي فرع، تحت إدارة أي مدير، حقّقت تلك النتيجة. وكل جدول يقبل الفرز والبحث والتصدير إلى Excel.
تقارير فوق مستوى المتجر، مع صلاحيات على مستوى الفرع
يسمّي مشغّلو الوحدات المتعددة هذا التقارير فوق مستوى المتجر: رؤية موحّدة عبر المواقع، لا تقريرًا لكل صندوق.
وتغطي عوامل التصفية الشركة والفرع والتاريخ والوقت، فتخدم الشاشة الواحدة مدير فرع يتفقّد موقعه ومسؤول مالية المجموعة الذي يقارنها جميعًا. والأهم أن الصلاحيات مُطبَّقة على مستوى الفرع — فالمدير الذي تغطي صلاحياته متجرًا واحدًا لا يستطيع فتح لوحة متجر آخر ولا تصدير بياناته. وفي نظام الامتياز التجاري، هذا شرط مسبق للسماح لأصحاب الامتياز بالاقتراب من النظام أصلًا.
وتجري المقارنات بالمثل مقابل اليوم نفسه من الأسبوع السابق. فمقارنة الثلاثاء بالاثنين لا تخبرك شيئًا عن نشاط لأسبوعه شكل معيّن.
وهي تعمل بهذه الطريقة في الإنتاج اليوم: سلسلة مطاعم امتياز عبر دول مجلس التعاون الخليجي والمملكة المتحدة وباكستان وكندا؛ ومجموعة تجزئة عبر مصر والمغرب والمملكة المتحدة والمملكة العربية السعودية والإمارات العربية المتحدة. عملات مختلفة، ومعالجات ضريبية مختلفة، وتعريف واحد للتقارير — ولوحة تُقفل الصناديق ليليًا في أربع قارات واجهت من الحالات الحديّة أضعاف ما تواجهه لوحة تعمل في محل واحد.
أبعد من الصندوق
لوحة نقاط البيع واحدة من عدة لوحات في الوحدة، تتشارك معها عوامل التصفية والتعريفات وقواعد الصلاحيات. فـتقرير المبيعات اليومي يحمل منظور المالية — صافي المبيعات مقابل المستهدف، وتكلفة البضاعة المباعة وتكلفة الموظفين كنسبة من صافي المبيعات لكلٍّ منهما، والأداء منذ بداية الشهر حسب الفرع، والوضع البنكي — مع احتساب تكلفة الموظفين من سجلات حضور حقيقية مقابل أجور بالساعة، لا من تقدير ثابت. ولوحة المخزون تغطي تقييم المخزون ونفادَه والهدر والأصناف بطيئة الحركة؛ وبالنسبة لمشغّل في قطاع الأغذية، فإن قراءة الهدر ونسبة تكلفة البضاعة المباعة معًا هي أسرع طريق إلى تفسير تحرّك الهامش.
على ماذا تعمل
تدعم الوحدة Odoo 17 و18 و19، بنسختيها Community وEnterprise، وتُثبَّت إلى جانب نقطة البيع القائمة لديك من دون تغيير طريقة عمل صناديقك. ولا توجد حزم Python خارجية تحتاج إلى تثبيت — وهو سبب شائع لفشل اللوحات المنافسة على Odoo.sh وعلى SaaS، حيث لا يمكنك إضافة تبعيات عشوائية.
وإذا كان إقفالك يعني تصدير الجلسات إلى جدول بيانات قبل أن يستطيع أحد أن يقول كم باعت المجموعة أمس، فهذا هو العمل الذي تستبدله هذه اللوحة.
