Hospitality Expert
Expert guidance for hotel management, reservation systems, property management systems (PMS), guest services, revenue management, and hospitality technology solutions.
Core Concepts
Hotel Management Systems
- Property Management System (PMS)
- Central Reservation System (CRS)
- Revenue Management System (RMS)
- Channel Manager
- Point of Sale (POS)
- Guest Relationship Management (GRM)
- Housekeeping management
Technologies
- Mobile check-in/check-out
- Digital key systems
- Guest messaging platforms
- IoT for room automation
- AI chatbots for customer service
- Contactless payments
- Energy management systems
Standards and Protocols
- HTNG (Hotel Technology Next Generation)
- OpenTravel Alliance standards
- PCI-DSS for payment security
- ADA compliance for accessibility
- Brand standards (if franchise)
- OTA integrations (Booking.com, Expedia)
Revenue Management System
import numpy as np
class RevenueManagementSystem:
"""Hotel revenue management and dynamic pricing"""
def __init__(self):
self.pricing_rules = []
self.demand_forecast = {}
def calculate_dynamic_rate(self,
room_type: RoomType,
check_in_date: date,
days_until_arrival: int,
current_occupancy: float,
historical_data: dict) -> Decimal:
"""Calculate dynamic room rate"""
# Base rate
base_rates = {
RoomType.STANDARD: Decimal('150'),
RoomType.DELUXE: Decimal('200'),
RoomType.SUITE: Decimal('350'),
RoomType.EXECUTIVE: Decimal('450')
}
base_rate = base_rates.get(room_type, Decimal('150'))
# Demand multiplier based on occupancy
if current_occupancy > 0.85:
demand_multiplier = Decimal('1.30') # High demand
elif current_occupancy > 0.70:
demand_multiplier = Decimal('1.15') # Moderate demand
elif current_occupancy > 0.50:
demand_multiplier = Decimal('1.00') # Normal
else:
demand_multiplier = Decimal('0.85') # Low demand
# Booking window multiplier
if days_until_arrival < 7:
window_multiplier = Decimal('1.20') # Last minute
elif days_until_arrival < 14:
window_multiplier = Decimal('1.10')
elif days_until_arrival > 60:
window_multiplier = Decimal('0.90') # Early bird
else:
window_multiplier = Decimal('1.00')
# Day of week adjustment
if check_in_date.weekday() in [4, 5]: # Friday, Saturday
day_multiplier = Decimal('1.25')
elif check_in_date.weekday() == 6: # Sunday
day_multiplier = Decimal('0.95')
else:
day_multiplier = Decimal('1.00')
# Calculate final rate
dynamic_rate = base_rate * demand_multiplier * window_multiplier * day_multiplier
# Round to nearest dollar
dynamic_rate = dynamic_rate.quantize(Decimal('1'))
return dynamic_rate
def forecast_demand(self, start_date: date, days: int) -> dict:
"""Forecast demand for upcoming period"""
forecast = {}
for i in range(days):
forecast_date = start_date + timedelta(days=i)
# Simplified demand forecast
# In production, would use ML models
base_demand = 70.0 # 70% base occupancy
# Day of week factor
if forecast_date.weekday() in [4, 5]: # Weekend
day_factor = 15
elif forecast_date.weekday() == 6:
day_factor = -10
else:
day_factor = 0
# Seasonality factor (simplified)
month = forecast_date.month
if month in [6, 7, 8]: # Summer
season_factor = 10
elif month in [12, 1]: # Holiday season
season_factor = 15
else:
season_factor = 0
forecasted_occupancy = base_demand + day_factor + season_factor
forecasted_occupancy = min(100, max(0, forecasted_occupancy))
forecast[forecast_date.isoformat()] = {
'date': forecast_date.isoformat(),
'forecasted_occupancy': forecasted_occupancy,
'confidence': 'high' if i < 14 else 'medium' if i < 30 else 'low'
}
return forecast
def optimize_inventory(self, total_rooms: int, date_range: tuple) -> dict:
"""Optimize room inventory allocation"""
# Allocate rooms across different channels
# Direct bookings, OTAs, corporate contracts, etc.
allocation = {
'direct': int(total_rooms * 0.40), # 40% direct
'ota': int(total_rooms * 0.35), # 35% OTAs
'corporate': int(total_rooms * 0.15), # 15% corporate
'walk_in': int(total_rooms * 0.10) # 10% walk-ins
}
return {
'total_rooms': total_rooms,
'allocation': allocation,
'date_range': {
'start': date_range[0].isoformat(),
'end': date_range[1].isoformat()
}
}
def calculate_revpar(self, revenue: Decimal, available_rooms: int) -> Decimal:
"""Calculate Revenue Per Available Room"""
if available_rooms == 0:
return Decimal('0')
revpar = revenue / available_rooms
return revpar.quantize(Decimal('0.01'))
def calculate_adr(self, revenue: Decimal, rooms_sold: int) -> Decimal:
"""Calculate Average Daily Rate"""
if rooms_sold == 0:
return Decimal('0')
adr = revenue / rooms_sold
return adr.quantize(Decimal('0.01'))
Guest Services Management
@dataclass
class GuestRequest:
"""Guest service request"""
request_id: str
reservation_id: str
room_number: str
guest_name: str
request_type: str # 'housekeeping', 'maintenance', 'concierge', 'amenity'
description: str
priority: str # 'low', 'medium', 'high'
status: str # 'open', 'in_progress', 'completed'
created_at: datetime
assigned_to: Optional[str]
completed_at: Optional[datetime]
class GuestServicesSystem:
"""Guest services and experience management"""
def __init__(self):
self.requests = []
self.guest_preferences = {}
self.loyalty_members = {}
def submit_guest_request(self, request_data: dict) -> GuestRequest:
"""Submit guest service request"""
request = GuestRequest(
request_id=self._generate_request_id(),
reservation_id=request_data['reservation_id'],
room_number=request_data['room_number'],
guest_name=request_data['guest_name'],
request_type=request_data['request_type'],
description=request_data['description'],
priority=request_data.get('priority', 'medium'),
status='open',
created_at=datetime.now(),
assigned_to=None,
completed_at=None
)
self.requests.append(request)
# Auto-assign based on request type
self._auto_assign_request(request)
return request
def track_guest_preferences(self, guest_id: str, preferences: dict):
"""Track guest preferences for personalization"""
self.guest_preferences[guest_id] = {
'room_preferences': {
'floor': preferences.get('preferred_floor'),
'bed_type': preferences.get('bed_type'),
'view': preferences.get('view_preference')
},
'amenities': preferences.get('amenities', []),
'dietary_restrictions': preferences.get('dietary_restrictions', []),
'special_occasions': preferences.get('special_occasions', {}),
'communication_preference': preferences.get('communication', 'email')
}
def calculate_guest_satisfaction_score(self, reservation_id: str) -> dict:
"""Calculate guest satisfaction metrics"""
# Simulate guest satisfaction score
# In production, would be based on surveys and feedback
metrics = {
'overall_satisfaction': 4.5, # Out of 5
'check_in_experience': 4.7,
'room_quality': 4.3,
'staff_friendliness': 4.8,
'cleanliness': 4.6,
'value_for_money': 4.2,
'likelihood_to_recommend': 9.0 # NPS score (0-10)
}
return {
'reservation_id': reservation_id,
'satisfaction_metrics': metrics,
'nps_category': 'promoter' if metrics['likelihood_to_recommend'] >= 9 else
'passive' if metrics['likelihood_to_recommend'] >= 7 else
'detractor'
}
def _auto_assign_request(self, request: GuestRequest):
"""Auto-assign request to staff"""
# Would implement smart assignment logic
assignments = {
'housekeeping': 'housekeeping_team',
'maintenance': 'maintenance_team',
'concierge': 'concierge_team',
'amenity': 'front_desk'
}
request.assigned_to = assignments.get(request.request_type, 'front_desk')
def _generate_request_id(self) -> str:
import uuid
return f"REQ-{uuid.uuid4().hex[:8].upper()}"
Best Practices
Reservations Management
- Implement real-time availability
- Use channel manager for distribution
- Enable mobile booking
- Implement flexible cancellation policies
- Send automated confirmations
- Track booking sources
- Enable group bookings
Revenue Management
- Implement dynamic pricing
- Monitor competitor rates
- Forecast demand accurately
- Optimize inventory allocation
- Track RevPAR and ADR
- Use yield management strategies
- Analyze booking patterns
Guest Experience
- Personalize guest interactions
- Enable mobile check-in/out
- Provide digital concierge services
- Track guest preferences
- Respond promptly to requests
- Implement loyalty programs
- Gather feedback systematically
Operations
- Maintain housekeeping efficiency
- Implement preventive maintenance
- Use automated messaging
- Monitor room status in real-time
- Optimize staff scheduling
- Track operational metrics
- Ensure PCI-DSS compliance
Anti-Patterns
❌ Manual reservation management ❌ Static pricing year-round ❌ No guest preference tracking ❌ Poor channel management ❌ Slow response to guest requests ❌ No mobile capabilities ❌ Inadequate staff training ❌ Poor data security ❌ No revenue analytics
Reference Documentation
Detailed material lives alongside this skill and is read on demand:
- Property Management System
Resources
- HTNG (Hotel Technology Next Generation): https://htng.org/
- HSMAI (Hospitality Sales and Marketing Association): https://www.hsmai.org/
- AHLA (American Hotel & Lodging Association): https://www.ahla.com/
- STR (Hotel data and analytics): https://str.com/
- OpenTravel Alliance: https://opentravel.org/
- Hospitality Technology: https://www.hospitalitytech.com/
- Revenue Management Best Practices: https://www.revparguru.com/