HandyCafe Docs
owner

تسعير الجلسات

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

المفاهيم الأساسية

قبل الغوص في التفاصيل، إليك المصطلحات الرئيسية:

المصطلح التعريف
السعر الأساسي لكل ساعة السعر لكل ساعة قبل تطبيق أي مضاعفات. يتم ضبطه في الإعدادات > التسعير.
فترة التسعير فترة زمنية مسماة بمضاعف محدد. هناك 8 فترات، كل منها مرمزة بلون معين.
المضاعف عامل يطبق على السعر الأساسي. 1.0 = السعر القياسي، 0.5 = نصف السعر، 2.0 = ضعف السعر.
القطاع فترة زمنية مستمرة داخل الجلسة حيث يظل سياق التسعير (الفترة، المضاعف، السعر الأساسي) دون تغيير.
التسوية الحساب النهائي الذي يحدد المبلغ الذي يدين به العميل عند انتهاء الجلسة.

السعر الأساسي لكل ساعة

السعر الأساسي لكل ساعة هو الأساس لجميع حسابات التسعير. يتم ضبطه في الإعدادات > التسعير ويمثل السعر القياسي لكل ساعة من استخدام الكمبيوتر.

تستخدم جميع الحسابات الداخلية وحدات العملة الصغرى (على سبيل المثال، السنتات للدولار الأمريكي، القروش لليرة التركية). إذا كان السعر الأساسي الخاص بك هو 3.00 دولار لكل ساعة، فإن القيمة الداخلية هي 300. هذا يلغي مشاكل التقريب بالنقاط العائمة.

دعم العملة المزدوجة

يدعم HandyCafe عملة أساسية وعملة محلية مع معدل تحويل (FX). إذا كنت تعمل في بلد يختلف فيه التسعير الدولي عن التسعير المحلي:

  • العملة الأساسية. العملة المستخدمة لحسابات التسعير الداخلية.
  • العملة المحلية. العملة المعروضة للعملاء والمستخدمة في المدفوعات.
  • معدل التحويل. عامل التحويل بين العملة الأساسية والمحلية.

إذا كانت العملتان متطابقتين، يتم التعامل مع معدل التحويل على أنه 1.0 ولا يؤثر.

فترات التسعير

هناك 8 فترات تسعير مرمزة بالألوان، كل منها يمثل مستوى تسعير مختلف:

الفترة اللون الاستخدام النموذجي
الأزرق الأزرق السعر القياسي
البرتقالي البرتقالي زيادة المساء أو عطلة نهاية الأسبوع
الأحمر الأحمر زيادة ساعات الذروة
الأخضر الأخضر خصم خارج أوقات الذروة
الأزرق الفاتح الأزرق الفاتح سعر الطلاب أو الأعضاء
الرمادي الرمادي تسعير العطلات أو المناسبات الخاصة
السماوي السماوي سعر الليل
الزمردي الزمردي سعر ترويجي

كل فترة لها ثلاث خصائص:

  1. الاسم. تسمية وصفية (على سبيل المثال، "ساعات الذروة" أو "خصم الليل").
  2. المضاعف. قيمة عشرية تعدل السعر الأساسي. القيم الشائعة تشمل 1.0 (قياسي)، 0.5 (نصف السعر)، 1.5 (زيادة 50%)، 2.0 (ضعف السعر). يجب أن يكون المضاعف صفرًا أو موجبًا.
  3. بيانات الجدول. تمثيل داخلي يحدد الساعات والأيام التي تنطبق عليها الفترة. يتم إدارة ذلك تلقائيًا من خلال شبكة الجدول.

يمكن تمكين أو تعطيل الفترات بشكل فردي. الفترات المعطلة يتم تجاهلها من قبل محرك التسعير.

شبكة الجدول

جدول التسعير هو مصفوفة 7 أيام × 24 ساعة (168 كتلة ساعة واحدة في المجموع). يتم تعيين كل كتلة إلى فترة تسعير واحدة. يحدد الجدول أي مضاعف ينطبق في أي لحظة.

يتم تكوين الشبكة في الإعدادات > جدول التسعير. الأيام تمتد من الاثنين إلى الأحد والساعات تمتد من 00:00 إلى 23:00. لتعيين فترة إلى كتلة زمنية، اختر الكتلة في الشبكة واختر لون الفترة المرغوب.

كيف يقرأ المحرك الجدول

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

إذا لم يكن لأي فترة بتة مضبوطة لساعة معينة، يعود المحرك إلى السعر الأساسي بمضاعف 1.0.

عندما يتم تعطيل ميزة جدول التسعير بالكامل (في الإعدادات > التسعير)، تستخدم جميع الجلسات السعر الأساسي بمضاعف 1.0 بغض النظر عن الوقت.

قطاعات التسعير

القطاع هو فترة زمنية مستمرة داخل الجلسة حيث لا يتغير سياق التسعير. يقوم محرك التسعير بإنشاء قطاع جديد كلما حدثت أي من هذه الأحداث الحدودية:

الحد المحفز
session_start تبدأ جلسة جديدة
session_stop تتوقف الجلسة
pause يقوم الكاشير بإيقاف الجلسة مؤقتًا
resume يقوم الكاشير باستئناف جلسة متوقفة مؤقتًا
tick يعبر الساعة إلى فترة تسعير مختلفة
disconnect يفقد جهاز الكمبيوتر العميل اتصاله بالشبكة
offline يصبح جهاز الكمبيوتر العميل غير متصل
load_recovery يعيد الخادم التشغيل ويستعيد جلسة قيد التشغيل

كل قطاع يسجل:

الحقل الوصف
session_id الجلسة التي ينتمي إليها هذا القطاع
segment_start الطابع الزمني Unix عندما بدأ القطاع
segment_end الطابع الزمني Unix عندما انتهى القطاع (null إذا كان لا يزال مفتوحًا)
pricing_slot_id معرف فترة التسعير النشطة (على سبيل المثال، "الأزرق"، "الأحمر"، أو "الأساسي")
multiplier قيمة المضاعف من فترة التسعير
base_price_snapshot السعر الأساسي لكل ساعة الملتقط في اللحظة التي فتح فيها القطاع
amount التكلفة المحسوبة لهذا القطاع (تحدد عند إغلاق القطاع)
boundary_reason سبب إنشاء هذا القطاع

لماذا يتم التقاط السعر الأساسي؟

يلتقط base_price_snapshot السعر الأساسي لكل ساعة في اللحظة الدقيقة التي يفتح فيها القطاع. هذا أمر حاسم لأن المسؤول قد يغير السعر الأساسي في منتصف الجلسة. من خلال الالتقاط، يستخدم كل قطاع السعر الذي كان ساريًا عندما بدأ، مما يضمن الفوترة العادلة والقابلة للتدقيق.

صيغة التكلفة

يتم حساب تكلفة القطاع الواحد كالتالي:

amount = ceil( (base_price_snapshot * multiplier * duration_seconds) / 3600 )

بشكل أكثر دقة، يستخدم المحرك الحساب العددي المقياس لتجنب أخطاء النقاط العائمة:

  1. يتم قياس المضاعف إلى عدد صحيح بالنقطة الثابتة (مضروبًا في 1,000,000).
  2. يتم إجراء الحساب بالكامل في أعداد صحيحة 128 بت.
  3. يتم استخدام القسمة السقفية. النتيجة دائمًا تقرب إلى الوحدة الصغرى التالية.

الحساب بالدقائق

إذا تم تمكين خيار "الحساب بالدقائق" في الإعدادات > التسعير، تتغير الصيغة قليلاً:

amount = ceil( (base_price_snapshot * multiplier * used_minutes) / 60 )

حيث used_minutes = ceil(duration_seconds / 60). هذا يعني أن أي دقيقة جزئية تُحسب كدقيقة كاملة.

حساب إجمالي الجلسة

يتم حساب التكلفة الإجمالية للجلسة في ثلاث خطوات:

الخطوة 1: جمع جميع القطاعات

raw_total = sum of all closed segment amounts + open segment partial amount

يتم حساب المبلغ الجزئي للقطاع المفتوح في الوقت الحقيقي باستخدام الصيغة أعلاه مع الطابع الزمني الحالي كنهاية للقطاع.

الخطوة 2: تطبيق التقريب

rounded_total = round_up(raw_total, rounding_step)

التقريب دائمًا للأعلى (السقف) لحماية الإيرادات. خطوة التقريب قابلة للتكوين في الإعدادات > التسعير. على سبيل المثال، إذا كانت خطوة التقريب 50 (تمثل 0.50 دولار في عملة ذات رقمين عشريين)، فإن إجمالي خام قدره 3.27 دولار يقرب إلى 3.50 دولار.

الخطوة 3: تطبيق الحد الأدنى لرسوم بدء التشغيل

final_total = max(rounded_total, startup_fee)

رسوم بدء التشغيل هي الحد الأدنى للتكلفة لأي جلسة، بغض النظر عن المدة. إذا كان الإجمالي المقرب أقل من رسوم بدء التشغيل، يتم فرض رسوم بدء التشغيل بدلاً من ذلك.

التسوية

التسوية هي عملية إنهاء الفوترة لجلسة. هناك مرحلتان للتسوية:

تسوية البدء (للجلسات المدفوعة مسبقًا فقط)

عندما تبدأ جلسة مدفوعة مسبقًا، يتم إنشاء سجل تسوية "البدء". هذا يلتقط:

  • التكلفة المحسوبة. التكلفة المحسوبة من قبل النظام للوقت المشتري.
  • المبلغ المحمل. المبلغ الذي دفعه العميل فعليًا (عادة ما يكون نفس التكلفة المحسوبة).

بالنسبة لوضع الدفع المسبق "القفل عند الشراء"، يحدد هذا المبلغ المقفل تكلفة الجلسة بغض النظر عن تغييرات التسعير أثناء الجلسة.

تسوية الإيقاف

عندما تتوقف أي جلسة (مدفوعة مسبقًا أو لاحقًا)، يتم إنشاء سجل تسوية "الإيقاف":

الحقل الوصف
التكلفة المحسوبة الإجمالي المحسوب من قبل النظام من جميع قطاعات التسعير
المبلغ المحمل المبلغ المحمل فعليًا (يكون افتراضيًا هو التكلفة المحسوبة)
المبلغ المعدل يدويًا إذا قام الكاشير بتعديل السعر يدويًا، يتم الاحتفاظ بالتكلفة المحسوبة الأصلية هنا
معدل العمولة معدل عمولة طريقة الدفع (كنسبة مئوية)
commission_fee مبلغ العمولة المحسوب
fixed_fee رسوم ثابتة لطريقة الدفع
computed_timeline_snapshot سجل JSON لكل قطاع تسعير في الجلسة

يوفر لقطة الجدول الزمني مسار تدقيق كامل يوضح بالضبط كيف تم حساب التكلفة، قطاعًا بقطاع.

رسوم طرق الدفع

يمكن أن تحتوي كل طريقة دفع على نوعين من الرسوم:

العمولة (نقاط الأساس)

يتم التعبير عن معدل العمولة كنسبة مئوية. يتم حساب رسوم العمولة بتطبيق هذا المعدل على المبلغ المحمل.

مثال: إذا كان المبلغ المحمل 10.00 دولار (1000 وحدة صغرى) وكانت طريقة الدفع تحتوي على معدل عمولة 2.5%، فإن رسوم العمولة هي 0.25 دولار (25 وحدة صغرى).

الرسوم الثابتة

رسوم ثابتة تُخصم لكل معاملة، بغض النظر عن المبلغ. على سبيل المثال، رسوم معالجة بطاقة الائتمان بقيمة 0.30 دولار.

كلا الرسوم معلوماتية. إنها تمثل التكلفة على العمل لقبول تلك طريقة الدفع. يتم تسجيلها في التسوية ولكن لا تضاف إلى فاتورة العميل.

ضريبة القيمة المضافة (VAT)

يتم تكوين ضريبة القيمة المضافة كنسبة مئوية (0--100%) في الإعدادات > التسعير. يتم تطبيقها على المبلغ المحسوب للجلسة:

VAT = amount charged x (VAT rate / 100)

يتم عرض مبلغ ضريبة القيمة المضافة بشكل منفصل في حوار الدفع حتى يتمكن الكاشير من رؤية تفاصيل الضريبة.

أوضاع التسعير المدفوعة مسبقًا

كما هو موضح في إدارة الجلسات، تدعم الجلسات المدفوعة مسبقًا وضعين للتسعير:

القفل عند الشراء

عندما تبدأ جلسة مدفوعة مسبقًا، تقوم تسوية "البدء" بقفل المبلغ المحمل. طوال مدة الجلسة:

  • يتم تثبيت وقت انتهاء الجلسة بناءً على الدقائق المشتراة.
  • حتى إذا تغير جدول التسعير، تستمر الجلسة حتى ينتهي الوقت المقفل.
  • تستخدم تسوية الإيقاف المبلغ المقفل من تسوية البدء.

الجدول الحي

يتم إعادة حساب الوقت المتبقي للجلسة باستمرار مع تغير فترات التسعير:

  • إذا دخلت الجلسة في فترة أرخص، يمتد الوقت المتبقي (يحصل العميل على المزيد من الدقائق مقابل ماله).
  • إذا دخلت الجلسة في فترة أكثر تكلفة، يتقلص الوقت المتبقي.
  • تعكس تسوية الإيقاف التسعير الفعلي المطبق طوال الجلسة.

الأرقام العشرية

عدد المنازل العشرية المستخدمة لعرض العملة قابل للتكوين (2--4 منازل عشرية). يؤثر هذا على كيفية عرض المبالغ في واجهة المستخدم ولكنه لا يغير الحسابات الداخلية للوحدات الصغرى.

مثال: مع 2 منزلة عشرية، يتم عرض 3.50 دولار كـ "3.50". مع 3 منازل عشرية، سيتم عرضها كـ "3.500".

أمثلة عملية

المثال 1: جلسة مدفوعة لاحقًا بسيطة

  • السعر الأساسي: 3.00 دولار/ساعة (300 وحدة صغرى)
  • الجدول: فترة قياسية (مضاعف 1.0) طوال اليوم
  • الجلسة: من 10:00 صباحًا إلى 11:30 صباحًا (90 دقيقة)
  • رسوم بدء التشغيل: 0.50 دولار

الحساب:

القطاع 1: (300 * 1.0 * 5400) / 3600 = 450 وحدة صغرى (4.50 دولار)
الإجمالي: max(4.50 دولار، 0.50 دولار) = 4.50 دولار

المثال 2: جلسة تمتد عبر فترتين

  • السعر الأساسي: 4.00 دولار/ساعة (400 وحدة صغرى)
  • الجدول: قياسي (1.0) من 10:00--12:00، ساعة سعيدة (0.5) من 12:00--14:00
  • الجلسة: من 11:00 صباحًا إلى 1:00 مساءً (120 دقيقة)
  • رسوم بدء التشغيل: 1.00 دولار

الحساب:

القطاع 1 (11:00-12:00، قياسي): (400 * 1.0 * 3600) / 3600 = 400 (4.00 دولار)
القطاع 2 (12:00-13:00، ساعة سعيدة): (400 * 0.5 * 3600) / 3600 = 200 (2.00 دولار)
الإجمالي: 4.00 دولار + 2.00 دولار = 6.00 دولار
النهائي: max(6.00 دولار، 1.00 دولار) = 6.00 دولار

المثال 3: جلسة مع توقف مؤقت

  • السعر الأساسي: 2.00 دولار/ساعة (200 وحدة صغرى)
  • الجدول: فترة قياسية (مضاعف 1.0) طوال اليوم
  • الجلسة: بدء 10:00، توقف مؤقت 10:30، استئناف 11:00، توقف 11:45
  • رسوم بدء التشغيل: 0.50 دولار

الحساب:

القطاع 1 (10:00-10:30، نشط): (200 * 1.0 * 1800) / 3600 = 100 (1.00 دولار)
الفترة المتوقفة (10:30-11:00): لا توجد رسوم
القطاع 2 (11:00-11:45، نشط): (200 * 1.0 * 2700) / 3600 = 150 (1.50 دولار)
الإجمالي: 1.00 دولار + 1.50 دولار = 2.50 دولار
النهائي: max(2.50 دولار، 0.50 دولار) = 2.50 دولار

الخطوات التالية