قیمتگذاری نشست
HandyCafe از موتور قیمتگذاری مبتنی بر بخش برای محاسبه هزینه نشستها در کافینت یا گیمینگ سنتر شما استفاده میکند. بهجای اعمال یک نرخ ثابت واحد برای کل نشست، موتور هر نشست را به بخشهایی تقسیم میکند که هر کدام زمینه قیمتگذاری خود را دارند. این رویکرد صورتحساب دقیق را حتی هنگامی که نشستها از چندین اسلات زمانی، تغییرات قیمت، توقفها یا قطعیها عبور میکنند تضمین میکند.
مفاهیم اصلی
قبل از ورود به جزئیات، اصطلاحات کلیدی:
| اصطلاح | تعریف |
|---|---|
| نرخ ساعتی پایه | قیمت هر ساعت قبل از اعمال ضرایب. در تنظیمات > قیمتگذاری تنظیم میشود. |
| اسلات قیمتگذاری | یک بازه زمانی نامگذاریشده با ضریب خاص. ۸ اسلات وجود دارد که هر کدام رنگ مشخصی دارند. |
| ضریب | عاملی که به نرخ پایه اعمال میشود. ۱.۰ = قیمت معمولی، ۰.۵ = نیمبها، ۲.۰ = دو برابر. |
| بخش | یک دوره پیوسته در نشست که زمینه قیمتگذاری (اسلات، ضریب، قیمت پایه) بدون تغییر باقی میماند. |
| تسویه | محاسبه نهایی که مبلغ بدهی مشتری هنگام پایان نشست را تعیین میکند. |
نرخ ساعتی پایه
نرخ ساعتی پایه، پایه تمام محاسبات قیمتگذاری است. در تنظیمات > قیمتگذاری تنظیم شده و قیمت استاندارد هر ساعت استفاده از رایانه را نشان میدهد.
تمام محاسبات داخلی از واحدهای فرعی ارز استفاده میکنند (مثلا سنت برای دلار، کروش برای لیر). اگر نرخ پایه شما ۳.۰۰ دلار در ساعت باشد، مقدار داخلی ۳۰۰ است. این مشکلات گرد کردن اعشاری را حذف میکند.
پشتیبانی از دو ارز
HandyCafe از ارز پایه و ارز محلی با نرخ تبدیل (FX) پشتیبانی میکند. اگر در کشوری فعالیت میکنید که قیمتگذاری بینالمللی با قیمتگذاری محلی متفاوت است:
- ارز پایه. ارز مورد استفاده برای محاسبات داخلی قیمتگذاری.
- ارز محلی. ارزی که به مشتریان نمایش داده شده و برای پرداخت استفاده میشود.
- نرخ تبدیل. ضریب تبدیل بین ارز پایه و محلی.
اگر هر دو ارز یکسان باشند، نرخ تبدیل ۱.۰ در نظر گرفته شده و تاثیری ندارد.
اسلاتهای قیمتگذاری
۸ اسلات قیمتگذاری رنگی وجود دارد که هر کدام سطح قیمتگذاری متفاوتی را نشان میدهند:
| اسلات | رنگ | کاربرد معمول |
|---|---|---|
| آبی | آبی | نرخ معمولی |
| نارنجی | نارنجی | اضافهبها عصر یا آخر هفته |
| قرمز | قرمز | اضافهبها ساعات اوج |
| سبز | سبز | تخفیف ساعات کمرونق |
| فیروزهای | فیروزهای | نرخ دانشجویی یا عضویت |
| خاکستری | خاکستری | قیمتگذاری تعطیلات یا ویژه |
| آبی روشن | آبی روشن | نرخ شب |
| زمردی | زمردی | نرخ تبلیغاتی |
هر اسلات سه ویژگی دارد:
- نام. یک برچسب توصیفی (مثلا "ساعات اوج" یا "تخفیف شب").
- ضریب. مقدار اعشاری که نرخ پایه را تغییر میدهد. مقادیر رایج شامل ۱.۰ (معمولی)، ۰.۵ (نیمبها)، ۱.۵ (۵۰ درصد اضافه)، ۲.۰ (دو برابر). ضریب باید صفر یا مثبت باشد.
- دادههای زمانبندی. نمایش داخلی که مشخص میکند اسلات در چه ساعاتی از چه روزهایی اعمال میشود. از طریق جدول زمانبندی بهصورت خودکار مدیریت میشود.
اسلاتها بهصورت جداگانه قابل فعال و غیرفعال شدن هستند. اسلاتهای غیرفعال توسط موتور قیمتگذاری نادیده گرفته میشوند.
جدول زمانبندی
زمانبندی قیمتگذاری یک ماتریس ۷ روز در ۲۴ ساعت است (۱۶۸ بلوک یکساعته). هر بلوک به یک اسلات قیمتگذاری اختصاص داده شده. زمانبندی مشخص میکند کدام ضریب در هر لحظه اعمال شود.
جدول در تنظیمات > زمانبندی قیمتگذاری پیکربندی میشود. روزها از دوشنبه تا یکشنبه و ساعتها از ۰۰:۰۰ تا ۲۳:۰۰ هستند. برای اختصاص اسلات به یک بلوک زمانی، بلوک را در جدول انتخاب کنید و رنگ اسلات مطلوب را انتخاب کنید.
نحوه خوانش زمانبندی توسط موتور
در داخل، هر بلوک ساعتی به موقعیتی در دادههای زمانبندی نگاشت میشود. موتور دادههای زمانبندی هر اسلات فعال را بررسی میکند تا مشخص کند کدام اسلات برای هر روز و ساعت معین فعال است.
اگر هیچ اسلاتی برای ساعت معینی تنظیم نشده باشد، موتور به نرخ پایه با ضریب ۱.۰ برمیگردد.
هنگامی که قابلیت زمانبندی قیمتگذاری کاملا غیرفعال باشد (در تنظیمات > قیمتگذاری)، تمام نشستها از نرخ پایه با ضریب ۱.۰ صرفنظر از زمان استفاده میکنند.
بخشهای قیمتگذاری
بخش یک دوره زمانی پیوسته در نشست است که زمینه قیمتگذاری تغییر نمیکند. موتور قیمتگذاری هرگاه یکی از رویدادهای مرزی رخ دهد بخش جدیدی ایجاد میکند:
| مرز | محرک |
|---|---|
| شروع نشست | نشست جدید آغاز میشود |
| پایان نشست | نشست متوقف میشود |
| توقف | صندوقدار نشست را متوقف میکند |
| ازسرگیری | صندوقدار نشست متوقف را از سر میگیرد |
| تیک | ساعت از مرز ساعتی عبور کرده و به اسلات قیمتگذاری متفاوتی وارد میشود |
| قطع اتصال | رایانه کلاینت اتصال شبکهاش را از دست میدهد |
| آفلاین | رایانه کلاینت آفلاین میشود |
| بازیابی بارگذاری | سرور مجددا راهاندازی شده و نشست در حال اجرا را بازیابی میکند |
هر بخش ثبت میکند:
| فیلد | توضیحات |
|---|---|
| شناسه نشست | نشستی که این بخش به آن تعلق دارد |
| شروع بخش | زمان شروع بخش |
| پایان بخش | زمان پایان بخش (خالی اگر هنوز باز باشد) |
| شناسه اسلات قیمتگذاری | شناسه اسلات فعال (مثلا "آبی"، "قرمز" یا "پایه") |
| ضریب | مقدار ضریب از اسلات قیمتگذاری |
| تصویر لحظهای قیمت پایه | نرخ ساعتی پایه ثبتشده در لحظه باز شدن بخش |
| مبلغ | هزینه محاسبهشده این بخش (هنگام بسته شدن بخش تنظیم میشود) |
| دلیل مرز | چرا این بخش ایجاد شده |
چرا تصویر لحظهای از قیمت پایه گرفته میشود؟
تصویر لحظهای قیمت پایه نرخ ساعتی را در لحظه دقیق باز شدن بخش ثبت میکند. این حیاتی است زیرا مدیر میتواند نرخ پایه را در حین نشست تغییر دهد. با گرفتن تصویر لحظهای، هر بخش از نرخی که در زمان شروعش معتبر بوده استفاده میکند و صورتحساب منصفانه و قابل حسابرسی تضمین میشود.
فرمول هزینه
هزینه یک بخش واحد به این صورت محاسبه میشود:
مبلغ = ceil( (قیمت_پایه * ضریب * ثانیههای_مدت) / 3600 )
دقیقتر بگوییم، موتور از حساب عدد صحیح مقیاسشده برای جلوگیری از خطاهای اعشاری استفاده میکند:
- ضریب به عدد صحیح نقطه ثابت مقیاس میشود (ضرب در ۱,۰۰۰,۰۰۰).
- محاسبه کاملا با اعداد صحیح ۱۲۸ بیتی انجام میشود.
- از تقسیم سقف استفاده میشود. نتیجه همیشه به واحد فرعی بعدی گرد میشود.
محاسبه بر اساس دقیقه
اگر گزینه "محاسبه بر اساس دقیقه" در تنظیمات > قیمتگذاری فعال باشد، فرمول کمی تغییر میکند:
مبلغ = ceil( (قیمت_پایه * ضریب * دقایق_استفاده) / 60 )
که دقایق_استفاده = ceil(ثانیههای_مدت / 60). یعنی هر دقیقه ناقص بهعنوان دقیقه کامل شمارش میشود.
محاسبه جمع نشست
جمع کل نشست در سه مرحله محاسبه میشود:
مرحله ۱: جمع تمام بخشها
جمع_خام = مجموع مبالغ تمام بخشهای بسته + مبلغ جزئی بخش باز
مبلغ جزئی بخش باز بهصورت بلادرنگ با استفاده از فرمول بالا با زمان فعلی بهعنوان پایان بخش محاسبه میشود.
مرحله ۲: اعمال گرد کردن
جمع_گرد = گرد_به_بالا(جمع_خام, مرحله_گرد)
گرد کردن همیشه به بالا (سقف) انجام میشود تا از درآمد محافظت شود. مرحله گرد کردن در تنظیمات > قیمتگذاری قابل تنظیم است.
مرحله ۳: اعمال حداقل هزینه شروع
جمع_نهایی = max(جمع_گرد, هزینه_شروع)
هزینه شروع حداقل مبلغ دریافتی برای هر نشست صرفنظر از مدت است. اگر جمع گردشده کمتر از هزینه شروع باشد، هزینه شروع دریافت میشود.
تسویه
تسویه فرآیند نهایی کردن صورتحساب نشست است. دو مرحله تسویه وجود دارد:
تسویه شروع (فقط پیشپرداخت)
هنگام شروع نشست پیشپرداخت، رکورد تسویه "شروع" ایجاد میشود که ثبت میکند:
- هزینه محاسبهشده. هزینه محاسبهشده توسط سیستم برای زمان خریداریشده.
- مبلغ دریافتی. مبلغی که مشتری واقعا پرداخت کرده (معمولا برابر هزینه محاسبهشده).
برای حالت پیشپرداخت "قفل در لحظه خرید"، این مبلغ قفلشده هزینه نشست را صرفنظر از تغییرات قیمتگذاری تعیین میکند.
تسویه پایان
هنگام پایان هر نشست (پیشپرداخت یا پسپرداخت)، رکورد تسویه "پایان" ایجاد میشود:
| فیلد | توضیحات |
|---|---|
| هزینه محاسبهشده | جمع محاسبهشده توسط سیستم از تمام بخشهای قیمتگذاری |
| مبلغ دریافتی | مبلغ واقعی دریافتشده (پیشفرض برابر هزینه محاسبهشده) |
| مبلغ تنظیمشده دستی | اگر صندوقدار قیمت را دستی تنظیم کرده، هزینه محاسبهشده اصلی اینجا حفظ میشود |
| نرخ کارمزد | نرخ کارمزد روش پرداخت (بهصورت درصد) |
| هزینه کارمزد | مبلغ کارمزد محاسبهشده |
| هزینه ثابت | هزینه ثابت روش پرداخت |
| تصویر زمانی محاسبهشده | رکورد JSON از تمام بخشهای قیمتگذاری نشست |
تصویر زمانی مسیر حسابرسی کاملی فراهم میکند که دقیقا نشان میدهد هزینه چگونه بخش به بخش محاسبه شده.
هزینههای روش پرداخت
هر روش پرداخت میتواند دو نوع هزینه داشته باشد:
کارمزد (درصدی)
نرخ کارمزد بهصورت درصد بیان میشود. هزینه کارمزد با اعمال این نرخ به مبلغ دریافتی محاسبه میشود.
هزینه ثابت
هزینه ثابتی که به ازای هر تراکنش صرفنظر از مبلغ کسر میشود.
هر دو هزینه اطلاعاتی هستند. هزینه پذیرش آن روش پرداخت برای کسبوکار را نشان میدهند. در تسویه ثبت میشوند اما به صورتحساب مشتری اضافه نمیشوند.
مالیات بر ارزش افزوده
مالیات بهصورت درصدی (۰ تا ۱۰۰ درصد) در تنظیمات > قیمتگذاری پیکربندی میشود. روی مبلغ محاسبهشده نشست اعمال میشود:
مالیات = مبلغ_دریافتی × (نرخ_مالیات / 100)
مبلغ مالیات بهصورت جداگانه در پنجره پرداخت نمایش داده میشود تا صندوقدار تفکیک مالیاتی را ببیند.
حالتهای قیمتگذاری پیشپرداخت
همانطور که در مدیریت نشستها توضیح داده شد، نشستهای پیشپرداخت دو حالت قیمتگذاری دارند:
قفل در لحظه خرید
هنگام شروع نشست پیشپرداخت، تسویه "شروع" مبلغ دریافتی را قفل میکند. در طول نشست:
- زمان پایان بر اساس دقایق خریداریشده ثابت است.
- حتی اگر زمانبندی تغییر کند، نشست تا انقضای زمان قفلشده ادامه مییابد.
- تسویه پایان از مبلغ قفلشده تسویه شروع استفاده میکند.
زمانبندی زنده
زمان باقیمانده نشست بهصورت پیوسته با تغییر اسلاتهای قیمتگذاری محاسبه مجدد میشود:
- اگر نشست وارد اسلات ارزانتر شود، زمان باقیمانده افزایش مییابد.
- اگر نشست وارد اسلات گرانتر شود، زمان باقیمانده کاهش مییابد.
- تسویه پایان قیمتگذاری واقعی اعمالشده در طول نشست را منعکس میکند.
ارقام اعشار
تعداد ارقام اعشار برای نمایش ارز قابل تنظیم است (۲ تا ۴ رقم اعشار). این بر نحوه نمایش مبالغ در رابط کاربری تاثیر دارد اما محاسبات داخلی واحد فرعی را تغییر نمیدهد.
مثالهای عملی
مثال ۱: نشست پسپرداخت ساده
- نرخ پایه: ۳.۰۰ دلار/ساعت (۳۰۰ واحد فرعی)
- زمانبندی: اسلات معمولی (ضریب ۱.۰) تمام روز
- نشست: ۱۰:۰۰ صبح تا ۱۱:۳۰ (۹۰ دقیقه)
- هزینه شروع: ۰.۵۰ دلار
محاسبه:
بخش ۱: (300 * 1.0 * 5400) / 3600 = 450 واحد فرعی (4.50 دلار)
جمع: max(4.50, 0.50) = 4.50 دلار
مثال ۲: نشست با عبور از دو اسلات
- نرخ پایه: ۴.۰۰ دلار/ساعت (۴۰۰ واحد فرعی)
- زمانبندی: معمولی (۱.۰) از ۱۰:۰۰ تا ۱۲:۰۰، ساعت شاد (۰.۵) از ۱۲:۰۰ تا ۱۴:۰۰
- نشست: ۱۱:۰۰ صبح تا ۱:۰۰ بعدازظهر (۱۲۰ دقیقه)
- هزینه شروع: ۱.۰۰ دلار
محاسبه:
بخش ۱ (11:00-12:00، معمولی): (400 * 1.0 * 3600) / 3600 = 400 (4.00 دلار)
بخش ۲ (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 دلار
مثال ۳: نشست با توقف
- نرخ پایه: ۲.۰۰ دلار/ساعت (۲۰۰ واحد فرعی)
- زمانبندی: اسلات معمولی (ضریب ۱.۰) تمام روز
- نشست: شروع ۱۰:۰۰، توقف ۱۰:۳۰، ازسرگیری ۱۱:۰۰، پایان ۱۱:۴۵
- هزینه شروع: ۰.۵۰ دلار
محاسبه:
بخش ۱ (10:00-10:30، فعال): (200 * 1.0 * 1800) / 3600 = 100 (1.00 دلار)
دوره توقف (10:30-11:00): بدون هزینه
بخش ۲ (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 دلار
مراحل بعدی
- مدیریت نشستها: آشنایی با چرخه کامل نشست
- تنظیمات: قیمتگذاری: پیکربندی نرخ پایه، گرد کردن و هزینه شروع
- تنظیمات: زمانبندی قیمتگذاری: راهاندازی جدول ۷ در ۲۴ زمانبندی
- روشهای پرداخت: پیکربندی روشهای پرداخت با کارمزد و هزینه