T
TOMO
Developer Docs
BETA These docs are under partner review. Some features described are roadmap items, not yet shipped. Verify against your sandbox before relying on any contract.
● DRAFTv1.0.0entertainment.book_party_hall

Intent Spec — entertainment.book_party_hall

FULL ID:       entertainment.book_party_hall
VERSION:       v1.0.0
STATUS:        draft
LAST UPDATED:  2026-05-12
DOMAIN:        entertainment
PRIMARY AGENT: EntertainmentAgent
TTBS WEIGHTS:  time=0.15 taste=0.35 budget=0.20 safety=0.30

User books a banquet hall, party venue, or celebration space for a private occasion — weddings, birthdays, anniversaries, engagements, baby showers, kitty parties. Distinct from entertainment.book_event_venue (corporate / artistic events) because vendor ecosystem, pricing model, and decor-heavy expectations differ significantly. Hotel banquets, kalyana mandapams (wedding halls), farmhouses, lawns.

Partner exemplars: VenueLook, WedMeGood, Shaadi.com venues, hotel banquet teams, independent kalyana mandapams, farmhouse listings (FarmHouseInn, etc.).


SECTION 1 — INTENT IDENTITY

User wants a venue for a private celebration. Distinct from:

  • entertainment.book_event_venue — corporate / artistic events; different facility/catering mix
  • food.book_catering_event — catering only (no venue)
  • food.book_chef_at_home — chef-at-home for small gatherings (no venue rental)

Single intent per booking. Mehendi + Sangeet + Wedding + Reception combos for the same family classify as multi-intent (one party_hall per function) OR as a single multi-day booking — partner decides based on contract pattern.


SECTION 2 — NATURAL LANGUAGE COVERAGE

CLASSIFIES IN

  • "Wedding hall for 300 guests"
  • "Birthday party venue for 50 kids"
  • "Anniversary celebration banquet"
  • "Engagement party venue in Madhapur"
  • "Reception hall with parking"
  • "Kalyana mandapam available on 22 June"
  • "Farmhouse for a 2-day function"
  • "Mehendi function venue Friday morning"
  • "Baby shower at a banquet"
  • "House warming function venue"

CLASSIFIES OUT — BORDERLINE NO

  • "Conference / product launch / corporate offsite" → entertainment.book_event_venue
  • "Wedding photographer / decorator only" → out of scope v1 (potential v1.1+ lifestyle.book_event_vendor)
  • "Catering only, host at home" → food.book_catering_event

MULTI-INTENT TRIGGERS

  • "Wedding venue + catering + photographer" → entertainment.book_party_hall + food.book_catering_event + v1.1+ event_vendor
  • "Birthday venue + cake order" → entertainment.book_party_hall + food.order_cake_or_special

SECTION 3 — INPUT (TOMO → PROVIDER)

{
  "intent": "entertainment.book_party_hall",
  "request_id": "req_01J9Z...",
  "user_location": { "lat": 17.4475, "lng": 78.3563, "max_radius_km": 30, "city": "Hyderabad" },
  "occasion": {
    "occasion_type": "wedding",                   // STRICT ENUM §6
    "expected_headcount": 250,
    "headcount_min": 200,
    "headcount_max": 320,
    "event_dates": ["2026-12-15"],                // array<ISO_DATE> for multi-day functions
    "time_slot": "evening",                       // STRICT ENUM §6
    "religious_format": "hindu_telugu",           // STRICT ENUM §6 nullable
    "muhurtam_window_required": false             // some Hindu weddings have a strict 1-hour muhurtam window
  },
  "venue_preferences": {
    "venue_categories": ["kalyana_mandapam", "banquet_hall", "lawn"],   // STRICT ENUM §6
    "indoor_outdoor": "either",
    "ac_required": true,
    "in_house_catering_required": true,
    "alcohol_serving_required": false,
    "decor_outside_allowed": true,
    "parking_for_vehicles_min": 80,
    "max_acceptable_cost_inr": 800000
  },
  "ttbs_user_band": { "time": "flexible", "taste": "great", "budget": "great", "safety": "great" },
  "session_context": { "tomo_session_id": "ses_01J9Z...", "user_dna_hash": "dna_v3_a7c9..." }
}
Field Type Constraint Notes
intent string REQUIRED, STRICT ENUM Always entertainment.book_party_hall
occasion.occasion_type enum REQUIRED, STRICT ENUM §6
occasion.expected_headcount int REQUIRED, 10-5000
occasion.event_dates array REQUIRED, ≥1, ISO_DATE Multi-day weddings common
occasion.time_slot enum REQUIRED, STRICT ENUM §6
occasion.religious_format enum | null REQUIRED nullable Drives ritual-space requirements (homa kund, mandap, etc.)
venue_preferences.venue_categories array REQUIRED, ≥1, STRICT ENUM §6
venue_preferences.in_house_catering_required bool REQUIRED Hindi/Tamil weddings often prefer in-house
venue_preferences.parking_for_vehicles_min int REQUIRED, 0-1000 Critical signal for venue choice

Anti-fabrication preamble: Capacity claims must match fire-NOC. Catering quality claims must match observable kitchen output. No fake "available on date" — venues book months ahead.


SECTION 4 — PROVIDER TOOLS

(4-tool pattern: search_party_halls / book_site_visit / confirm_hall_booking / cancel_hall_booking. Confirmation often manual at partner side; allow p99 up to 10s.)


SECTION 5 — RESPONSE SHAPE

PartyHall

PartyHall:
  hall_id: { type: string, constraint: REQUIRED }
  name: { type: string, constraint: REQUIRED }
  category: { type: enum, constraint: REQUIRED, STRICT ENUM §6 }
  address: { type: string, constraint: REQUIRED }
  location: { type: object, shape: { lat, lng }, constraint: REQUIRED }
  distance_from_user_km: { type: float, constraint: REQUIRED, 0-50 }

  capacity:
    seated: { type: int, constraint: REQUIRED, 10-5000 }
    standing: { type: int, constraint: REQUIRED, 10-10000 }
    fire_safety_cleared: { type: int, constraint: REQUIRED, 10-10000 }

  facilities:
    ac: { type: boolean, constraint: REQUIRED }
    stage: { type: boolean, constraint: REQUIRED }
    dance_floor: { type: boolean, constraint: REQUIRED }
    mandap_space: { type: boolean, constraint: REQUIRED }
    homa_kund_allowed: { type: boolean, constraint: REQUIRED }
    bridal_room: { type: boolean, constraint: REQUIRED }
    parking_capacity: { type: int, constraint: REQUIRED, 0-1000 }
    valet_service: { type: boolean, constraint: REQUIRED }
    elevator: { type: boolean, constraint: REQUIRED }
    generator_backup: { type: boolean, constraint: REQUIRED }

  catering:
    in_house_catering: { type: boolean, constraint: REQUIRED }
    cuisines_supported:
      type: array<enum>
      constraint: REQUIRED, may be empty
      values: [hyderabadi, andhra_telangana, south_indian, north_indian, punjabi, gujarati, marwari, bengali, jain, chinese, continental, mughlai, biryani, pure_veg]
    per_plate_inr_range_veg:
      low: { type: int, constraint: REQUIRED nullable, INR_INTEGER }
      high: { type: int, constraint: REQUIRED nullable, INR_INTEGER }
    per_plate_inr_range_nonveg:
      low: { type: int, constraint: REQUIRED nullable, INR_INTEGER }
      high: { type: int, constraint: REQUIRED nullable, INR_INTEGER }
    external_caterer_allowed: { type: boolean, constraint: REQUIRED }
    external_caterer_fee_inr: { type: int, constraint: REQUIRED, INR_INTEGER, ≥0 }

  alcohol:
    alcohol_allowed: { type: boolean, constraint: REQUIRED }
    in_house_bar: { type: boolean, constraint: REQUIRED }
    bar_license_on_file: { type: boolean, constraint: REQUIRED }
    byob_allowed: { type: boolean, constraint: REQUIRED }

  decor:
    decor_outside_allowed: { type: boolean, constraint: REQUIRED }
    preferred_decorator_partners: { type: array<string>, constraint: REQUIRED, may be empty }
    flower_decor_per_plate_inr: { type: int, constraint: REQUIRED nullable, INR_INTEGER, ≥0 }

  pricing:
    base_rental_inr_per_session: { type: int, constraint: REQUIRED, INR_INTEGER, ≥0 }
    session_definition_hours: { type: int, constraint: REQUIRED, 4-12 }
    additional_hour_inr: { type: int, constraint: REQUIRED, INR_INTEGER, ≥0 }
    peak_season_premium_pct: { type: int, constraint: REQUIRED, 0-100 }
    estimated_total_inr_for_dates: { type: int, constraint: REQUIRED, INR_INTEGER }
    advance_payment_pct: { type: int, constraint: REQUIRED, 0-100 }
    gst_inr: { type: int, constraint: REQUIRED, INR_INTEGER, ≥0 }

  availability:
    available_on_dates: { type: boolean, constraint: REQUIRED }
    blocked_dates_in_window: { type: array<string>, constraint: REQUIRED, ISO_DATE }
    next_available_date: { type: string, constraint: REQUIRED nullable, ISO_DATE }

  accessibility:
    wheelchair_accessible: { type: boolean, constraint: REQUIRED }
    accessible_restrooms: { type: boolean, constraint: REQUIRED }
    elderly_friendly: { type: boolean, constraint: REQUIRED, semantics: "seating, AC, no-stairs path" }

  ratings:
    avg_rating: { type: float, constraint: REQUIRED, 0-5 }
    review_count: { type: int, constraint: REQUIRED, ≥0 }
    customer_complaint_rate_pct: { type: int, constraint: REQUIRED, 0-100, semantics: "post-event complaints last 12 months" }

  policies:
    cancellation_cutoff_days: { type: int, constraint: REQUIRED, ≥0 }
    cancellation_refund_pct: { type: int, constraint: REQUIRED, 0-100 }
    fire_noc_url: { type: string, constraint: REQUIRED, HTTPS URL }

  gallery_url: { type: string, constraint: REQUIRED, HTTPS URL }
  partner_reference:
    source: { type: string, constraint: REQUIRED }
    deeplink: { type: string, constraint: REQUIRED, HTTPS URL }

SiteVisitBooking, HallBooking, CancellationResult — straightforward.

FORBIDDEN FIELDS

Standard set + fake_availability (claiming dates available when they aren't) + fake_fire_noc + inflated_capacity + padded_per_plate_pricing (in-house catering charges that exceed visible kitchen output).


SECTION 6 — CONTROLLED VOCABULARIES

occasion.occasion_type:
  values: { wedding, reception, engagement, sangeet, mehendi, haldi, baby_shower, naming_ceremony, birthday, milestone_birthday, anniversary, retirement_party, house_warming, kitty_party, religious_function }

occasion.time_slot: { values: { morning, afternoon, evening, full_day, multi_day } }

occasion.religious_format:
  values: { hindu_telugu, hindu_tamil, hindu_marwari, hindu_punjabi, hindu_marathi, hindu_bengali, muslim_nikah, sikh_anand_karaj, christian_catholic, christian_protestant, buddhist, jain, secular, regional_other }

venue_preferences.venue_categories / category:
  values: { kalyana_mandapam, banquet_hall, hotel_banquet, lawn, farmhouse, club, garden_venue, rooftop, heritage_haveli, beach_venue }

catering.cuisines_supported:
  values: { hyderabadi, andhra_telangana, south_indian, north_indian, punjabi, gujarati, marwari, bengali, jain, chinese, continental, mughlai, biryani, pure_veg }

indoor_outdoor: { values: { indoor, outdoor, either } }

SECTION 7 — TTBS DIMENSIONS

TIME (weight = 0.15):
  signals_used: [distance, available_on_dates]

TASTE (weight = 0.35):
  signals_used:
    - category match (kalyana_mandapam vs hotel_banquet are tribally different audiences)
    - religious_format support (mandap_space + homa_kund_allowed for Hindu)
    - catering.cuisines_supported matching cultural fit
    - DNA history
  weighting:
    category: 0.35
    religious_fit: 0.30
    cuisine_fit: 0.25
    dna: 0.10

BUDGET (weight = 0.20):
  signals_used:
    - pricing.estimated_total_inr_for_dates within max_acceptable_cost_inr
    - per_plate_inr for chosen veg/nonveg mix

SAFETY (weight = 0.30):
  signals_used:
    - fire_safety_cleared ≥ headcount (MANDATORY floor)
    - fire_noc_url present
    - accessibility.elderly_friendly (weddings have many elderly attendees)
    - parking_capacity ≥ user min (chaos prevention)
    - ratings.customer_complaint_rate_pct (lower = better)
    - bar_license_on_file (when alcohol_serving_required=true)
  weighting:
    fire: 0.30
    accessibility_elderly: 0.20
    parking: 0.20
    complaint_rate: 0.15
    bar_license: 0.15

SECTION 8 — COMPLETION CONTRACT

POST /api/v1/cpc/mcp_provider/<your_partner_id>
Body:
{
  "intent":           "entertainment.book_party_hall",
  "external_id":      "<booking_id>",
  "request_id":       "<request_id>",
  "amount_inr":       420000,
  "gst_inr":          75600,
  "tips_inr":         0,
  "pass_through_inr": 12000,    // govt licence renewals / alcohol licence fees
  "closed_at":        "2026-12-15T23:00:00+05:30",
  "status":           "completed",
  "occasion_type":    "wedding",
  "actual_headcount": 268,
  "category":         "kalyana_mandapam"
}

HMAC, 5-min replay, NET-only commission.


SECTION 9 — WIDGET

PartyHallWidget (planned). Field mapping: name + category → header; capacity vs declared headcount + parking_capacity → "Fits X · Parks Y" badge; pricing.estimated_total → big price; cuisines chips; religious_format-fit indicator (e.g. green "Telugu Hindu mandap-ready" pill when match); gallery.


SECTION 10 — CACHING POLICY

Call TTL
search_party_halls 5min
book_site_visit NO CACHE
confirm_hall_booking NO CACHE
cancel_hall_booking NO CACHE
Hall static 12h

SECTION 11 — ERROR CODES

(Standard + DATE_UNAVAILABLE, CAPACITY_EXCEEDED, MUHURTAM_WINDOW_CONFLICT when muhurtam_window_required + slot unavailable.)


SECTION 12 — SANDBOX → PRODUCTION CHECKLIST

[ ] All four tools implemented
[ ] fire_noc_url valid; capacity within NOC
[ ] gallery_url contains real wedding/event photos
[ ] per_plate ranges honest (sample audit against past catering output)
[ ] HMAC + amount_inr=NET; alcohol licence pass-through correct
[ ] Compliance: GSTIN, venue trade license, fire NOC, alcohol licence when applicable, food licence (FSSAI) for in-house catering, privacy policy

SECTION 13 — ANTI-FABRICATION RULES

RULE 1: No paid_placement / ad / kickback.

RULE 2: fire_safety_cleared MUST match NOC. Crowd safety is non-negotiable.

RULE 3: in_house_catering claims with per_plate_inr_range must match actual
        kitchen output. Padding plate prices to inflate commission = customer
        harm + suspension.

RULE 4: religious_format support (mandap, homa_kund_allowed) must be physically
        present. Misclaiming = wedding ruined = suspension + ratings collapse.

RULE 5: available_on_dates must reflect REAL availability. Saying "available"
        and revealing conflicts at site visit = customer harm = suspension.

RULE 6: AI-generated wedding photography forbidden. Real customer event photos
        only (with attendee permission for gallery use).

RULE 7: alcohol_allowed=true with bar_license_on_file=false is misleading.
        Legal exposure for both partner and venue.

RULE 8: customer_complaint_rate_pct must be honest. TOMO will independently
        track via post-event surveys.

RULE 9: No "Top Pick" / "TOMO Recommended" badges.

RULE 10: peak_season_premium_pct must be disclosed at quote time, not surprise.

RULE 11: amount_inr in CPC is NET; pass alcohol licence + govt fees through
         pass_through_inr.

RULE 12: muhurtam_window_required=true bookings must guarantee venue access
         in the stated 1-hour window. Late venue handover during muhurtam =
         religious harm + suspension trigger.

VERSION HISTORY

v1.0.0 — 2026-05-12 — Initial spec. NET commission base. Safety-floor on fire
                       capacity + religious_format integrity + muhurtam window.
                       Wedding-stakes anti-fabrication rules.