07 — Suite & Section Mapping
What it is: Venue master data — how sections are configured for display, how suites are defined, and how partial suite sales work. None of this is per-event; it's defined once and applies to all events at the venue.
Section config
tbl_section_config
Optional overrides per section. All fields except PK are nullable.
| Field | Notes |
|---|---|
sectionName | PK — the vendor section name |
displayName | what the fan sees instead of the vendor name |
internalMapSectionName | ID used to fetch the interior view from the map vendor |
externalMapSectionName | ID used to fetch the exterior view |
- No FK to
tbl_sections— seats/sections are hard-deleted and rebuilt on each inventory refresh; config must survive that. - Auto-populated during inventory build (ON CONFLICT DO NOTHING) — admin customizations are never overwritten.
- TM: section name = display name (nothing to do). Tickets.com: section name is an ID, so display name must be extracted.
Suite types
tbl_suite_types
A thin category above suites — title + description + content blocks. Built for the Premium UI; its main job is filter-by-suite-type.
| Field | Notes |
|---|---|
suiteTypeName | internal name |
displayName | card title fan sees |
shortDescription | one-liner for carousel cards |
description | full marketing paragraph for detail page |
content | JSONB — amenities, offerings (structured EntityContent) |
displayOrder | controls sort order |
Images managed via tbl_asset_entity_mapping with entityCode = 'suite_type'.
Suites
tbl_suites
Real seats grouped to sell as one block. Event-agnostic — same suite definition across all events.
| Field | Notes |
|---|---|
totalSeatCount | team-provided, must match actual seat mapping count (app validates) |
allowPartialSale | can this suite be split? |
partialSaleMode | null, count_based, or block_based |
internalMapSuiteName | map vendor ID for interior view |
externalMapSuiteName | map vendor ID for exterior view |
suiteTypeId | optional FK to suite type |
Map integration note: if suite-level map names are set, tbl_section_config map fields are not needed for this suite — suite-level takes precedence.
tbl_suite_seat_mapping
Which seats make up the suite (section + row + seat number). Three composition patterns are all stored the same way:
- Entire section(s)
- Entire row(s)
- Individual seats (non-contiguous is fine)
No FK to tbl_seats — same reason as section config (inventory rebuild hard-deletes seats). Availability is checked at query time by JOINing with tbl_seats using the event's eventCode.
tbl_suite_overflow_seat_mapping
Additional seats (same shape as tbl_suite_seat_mapping) that a suite buyer can optionally add. Backs the overflow add-on. These are NOT joined against tbl_seats — overflow inventory is opaque and determined by the vendor at hold time.
TM Host note: seats within a single
(sectionName, rowName)must be contiguous for TM Host. Archtics has no contiguity requirement.
Partial sale tables
Count-based (partialSaleMode = 'count_based')
tbl_suite_partial_counts — one row per allowed quantity.
Suite: 20 seats
partialCount: 4 → can buy 4
partialCount: 10 → can buy 10
partialCount: 20 → can buy all 20
The application/vendor decides which specific seats. If 20 is not in the list, the full suite is hidden.
Block-based (partialSaleMode = 'block_based')
Defined but effectively unused in practice — too much configuration work.
tbl_suite_partial_blocks — named blocks (e.g. "Front Row", "Bar Area").
tbl_suite_partial_block_seats — explicit seat assignments per block. Blocks can overlap (same seat in multiple blocks); app handles conflict resolution.
Key rules
allowPartialSale = false→partialSaleModemust be nullallowPartialSale = true→partialSaleModemust becount_based(the admin create/update API rejectsblock_based; the block-based tables exist but aren't wired into validation)- When partials are on, the full suite is hidden unless you add a partial equal to full size
- Suite tables survive inventory rebuilds — they're venue master data, not inventory data
totalSeatCountis declared, not auto-calculated — app validates it matches the actual seat mapping count