
=== Table: activity_logs ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  user_id                | int(10) unsigned     | YES   |       | NULL
  user_name              | varchar(100)         | YES   |       | NULL
  action                 | varchar(100)         | NO    |       | NULL
  module                 | varchar(100)         | NO    |       | NULL
  record_id              | varchar(50)          | YES   |       | NULL
  room_number            | varchar(20)          | YES   | MUL   | NULL
  details                | text                 | YES   |       | NULL
  ip_address             | varchar(50)          | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: banquet_bookings ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  booking_number         | varchar(50)          | NO    | UNI   | NULL
  customer_name          | varchar(100)         | NO    |       | NULL
  customer_phone         | varchar(30)          | NO    |       | NULL
  customer_email         | varchar(100)         | YES   |       | NULL
  hall_id                | int(10) unsigned     | NO    |       | NULL
  event_type             | varchar(50)          | NO    |       | Wedding
  event_date             | date                 | NO    |       | NULL
  start_time             | time                 | NO    |       | 10:00:00
  end_time               | time                 | NO    |       | 22:00:00
  guest_count            | int(11)              | NO    |       | 100
  catering_required      | tinyint(1)           | NO    |       | 1
  package_details        | text                 | YES   |       | NULL
  total_amount           | decimal(10,2)        | NO    |       | 0.00
  advance_paid           | decimal(10,2)        | NO    |       | 0.00
  payment_status         | varchar(30)          | NO    |       | unpaid
  booking_status         | enum('inquiry','confirmed','completed','cancelled') | NO    |       | confirmed
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: banquet_halls ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  name                   | varchar(150)         | NO    |       | NULL
  capacity               | int(11)              | NO    |       | 100
  base_price             | decimal(10,2)        | NO    |       | 15000.00
  hourly_rate            | decimal(10,2)        | NO    |       | 2000.00
  amenities              | text                 | YES   |       | NULL
  image                  | varchar(255)         | YES   |       | NULL
  description            | text                 | YES   |       | NULL
  status                 | varchar(20)          | NO    |       | active

=== Table: booking_addons ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  booking_id             | int(10) unsigned     | NO    |       | NULL
  addon_name             | varchar(100)         | NO    |       | NULL
  addon_price            | decimal(10,2)        | NO    |       | 0.00
  quantity               | int(11)              | NO    |       | 1
  total_price            | decimal(10,2)        | NO    |       | 0.00

=== Table: bookings ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  booking_number         | varchar(50)          | NO    | UNI   | NULL
  guest_id               | int(10) unsigned     | NO    |       | NULL
  room_id                | int(10) unsigned     | YES   |       | NULL
  room_type_id           | int(10) unsigned     | NO    |       | NULL
  check_in_date          | date                 | NO    |       | NULL
  check_out_date         | date                 | NO    |       | NULL
  actual_check_in        | datetime             | YES   |       | NULL
  actual_check_out       | datetime             | YES   |       | NULL
  adults                 | int(11)              | NO    |       | 1
  children               | int(11)              | NO    |       | 0
  booking_source         | varchar(50)          | NO    |       | website
  guest_category         | enum('FIT','Company') | NO    |       | FIT
  meal_plan              | varchar(30)          | YES   |       | EP
  booking_status         | enum('pending','confirmed','checked_in','checked_out','cancelled','no_show') | NO    |       | confirmed
  room_rate              | decimal(10,2)        | NO    |       | 0.00
  extra_charge           | decimal(10,2)        | NO    |       | 0.00
  total_nights           | int(11)              | NO    |       | 1
  total_room_charge      | decimal(10,2)        | NO    |       | 0.00
  extra_bed_charge       | decimal(10,2)        | NO    |       | 0.00
  addon_charge           | decimal(10,2)        | NO    |       | 0.00
  discount_amount        | decimal(10,2)        | NO    |       | 0.00
  coupon_code            | varchar(50)          | YES   |       | NULL
  tax_amount             | decimal(10,2)        | NO    |       | 0.00
  total_amount           | decimal(10,2)        | NO    |       | 0.00
  advance_paid           | decimal(10,2)        | NO    |       | 0.00
  paid_amount            | decimal(10,2)        | NO    |       | 0.00
  payment_status         | enum('unpaid','partial','paid','refunded') | NO    |       | unpaid
  special_requests       | text                 | YES   |       | NULL
  guest_signature        | mediumtext           | YES   |       | NULL
  cancellation_reason    | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL
  id_proof_type          | varchar(30)          | YES   |       | NULL
  id_proof_number        | varchar(50)          | YES   |       | NULL
  vehicle_number         | varchar(20)          | YES   |       | NULL
  room_tax_rate          | decimal(5,2)         | YES   |       | 12.00
  purpose_of_visit       | varchar(50)          | YES   |       | NULL
  coming_from            | varchar(100)         | YES   |       | NULL
  going_to               | varchar(100)         | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  payment_mode           | varchar(30)          | YES   |       | cash
  gst_number             | varchar(20)          | YES   |       | NULL
  company_name           | varchar(150)         | YES   |       | NULL

=== Table: corporate_clients ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  company_name           | varchar(150)         | NO    |       | NULL
  company_code           | varchar(30)          | NO    | UNI   | NULL
  contact_person         | varchar(100)         | YES   |       | NULL
  email                  | varchar(150)         | YES   |       | NULL
  phone                  | varchar(30)          | YES   |       | NULL
  gstin                  | varchar(30)          | YES   |       | NULL
  billing_address        | text                 | YES   |       | NULL
  contract_type          | enum('percentage_discount','flat_rate') | NO    |       | percentage_discount
  discount_percentage    | decimal(5,2)         | NO    |       | 0.00
  flat_rate_amount       | decimal(10,2)        | NO    |       | 0.00
  credit_limit           | decimal(12,2)        | NO    |       | 0.00
  is_active              | tinyint(1)           | NO    |       | 1
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: coupons ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  code                   | varchar(50)          | NO    | UNI   | NULL
  discount_type          | enum('percentage','fixed') | NO    |       | percentage
  discount_value         | decimal(10,2)        | NO    |       | NULL
  min_booking_amount     | decimal(10,2)        | NO    |       | 0.00
  max_discount           | decimal(10,2)        | NO    |       | 0.00
  start_date             | date                 | NO    |       | NULL
  end_date               | date                 | NO    |       | NULL
  usage_limit            | int(11)              | NO    |       | 100
  times_used             | int(11)              | NO    |       | 0
  is_active              | tinyint(1)           | NO    |       | 1

=== Table: dynamic_pricing_rules ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  room_type_id           | int(10) unsigned     | YES   |       | NULL
  rule_name              | varchar(100)         | NO    |       | NULL
  rule_type              | enum('weekend','holiday','season','long_stay') | NO    |       | weekend
  multiplier_type        | enum('percent_increase','percent_discount','fixed_addon') | NO    |       | percent_increase
  value                  | decimal(10,2)        | NO    |       | 0.00
  start_date             | date                 | YES   |       | NULL
  end_date               | date                 | YES   |       | NULL
  is_active              | tinyint(1)           | NO    |       | 1

=== Table: employee_attendance ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  employee_id            | int(10) unsigned     | NO    |       | NULL
  date                   | date                 | NO    |       | NULL
  status                 | enum('present','absent','leave','half_day','overtime') | NO    |       | present
  in_time                | time                 | YES   |       | NULL
  out_time               | time                 | YES   |       | NULL
  overtime_hours         | decimal(4,2)         | NO    |       | 0.00
  notes                  | varchar(255)         | YES   |       | NULL

=== Table: employees ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  staff_code             | varchar(50)          | NO    | UNI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  department             | varchar(50)          | NO    |       | NULL
  designation            | varchar(100)         | NO    |       | NULL
  salary                 | decimal(10,2)        | NO    |       | 0.00
  phone                  | varchar(30)          | NO    |       | NULL
  email                  | varchar(100)         | YES   |       | NULL
  joining_date           | date                 | NO    |       | NULL
  status                 | varchar(20)          | NO    |       | active
  bank_name              | varchar(100)         | YES   |       | NULL
  account_number         | varchar(50)          | YES   |       | NULL
  ifsc_code              | varchar(30)          | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: expense_categories ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  code                   | varchar(50)          | NO    | UNI   | NULL
  description            | varchar(255)         | YES   |       | NULL

=== Table: expenses ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  expense_date           | date                 | NO    |       | NULL
  category_id            | int(10) unsigned     | NO    |       | NULL
  vendor_id              | int(10) unsigned     | YES   |       | NULL
  title                  | varchar(150)         | NO    |       | NULL
  description            | text                 | YES   |       | NULL
  amount                 | decimal(10,2)        | NO    |       | 0.00
  tax_amount             | decimal(10,2)        | NO    |       | 0.00
  total_amount           | decimal(10,2)        | NO    |       | 0.00
  payment_mode           | varchar(50)          | NO    |       | cash
  receipt_ref            | varchar(100)         | YES   |       | NULL
  is_recurring           | tinyint(1)           | NO    |       | 0
  recurring_period       | varchar(30)          | YES   |       | NULL
  status                 | varchar(30)          | NO    |       | paid
  created_at             | datetime             | YES   |       | NULL

=== Table: folio_items ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  booking_id             | int(10) unsigned     | NO    |       | NULL
  category               | varchar(50)          | NO    |       | room
  item_name              | varchar(200)         | NO    |       | NULL
  quantity               | int(11)              | NO    |       | 1
  unit_price             | decimal(10,2)        | NO    |       | 0.00
  tax_rate               | decimal(5,2)         | NO    |       | 0.00
  tax_amount             | decimal(10,2)        | NO    |       | 0.00
  total_amount           | decimal(10,2)        | NO    |       | 0.00
  reference_id           | varchar(50)          | YES   |       | NULL
  is_transferred         | tinyint(1)           | NO    |       | 1
  folio_window           | enum('A','B')        | NO    |       | A
  created_at             | datetime             | YES   |       | NULL

=== Table: foreign_guest_details ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  booking_id             | int(11) unsigned     | NO    |       | NULL
  guest_id               | int(11) unsigned     | NO    |       | NULL
  passport_number        | varchar(50)          | NO    |       | NULL
  passport_issue_place   | varchar(100)         | YES   |       | NULL
  passport_expiry_date   | date                 | YES   |       | NULL
  nationality            | varchar(100)         | NO    |       | NULL
  visa_number            | varchar(50)          | NO    |       | NULL
  visa_type              | varchar(50)          | NO    |       | Tourist
  visa_valid_until       | date                 | YES   |       | NULL
  arrival_date_in_india  | date                 | YES   |       | NULL
  arrived_from           | varchar(100)         | YES   |       | NULL
  next_destination       | varchar(100)         | YES   |       | NULL
  employed_in_india      | tinyint(1)           | NO    |       | 0
  form_c_status          | enum('pending','submitted','verified') | NO    |       | pending
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: front_desk_paid_outs ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  voucher_number         | varchar(30)          | NO    | UNI   | NULL
  voucher_type           | enum('paid_out_for_guest','petty_cash_expense') | NO    |       | paid_out_for_guest
  booking_id             | int(11) unsigned     | YES   | MUL   | NULL
  room_number            | varchar(20)          | YES   |       | NULL
  guest_name             | varchar(150)         | YES   |       | NULL
  amount                 | decimal(10,2)        | NO    |       | 0.00
  purpose                | varchar(255)         | NO    |       | NULL
  paid_to                | varchar(150)         | NO    |       | NULL
  approved_by_user_id    | int(11) unsigned     | YES   |       | NULL
  posted_to_folio        | tinyint(1)           | NO    |       | 0
  folio_item_id          | int(11) unsigned     | YES   |       | NULL
  status                 | enum('active','settled','cancelled') | NO    |       | active
  remarks                | text                 | YES   |       | NULL
  created_at             | datetime             | YES   | MUL   | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: front_desk_parcels ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | NO    | MUL   | NULL
  guest_name             | varchar(150)         | NO    |       | NULL
  guest_phone            | varchar(25)          | YES   |       | NULL
  courier_partner        | varchar(100)         | NO    |       | Courier / Delivery
  tracking_number        | varchar(100)         | YES   |       | NULL
  package_type           | enum('box','envelope','food','medicine','fragile','other') | NO    |       | box
  storage_location       | varchar(100)         | NO    |       | Front Desk Shelf
  status                 | enum('received','delivered_to_room','collected_by_guest') | NO    | MUL   | received
  received_at            | datetime             | NO    |       | NULL
  received_by_user_id    | int(11) unsigned     | YES   |       | NULL
  handed_over_at         | datetime             | YES   |       | NULL
  handed_over_by_user_id | int(11) unsigned     | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: front_desk_shifts ===
  id                     | int(11)              | NO    | PRI   | NULL
  shift_type             | enum('morning','evening','night') | NO    |       | NULL
  opened_by_user_id      | int(11)              | NO    |       | NULL
  opening_float          | decimal(10,2)        | YES   |       | 0.00
  status                 | enum('open','closed') | YES   |       | open
  cash_collected         | decimal(10,2)        | YES   |       | 0.00
  expected_drawer_cash   | decimal(10,2)        | YES   |       | 0.00
  actual_cash_counted    | decimal(10,2)        | YES   |       | 0.00
  cash_variance          | decimal(10,2)        | YES   |       | 0.00
  denominations_json     | text                 | YES   |       | NULL
  handover_to_user_id    | int(11)              | YES   |       | NULL
  handover_notes         | text                 | YES   |       | NULL
  opened_at              | datetime             | YES   |       | current_timestamp()
  closed_at              | datetime             | YES   |       | NULL
  created_at             | datetime             | YES   |       | current_timestamp()
  updated_at             | datetime             | YES   |       | current_timestamp()

=== Table: guest_visitors ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | NO    |       | NULL
  in_house_guest_name    | varchar(150)         | NO    |       | NULL
  visitor_name           | varchar(150)         | NO    |       | NULL
  visitor_phone          | varchar(30)          | NO    |       | NULL
  id_proof_type          | varchar(50)          | NO    |       | Aadhaar Card
  id_proof_number        | varchar(100)         | YES   |       | NULL
  purpose_of_visit       | varchar(150)         | NO    |       | Personal
  check_in_time          | datetime             | NO    |       | NULL
  check_out_time         | datetime             | YES   |       | NULL
  status                 | enum('inside','departed') | NO    |       | inside
  recorded_by_user_id    | int(11) unsigned     | NO    |       | NULL
  remarks                | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: guests ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  user_id                | int(10) unsigned     | YES   |       | NULL
  first_name             | varchar(100)         | NO    |       | NULL
  last_name              | varchar(100)         | NO    |       | NULL
  email                  | varchar(150)         | YES   |       | NULL
  phone                  | varchar(30)          | NO    |       | NULL
  id_proof_type          | varchar(50)          | YES   |       | Aadhaar
  id_proof_number        | varchar(100)         | YES   |       | NULL
  id_proof_document      | varchar(255)         | YES   |       | NULL
  address                | text                 | YES   |       | NULL
  city                   | varchar(100)         | YES   |       | NULL
  state                  | varchar(100)         | YES   |       | NULL
  country                | varchar(100)         | NO    |       | India
  pincode                | varchar(20)          | YES   |       | NULL
  guest_category         | enum('regular','corporate','vip','group','walk_in') | NO    |       | regular
  is_blacklisted         | tinyint(1)           | NO    |       | 0
  blacklist_reason       | varchar(255)         | YES   |       | NULL
  vehicle_number         | varchar(50)          | YES   |       | NULL
  emergency_contact      | varchar(100)         | YES   |       | NULL
  special_notes          | text                 | YES   |       | NULL
  total_spend            | decimal(12,2)        | NO    |       | 0.00
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL
  nationality            | varchar(60)          | YES   |       | Indian
  id_proof_file          | varchar(255)         | YES   |       | NULL

=== Table: hotel_settings ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  hotel_name             | varchar(150)         | NO    |       | NULL
  legal_name             | varchar(200)         | YES   |       | NULL
  tagline                | varchar(255)         | YES   |       | NULL
  logo                   | varchar(255)         | YES   |       | NULL
  favicon                | varchar(255)         | YES   |       | NULL
  email                  | varchar(150)         | YES   |       | NULL
  phone                  | varchar(30)          | YES   |       | NULL
  alternate_phone        | varchar(30)          | YES   |       | NULL
  website                | varchar(255)         | YES   |       | NULL
  address                | text                 | YES   |       | NULL
  city                   | varchar(100)         | YES   |       | NULL
  state                  | varchar(100)         | YES   |       | NULL
  country                | varchar(100)         | NO    |       | India
  pincode                | varchar(20)          | YES   |       | NULL
  gstin                  | varchar(50)          | YES   |       | NULL
  pan                    | varchar(30)          | YES   |       | NULL
  currency               | varchar(10)          | NO    |       | INR
  currency_symbol        | varchar(10)          | NO    |       | ₹
  timezone               | varchar(100)         | NO    |       | Asia/Kolkata
  check_in_time          | time                 | NO    |       | 12:00:00
  check_out_time         | time                 | NO    |       | 11:00:00
  tax_enabled            | tinyint(1)           | NO    |       | 1
  default_tax_rate       | decimal(5,2)         | NO    |       | 0.00
  service_charge_enabled | tinyint(1)           | NO    |       | 0
  service_charge_rate    | decimal(5,2)         | NO    |       | 0.00
  booking_enabled        | tinyint(1)           | NO    |       | 1
  maintenance_mode       | tinyint(1)           | NO    |       | 0
  about_story            | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL
  restaurant_cgst        | decimal(5,2)         | YES   |       | 2.50
  restaurant_sgst        | decimal(5,2)         | YES   |       | 2.50
  restaurant_fssai       | varchar(50)          | YES   |       | NULL
  restaurant_gstin       | varchar(20)          | YES   |       | NULL
  restaurant_service_charge | decimal(5,2)         | YES   |       | 0.00
  restaurant_gst_inclusive | tinyint(1)           | YES   |       | 0

=== Table: housekeeping_requests ===
  id                     | int(11)              | NO    | PRI   | NULL
  room_id                | int(11)              | NO    |       | NULL
  booking_id             | int(11)              | YES   |       | NULL
  requested_by           | int(11)              | NO    |       | NULL
  request_type           | varchar(100)         | YES   |       | NULL
  description            | text                 | YES   |       | NULL
  priority               | enum('low','normal','high') | YES   |       | normal
  status                 | enum('pending','accepted','in_progress','done') | YES   |       | pending
  assigned_to            | int(11)              | YES   |       | NULL
  completed_at           | datetime             | YES   |       | NULL
  created_at             | datetime             | YES   |       | current_timestamp()
  updated_at             | datetime             | YES   |       | current_timestamp()

=== Table: housekeeping_tasks ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  room_id                | int(10) unsigned     | NO    |       | NULL
  assigned_to_user_id    | int(10) unsigned     | YES   |       | NULL
  task_type              | varchar(50)          | NO    |       | checkout_clean
  priority               | enum('low','normal','high','urgent') | NO    |       | normal
  status                 | enum('dirty','in_progress','cleaned','inspected') | NO    |       | dirty
  checklist              | text                 | YES   |       | NULL
  remarks                | text                 | YES   |       | NULL
  completed_at           | datetime             | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: inventory_items ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  category_name          | varchar(100)         | NO    |       | NULL
  name                   | varchar(150)         | NO    |       | NULL
  item_code              | varchar(50)          | NO    | UNI   | NULL
  unit                   | varchar(20)          | NO    |       | pcs
  min_stock_alert        | int(11)              | NO    |       | 10
  current_stock          | int(11)              | NO    |       | 0
  unit_cost              | decimal(10,2)        | NO    |       | 0.00
  created_at             | datetime             | YES   |       | NULL

=== Table: inventory_transactions ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  item_id                | int(10) unsigned     | NO    |       | NULL
  transaction_type       | enum('purchase','consumption','damage','adjustment') | NO    |       | purchase
  quantity               | int(11)              | NO    |       | 0
  unit_price             | decimal(10,2)        | NO    |       | 0.00
  total_cost             | decimal(10,2)        | NO    |       | 0.00
  vendor_id              | int(10) unsigned     | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  transaction_date       | date                 | NO    |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: invoices ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  invoice_number         | varchar(50)          | NO    | UNI   | NULL
  booking_id             | int(10) unsigned     | YES   |       | NULL
  guest_id               | int(10) unsigned     | NO    |       | NULL
  invoice_date           | date                 | NO    |       | NULL
  subtotal               | decimal(10,2)        | NO    |       | 0.00
  cgst_amount            | decimal(10,2)        | NO    |       | 0.00
  sgst_amount            | decimal(10,2)        | NO    |       | 0.00
  tax_amount             | decimal(10,2)        | NO    |       | 0.00
  discount_amount        | decimal(10,2)        | NO    |       | 0.00
  grand_total            | decimal(10,2)        | NO    |       | 0.00
  paid_amount            | decimal(10,2)        | NO    |       | 0.00
  balance_due            | decimal(10,2)        | NO    |       | 0.00
  payment_status         | enum('paid','partial','unpaid') | NO    |       | paid
  payment_mode           | varchar(50)          | NO    |       | cash
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: lost_and_found ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  item_name              | varchar(150)         | NO    |       | NULL
  category               | varchar(50)          | NO    |       | Personal Belonging
  description            | text                 | YES   |       | NULL
  room_id                | int(10) unsigned     | YES   |       | NULL
  found_location         | varchar(150)         | YES   |       | NULL
  found_by               | varchar(100)         | NO    |       | NULL
  found_date             | date                 | NO    |       | NULL
  guest_name             | varchar(100)         | YES   |       | NULL
  claim_status           | enum('unclaimed','claimed','disposed') | NO    |       | unclaimed
  claimed_by             | varchar(100)         | YES   |       | NULL
  claimed_date           | date                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: luggage_stores ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  tag_number             | varchar(50)          | NO    | UNI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  guest_id               | int(11) unsigned     | YES   |       | NULL
  guest_name             | varchar(150)         | NO    |       | NULL
  guest_phone            | varchar(30)          | NO    |       | NULL
  room_number            | varchar(20)          | YES   |       | NULL
  bags_count             | int(11)              | NO    |       | 1
  luggage_type           | varchar(50)          | NO    |       | Suitcase
  storage_location       | varchar(100)         | NO    |       | Cloakroom
  status                 | enum('stored','collected','disposed') | NO    |       | stored
  stored_at              | datetime             | NO    |       | NULL
  stored_by_user_id      | int(11) unsigned     | NO    |       | NULL
  collected_at           | datetime             | YES   |       | NULL
  collected_by_user_id   | int(11) unsigned     | YES   |       | NULL
  remarks                | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: luggage_tokens ===
  id                     | int(11)              | NO    | PRI   | NULL
  token_number           | varchar(50)          | NO    |       | NULL
  room_id                | int(11)              | YES   |       | NULL
  guest_name             | varchar(100)         | NO    |       | NULL
  phone                  | varchar(20)          | YES   |       | NULL
  bags_count             | int(11)              | YES   |       | 1
  status                 | enum('stored','retrieved') | YES   |       | stored
  stored_at              | datetime             | YES   |       | current_timestamp()
  retrieved_at           | datetime             | YES   |       | NULL
  notes                  | varchar(255)         | YES   |       | NULL
  created_by             | int(11)              | YES   |       | NULL
  created_at             | datetime             | YES   |       | current_timestamp()
  updated_at             | datetime             | YES   |       | current_timestamp()

=== Table: maintenance_tickets ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  ticket_number          | varchar(50)          | NO    | UNI   | NULL
  category               | varchar(50)          | NO    |       | NULL
  room_id                | int(10) unsigned     | YES   |       | NULL
  location_detail        | varchar(150)         | YES   |       | NULL
  reported_by            | varchar(100)         | YES   |       | NULL
  assigned_technician    | varchar(100)         | YES   |       | NULL
  priority               | enum('low','medium','high','emergency') | NO    |       | medium
  status                 | enum('reported','in_progress','on_hold','completed') | NO    |       | reported
  estimated_cost         | decimal(10,2)        | NO    |       | 0.00
  actual_cost            | decimal(10,2)        | NO    |       | 0.00
  description            | text                 | NO    |       | NULL
  resolution_notes       | text                 | YES   |       | NULL
  resolved_at            | datetime             | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: menu_categories ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  description            | varchar(255)         | YES   |       | NULL
  icon                   | varchar(50)          | YES   |       | NULL
  status                 | varchar(20)          | NO    |       | active

=== Table: menu_items ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  category_id            | int(10) unsigned     | NO    |       | NULL
  name                   | varchar(150)         | NO    |       | NULL
  description            | text                 | YES   |       | NULL
  price                  | decimal(10,2)        | NO    |       | 0.00
  tax_rate               | decimal(5,2)         | NO    |       | 5.00
  type                   | enum('veg','non_veg') | NO    |       | veg
  is_available           | tinyint(1)           | NO    |       | 1
  image                  | varchar(255)         | YES   |       | NULL

=== Table: migrations ===
  id                     | bigint(20) unsigned  | NO    | PRI   | NULL
  version                | varchar(255)         | NO    |       | NULL
  class                  | varchar(255)         | NO    |       | NULL
  group                  | varchar(255)         | NO    |       | NULL
  namespace              | varchar(255)         | NO    |       | NULL
  time                   | int(11)              | NO    |       | NULL
  batch                  | int(11) unsigned     | NO    |       | NULL

=== Table: night_audits ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  audit_date             | date                 | NO    | UNI   | NULL
  total_rooms            | int(11)              | NO    |       | 0
  occupied_rooms         | int(11)              | NO    |       | 0
  vacant_rooms           | int(11)              | NO    |       | 0
  maintenance_rooms      | int(11)              | NO    |       | 0
  occupancy_percent      | decimal(5,2)         | NO    |       | 0.00
  room_revenue           | decimal(12,2)        | NO    |       | 0.00
  fb_revenue             | decimal(12,2)        | NO    |       | 0.00
  other_revenue          | decimal(12,2)        | NO    |       | 0.00
  total_revenue          | decimal(12,2)        | NO    |       | 0.00
  total_payments_received | decimal(12,2)        | NO    |       | 0.00
  total_paid_outs        | decimal(12,2)        | NO    |       | 0.00
  adr                    | decimal(10,2)        | NO    |       | 0.00
  revpar                 | decimal(10,2)        | NO    |       | 0.00
  no_shows_count         | int(11)              | NO    |       | 0
  departures_count       | int(11)              | NO    |       | 0
  arrivals_count         | int(11)              | NO    |       | 0
  audited_by_user_id     | int(11) unsigned     | YES   |       | NULL
  audited_by_user_name   | varchar(150)         | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: notifications ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  user_id                | int(10) unsigned     | YES   |       | NULL
  title                  | varchar(150)         | NO    |       | NULL
  message                | text                 | NO    |       | NULL
  link                   | varchar(255)         | YES   |       | NULL
  type                   | varchar(50)          | NO    |       | booking
  is_read                | tinyint(1)           | NO    |       | 0
  created_at             | datetime             | YES   |       | NULL

=== Table: order_items ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  order_id               | int(10) unsigned     | NO    |       | NULL
  menu_item_id           | int(10) unsigned     | NO    |       | NULL
  item_name              | varchar(150)         | NO    |       | NULL
  quantity               | int(11)              | NO    |       | 1
  unit_price             | decimal(10,2)        | NO    |       | 0.00
  total_price            | decimal(10,2)        | NO    |       | 0.00
  notes                  | varchar(255)         | YES   |       | NULL

=== Table: orders ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  order_number           | varchar(50)          | NO    | UNI   | NULL
  order_type             | enum('dine_in','room_service','takeaway','delivery') | NO    |       | dine_in
  table_id               | int(10) unsigned     | YES   |       | NULL
  booking_id             | int(10) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | YES   |       | NULL
  guest_name             | varchar(100)         | YES   |       | NULL
  order_status           | enum('pending','preparing','ready','served','billed','cancelled') | NO    |       | pending
  payment_status         | enum('pending','paid','transferred_to_room') | NO    |       | pending
  subtotal               | decimal(10,2)        | NO    |       | 0.00
  tax_amount             | decimal(10,2)        | NO    |       | 0.00
  total_amount           | decimal(10,2)        | NO    |       | 0.00
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: payments ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  invoice_id             | int(10) unsigned     | YES   |       | NULL
  booking_id             | int(10) unsigned     | YES   |       | NULL
  guest_id               | int(10) unsigned     | YES   |       | NULL
  amount                 | decimal(10,2)        | NO    |       | 0.00
  payment_method         | varchar(50)          | NO    |       | cash
  payment_status         | varchar(30)          | NO    |       | success
  transaction_id         | varchar(100)         | YES   |       | NULL
  payment_date           | datetime             | NO    |       | NULL
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: payrolls ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  payroll_month          | varchar(20)          | NO    |       | NULL
  employee_id            | int(10) unsigned     | NO    |       | NULL
  basic_salary           | decimal(10,2)        | NO    |       | 0.00
  allowances             | decimal(10,2)        | NO    |       | 0.00
  overtime_pay           | decimal(10,2)        | NO    |       | 0.00
  deductions             | decimal(10,2)        | NO    |       | 0.00
  net_salary             | decimal(10,2)        | NO    |       | 0.00
  payment_status         | enum('pending','paid') | NO    |       | paid
  payment_date           | date                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: permissions ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  name                   | varchar(150)         | NO    |       | NULL
  slug                   | varchar(150)         | NO    | UNI   | NULL
  module                 | varchar(100)         | NO    |       | NULL
  description            | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: reception_safe_deposits ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  deposit_number         | varchar(30)          | NO    | UNI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | NO    | MUL   | NULL
  guest_name             | varchar(150)         | NO    |       | NULL
  guest_phone            | varchar(25)          | YES   |       | NULL
  locker_number          | varchar(30)          | NO    |       | NULL
  seal_number            | varchar(50)          | YES   |       | NULL
  items_description      | text                 | NO    |       | NULL
  declared_value         | decimal(12,2)        | NO    |       | 0.00
  status                 | enum('deposited','retrieved') | NO    | MUL   | deposited
  deposited_at           | datetime             | NO    |       | NULL
  deposited_by_user_id   | int(11) unsigned     | YES   |       | NULL
  retrieved_at           | datetime             | YES   |       | NULL
  retrieved_by_user_id   | int(11) unsigned     | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: reception_shifts ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  shift_type             | enum('morning','evening','night') | NO    |       | morning
  opened_by_user_id      | int(10) unsigned     | NO    | MUL   | NULL
  opened_at              | datetime             | NO    | MUL   | NULL
  opening_float          | decimal(10,2)        | NO    |       | 0.00
  closed_by_user_id      | int(10) unsigned     | YES   |       | NULL
  closed_at              | datetime             | YES   |       | NULL
  handover_to_user_id    | int(10) unsigned     | YES   |       | NULL
  system_cash_collected  | decimal(10,2)        | NO    |       | 0.00
  system_upi_collected   | decimal(10,2)        | NO    |       | 0.00
  system_card_collected  | decimal(10,2)        | NO    |       | 0.00
  actual_cash_counted    | decimal(10,2)        | NO    |       | 0.00
  cash_variance          | decimal(10,2)        | NO    |       | 0.00
  denominations_json     | text                 | YES   |       | NULL
  handover_notes         | text                 | YES   |       | NULL
  status                 | enum('open','closed') | NO    | MUL   | open
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: restaurant_reservations ===
  id                     | int(11)              | NO    | PRI   | NULL
  table_id               | int(10) unsigned     | NO    | MUL   | NULL
  guest_name             | varchar(100)         | NO    |       | NULL
  guest_phone            | varchar(20)          | YES   |       | NULL
  guest_email            | varchar(100)         | YES   |       | NULL
  reservation_date       | date                 | NO    | MUL   | NULL
  reservation_time       | time                 | NO    |       | NULL
  end_time               | time                 | YES   |       | NULL
  guest_count            | int(11)              | YES   |       | 2
  special_requests       | text                 | YES   |       | NULL
  status                 | enum('confirmed','checked_in','completed','cancelled','no_show') | YES   | MUL   | confirmed
  notes                  | text                 | YES   |       | NULL
  created_by             | int(11)              | YES   |       | NULL
  created_at             | datetime             | YES   |       | current_timestamp()
  updated_at             | datetime             | YES   |       | current_timestamp()

=== Table: restaurant_tables ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  table_number           | varchar(20)          | NO    | UNI   | NULL
  capacity               | int(11)              | NO    |       | 4
  floor                  | varchar(50)          | NO    |       | Main Dining Hall
  status                 | enum('available','occupied','reserved') | NO    |       | available

=== Table: reviews ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | YES   |       | NULL
  guest_name             | varchar(100)         | NO    |       | NULL
  guest_email            | varchar(100)         | YES   |       | NULL
  rating                 | int(11)              | NO    |       | 5
  title                  | varchar(150)         | YES   |       | NULL
  comment                | text                 | NO    |       | NULL
  room_type              | varchar(100)         | YES   |       | NULL
  is_approved            | tinyint(1)           | NO    |       | 1
  created_at             | datetime             | YES   |       | NULL

=== Table: role_permissions ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  role_id                | int(11) unsigned     | NO    | MUL   | NULL
  permission_id          | int(11) unsigned     | NO    | MUL   | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: roles ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  slug                   | varchar(100)         | NO    | UNI   | NULL
  description            | text                 | YES   |       | NULL
  status                 | varchar(20)          | NO    |       | active
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: room_types ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  slug                   | varchar(100)         | NO    | UNI   | NULL
  description            | text                 | YES   |       | NULL
  base_price             | decimal(10,2)        | NO    |       | 2500.00
  weekend_price          | decimal(10,2)        | NO    |       | 3000.00
  extra_bed_price        | decimal(10,2)        | NO    |       | 800.00
  child_price            | decimal(10,2)        | NO    |       | 400.00
  capacity_adults        | int(11)              | NO    |       | 2
  capacity_children      | int(11)              | NO    |       | 1
  max_capacity           | int(11)              | NO    |       | 3
  bed_type               | varchar(50)          | NO    |       | Queen Bed
  size_sqft              | int(11)              | NO    |       | 320
  image                  | varchar(255)         | YES   |       | NULL
  amenities              | text                 | YES   |       | NULL
  status                 | enum('active','inactive') | NO    |       | active
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: rooms ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  room_number            | varchar(20)          | NO    | UNI   | NULL
  room_type_id           | int(10) unsigned     | NO    |       | NULL
  floor                  | varchar(20)          | NO    |       | 1st Floor
  status                 | enum('available','occupied','dirty','cleaning','maintenance','out_of_service','reserved','arrival','management','departure') | NO    | MUL   | available
  operational_status     | varchar(50)          | YES   |       | available
  housekeeping_status    | enum('clean','dirty','in_progress','inspected') | NO    |       | clean
  price_override         | decimal(10,2)        | YES   |       | NULL
  notes                  | text                 | YES   |       | NULL
  is_held                | tinyint(1)           | NO    | MUL   | 0
  hold_reason            | varchar(255)         | YES   |       | NULL
  hold_by                | varchar(100)         | YES   |       | NULL
  hold_at                | datetime             | YES   |       | NULL
  hold_cleared_by        | varchar(100)         | YES   |       | NULL
  hold_cleared_at        | datetime             | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: user_roles ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  user_id                | int(11) unsigned     | NO    | MUL   | NULL
  role_id                | int(11) unsigned     | NO    | MUL   | NULL
  created_at             | datetime             | YES   |       | NULL

=== Table: users ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  name                   | varchar(150)         | NO    |       | NULL
  email                  | varchar(150)         | NO    | UNI   | NULL
  password               | varchar(255)         | NO    |       | NULL
  role                   | varchar(50)          | NO    |       | receptionist
  phone                  | varchar(20)          | YES   |       | NULL
  status                 | varchar(20)          | NO    |       | active
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL

=== Table: vendors ===
  id                     | int(10) unsigned     | NO    | PRI   | NULL
  name                   | varchar(100)         | NO    |       | NULL
  company_name           | varchar(150)         | YES   |       | NULL
  phone                  | varchar(30)          | YES   |       | NULL
  email                  | varchar(100)         | YES   |       | NULL
  gstin                  | varchar(50)          | YES   |       | NULL
  address                | text                 | YES   |       | NULL
  products_supplied      | text                 | YES   |       | NULL
  outstanding_balance    | decimal(10,2)        | NO    |       | 0.00
  created_at             | datetime             | YES   |       | NULL

=== Table: wake_up_calls ===
  id                     | int(11) unsigned     | NO    | PRI   | NULL
  booking_id             | int(11) unsigned     | YES   |       | NULL
  room_number            | varchar(20)          | NO    | MUL   | NULL
  guest_name             | varchar(150)         | NO    |       | NULL
  guest_phone            | varchar(25)          | YES   |       | NULL
  call_date              | date                 | NO    | MUL   | NULL
  call_time              | time                 | NO    |       | NULL
  special_instructions   | varchar(255)         | YES   |       | NULL
  status                 | enum('pending','completed','snoozed','no_answer','cancelled') | NO    |       | pending
  snooze_until           | time                 | YES   |       | NULL
  completed_at           | datetime             | YES   |       | NULL
  created_by_user_id     | int(11) unsigned     | YES   |       | NULL
  created_at             | datetime             | YES   |       | NULL
  updated_at             | datetime             | YES   |       | NULL
