HandyCafe Docs
owner

Session Pricing

Gumagamit ang HandyCafe ng segment-based pricing engine para kalkulahin ang session cost sa iyong internet cafe o gaming center. Sa halip na mag-apply ng iisang flat rate para sa buong session, hinahati ng engine ang bawat session sa mga segment na may kanya-kanyang pricing context. Tinitiyak ng approach na ito ang tumpak na billing kahit tumawid ang sessions sa maraming time slots, pagbabago ng presyo, pauses, o disconnections.

Mga Pangunahing Konsepto

Bago sumabak sa mga detalye, narito ang mga pangunahing termino:

Termino Kahulugan
Base hourly rate Ang presyo kada oras bago i-apply ang anumang multipliers. Naka-set sa Settings > Pricing.
Pricing slot Isang pinangalanang time period na may partikular na multiplier. Mayroon 8 slots na color-coded.
Multiplier Isang factor na inilalapat sa base rate. 1.0 = karaniwang presyo, 0.5 = kalahating presyo, 2.0 = dobleng presyo.
Segment Isang tuloy-tuloy na panahon sa loob ng session kung saan ang pricing context (slot, multiplier, base price) ay hindi nagbabago.
Settlement Ang huling kalkulasyon na nagtatakda kung magkano ang utang ng customer kapag nagtapos ang session.

Base Hourly Rate

Ang base hourly rate ang pundasyon ng lahat ng pricing calculations. Naka-set ito sa Settings > Pricing at kinakatawan nito ang standard na presyo kada oras ng PC usage.

Lahat ng internal calculations ay gumagamit ng minor currency units (halimbawa, cents para sa USD, sentimo para sa PHP). Kung ang base rate mo ay $3.00 kada oras, ang internal value ay 300. Ine-eliminate nito ang floating-point rounding issues.

Dual Currency Support

Sinusuportahan ng HandyCafe ang base currency at local currency na may exchange (FX) rate. Kung nag-o-operate ka sa bansa kung saan naiiba ang international pricing sa local pricing:

  • Base currency. Ang currency na ginagamit para sa internal pricing calculations.
  • Local currency. Ang currency na ipinapakita sa mga customer at ginagamit para sa payments.
  • FX rate. Ang conversion factor sa pagitan ng base at local currencies.

Kung pareho ang dalawang currencies, ang FX rate ay tinatrato bilang 1.0 at walang epekto.

Mga Pricing Slots

Mayroon 8 color-coded na pricing slots na kumakatawan sa iba't ibang pricing tier:

Slot Kulay Karaniwang Paggamit
Blue Blue Standard rate
Orange Orange Evening o weekend surcharge
Red Red Peak hours premium
Green Green Off-peak discount
Teal Teal Rate ng mag-aaral o miyembro
Gray Gray Holiday o espesyal na pagpepresyo
Cyan Cyan Night rate
Emerald Emerald Rate ng promosyon

Ang bawat slot ay may tatlong properties:

  1. Name. Isang descriptive label (halimbawa, "Peak Hours" o "Night Discount").
  2. Multiplier. Isang decimal value na nagmo-modify sa base rate. Mga karaniwang values ay 1.0 (standard), 0.5 (half price), 1.5 (50% surcharge), 2.0 (double price). Ang multiplier ay dapat zero o positive.
  3. Schedule data. Isang internal representation na nagtatakda kung aling mga oras ng aling mga araw ang naaangkop sa slot. Awtomatiko itong mina-manage sa pamamagitan ng schedule grid.

Ang mga slots ay maaaring isa-isang i-enable o i-disable. Hindi pinapansin ng pricing engine ang mga disabled slots.

Ang Schedule Grid

Ang pricing schedule ay isang 7-day by 24-hour matrix (168 one-hour blocks sa kabuuan). Ang bawat block ay naka-assign sa isang pricing slot. Tinutukoy ng schedule kung aling multiplier ang naaangkop sa anumang sandali.

Naka-configure ang grid sa Settings > Pricing Schedule. Ang mga araw ay tumatakbo mula Lunes hanggang Linggo at ang mga oras ay mula 00:00 hanggang 23:00. Para mag-assign ng slot sa isang time block, piliin ang block sa grid at piliin ang gustong slot color.

Paano Binabasa ng Engine ang Schedule

Sa internal, ang bawat hour block ay nagma-map sa isang posisyon sa schedule data. Tinitingnan ng engine ang schedule data ng bawat enabled slot para matukoy kung aling slot ang aktibo para sa anumang araw at oras.

Kung walang slot ang naka-set para sa isang partikular na oras, nag-fa-fall back ang engine sa base rate na may multiplier na 1.0.

Kapag naka-disable nang buo ang pricing schedule feature (sa Settings > Pricing), lahat ng sessions ay gumagamit ng base rate na may 1.0 multiplier anuman ang oras.

Mga Pricing Segments

Ang segment ay isang tuloy-tuloy na time period sa loob ng session kung saan hindi nagbabago ang pricing context. Lumilikha ang pricing engine ng bagong segment tuwing may nangyayaring alinman sa mga boundary events na ito:

Boundary Trigger
session_start Nagsisimula ang bagong session
session_stop Itinigil ang session
i-pause Pini-pause ng cashier ang session
ipagpatuloy Nire-resume ng cashier ang naka-pause na session
tick Tumawid ang orasan sa hour boundary patungo sa ibang pricing slot
idiskonekta Nawalan ng network connection ang client PC
offline Nag-offline ang client PC
load_recovery Nag-restart ang server at nire-recover ang tumatakbong session

Ang bawat segment ay nagrererecord ng:

Field Paglalarawan
session_id Ang session na kinabibilangan ng segment na ito
segment_start Unix timestamp kung kailan nagsimula ang segment
segment_end Unix timestamp kung kailan natapos ang segment (null kung bukas pa)
pricing_slot_id Ang ID ng aktibong pricing slot (halimbawa, "blue", "red", o "base")
multiplier Ang multiplier value mula sa pricing slot
base_price_snapshot Ang base hourly rate na naka-capture sa sandaling nabuksan ang segment
amount Ang calculated cost para sa segment na ito (nase-set kapag nagsara ang segment)
boundary_reason Kung bakit ginawa ang segment na ito

Bakit Nag-snapshot ng Base Price?

Ang base_price_snapshot ay kumukuha ng base hourly rate sa eksaktong sandaling nabuksan ang segment. Kritikal ito dahil maaaring baguhin ng administrator ang base rate habang tumatakbo ang session. Sa pag-snapshot, ang bawat segment ay gumagamit ng rate na naka-epekto nang nagsimula ito, na tinitiyak ang patas at auditable na billing.

Cost Formula

Ang gastos ng isang segment ay kinakalkula bilang:

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

Mas tiyak, gumagamit ang engine ng scaled integer arithmetic para iwasan ang floating-point errors:

  1. Ang multiplier ay naka-scale sa fixed-point integer (pinarami ng 1,000,000).
  2. Ang kalkulasyon ay ginagawa nang buo sa 128-bit integers.
  3. Gumagamit ng ceiling division. Palaging nag-round up ang resulta sa susunod na minor unit.

Kalkulasyon ayon sa Minuto

Kung naka-enable ang "calculate by minutes" option sa Settings > Pricing, bahagyang nagbabago ang formula:

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

Kung saan used_minutes = ceil(duration_seconds / 60). Ibig sabihin, ang anumang bahagi ng minuto ay ibinibilang bilang buong minuto.

Kalkulasyon ng Session Total

Ang kabuuang session cost ay kinakalkula sa tatlong hakbang:

Hakbang 1: I-sum ang Lahat ng Segments

raw_total = kabuuan ng lahat ng closed segment amounts + open segment partial amount

Ang open segment partial amount ay kinakalkula sa real time gamit ang formula sa itaas na ang kasalukuyang timestamp ang segment end.

Hakbang 2: I-apply ang Rounding

rounded_total = round_up(raw_total, rounding_step)

Palaging pataas ang rounding (ceiling) para maprotektahan ang revenue. Ang rounding step ay naka-configure sa Settings > Pricing. Halimbawa, kung ang rounding step ay 50 (kumakatawan sa $0.50 sa currency na may 2 fraction digits), ang raw total na $3.27 ay nag-round up sa $3.50.

Hakbang 3: I-apply ang Startup Fee Minimum

final_total = max(rounded_total, startup_fee)

Ang startup fee ang minimum charge para sa anumang session, anuman ang tagal. Kung ang rounded total ay mas mababa sa startup fee, ang startup fee ang sisingilin.

Settlement

Ang settlement ang proseso ng pag-finalize ng billing para sa isang session. May dalawang settlement stages:

Simulan ang Settlement (Prepaid Lamang)

Kapag nagsimula ang prepaid session, isang "start" settlement record ang nalilikha. Kinukuha nito ang:

  • Calculated cost. Ang system-calculated cost para sa biniling oras.
  • Amount charged. Ang halagang aktwal na binayaran ng customer (karaniwan ay pareho sa calculated cost).

Para sa "Lock at Purchase" prepaid mode, ang locked amount na ito ang nagtatakda ng session cost anuman ang mga pagbabago sa pricing sa panahon ng session.

Stop Settlement

Kapag itinigil ang anumang session (prepaid o postpaid), isang "stop" settlement record ang nalilikha:

Field Paglalarawan
Kinakalkula na gastos Ang system-calculated total mula sa lahat ng pricing segments
Amount charged Ang halagang aktwal na siningil (default sa calculated cost)
Manu-manong inayos ang halaga Kung manu-manong in-adjust ng cashier ang presyo, naitatago dito ang orihinal na calculated cost
Rate ng komisyon Paraan ng pagbabayad rate ng komisyon (bilang porsyento)
bayad_komisyon Ang kinakalkula na halaga ng komisyon
fixed_fee Nakapirming bayad sa paraan ng pagbabayad
computed_timeline_snapshot Isang JSON record ng bawat pricing segment sa session

Ang timeline snapshot ay nagbibigay ng kumpletong audit trail na nagpapakita nang eksakto kung paano kinalkula ang gastos, segment by segment.

Mga Payment Method Fees

Ang bawat payment method ay maaaring magkaroon ng dalawang uri ng fees:

Commission (Basis Points)

Ang commission rate ay ipinapahayag bilang porsyento. Ang commission fee ay kinakalkula sa pamamagitan ng pag-apply ng rate na ito sa amount charged.

Halimbawa: Kung ang amount charged ay $10.00 (1000 minor units) at ang payment method ay may 2.5% commission rate, ang commission fee ay $0.25 (25 minor units).

Fixed Fee

Isang flat fee na ibinabawas kada transaksyon, anuman ang halaga. Halimbawa, isang credit card processing fee na $0.30.

Parehong fees ay informational. Kinakatawan nila ang gastos sa negosyo ng pagtanggap ng payment method na iyon. Nire-record ang mga ito sa settlement ngunit hindi idinaragdag sa bill ng customer.

VAT (Value Added Tax)

Ang VAT ay naka-configure bilang porsyento (0-100%) sa Settings > Pricing. Inilapat ito sa ibabaw ng kalkuladong halaga ng session:

VAT = amount charged x (VAT rate / 100)

Ang VAT amount ay hiwalay na ipinapakita sa payment dialog para makita ng cashier ang tax breakdown.

Mga Prepaid Pricing Modes

Gaya ng inilarawan sa Session Management, ang prepaid sessions ay sumusuporta ng dalawang pricing modes:

Lock at Purchase

Kapag nagsimula ang prepaid session, nilo-lock ng "start" settlement ang charged amount. Sa buong tagal ng session:

  • Ang session end time ay nakabase sa mga biniling minuto.
  • Kahit magbago ang pricing schedule, nagpapatuloy ang session hanggang mag-expire ang locked time.
  • Ang stop settlement ay gumagamit ng locked amount mula sa start settlement.

Live Schedule

Ang natitirang oras ng session ay patuloy na nire-recalculate habang nagbabago ang mga pricing slots:

  • Kung pumasok ang session sa mas murang slot, humahaba ang natitirang oras (mas maraming minuto ang nakukuha ng customer sa kanilang pera).
  • Kung pumasok ang session sa mas mahal na slot, pumaigsí ang natitirang oras.
  • Ang stop settlement ay nagre-reflect ng aktwal na pricing na inilapat sa buong session.

Mga Fraction Digits

Ang bilang ng decimal places na ginagamit para sa currency display ay naka-configure (2-4 fraction digits). Naaapektuhan nito kung paano ipinapakita ang mga halaga sa UI ngunit hindi binabago ang internal minor-unit calculations.

Halimbawa: Sa 2 fraction digits, ang $3.50 ay ipinapakita bilang "3.50". Sa 3 fraction digits, ipapakita ito bilang "3.500".

Mga Praktikal na Halimbawa

Halimbawa 1: Simpleng Postpaid Session

  • Base rate: $3.00/oras (300 minor units)
  • Schedule: Standard slot (multiplier 1.0) buong araw
  • Session: 10:00 AM hanggang 11:30 AM (90 minuto)
  • Startup fee: $0.50

Kalkulasyon:

Segment 1: (300 * 1.0 * 5400) / 3600 = 450 minor units ($4.50)
Total: max($4.50, $0.50) = $4.50

Halimbawa 2: Session na Tumawid sa Dalawang Slots

  • Base rate: $4.00/oras (400 minor units)
  • Iskedyul: Standard (1.0) mula 10:00-12:00, Happy Hour (0.5) mula 12:00-14:00
  • Session: 11:00 AM hanggang 1:00 PM (120 minuto)
  • Startup fee: $1.00

Kalkulasyon:

Segment 1 (11:00-12:00, standard): (400 * 1.0 * 3600) / 3600 = 400 ($4.00)
Segment 2 (12:00-13:00, happy hour): (400 * 0.5 * 3600) / 3600 = 200 ($2.00)
Total: $4.00 + $2.00 = $6.00
Final: max($6.00, $1.00) = $6.00

Halimbawa 3: Session na may Pause

  • Base rate: $2.00/oras (200 minor units)
  • Schedule: Standard slot (multiplier 1.0) buong araw
  • Session: Start 10:00, Pause 10:30, Resume 11:00, Stop 11:45
  • Startup fee: $0.50

Kalkulasyon:

Segment 1 (10:00-10:30, active): (200 * 1.0 * 1800) / 3600 = 100 ($1.00)
Paused period (10:30-11:00): walang singil
Segment 2 (11:00-11:45, active): (200 * 1.0 * 2700) / 3600 = 150 ($1.50)
Total: $1.00 + $1.50 = $2.50
Final: max($2.50, $0.50) = $2.50

Mga Susunod na Hakbang