#5CRSE Application Data Model (Optimized)
This document provides a comprehensive overview of the 5CRSE application's data model, including all collections, their relationships, and the role-based access control system. The model has been optimized for performance, consistency, and improved frontend experience.
#Entity Relationship Diagram
Optimization Note: The model includes denormalized fields and computed properties to reduce join operations and improve query performance.
erDiagram
Users ||--o{ Bookings : makes
Users ||--o{ DiningReservations : makes
Users ||--o{ Payments : processes
Users ||--o{ Events : creates
Users }|--|| UserRoles : has
Users ||--o{ AgentAssignments : assigned_as_agent
Users ||--o{ AgentAvailability : sets_availability
Users ||--o{ AmbassadorPayments : receives_payment
Users ||--o{ AmbassadorTips : receives_tips
Users ||--o{ AmbassadorCommissions : receives_commission
Users }|--o| AmbassadorTaxInfo : has_tax_info
Users }|--o{ PaymentAuditTrail : has_audit_trail
Events ||--o{ Bookings : booked_for
Events }o--o{ Categories : categorized_by
Events }o--o| Venues : hosted_at
Bookings ||--o{ Payments : has
Bookings ||--o| Vehicles : includes
Bookings ||--o| DiningReservations : includes
Bookings ||--o| AgentAssignments : has
Bookings }o--o| Users : assigned_ambassador
Bookings ||--o{ AmbassadorTips : has_tips
Bookings ||--o{ PaymentAuditTrail : has_audit_trail
Bookings }o--o| ArchivedPayments : has_archived_payments
Payments ||--o{ PaymentAuditTrail : has_audit_trail
Payments ||--o{ PaymentAllocation : has_allocations
Payments }o--o| ArchivedPayments : archived_as
Venues ||--o{ Events : hosts
Venues ||--o{ DiningReservations : hosts
Dining ||--o{ DiningTables : has
Dining ||--o{ DiningReservations : hosts
DiningTables }o--o{ DiningReservations : assigned_to
Vehicles ||--o{ AgentAssignments : assigned_to
Media }o--o{ Events : used_in
Media }o--o{ Venues : used_in
Media }o--o{ Dining : used_in
Media }o--o{ Vehicles : used_in
Media }o--o{ Users : profile_image
AIInteractions }o--|| Users : interacts_with
Pages }o--o{ Categories : categorized_by
Posts }o--o{ Categories : categorized_by
Posts }o--o{ Users : authored_by
Forms ||--o{ Bookings : submitted_for
#Collections and Their Fields
Optimization Note: Collections include standardized status fields, denormalized data for common queries, and indexes for frequently accessed fields.
#Users
classDiagram
class Users {
+String email
+String password
+String name
+String user_unique_id
+Relationship user_role
+String mobile
+Relationship profile_img
+Boolean isAdmin
+Object computed_stats
+Array recent_bookings
+Date createdAt
+Date updatedAt
<<index>> email
<<index>> user_role
<<index>> user_unique_id
}
class ComputedStats {
+Number total_bookings
+Number total_spent
+Date last_booking_date
+Number loyalty_points
}
#UserRoles
classDiagram
class UserRoles {
+String user_role_name
+String description
+Boolean isSystem
+Object permissions
+Date createdAt
+Date updatedAt
<<index>> user_role_name
}
class Permissions {
<<enumeration>>
create_users
read_users
update_users
delete_users
manage_users
create_events
read_events
update_events
delete_events
manage_events
create_bookings
read_bookings
update_bookings
delete_bookings
manage_bookings
create_payments
read_payments
update_payments
delete_payments
manage_payments
process_payments
create_vehicles
read_vehicles
update_vehicles
delete_vehicles
manage_vehicles
create_venues
read_venues
update_venues
delete_venues
manage_venues
create_dining
read_dining
update_dining
delete_dining
manage_dining
create_media
read_media
update_media
delete_media
manage_media
create_posts
read_posts
update_posts
delete_posts
manage_posts
create_pages
read_pages
update_pages
delete_pages
manage_pages
create_user-roles
read_user-roles
update_user-roles
delete_user-roles
manage_user-roles
create_agent-assignments
read_agent-assignments
update_agent-assignments
delete_agent-assignments
manage_agent-assignments
create_agent-availability
read_agent-availability
update_agent-availability
delete_agent-availability
manage_agent-availability
create_system-settings
read_system-settings
update_system-settings
delete_system-settings
manage_system-settings
}
#Events
classDiagram
class Events {
+String event_name
+Date event_date
+Number event_price
+RichText description
+Boolean isCustomEvent
+Relationship creator
+Relationship venue
+Group location
+Array images
+String status
+String ticketmaster_id
+Number capacity
+Number tickets_sold
+Number tickets_available
+Relationship categories
+Object venue_details
+Array category_names
+Boolean is_featured
+Date createdAt
+Date updatedAt
+Array versions
<<index>> event_date
<<index>> status
<<index>> categories
<<index>> venue
<<index>> [status, event_date]
<<index>> [location.city]
<<fulltext>> event_name, description
}
class EventStatus {
<<enumeration>>
draft
published
archived
}
class VenueDetailsGroup {
+String venue_name
+String venue_city
+String venue_address
}
class LocationGroup {
+String venue
+String address
+String city
+String state
+String zip
+String country
}
#Bookings
classDiagram
class Bookings {
+String booking_reference
+Relationship user
+Relationship event
+Date booking_date
+Number total_amount [>= 0]
+Number number_of_tickets [>= 1]
+String status
+Relationship vehicle
+Group dining_reservation
+Object event_details
+Object user_details
+Object vehicle_details
+Boolean has_dining
+Boolean has_vehicle
+Relationship ambassador
+Boolean has_ambassador
+Relationship ambassador_tip
+Date createdAt
+Date updatedAt
+Array status_history
+Relationship created_by
+Array audit_trail
<<index>> booking_reference
<<index>> user
<<index>> event
<<index>> status
<<index>> booking_date
<<index>> [user, status]
<<index>> ambassador
<<index>> [ambassador, status]
<<index>> [event, ambassador]
}
class BookingStatus {
<<enumeration>>
pending
confirmed
cancelled
refunded
}
class EventDetailsGroup {
+String event_name
+Date event_date
+String venue_name
}
class UserDetailsGroup {
+String name
+String email
+String mobile
}
class VehicleDetailsGroup {
+String vehicle_name
+String vehicle_number
}
class StatusHistoryItem {
+String status
+Date timestamp
+String changed_by
+String notes
}
class DiningReservationGroup {
+String opentable_reservation_id
+String opentable_restaurant_id
+String reservation_date
+String reservation_time
+String status
}
#Payments
classDiagram
class Payments {
+Relationship booking
+String payment_provider
+String transaction_id
+Number amount [>= 0]
+String status
+String payment_method
+Date payment_date
+String currency
+Group refund_details
+Object booking_details
+Object user_details
+Relationship ambassador
+String payment_type
+Relationship ambassador_tip
+Relationship ambassador_commission
+Date createdAt
+Date updatedAt
+Relationship created_by
+Array audit_trail
<<index>> booking
<<index>> transaction_id
<<index>> status
<<index>> payment_date
<<index>> [booking, status]
<<index>> ambassador
<<index>> payment_type
<<index>> [payment_type, ambassador]
<<index>> [payment_date, payment_type]
}
class PaymentProvider {
<<enumeration>>
stripe
square
}
class PaymentStatus {
<<enumeration>>
pending
completed
failed
refunded
partially_refunded
}
class PaymentType {
<<enumeration>>
booking_payment
ambassador_commission
ambassador_tip
ambassador_base_payment
refund
service_fee
tax_withholding
}
class AuditTrailEntry {
+String action
+Object before_state
+Object after_state
+Relationship user
+Date timestamp
+String ip_address
+String notes
}
class BookingDetailsGroup {
+String booking_reference
+String event_name
+Date event_date
}
class UserDetailsGroup {
+String name
+String email
}
class RefundDetailsGroup {
+Boolean refunded
+Number refund_amount
+String refund_reason
+String refund_transaction_id
+Date refund_date
}
#Vehicles
classDiagram
class Vehicles {
+String vehicle_name
+String vehicle_model
+Number vehicle_price
+String status
+String vehicle_number
+Array images
+Boolean is_available
+Number current_assignments_count
+Array upcoming_assignments
+Date createdAt
+Date updatedAt
<<index>> status
<<index>> vehicle_number
}
class VehicleStatus {
<<enumeration>>
active
inactive
maintenance
}
#Venues
classDiagram
class Venues {
+String name
+String type
+String venueCategory
+RichText description
+Group location
+Array images
+String status
+Group eventVenueDetails
+Number upcoming_events_count
+Array upcoming_events
+Boolean has_availability
+Date createdAt
+Date updatedAt
<<index>> type
<<index>> status
<<index>> venueCategory
<<index>> [location.city]
<<fulltext>> name, description
}
class VenueType {
<<enumeration>>
event
restaurant
both
}
class VenueStatus {
<<enumeration>>
active
inactive
temporarily_closed
}
class LocationGroup {
+String address
+String city
+String state
+String zip
+String country
+String latitude
+String longitude
}
class EventVenueDetailsGroup {
+String ticketmasterId
+Number capacity
+Array seatingOptions
+Relationship seatingMap
+Array amenities
+Array accessibility
}
#Dining
classDiagram
class Dining {
+String dining_name
+Number dining_price
+RichText description
+Group location
+Array images
+String status
+Number tables_available
+Group opening_hours
+Number current_reservations_count
+Array available_time_slots
+Date createdAt
+Date updatedAt
<<index>> status
<<index>> [location.city]
<<fulltext>> dining_name, description
}
class DiningStatus {
<<enumeration>>
active
inactive
temporarily_closed
}
class LocationGroup {
+String city
+String address
+String state
+String zip_code
}
class OpeningHoursGroup {
+Group monday
+Group tuesday
+Group wednesday
+Group thursday
+Group friday
+Group saturday
+Group sunday
}
class DayHoursGroup {
+Boolean is_open
+String open_time
+String close_time
}
#DiningTables
classDiagram
class DiningTables {
+String table_name
+Number capacity
+Boolean is_available
+Relationship dining
+String table_number
+String location
+String notes
+Date createdAt
+Date updatedAt
}
class TableLocation {
<<enumeration>>
indoor
outdoor
bar
private
}
#DiningReservations
classDiagram
class DiningReservations {
+String reservation_reference
+Relationship user
+Relationship venue
+Date reservation_date
+Number party_size
+Group table_assignment
+String status
+String special_occasions
+Array dietary_restrictions
+String special_requests
+Array menu_preorder
+Group contact_information
+Group payment
+Relationship related_event
+String opentable_id
+Date createdAt
+Date updatedAt
}
class ReservationStatus {
<<enumeration>>
pending
confirmed
seated
completed
cancelled
no_show
}
class TableAssignmentGroup {
+String table_number
+String table_section
+String special_requests
}
class TableSection {
<<enumeration>>
main
bar
outdoor
private
vip
}
class ContactInformationGroup {
+String phone
+String email
}
class PaymentGroup {
+Boolean deposit_required
+Number deposit_amount
+Boolean deposit_paid
+String payment_method
+String transaction_id
}
#AgentAssignments
classDiagram
class AgentAssignments {
+String assignment_reference
+Relationship agent
+Relationship booking
+Relationship vehicle
+Date assignment_date
+String status
+Group pickup_details
+Group dropoff_details
+String notes
+Date createdAt
+Date updatedAt
}
class AssignmentStatus {
<<enumeration>>
pending
confirmed
in_progress
completed
cancelled
}
class PickupDetailsGroup {
+String location
+Date time
+String instructions
}
class DropoffDetailsGroup {
+String location
+Date time
+String instructions
}
#AgentAvailability
classDiagram
class AgentAvailability {
+String availability_reference
+Relationship agent
+Date date
+Array time_slots
+String status
+String notes
+Date createdAt
+Date updatedAt
}
class AvailabilityStatus {
<<enumeration>>
available
unavailable
partial
}
class TimeSlotGroup {
+String start_time
+String end_time
+Boolean is_available
}
#AIInteractions
classDiagram
class AIInteractions {
+String sessionId
+String agentType
+Array messages
+Array toolCalls
+Object sentiment
+String userFeedback
+Date createdAt
+Date updatedAt
}
class AgentType {
<<enumeration>>
customer_service
business_manager
}
class MessageGroup {
+String role
+String content
+Date timestamp
}
class ToolCallGroup {
+String toolId
+Object args
+Object result
+Date timestamp
}
class SentimentGroup {
+Number score
+String label
+Object emotions
}
#Media
classDiagram
class Media {
+String alt
+String filename
+String mimeType
+Number filesize
+Number width
+Number height
+String url
+Date createdAt
+Date updatedAt
}
#Categories
classDiagram
class Categories {
+String title
+String slug
+Date createdAt
+Date updatedAt
}
#Pages
classDiagram
class Pages {
+String title
+String slug
+RichText content
+Group meta
+Date createdAt
+Date updatedAt
}
class MetaGroup {
+String title
+String description
+Relationship image
}
#Posts
classDiagram
class Posts {
+String title
+String slug
+RichText content
+Group meta
+Date publishedAt
+Relationship categories
+Relationship authors
+Array populatedAuthors
+Date createdAt
+Date updatedAt
}
class MetaGroup {
+String title
+String description
+Relationship image
}
class PopulatedAuthorGroup {
+String id
+String name
}
#Forms
classDiagram
class Forms {
+String title
+String slug
+Array fields
+String submitButtonLabel
+String confirmationMessage
+String notificationEmail
+Date createdAt
+Date updatedAt
}
class FormFieldGroup {
+String name
+String label
+String type
+Boolean required
+String placeholder
+String defaultValue
+Array options
}
class FormFieldType {
<<enumeration>>
text
email
number
textarea
select
checkbox
radio
date
}
#Backend Services and Functions
Optimization Note: The backend includes specialized services and functions to support common frontend operations and reduce query complexity.
flowchart TD
subgraph Frontend
NextApp[Next.js App]
AdminUI[Admin UI]
ClientUI[Client UI]
end
subgraph Backend
PayloadCMS[Payload CMS]
subgraph Services
OpenTableService[OpenTable Service]
DiningService[Dining Service]
AIService[AI Service]
PaymentService[Payment Service]
BookingService[Booking Service]
EventService[Event Service]
SearchService[Search Service]
RecommendationService[Recommendation Service]
AuditService[Audit Service]
end
subgraph SmartEndpoints
FilteredEvents[/getFilteredEvents/]
EventAvailability[/checkEventAvailability/]
UserDashboard[/getUserDashboardData/]
VehicleAvailability[/checkVehicleAvailability/]
DiningAvailability[/checkDiningAvailability/]
BookingPackage[/createBookingPackage/]
PersonalizedRecommendations[/getPersonalizedRecommendations/]
end
subgraph Database
PostgreSQL[(PostgreSQL)]
Cache[(Redis Cache)]
SearchIndex[(Search Index)]
end
end
subgraph ExternalAPIs
OpenTableAPI[OpenTable API]
TicketmasterAPI[Ticketmaster API]
StripeAPI[Stripe API]
SquareAPI[Square API]
HumeAI[Hume AI]
OpenAI[OpenAI]
Anthropic[Anthropic]
end
NextApp --> PayloadCMS
AdminUI --> PayloadCMS
ClientUI --> PayloadCMS
ClientUI --> SmartEndpoints
PayloadCMS --> Services
Services --> PostgreSQL
Services --> Cache
SearchService --> SearchIndex
SmartEndpoints --> Services
OpenTableService --> OpenTableAPI
EventService --> TicketmasterAPI
PaymentService --> StripeAPI
PaymentService --> SquareAPI
AIService --> HumeAI
AIService --> OpenAI
AIService --> Anthropic
#Role-Based Access Control
flowchart TD
subgraph Roles
Admin[Admin]
Customer[Customer]
AgentDriver[Agent/Driver]
ContentManager[Content Manager]
EventManager[Event Manager]
end
subgraph Resources
Users[Users]
Events[Events]
Bookings[Bookings]
Payments[Payments]
Vehicles[Vehicles]
Venues[Venues]
Dining[Dining]
Media[Media]
Posts[Posts]
Pages[Pages]
UserRoles[User Roles]
AgentAssignments[Agent Assignments]
AgentAvailability[Agent Availability]
SystemSettings[System Settings]
end
subgraph Actions
Create[Create]
Read[Read]
Update[Update]
Delete[Delete]
Publish[Publish]
Unpublish[Unpublish]
Manage[Manage]
end
Admin --> Resources
Admin --> Actions
Customer --> Read
Customer -- own --> Bookings
Customer -- own --> Payments
Customer -- own --> DiningReservations
AgentDriver --> Read
AgentDriver -- own --> AgentAssignments
AgentDriver -- own --> AgentAvailability
ContentManager --> Media
ContentManager --> Posts
ContentManager --> Pages
EventManager --> Events
EventManager --> Venues
EventManager --> Bookings
#Data Flow for Key Processes
#Booking Process
sequenceDiagram
actor User
participant Frontend
participant BookingService
participant EventService
participant PaymentService
participant OpenTableService
participant Database
participant Cache
participant AuditService
User->>Frontend: Select Event
Frontend->>EventService: Check Availability
EventService->>Cache: Check Cached Availability
alt Cache Hit
Cache-->>EventService: Cached Availability
else Cache Miss
EventService->>Database: Query Event
Database-->>EventService: Event Details
EventService->>Cache: Store in Cache
end
EventService-->>Frontend: Available Tickets
User->>Frontend: Add Vehicle (Optional)
Frontend->>BookingService: checkPackageAvailability()
BookingService->>Database: Query Available Vehicles
Database-->>BookingService: Available Vehicles
BookingService-->>Frontend: Vehicle Options
User->>Frontend: Add Dining (Optional)
Frontend->>OpenTableService: Check Restaurant Availability
OpenTableService->>Database: Query Venues/Dining
Database-->>OpenTableService: Available Options
OpenTableService-->>Frontend: Dining Options
User->>Frontend: Complete Booking
Frontend->>BookingService: createBookingPackage()
BookingService->>PaymentService: Process Payment
PaymentService->>Database: Create Payment Record
Database-->>PaymentService: Payment Confirmation
BookingService->>Database: Save Booking with Denormalized Data
alt Dining Selected
BookingService->>OpenTableService: Book Table
OpenTableService->>Database: Create Dining Reservation
end
BookingService->>Database: Update Event Tickets Sold
BookingService->>AuditService: Log Booking Creation
BookingService->>Cache: Invalidate Affected Caches
BookingService-->>Frontend: Booking Confirmation
Frontend->>RecommendationService: Get Related Recommendations
RecommendationService-->>Frontend: Personalized Recommendations
Frontend-->>User: Confirmation Details & Recommendations
#AI Assistant Interaction
sequenceDiagram
actor User
participant Frontend
participant AIService
participant HumeAI
participant ToolExecutor
participant Database
User->>Frontend: Ask Question
Frontend->>AIService: Process Input
AIService->>HumeAI: Send Request
HumeAI-->>AIService: Response with Tool Calls
alt Tool Call Required
AIService->>ToolExecutor: Execute Tool
ToolExecutor->>Database: Query/Update Data
Database-->>ToolExecutor: Result
ToolExecutor-->>AIService: Tool Result
AIService->>HumeAI: Continue with Tool Result
HumeAI-->>AIService: Final Response
end
AIService->>Database: Log Interaction
AIService-->>Frontend: AI Response
Frontend-->>User: Display Response
#Ambassador Payments and Tips
classDiagram
class AmbassadorPayments {
+String payment_reference
+Relationship ambassador
+Relationship event
+Array bookings
+Number base_payment [>= 0]
+Relationship commission
+Array tips
+Number total_amount [>= 0]
+String status
+Date payment_date
+String payment_method
+String transaction_id
+String notes
+Boolean requires_1099
+Boolean tax_withheld
+Number tax_withholding_amount [>= 0]
+Date createdAt
+Date updatedAt
+Relationship created_by
+Array audit_trail
<<index>> ambassador
<<index>> event
<<index>> payment_date
<<index>> status
<<index>> [ambassador, event]
<<index>> [ambassador, status]
<<index>> [ambassador, payment_date]
<<index>> transaction_id
}
class AmbassadorPaymentStatus {
<<enumeration>>
pending
processing
completed
failed
cancelled
partially_paid
}
class AmbassadorTips {
+Relationship ambassador
+Relationship booking
+Relationship event
+Number amount [>= 0]
+String payment_method
+String status
+Date tip_date
+String notes
+Relationship payment
+Date createdAt
+Date updatedAt
+Relationship created_by
+Array audit_trail
<<index>> ambassador
<<index>> booking
<<index>> event
<<index>> [ambassador, event]
<<index>> [booking, ambassador]
<<index>> payment
}
class AmbassadorCommissions {
+Relationship ambassador
+Relationship event
+Number total_bookings [>= 0]
+Number total_guests [>= 0]
+Number commission_rate [0.0-1.0]
+Number commission_amount [>= 0]
+String status
+Date commission_date
+Relationship payment
+Date createdAt
+Date updatedAt
+Relationship created_by
+Array audit_trail
<<index>> ambassador
<<index>> event
<<index>> status
<<index>> [ambassador, event]
<<index>> [ambassador, status]
<<index>> payment
}
class AmbassadorTaxInfo {
+Relationship ambassador
+String tax_id
+String tax_classification
+Boolean w9_on_file
+Date w9_submission_date
+Number ytd_earnings [>= 0]
+Boolean requires_1099
+Number tax_withholding_rate [0.0-1.0]
+Date createdAt
+Date updatedAt
}
class PaymentAllocation {
+Relationship payment
+Relationship recipient
+String recipient_type
+Number amount [>= 0]
+Number percentage [0.0-1.0]
+String allocation_reason
+Date createdAt
+Date updatedAt
}
class ArchivedPayments {
+String original_id
+String payment_type
+Object original_payment_data
+Date archived_date
+String archive_reason
+Relationship archived_by
+Date createdAt
}
class PaymentAuditTrail {
+Relationship entity
+String entity_type
+String action
+Object before_state
+Object after_state
+Relationship user
+Date timestamp
+String ip_address
}
#Smart Backend Functions
classDiagram
class SmartFilterFunctions {
+getFilteredEvents(categories, priceRange, dateRange, location, hasAvailableTickets, keyword)
+getUpcomingEvents(category, location, startDate, endDate)
+getEventsWithAvailability(date, partySize, includeVehicle, includeDining)
+getVenuesByType(type, location, hasAvailability)
+searchAcrossCollections(keyword, collections)
}
class DashboardFunctions {
+getUserDashboardData(userId)
+getAdminDashboardStats()
+getAgentAssignments(agentId, dateRange)
+getEventManagerDashboard()
+getVenuePerformance(venueId)
+getAmbassadorEarnings(ambassadorId, dateRange)
+getAmbassadorPerformanceMetrics(ambassadorId, dateRange)
+getAmbassadorTipSummary(ambassadorId, eventId)
+getTaxReportingData(taxYear, ambassadorId)
}
class PaymentService {
+processBookingPayment(bookingId, paymentDetails)
+processAmbassadorPayment(ambassadorId, eventId, paymentDetails)
+processAmbassadorTip(ambassadorId, bookingId, tipAmount)
+allocatePayment(paymentId, allocations)
+calculateCommission(ambassadorId, eventId, bookings)
+generatePaymentReceipt(paymentId)
+processRefund(paymentId, refundAmount, reason)
+calculateTaxWithholding(ambassadorId, paymentAmount)
}
class BookingFunctions {
+createBookingPackage(eventId, userId, tickets, includeVehicle, includeDining, ambassadorId)
+checkPackageAvailability(eventId, date, partySize, vehicleRequired, diningRequired)
+updateBookingStatus(bookingId, newStatus, notes)
+cancelBookingWithRefund(bookingId, reason)
+addAmbassadorToBooking(bookingId, ambassadorId)
+assignMultipleBookingsToAmbassador(bookingIds, ambassadorId)
}
class RecommendationFunctions {
+getPersonalizedRecommendations(userId)
+getSimilarEvents(eventId)
+getPopularEvents(location, timeframe)
+getPackageRecommendations(eventId, userId)
+getUpsellOpportunities(bookingId)
+getTopPerformingAmbassadors()
}
class AuditAndVersioning {
+getDocumentHistory(collection, documentId)
+compareVersions(collection, documentId, version1, version2)
+restoreVersion(collection, documentId, versionId)
+getAuditLog(collection, documentId)
+trackUserActivity(userId, action, resource)
+generateAuditReport(entityType, dateRange)
}
class ArchiveService {
+archiveOldPayments(cutoffDate)
+archiveOldBookings(cutoffDate)
+retrieveArchivedData(entityType, entityId)
+generateArchiveReport(entityType, dateRange)
+restoreArchivedEntity(archiveId)
}
class ValidationService {
+validatePayment(paymentData)
+validateCommission(commissionData)
+validateTip(tipData)
+validateTaxInfo(taxInfoData)
+validateAllocation(allocationData)
}
#Database Schema Evolution
timeline
title Database Schema Evolution
Initial Setup : Users
: Events
: Bookings
: Payments
+ Transportation : Vehicles
: AgentAssignments
: AgentAvailability
+ Content Management : Media
: Pages
: Posts
: Categories
+ Dining Integration : Venues
: Dining
: DiningTables
: DiningReservations
+ AI Features : AIInteractions
: Forms
+ Access Control : UserRoles
: Permissions
+ Performance Optimization : Denormalized Fields
: Standardized Status Enums
: Database Indexes
: Computed Properties
+ Smart Backend : Filtering Functions
: Dashboard Aggregations
: Recommendation Engine
: Audit & Versioning
: Caching Layer
+ Ambassador Management : Ambassador Payments
: Ambassador Tips
: Ambassador Commissions
: Performance Metrics
: Tax Reporting
: Payment Allocations
+ Data Management : Archiving Strategy
: Audit Trails
: Data Validation
: Entity History
