Services & Components

Comprehensive platform built specifically for Fire & EMS operations

75+ Components
12 Categories
Insights

🏗️ Core Infrastructure

Foundation layer that powers all features

Aladtec API Integration

High Complexity

INFRA_001

Full OAuth2 integration with Aladtec scheduling system provides the foundational data layer for all ResponseIQ features.

What It Does:

  • Establishes secure OAuth2 connection to Aladtec
  • Pulls member data, schedules, time entries, and attributes
  • Maintains real-time sync with your scheduling system
  • Handles authentication, token refresh, and error recovery

Metrics Provided:

Member data, scheduled time entries, time types, shift labels, positions, attributes

Algorithm:

1. Authenticate via OAuth2 flow
2. Request access token with scheduling read scope
3. Fetch member roster (GET /api/members)
4. For each member:
   - Fetch schedule entries (GET /api/schedules/{id}/entries)
   - Fetch time-off requests (GET /api/time-off)
   - Parse attributes (DOB, hire date, rank, etc.)
5. Cache results with 15-minute TTL
6. Auto-refresh on filter changes

Business Value:

Without this integration, no other features work. This is the data pipeline that feeds your entire analytics platform.

Included in Base Platform Required for all features

Real-Time Data Sync

Medium Complexity

INFRA_002

Automatic data synchronization ensures you're always viewing current information without manual refresh.

What It Does:

  • Monitors for changes in schedule, roster, or time-off data
  • Automatically refreshes views when filters change
  • Implements intelligent caching to reduce API calls
  • Provides visual indicators when data is refreshing

Algorithm:

1. On filter change (date range, personnel, shift):
   - Check cache for matching dataset
   - If cache miss or expired (>15 min):
     a. Show loading state
     b. Fetch fresh data from Aladtec API
     c. Update cache with timestamp
     d. Recalculate all dependent views
2. Listen for user actions (checkbox changes, slider moves)
3. Debounce rapid changes (300ms)
4. Trigger cascading updates to all dependent components

Performance Optimization:

Uses debouncing, memoization, and smart caching to minimize API calls while maintaining data freshness.

Included in Base Platform

Pay Rate Integration

Medium Complexity

INFRA_003

CSV-based pay rate matching enables accurate cost calculations across all time types.

What It Does:

  • Imports pay rate data from CSV file
  • Matches employees to their rates by name and time type
  • Calculates costs for all hours worked
  • Supports multiple pay rates per employee (regular, OT, etc.)

Algorithm:

1. Load pay rate CSV (format: Name, TimeType, Rate)
2. Create lookup map: employeeName -> { timeType -> rate }
3. For each time entry:
   a. Extract employeeName, timeType, hours
   b. Lookup rate = payRateMap[employeeName][timeType]
   c. If not found, use default rate or flag as missing
   d. Calculate cost = hours × rate
4. Aggregate costs by employee, department, time type
5. Handle edge cases (missing rates, partial matches)

Data Security:

Pay rate data remains client-side only. CSV is parsed in-browser and never sent to external servers.

Included in Base Platform Required for cost analytics

👥 Employee Analytics

Individual-level insights and performance tracking

Workload Intensity Gauge

High Complexity

EMPL_005

Predictive burnout risk scoring system identifies employees at risk before issues arise.

What It Does:

  • Calculates multi-factor workload intensity score (0-100%)
  • Identifies employees at risk of burnout
  • Tracks consecutive days worked, overtime ratio, shift frequency
  • Provides visual alerts (green/yellow/red)

Algorithm:

// Burnout Risk Score Calculation
function calculateIntensityScore(employee, dateRange) {
  const totalDays = getDaysBetween(dateRange.start, dateRange.end);
  const shiftsWorked = employee.shifts.length;
  const avgShiftsPerMonth = (shiftsWorked / totalDays) * 30;

  // Component 1: Shift Frequency (0-40 points)
  let shiftScore = 0;
  if (avgShiftsPerMonth > 20) shiftScore = 40;
  else if (avgShiftsPerMonth > 15) shiftScore = 30;
  else if (avgShiftsPerMonth > 10) shiftScore = 20;
  else shiftScore = avgShiftsPerMonth;

  // Component 2: Overtime Ratio (0-35 points)
  const otHours = employee.overtimeHours;
  const regularHours = employee.regularHours;
  const otRatio = otHours / (regularHours + otHours);
  const otScore = Math.min(otRatio * 100, 35);

  // Component 3: Consecutive Days (0-25 points)
  const longestStreak = findLongestConsecutiveStreak(employee.shifts);
  let consecScore = 0;
  if (longestStreak >= 10) consecScore = 25;
  else if (longestStreak >= 7) consecScore = 20;
  else if (longestStreak >= 5) consecScore = 15;
  else consecScore = longestStreak * 2;

  // Total Intensity Score (capped at 100)
  const intensity = Math.min(shiftScore + otScore + consecScore, 100);

  return {
    score: intensity,
    status: intensity >= 70 ? 'High Risk' :
            intensity >= 50 ? 'Moderate' : 'Normal',
    shiftScore,
    otScore,
    consecScore,
    shiftsPerMonth: avgShiftsPerMonth,
    overtimeRatio: (otRatio * 100).toFixed(1) + '%',
    longestStreak
  };
}

Thresholds:

  • 0-49%: Normal workload (Green)
  • 50-69%: Elevated workload (Yellow)
  • 70-100%: Burnout risk (Red)

Business Value:

Proactively identify at-risk employees before burnout occurs. Reduces sick leave, improves retention, and supports wellness initiatives.

+$0.80/person/month Add-On Module