Logo

Corporate Sales

B2B corporate account and session management with ClubReady integration

Overview

The Corporate Sales app enables fitness businesses to manage B2B corporate accounts where companies purchase bulk session packages as employee benefits. HR administrators can allocate sessions to employees, and the system tracks balances through a ledger system and processes enrollments through ClubReady integration.

Key Features

Company Management

  • Full CRUD Operations: Create, read, update, delete companies
  • Comprehensive Details:
    • Company name and internal ID
    • Full address information
    • Session value configuration ($ per session)
    • ClubReady integration IDs (Club ID, Package ID)
    • Agreement terms and dates
    • Website and subscription type
    • Company notes with audit trail

Company Users Management

  • User Assignment:

    • Assign existing tenant users to companies
    • Create new users inline with auto-generated passwords
    • Multi-select for bulk user assignment
    • Role selection: User or Admin
    • Primary contact designation (one per company)
  • User Creation:

    • Auto-generate 8-character temporary password
    • Auto-assign to "Corporate" department
    • Add to tenant with default roles
    • Link to existing User or create new User record
  • Access Control:

    • Non-admin users only see their assigned companies
    • Permission filtering across all routes
    • Role-based functionality differences
    • User removal with cleanup of app-owned users

Session Ledger System

  • Transaction Types:

    • Grant: Record payment, add sessions to balance
    • Deduct: Process case, remove sessions from balance
  • Tracking:

    • Running balance calculation
    • Complete audit trail
    • Payment details (amount, method, date)
    • Employee allocation details
  • Business Rules:

    • Sessions must be available before allocation
    • All transactions create permanent records
    • Balance cannot go negative

Case Management (Request Workflow)

  • Case Lifecycle:

    1. Pending: HR admin/user submits case
    2. Internal Review: Staff reviews the case
    3. Approved: Case approved, sessions deducted from ledger
    4. Rejected: Case rejected with reason
  • Case Details:

    • Auto-generated case number (CS-YYYY-0001 format)
    • Form submission data (via public form integration)
    • Requested sessions
    • Processing status tracking
    • Approval/rejection tracking (user, timestamp, reason)
    • Audit trail with timestamps
  • Modal-Based Creation: Cases created via modal dialog

  • Automatic Ledger Integration: Approved cases create ledger deductions

ClubReady Integration

  • Functionality (Phase 2 Planned):
    • Create prospect records
    • Sell memberships with allocated sessions
    • Track integration status
    • Handle errors gracefully

Database Models

Core Models

model CorporateSales_Company {
  id                  String   @id @default(cuid())
  tenantId            String
  appId               String
  name                String
  companyId           String?
  status              String   // "active" | "inactive"
  streetAddressLine1  String?
  streetAddressLine2  String?
  city                String?
  stateProvince       String?
  postalCode          String?
  country             String?
  sessionValue        Decimal  @default(0.00)
  website             String?
  agreementStartDate  DateTime?
  subscriptionType    String?
  clubReadyClubId     String?
  clubReadyPackageId  String?
  agreementTerms      String?
  notes               String?
  ledgerEntries       CorporateSales_Ledger[]
  cases               CorporateSales_Case[]
  companyUsers        CorporateSales_CompanyUser[]
  companyNotes        CorporateSales_CompanyNote[]
}

model CorporateSales_CompanyUser {
  id                String   @id @default(cuid())
  tenantId          String
  companyId         String
  userId            String
  tenantUserId      String
  role              String   // "user" | "admin"
  isPrimaryContact  Boolean  @default(false)
  temporaryPassword String?
}

model CorporateSales_Ledger {
  id             String    @id @default(cuid())
  tenantId       String
  companyId      String
  date           DateTime
  type           String    // "grant" | "deduct"
  amount         Decimal
  sessions       Int
  balance        Int
  paymentMethod  String?
  notes          String?
  caseId         String?
  createdByUserId String?
}

model CorporateSales_Case {
  id                String    @id @default(cuid())
  tenantId          String
  companyId         String
  caseNumber        String    @unique
  requestedSessions Int
  status            String    // "pending" | "internal_review" | "approved" | "rejected"
  notes             String?
  formSubmissionId  String?
  submittedByUserId String?
  approvedAt        DateTime?
  approvedByUserId  String?
  rejectedAt        DateTime?
  rejectedByUserId  String?
  rejectionReason   String?
  ledgerEntries     CorporateSales_Ledger[]
}

model CorporateSales_CompanyNote {
  id              String   @id @default(cuid())
  createdAt       DateTime @default(now())
  companyId       String
  content         String
  createdByUserId String
}

Routes

Admin Routes

  • /app/{tenant}/apps/corporate-sales - Dashboard with summary metrics
  • /app/{tenant}/apps/corporate-sales/companies - List all companies
  • /app/{tenant}/apps/corporate-sales/companies/new - Create company (CS Admin only)
  • /app/{tenant}/apps/corporate-sales/companies/{id} - Company details with tabs:
    • Company Information: Basic details and configuration
    • Session Ledger: Transaction history and balance
    • Users: Company user assignments with role management
    • Notes: Company notes with audit trail
  • /app/{tenant}/apps/corporate-sales/companies/{id}/edit - Edit company (CS Admin only)
  • /app/{tenant}/apps/corporate-sales/cases - List cases

User Personas

1. Corporate Sales Admin (Staff)

Access: Full system access

Responsibilities:

  • Create and manage all corporate accounts
  • Grant sessions when payments are received
  • Process all cases from all companies
  • View all analytics and reports
  • Manage company relationships
  • Assign users to companies and manage their roles

2. Company Admin (HR Director/Manager)

Access: Dashboard access for their company only

Responsibilities:

  • View their company's details, ledger, and balance
  • Submit cases for employees
  • Monitor status of their company's cases
  • Access reports for their company
  • Manage employee allocations
  • Designated as primary contact (optional)

3. Company User (HR Staff)

Access: Dashboard access for their assigned company only

Responsibilities:

  • View their company's details and balance
  • Submit cases for employees
  • Monitor case status for their company
  • Limited access compared to Company Admin

User Workflows

Corporate Sales Admin Workflow

  1. Create new company account
  2. Assign users to company (existing or create new)
  3. Record payment and grant sessions via modal
  4. Review submitted cases from all companies
  5. Approve or reject cases (automatic ledger updates)
  6. Manage company users (add, remove, change roles)
  7. Generate reports

Company Admin Workflow

  1. Log in to dashboard
  2. View assigned company's balance and ledger
  3. Submit case for employee via modal
  4. Track case status for their company
  5. View company reports
  6. View other company users

Company User Workflow

  1. Log in to dashboard
  2. View assigned company's balance
  3. Submit case for employee via modal
  4. Track case status for their company
  5. Limited access compared to Company Admin

User Assignment Workflow

  1. Corporate Sales Admin opens company detail page
  2. Navigates to "Users" tab
  3. Clicks "Add customer to company"
  4. Modal opens with two modes:
    • Select Existing User: MultiSelect from tenant users
    • Create New User: Form with First Name, Last Name, Email, Phone
  5. Select role (User or Admin)
  6. Optionally mark as primary contact
  7. Submit to add user(s) to company
  8. Users can access their assigned company immediately

Key Business Rules

  1. No Payment Processing: System only records payments, doesn't process them
  2. Access Control:
    • Super users/admins see all companies
    • Non-admin users only see their assigned companies
    • Permission filtering applies to companies and cases
  3. Session Availability: Cannot approve cases with more sessions than available balance
  4. Audit Trail: Every action is logged with user and timestamp
  5. ClubReady Sync: Only happens when case is approved (future implementation)
  6. Case Numbers: Auto-generated sequentially (CS-YYYY-0001)
  7. Status Transitions: Follow defined workflow (pending → internal_review → approved/rejected)
  8. Primary Contact: Only one primary contact per company allowed
  9. Department Assignment: All company users auto-assigned to "Corporate" department
  10. User Deletion: App-owned users deleted when removed if only in one tenant
  11. User Creation: New users created with 8-character temporary password

Authentication & Authorization

Corporate Sales Admins

  • Super users or admins have full access
  • Can view and manage all companies
  • Can process all cases
  • Can assign users to companies

Company Admins/Users

  • Users assigned to companies via CorporateSales_CompanyUser
  • Must be TenantUser in the tenant
  • Auto-assigned to "Corporate" department
  • Role determines access level (admin vs user)
  • Can be existing users or created inline

Permission Filtering

  • getAppUserContext() returns permissions and company assignments
  • Admins have assignedCompanyIds: undefined (access to all companies)
  • Non-admins have assignedCompanyIds: ["id1", "id2"] (specific companies only)
  • Used across all routes for data isolation
  • Sidebar dynamically shows menu items based on permissions

Implementation Phases

Phase 1: Foundation ✅ COMPLETED

  • Database schema design
  • Module structure setup
  • App registration in Blend engine
  • Basic CRUD operations (Companies, Cases, Ledger, Notes)
  • Component creation (Forms, Tables, Modals, Badges)
  • Route implementation
  • Session balance calculations
  • Case processing workflow (Approve/Reject)
  • Company user management
  • Permission filtering by user assignment
  • Department management ("Corporate" auto-assignment)
  • Role-based access control

Phase 2: Business Logic (In Progress)

  • Role-based filtering across all routes ✅
  • ClubReady API integration ⏳
  • Notifications ⏳
  • Advanced reporting ⏳

Phase 3: Enhancements (Future)

  • Employee self-service portal
  • Multi-step approval workflows
  • Advanced analytics
  • Bulk operations
  • Email/SMS notifications
  • Public form for case submission

Reporting Requirements

Dashboard Metrics

  • Total active companies
  • Total pending cases
  • Available sessions across all companies
  • Cases processed this month

Company Reports

  • Session balance history
  • Employee allocations
  • Case status summary
  • Usage trends

Security Considerations

  • Role-based access control at all levels
  • Company data isolation via permission filtering
  • Audit logging for all modifications
  • Secure ClubReady API credentials (future)
  • No sensitive payment data storage
  • User cleanup: App-owned users deleted when removed
  • Password security: Auto-generated passwords, bcrypt hashing
  • Department isolation: All company users in "Corporate" department
  • Primary contact enforcement: Only one primary contact per company

Success Metrics

  • Time to process a case: less than 5 minutes
  • System uptime: 99.9 percent
  • User adoption rate by companies
  • Session utilization rate
  • Case error rate: less than 1 percent

We respect your privacy.

TLDR: We use cookies for language selection, theme, and analytics. Learn more.