Oturum Fiyatlandırması
HandyCafe, internet kafenizde veya oyun merkezinizde oturum maliyetlerini hesaplamak için segment tabanlı bir fiyatlandırma motoru kullanır. Tüm oturum için tek bir sabit oran uygulamak yerine, motor her oturumu kendi fiyatlandırma bağlamına sahip segmentlere böler. Bu yaklaşım, oturumlar birden fazla zaman dilimine yayıldığında, fiyat değişiklikleri, duraklamalar veya bağlantı kesilmeleri olduğunda bile doğru faturalandırma sağlar.
Temel Kavramlar
Detaylara girmeden önce, işte anahtar terimler:
| Terim | Tanım |
|---|---|
| Temel saatlik ücret | Herhangi bir çarpan uygulanmadan önceki saat başı fiyat. Ayarlar > Fiyatlandırma bölümünde ayarlanır. |
| Fiyatlandırma dilimi | Belirli bir çarpana sahip adlandırılmış bir zaman dilimi. Her biri renk kodlu 8 dilim vardır. |
| Çarpan | Temel orana uygulanan bir faktör. 1.0 = standart fiyat, 0.5 = yarı fiyat, 2.0 = iki katı fiyat. |
| Segment | Fiyatlandırma bağlamının (dilim, çarpan, temel fiyat) değişmediği bir oturum içindeki kesintisiz süre. |
| Hesaplama | Bir oturum sona erdiğinde müşterinin ne kadar borçlu olduğunu belirleyen nihai hesaplama. |
Temel Saatlik Ücret
Temel saatlik ücret, tüm fiyatlandırma hesaplamalarının temelidir. Ayarlar > Fiyatlandırma bölümünde ayarlanır ve PC kullanımının saat başı standart fiyatını temsil eder.
Tüm iç hesaplamalar küçük para birimi birimlerini kullanır (örneğin, USD için sent, TRY için kuruş). Eğer temel ücret saatte 3.00 $ ise, iç değer 300'dür. Bu, kayan nokta yuvarlama sorunlarını ortadan kaldırır.
Çift Para Birimi Desteği
HandyCafe, bir temel para birimi ve bir yerel para birimi ile bir döviz (FX) kuru destekler. Uluslararası fiyatlandırmanın yerel fiyatlandırmadan farklı olduğu bir ülkede faaliyet gösteriyorsanız:
- Temel para birimi. İç fiyatlandırma hesaplamaları için kullanılan para birimi.
- Yerel para birimi. Müşterilere gösterilen ve ödemelerde kullanılan para birimi.
- FX kuru. Temel ve yerel para birimleri arasındaki dönüşüm faktörü.
Her iki para birimi de aynıysa, FX kuru 1.0 olarak kabul edilir ve etkisi olmaz.
Fiyatlandırma Dilimleri
8 renk kodlu fiyatlandırma dilimi vardır, her biri farklı bir fiyatlandırma katmanını temsil eder:
| Dilim | Renk | Tipik Kullanım |
|---|---|---|
| Mavi | Mavi | Standart oran |
| Turuncu | Turuncu | Akşam veya hafta sonu ek ücreti |
| Kırmızı | Kırmızı | Yoğun saatler primi |
| Yeşil | Yeşil | Yoğun olmayan saat indirimi |
| Turkuaz | Turkuaz | Öğrenci veya üye oranı |
| Gri | Gri | Tatil veya özel fiyatlandırma |
| Camgöbeği | Camgöbeği | Gece oranı |
| Zümrüt | Zümrüt | Promosyon oranı |
Her dilimin üç özelliği vardır:
- Ad. Tanımlayıcı bir etiket (örneğin, "Yoğun Saatler" veya "Gece İndirimi").
- Çarpan. Temel oranı değiştiren ondalık bir değer. Yaygın değerler arasında 1.0 (standart), 0.5 (yarı fiyat), 1.5 (%50 ek ücret), 2.0 (iki katı fiyat) bulunur. Çarpan sıfır veya pozitif olmalıdır.
- Program verisi. Dilimin hangi günlerin hangi saatlerinde geçerli olduğunu tanımlayan dahili bir temsil. Bu, program ızgarası aracılığıyla otomatik olarak yönetilir.
Dilimler bireysel olarak etkinleştirilebilir veya devre dışı bırakılabilir. Devre dışı bırakılan dilimler fiyatlandırma motoru tarafından göz ardı edilir.
Program Izgarası
Fiyatlandırma programı, 7 günlük ve 24 saatlik bir matristir (toplamda 168 bir saatlik blok). Her blok bir fiyatlandırma dilimine atanır. Program, herhangi bir anda hangi çarpanın uygulanacağını belirler.
Izgara, Ayarlar > Fiyatlandırma Programı bölümünde yapılandırılır. Günler Pazartesi'den Pazar'a kadar ve saatler 00:00'dan 23:00'e kadar uzanır. Bir zaman bloğuna bir dilim atamak için, ızgaradaki bloğu seçin ve istenen dilim rengini seçin.
Motorun Programı Okuma Şekli
Dahili olarak, her saat bloğu program verisindeki bir konuma eşlenir. Motor, herhangi bir gün ve saat için hangi dilimin aktif olduğunu belirlemek için her etkin dilimin program verilerini kontrol eder.
Belirli bir saat için hiçbir dilimin biti ayarlanmamışsa, motor temel oran ve 1.0 çarpanı ile geri döner.
Fiyatlandırma programı özelliği tamamen devre dışı bırakıldığında (Ayarlar > Fiyatlandırma'da), tüm oturumlar zaman fark etmeksizin 1.0 çarpanı ile temel oranı kullanır.
Fiyatlandırma Segmentleri
Bir segment, bir oturum içindeki fiyatlandırma bağlamının değişmediği kesintisiz bir zaman dilimidir. Fiyatlandırma motoru, bu sınır olaylarından herhangi biri gerçekleştiğinde yeni bir segment oluşturur:
| Sınır | Tetikleyici |
|---|---|
| session_start | Yeni bir oturum başlar |
| session_stop | Oturum durdurulur |
| pause | Kasiyer oturumu duraklatır |
| resume | Kasiyer duraklatılmış oturumu devam ettirir |
| tick | Saat, farklı bir fiyatlandırma dilimine geçer |
| disconnect | İstemci PC ağ bağlantısını kaybeder |
| offline | İstemci PC çevrimdışı olur |
| load_recovery | Sunucu yeniden başlar ve çalışan bir oturumu kurtarır |
Her segment şunları kaydeder:
| Alan | Açıklama |
|---|---|
| session_id | Bu segmentin ait olduğu oturum |
| segment_start | Segmentin başladığı Unix zaman damgası |
| segment_end | Segmentin sona erdiği Unix zaman damgası (hala açıksa null) |
| pricing_slot_id | Aktif fiyatlandırma diliminin ID'si (örneğin, "mavi", "kırmızı" veya "temel") |
| multiplier | Fiyatlandırma diliminden gelen çarpan değeri |
| base_price_snapshot | Segment açıldığında yakalanan temel saatlik ücret |
| amount | Bu segment için hesaplanan maliyet (segment kapandığında ayarlanır) |
| boundary_reason | Bu segmentin neden oluşturulduğu |
Temel Fiyatı Neden Anlık Görüntüleyelim?
base_price_snapshot, segment açıldığında geçerli olan temel saatlik ücreti yakalar. Bu kritik bir adımdır çünkü bir yönetici oturum sırasında temel ücreti değiştirebilir. Anlık görüntüleme sayesinde, her segment başladığında geçerli olan oranı kullanır, bu da adil ve denetlenebilir faturalandırmayı sağlar.
Maliyet Formülü
Tek bir segmentin maliyeti şu şekilde hesaplanır:
amount = ceil( (base_price_snapshot * multiplier * duration_seconds) / 3600 )
Daha kesin olarak, motor kayan nokta hatalarını önlemek için ölçeklenmiş tamsayı aritmetiği kullanır:
- Çarpan, sabit noktalı bir tamsayıya ölçeklenir (1,000,000 ile çarpılır).
- Hesaplama tamamen 128 bit tamsayılarla yapılır.
- Tavan bölme kullanılır. Sonuç her zaman bir sonraki küçük birime yuvarlanır.
Dakikalarla Hesaplama
Eğer "dakikalarla hesapla" seçeneği Ayarlar > Fiyatlandırma'da etkinleştirilmişse, formül biraz değişir:
amount = ceil( (base_price_snapshot * multiplier * used_minutes) / 60 )
Burada used_minutes = ceil(duration_seconds / 60). Bu, herhangi bir kısmi dakikanın tam dakika olarak sayıldığı anlamına gelir.
Oturum Toplam Hesaplaması
Toplam oturum maliyeti üç adımda hesaplanır:
Adım 1: Tüm Segmentleri Topla
raw_total = tüm kapalı segment miktarlarının toplamı + açık segment kısmi miktarı
Açık segment kısmi miktarı, yukarıdaki formül kullanılarak mevcut zaman damgası segment sonu olarak alınarak gerçek zamanlı hesaplanır.
Adım 2: Yuvarlama Uygula
rounded_total = round_up(raw_total, rounding_step)
Yuvarlama her zaman yukarı (tavan) yapılır, bu da geliri korur. Yuvarlama adımı Ayarlar > Fiyatlandırma'da yapılandırılabilir. Örneğin, yuvarlama adımı 50 (2 ondalık basamaklı bir para biriminde 0.50 $ temsil eder) ise, 3.27 $'lık ham toplam 3.50 $'a yuvarlanır.
Adım 3: Başlangıç Ücreti Minimumunu Uygula
final_total = max(rounded_total, startup_fee)
Başlangıç ücreti, herhangi bir oturum için minimum ücrettir, süreye bakılmaksızın. Yuvarlanmış toplam başlangıç ücretinden azsa, başlangıç ücreti yerine alınır.
Hesaplama
Hesaplama, bir oturumun faturalandırmasını nihai hale getirme sürecidir. İki hesaplama aşaması vardır:
Başlangıç Hesaplaması (Sadece Ön Ödemeli)
Bir ön ödemeli oturum başladığında, bir "başlangıç" hesaplama kaydı oluşturulur. Bu, şunları yakalar:
- Hesaplanan maliyet. Satın alınan süre için sistem tarafından hesaplanan maliyet.
- Tahsil edilen miktar. Müşterinin gerçekten ödediği miktar (genellikle hesaplanan maliyetle aynıdır).
"Satın Alma Anında Kilitle" ön ödemeli modunda, bu kilitli miktar, oturum sırasında fiyat değişikliklerinden bağımsız olarak oturumun maliyetini belirler.
Durdurma Hesaplaması
Herhangi bir oturum (ön ödemeli veya sonradan ödemeli) durdurulduğunda, bir "durdurma" hesaplama kaydı oluşturulur:
| Alan | Açıklama |
|---|---|
| Hesaplanan maliyet | Tüm fiyatlandırma segmentlerinden sistem tarafından hesaplanan toplam |
| Tahsil edilen miktar | Gerçekten tahsil edilen miktar (varsayılan olarak hesaplanan maliyet) |
| Manuel ayarlanmış miktar | Kasiyer fiyatı manuel olarak ayarladıysa, orijinal hesaplanan maliyet burada korunur |
| Komisyon oranı | Ödeme yöntemi komisyon oranı (yüzde olarak) |
| komisyon ücreti | Hesaplanan komisyon miktarı |
| sabit ücret | Ödeme yöntemi sabit ücreti |
| hesaplanmış zaman çizelgesi anlık görüntüsü | Oturumdaki her fiyatlandırma segmentinin JSON kaydı |
Zaman çizelgesi anlık görüntüsü, maliyetin segment segment nasıl hesaplandığını tam olarak gösteren eksiksiz bir denetim izi sağlar.
Ödeme Yöntemi Ücretleri
Her ödeme yöntemi iki tür ücrete sahip olabilir:
Komisyon (Baz Puanlar)
Komisyon oranı yüzde olarak ifade edilir. Komisyon ücreti, bu oranı tahsil edilen miktara uygulayarak hesaplanır.
Örnek: Tahsil edilen miktar 10.00 $ (1000 küçük birim) ve ödeme yöntemi %2.5 komisyon oranına sahipse, komisyon ücreti 0.25 $ (25 küçük birim) olur.
Sabit Ücret
Miktardan bağımsız olarak, işlem başına kesilen sabit bir ücret. Örneğin, kredi kartı işleme ücreti 0.30 $.
Her iki ücret de bilgilendiricidir. İşletmenin bu ödeme yöntemini kabul etme maliyetini temsil ederler. Hesaplamada kaydedilirler ancak müşterinin faturasına eklenmezler.
KDV (Katma Değer Vergisi)
KDV, Ayarlar > Fiyatlandırma bölümünde yüzde olarak (0--100%) yapılandırılır. Hesaplanan oturum miktarının üzerine uygulanır:
KDV = tahsil edilen miktar x (KDV oranı / 100)
KDV miktarı, ödeme diyalogunda ayrı olarak gösterilir, böylece kasiyer vergi dökümünü görebilir.
Ön Ödemeli Fiyatlandırma Modları
Oturum Yönetimi bölümünde açıklandığı gibi, ön ödemeli oturumlar iki fiyatlandırma modunu destekler:
Satın Alma Anında Kilitle
Bir ön ödemeli oturum başladığında, "başlangıç" hesaplama tahsil edilen miktarı kilitler. Oturum süresince:
- Oturum bitiş süresi satın alınan dakikalara göre sabitlenir.
- Fiyatlandırma programı değişse bile, oturum kilitli süre bitene kadar devam eder.
- Durdurma hesaplaması, başlangıç hesaplamasındaki kilitli miktarı kullanır.
Canlı Program
Oturumun kalan süresi, fiyatlandırma dilimleri değiştikçe sürekli olarak yeniden hesaplanır:
- Oturum daha ucuz bir dilime girerse, kalan süre uzar (müşteri parasına daha fazla dakika alır).
- Oturum daha pahalı bir dilime girerse, kalan süre kısalır.
- Durdurma hesaplaması, oturum boyunca uygulanan gerçek fiyatlandırmayı yansıtır.
Ondalık Basamaklar
Para birimi görüntüleme için kullanılan ondalık basamak sayısı yapılandırılabilir (2--4 ondalık basamak). Bu, miktarların kullanıcı arayüzünde nasıl görüntüleneceğini etkiler ancak iç küçük birim hesaplamalarını değiştirmez.
Örnek: 2 ondalık basamakla, 3.50 $ "3.50" olarak görüntülenir. 3 ondalık basamakla, "3.500" olarak görüntülenir.
Pratik Örnekler
Örnek 1: Basit Sonradan Ödemeli Oturum
- Temel oran: 3.00 $/saat (300 küçük birim)
- Program: Tüm gün standart dilim (çarpan 1.0)
- Oturum: 10:00 - 11:30 (90 dakika)
- Başlangıç ücreti: 0.50 $
Hesaplama:
Segment 1: (300 * 1.0 * 5400) / 3600 = 450 küçük birim (4.50 $)
Toplam: max(4.50 $, 0.50 $) = 4.50 $
Örnek 2: İki Dilimi Kapsayan Oturum
- Temel oran: 4.00 $/saat (400 küçük birim)
- Program: 10:00--12:00 arası Standart (1.0), 12:00--14:00 arası Mutlu Saat (0.5)
- Oturum: 11:00 - 13:00 (120 dakika)
- Başlangıç ücreti: 1.00 $
Hesaplama:
Segment 1 (11:00-12:00, standart): (400 * 1.0 * 3600) / 3600 = 400 (4.00 $)
Segment 2 (12:00-13:00, mutlu saat): (400 * 0.5 * 3600) / 3600 = 200 (2.00 $)
Toplam: 4.00 $ + 2.00 $ = 6.00 $
Son: max(6.00 $, 1.00 $) = 6.00 $
Örnek 3: Duraklatılmış Oturum
- Temel oran: 2.00 $/saat (200 küçük birim)
- Program: Tüm gün standart dilim (çarpan 1.0)
- Oturum: Başlangıç 10:00, Duraklat 10:30, Devam 11:00, Durdur 11:45
- Başlangıç ücreti: 0.50 $
Hesaplama:
Segment 1 (10:00-10:30, aktif): (200 * 1.0 * 1800) / 3600 = 100 (1.00 $)
Duraklatılmış dönem (10:30-11:00): ücret yok
Segment 2 (11:00-11:45, aktif): (200 * 1.0 * 2700) / 3600 = 150 (1.50 $)
Toplam: 1.00 $ + 1.50 $ = 2.50 $
Son: max(2.50 $, 0.50 $) = 2.50 $
Sonraki Adımlar
- Oturum Yönetimi: Tam oturum yaşam döngüsünü öğrenin
- Ayarlar: Fiyatlandırma: Temel oranı, yuvarlamayı ve başlangıç ücretini yapılandırın
- Ayarlar: Fiyatlandırma Programı: 7x24 program ızgarasını ayarlayın
- Ödeme Yöntemleri: Komisyon ve ücretlerle ödeme yöntemlerini yapılandırın