Commission Tracking System
Last Updated: March 2024
Status: Production Ready with Real-time Updates
A comprehensive commission management system for healthcare platforms, providing automated calculation, tracking, and reporting of commission earnings for healthcare professionals with real-time updates powered by WebSocket integration.
Overview
The Commission Tracking System enables healthcare organizations to:
- Define flexible commission rules for different user types and services
- Automate commission calculations with validation and preview
- Track commission earnings and payment status
- Provide self-service access for consultants to view their earnings
- Generate detailed reports and analytics
Architecture
Key Components
-
Commission Rules Management
- Rule creation and configuration
- Support for percentage, tiered, and performance-based rules
- User and service-specific rule assignment
- Priority-based rule resolution
-
Calculation Engine
- Batch calculation processing
- Real-time preview and validation
- Job queue management
- Progress tracking and monitoring
-
Payment Workflow
- Commission approval process
- Payment tracking and history
- Dispute management
- Automated notifications
-
Reporting & Analytics
- Real-time dashboards
- User-specific earnings views
- Export functionality (CSV, PDF, Excel)
- Trend analysis and metrics
-
Analytics & Comparisons
- Period-over-period analysis
- Interactive data visualizations
- Performance benchmarking
- Location-based insights
Data Flow
Commission Rules → Calculation Jobs → Validation → Calculations → Approval → Payment
↓ ↓
Job Queue Preview/Dry Run
↓
Monitoring & NotificationsFeature Implementation
Commission Rules (/reports/commission-rules)
Commission rules define how commissions are calculated for different scenarios.
Rule Types
-
Percentage-Based
{ ruleType: 'percentage', basePercentage: 15, minimumRevenue: 500, maximumCommission: 2000 } -
Tiered Commission
{ ruleType: 'tiered', tiers: [ { minimumAmount: 0, maximumAmount: 5000, percentage: 12 }, { minimumAmount: 5000, maximumAmount: 15000, percentage: 18, fixedBonus: 200 }, { minimumAmount: 15000, percentage: 25, fixedBonus: 500 } ] } -
Performance-Based
{ ruleType: 'performance', basePercentage: 20, performanceMetrics: [ { metric: 'patient_satisfaction', operator: 'greater_than', targetValue: 4.5, bonusPercentage: 5 }, { metric: 'new_patients', operator: 'greater_than', targetValue: 20, bonusAmount: 300 } ] }
Rule Management UI
- Table view with filtering and search
- Create/Edit modal with validation
- Active/Inactive toggle
- Rule priority management
- Bulk operations support
Commission Dashboard (/reports/commission-dashboard)
Provides comprehensive overview of commission metrics and trends.
Key Metrics
- Total Commission (current period)
- Pending Commissions
- Approved Commissions
- Paid Commissions
- Period-over-period comparison
Features
- Interactive charts with trend visualization
- Drill-down capabilities
- Filter by date range, user, location
- Export functionality
- Role-based data access (consultants see only their data)
Commission Calculations (/reports/commission-calculations)
Tracks individual commission calculations with detailed breakdowns.
Calculation States
pending- Awaiting approvalapproved- Approved for paymentpaid- Payment completeddisputed- Under reviewcancelled- Cancelled/voided
Features
- Detailed calculation breakdown
- Approval workflow
- Batch operations
- Export functionality
- Dispute management
Commission Workflows (/reports/commission-workflows)
Manages calculation jobs and automated processing.
Job Types
bulk_calculation- Process multiple users/periodspreview_calculation- Dry run for validationscheduled_calculation- Automated recurring calculations
Workflow Features
-
Job Creation
- Date range selection
- Rule and user filtering
- Validation level configuration
- Preview mode support
-
Validation & Preview
- Data integrity checks
- Rule consistency validation
- User eligibility verification
- Impact analysis
- Side-by-side comparison
-
Job Monitoring
- Real-time progress tracking
- Status updates
- Error handling
- Retry capabilities
- Batch operations
-
Notifications
- Job completion alerts
- Error notifications
- Status change updates
- Action-based navigation
Commission Analytics (/reports/commission-analytics)
Provides comprehensive analytics and comparison views for commission performance.
Analytics Features
-
Comparison Controls
- Period-over-period comparison
- Year-over-year analysis
- Location-based comparisons
- Custom date range selection
-
Key Performance Metrics
- Total commission with trend indicators
- Revenue growth tracking
- Active user counts
- Average commission per user
- Period-to-period percentage changes
-
Interactive Visualizations
Bar Charts - Side-by-side comparison
<CommissionComparisonChart title="Month-over-Month Commission Comparison" data={[ { label: "Jan 2024", previous: 102000, current: 108000 }, { label: "Feb 2024", previous: 108000, current: 112340 } ]} />Pie Charts - Distribution analysis
<CommissionPieChart title="Commission Distribution by Location" data={[ { label: "Main Hospital", value: 65000 }, { label: "North Clinic", value: 35750 } ]} />Line Charts - Trend visualization
<CommissionLineChart title="Commission Growth Trend" data={trendData} animate={true} />Performance Gauges - Visual KPI indicators
- Arc-based gauges showing relative performance
- Color-coded growth indicators (green/blue/red)
- Percentage of top performer metric
-
Analytics Tabs
User Performance
- Top performers ranking with growth metrics
- Performance gauge visualization
- Average growth calculation
- Positive/negative growth tracking
- Interactive hover effects
Trends Analysis
- 6-month commission progression
- Animated line charts
- Year-over-year growth comparison
- Visual trend indicators
Location Analysis
- Commission distribution pie chart
- Location-wise performance metrics
- Growth comparison by location
- User count per location
-
Analytics Summary Cards
- Best performing location
- Highest growth location
- Average commission per user
- Real-time metric updates
Edge Case Handling
The commission tracking system includes comprehensive edge case handling to ensure robust operation:
Empty State Management
- Approval Modal: Displays helpful message when no pending calculations are available
- Payout Modal: Shows clear messaging when no approved calculations exist for payout
- Payout History: Provides contextual empty states based on filter status
- Calculations Page: Differentiates between "no data" and "no matching filters"
Validation & Prevention
-
Status Validation
- Prevents approving already approved or paid calculations
- Blocks payment attempts on non-approved calculations
- Shows specific error messages for mixed status selections
-
Payment Validation
- Validates payment dates (no past dates allowed)
- Checks payment method availability before processing
- Auto-generates transaction references if not provided
- Warns about zero-amount calculations
-
Batch Operations
- Large batch warning for 50+ selections
- "Select All" only affects visible/filtered items
- Prevents accidental bulk operations
State Management
- Form data persists through errors (no data loss on failure)
- Modal state resets only on successful operations
- Error messages clear when retrying operations
- Selected items maintain state during operations
Network Error Recovery
- Retry buttons on all error states
- Preserves user selections during retry
- Shows specific error messages from API
- Implements exponential backoff for retries
Code Examples
Empty State Handling
{calculations.length === 0 ? (
<div className="text-center py-12">
<Calculator className="mx-auto h-12 w-12 text-muted-foreground mb-4" />
<h3 className="text-lg font-semibold mb-2">No Calculations Available</h3>
<p className="text-muted-foreground">
There are no pending calculations to approve at this time.
</p>
</div>
) : (
// Normal content
)}Validation Example
const handlePayoutClick = () => {
const approvedCalculations = commissionCalculations.filter(
calc => selectedCalculations.includes(calc.id) && calc.status === 'approved'
)
if (approvedCalculations.length === 0) {
const selectedCalcs = commissionCalculations.filter(calc => selectedCalculations.includes(calc.id))
if (selectedCalcs.some(calc => calc.status === 'paid')) {
toast.error("Some selected calculations are already paid")
} else if (selectedCalcs.some(calc => calc.status === 'pending_approval')) {
toast.error("Some selected calculations are still pending approval")
}
return
}
setShowPayoutModal(true)
}Error Recovery
{error && (
<Alert variant="destructive">
<AlertTriangle className="h-4 w-4" />
<AlertDescription>
<div className="flex items-center justify-between">
<span>{error}</span>
<Button variant="outline" size="sm" onClick={retry}>
<RefreshCw className="mr-2 h-4 w-4" />
Retry
</Button>
</div>
</AlertDescription>
</Alert>
)}
## Error Handling & Recovery
### Error Boundary Protection
All commission pages are wrapped with error boundaries to prevent crashes:
```typescript
<CommissionErrorBoundary>
<CommissionWorkflowsPageContent />
</CommissionErrorBoundary>Features:
- Graceful error display
- Error details in development
- Recovery options (retry/reload)
- Automatic error logging
- Notification integration
Retry Logic
Critical operations implement exponential backoff retry:
retryOperation(operation, {
maxAttempts: 5,
delay: 2000,
backoff: 'exponential',
maxDelay: 60000
})Retry configurations:
critical- Commission calculations (5 attempts)standard- Regular API calls (3 attempts)fast- Quick operations (2 attempts)polling- Status checks (10 attempts)
Real-time Notifications
Comprehensive notification system for commission events:
const { notifyCommissionJobComplete, notifyCommissionError } = useNotificationStore()Notification types:
- Job completion (success/failure)
- Validation warnings
- Approval status changes
- Payment confirmations
- System errors
Features:
- Toast notifications
- Persistent notification center
- Action buttons for navigation
- Category-based filtering
- Read/unread status
Access Control
Role-Based Access
-
Admin/Manager
- Full access to all features
- Create/edit commission rules
- Approve calculations
- Process payments
- View all user data
-
Consultant Doctors
- View own commission data only
- Access dashboard with personal metrics
- View calculation details
- Export own reports
- No rule management access
Permission Checks
// Allow consultant doctors to view their data
if (user?.role === "doctor") {
filters.userIds = [user.id]
}
// UI restrictions
{canManageUsers && (
<Button>Create Rule</Button>
)}Reusable Chart Components
The commission analytics system includes reusable chart components for data visualization:
CommissionComparisonChart
Bar chart for period-over-period comparisons with:
- Side-by-side bars for current vs previous periods
- Percentage change indicators
- Interactive hover effects
- Customizable value formatting
CommissionPieChart
Pie chart for distribution analysis with:
- Automatic percentage calculation
- Interactive slices with hover effects
- Legend with values and percentages
- Customizable colors
- Labels for slices >5%
CommissionLineChart
Line chart for trend visualization with:
- Animated draw effect on load
- Auto-scaling Y-axis
- Grid lines for readability
- Hover tooltips on data points
- Smooth path rendering
Usage Example
import {
CommissionComparisonChart,
CommissionPieChart,
CommissionLineChart
} from "@/components/reports/CommissionComparisonChart"
// Comparison chart
<CommissionComparisonChart
title="Monthly Comparison"
data={monthlyData}
formatValue={(v) => `$${v.toLocaleString()}`}
/>
// Distribution chart
<CommissionPieChart
title="Location Distribution"
data={locationData}
showLegend={true}
/>
// Trend chart
<CommissionLineChart
title="6-Month Trend"
data={trendData}
animate={true}
/>API Integration
Commission API Service
Located in packages/api-client/src/services/commissionsApi.ts
Key endpoints:
/api/commissions/rules- Rule management/api/commissions/calculations- Calculation records/api/commissions/summaries- Summary reports/api/commissions/jobs- Workflow jobs/api/commissions/validate- Validation endpoint/api/commissions/preview- Preview calculations
State Management
Zustand store: packages/auth/src/stores/commissionsStore.ts
Store sections:
- Commission rules state
- Calculations state
- Summaries state
- Job management state
- Preview/validation state
- Pagination handling
Usage Examples
Creating a Commission Rule
const { createCommissionRule } = useCommissionsStore()
await createCommissionRule({
name: "Standard Doctor Commission",
ruleType: "percentage",
basePercentage: 15,
userId: "doctor_123",
applicableServices: ["consultation"],
effectiveFrom: new Date()
})Running a Calculation Job
const { createCalculationJob } = useCommissionsStore()
await createCalculationJob({
type: "bulk_calculation",
title: "Monthly Commission - March 2024",
period: "monthly",
startDate: "2024-03-01",
endDate: "2024-03-31",
requireApproval: true,
notifyOnCompletion: true
})Handling Job Status Updates
// Auto-refresh with status change detection
useEffect(() => {
const interval = setInterval(async () => {
await fetchCalculationJobs()
// Check for status changes
calculationJobs.forEach(job => {
if (prevStatus !== job.status && job.status === 'completed') {
notifyCommissionJobComplete(job.id, job.title, true)
}
})
}, 5000)
}, [calculationJobs])Viewing Analytics
// Analytics comparison example
const { commissionSummaries, fetchCommissionSummaries } = useCommissionsStore()
// Compare periods
const compareData = {
currentPeriod: "2024-03",
previousPeriod: "2024-02",
comparisonType: "period"
}
// Calculate growth metrics
const calculateGrowth = (current: number, previous: number) => {
return ((current - previous) / previous) * 100
}Testing
Mock Data
Development mode includes comprehensive mock data:
- Sample commission rules
- Calculation jobs with various states
- Preview results
- Validation scenarios
Test Scenarios
-
Rule Creation
- Valid rule configuration
- Validation errors
- Duplicate detection
-
Calculation Workflow
- Successful calculation
- Validation failures
- Job cancellation
- Retry logic
-
Access Control
- Admin full access
- Consultant restricted view
- Permission boundaries
Real-Time Updates
The commission tracking system now includes real-time updates powered by a provider-agnostic WebSocket implementation using Ably for HIPAA-compliant messaging.
Features
-
Live Job Progress
- Real-time progress indicators for running calculations
- Instant status changes without polling
- Progress percentage and item count updates
-
Instant Notifications
- Job completion alerts
- Error notifications
- Approval status changes
- Payment confirmations
-
Connection Status
- Visual indicators showing real-time connection status
- Automatic reconnection handling
- Graceful degradation when offline
Implementation
// Enable real-time updates in your component
import { useRealtimeCommissions } from '@kulcare/auth'
const { isConnected } = useRealtimeCommissions({
enabled: true,
showNotifications: true
})
// Track specific job progress
import { useCommissionJobProgress } from '@kulcare/auth'
const { progress, percentage, status } = useCommissionJobProgress(jobId)Configuration
Add Ably credentials to your environment:
VITE_ABLY_KEY=your-ably-key
VITE_ABLY_ENVIRONMENT=us # Optional: 'us' or 'eu' for data residencyFuture Enhancements
-
WebSocket Migration Options
- Custom WebSocket server implementation
- Alternative providers (Socket.io, AWS IoT)
- Self-hosted solution for data sovereignty
-
Advanced Analytics Enhancements
- Predictive commission forecasting using ML
- Performance correlation analysis
- Automated rule optimization
- Real-time analytics with streaming data
- Custom report builder
- Advanced filtering and segmentation
-
Integration Features
- Accounting system sync
- Payment gateway integration
- Automated tax calculations