F1 Integration¶
The F1 integration connects the Stratpoint Timesheet Application with the F1 Resource Management Platform, providing essential workforce analytics, project assignment reporting, and employee utilization tracking capabilities.
Integration Overview¶
F1 System Architecture¶
graph TB
A[F1 Resource Management Platform] --> B[F1 Integration Layer]
B --> C[Project Assignment Reporting]
B --> D[Employee Utilization Analytics]
B --> E[Resource Planning Data]
C --> F[Project Assignments]
C --> G[Resource Allocation]
C --> H[Assignment History]
D --> I[Monthly Utilization]
D --> J[Capacity Planning]
D --> K[Performance Metrics]
E --> L[Resource Forecasting]
E --> M[Skill Mapping]
E --> N[Availability Tracking]
O[Timesheet Application] --> B
Key Integration Features¶
- Project Assignment Reporting: Comprehensive project assignment data and analytics
- Employee Utilization Tracking: Monthly utilization reports and capacity analysis
- Resource Management Data: Access to resource planning and allocation information
- Performance Analytics: Employee performance and utilization insights
- Workforce Planning: Strategic resource planning and forecasting capabilities
API Endpoints¶
The F1 integration provides three main API endpoints for accessing resource management data:
Base URL¶
Authentication¶
All F1 endpoints use app-to-app authentication with the timesheet.authAppBulongOnly:f1 middleware, ensuring secure communication between the F1 platform and the timesheet system.
Rate Limiting¶
- Rate Limit: 50 requests per minute
- Throttling: Automatic throttling applied via Laravel middleware
Available Endpoints¶
1. Project Assignment Report¶
Endpoint: POST /api/v2/f1/getProjectAssignments
Provides comprehensive project assignment data for resource planning and allocation analysis.
Request Parameters:
{
"startDate": "2024-01-01",
"endDate": "2024-12-31",
"endingFromDate": "2024-01-01",
"dateCreatedOnwards": "2024-01-01",
"firstname": "John",
"lastname": "Doe",
"selectPositionId": [1, 2, 3],
"selectProject": [10, 20, 30],
"selectProjectBusinessUnit": [1, 2],
"selectProjectBusinessLine": [1, 2],
"selectProjectStatus": [1, 2],
"selectUserBusinessUnit": [1, 2]
}
Response: Returns detailed project assignment information including employee assignments, project details, business unit information, and assignment timelines.
2. Employee Utilization Report¶
Endpoint: POST /api/v2/f1/getUtilizationReportByMonth
Generates monthly utilization reports for workforce capacity planning and performance analysis.
Request Parameters:
{
"startYearMonth": "2024-01",
"endYearMonth": "2024-12",
"selectReportType": ["estimated", "actual", "generic"],
"selectAllocPercentage": [50, 75, 100],
"currentMonth": "2024-01-01",
"cadetInclusion": true,
"selectStatus": [1, 2, 3]
}
Response: Returns employee utilization metrics, capacity data, allocation percentages, and performance indicators.
3. Resource Filter Data¶
Endpoint: POST /api/v2/f1/getIdList
Provides bulk filter data for resource management queries and reporting.
Request Parameters:
Response: Returns available filter options for resource queries including position IDs, project IDs, business unit IDs, and user IDs.
Resource Management Use Cases¶
Project Assignment Analysis¶
The F1 integration enables advanced project assignment analysis for optimal resource allocation:
// Project Assignment Analysis
function analyzeProjectAssignments(filters) {
const requestData = {
startDate: filters.startDate,
endDate: filters.endDate,
selectProject: filters.projectIds,
selectProjectBusinessUnit: filters.businessUnitIds,
selectUserBusinessUnit: filters.userBusinessUnitIds
};
// Call F1 API for project assignment data
const response = fetch('/api/v2/f1/getProjectAssignments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + getF1AuthToken()
},
body: JSON.stringify(requestData)
});
return response.json().then(data => {
return {
assignments: data.assignments,
summary: {
total_projects: data.total_projects,
total_employees: data.total_employees,
avg_utilization: data.avg_utilization,
capacity_analysis: data.capacity_analysis
}
};
});
}
// Resource Allocation Optimization
function optimizeResourceAllocation(projectId, requirements) {
const availableResources = getAvailableResources();
const projectRequirements = requirements;
return {
recommended_assignments: calculateOptimalAssignments(availableResources, projectRequirements),
capacity_gaps: identifyCapacityGaps(projectRequirements, availableResources),
skill_matches: findSkillMatches(projectRequirements, availableResources)
};
}
Employee Utilization Tracking¶
The F1 integration provides comprehensive employee utilization tracking and capacity planning capabilities:
// Employee Utilization Analysis
function generateUtilizationReport(period, filters) {
const requestData = {
startYearMonth: period.startMonth,
endYearMonth: period.endMonth,
selectReportType: filters.reportTypes || ['actual', 'estimated'],
selectAllocPercentage: filters.allocationPercentages || [25, 50, 75, 100],
currentMonth: new Date().toISOString().slice(0, 10),
cadetInclusion: filters.includeCadets || false,
selectStatus: filters.employeeStatus || [1, 2] // Active, on leave, etc.
};
// Call F1 API for utilization data
return fetch('/api/v2/f1/getUtilizationReportByMonth', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + getF1AuthToken()
},
body: JSON.stringify(requestData)
}).then(response => response.json());
}
// Capacity Planning Analysis
function analyzeCapacityTrends(utilizationData) {
const trends = {
monthly_averages: calculateMonthlyAverages(utilizationData),
capacity_gaps: identifyCapacityGaps(utilizationData),
over_allocation: findOverAllocatedResources(utilizationData),
under_utilization: findUnderUtilizedResources(utilizationData),
forecasting: generateCapacityForecast(utilizationData)
};
return {
current_capacity: calculateCurrentCapacity(utilizationData),
utilization_trends: trends,
recommendations: generateCapacityRecommendations(trends)
};
}
// Resource Availability Tracking
function trackResourceAvailability(employeeIds, period) {
return {
available_capacity: calculateAvailableCapacity(employeeIds, period),
scheduled_allocations: getScheduledAllocations(employeeIds, period),
flexible_capacity: calculateFlexibleCapacity(employeeIds, period),
skill_availability: mapSkillAvailability(employeeIds, period)
};
}
Resource Planning and Forecasting¶
Strategic Resource Planning¶
The F1 integration supports strategic resource planning and forecasting:
// Strategic Resource Planning
function planResourceAllocation(projects, timeframe) {
const resourcePlan = {
timeframe: timeframe,
projects: projects,
resource_requirements: [],
capacity_analysis: {},
recommendations: []
};
// Analyze current resource allocation
projects.forEach(project => {
const currentAssignments = getProjectAssignments(project.id);
const utilizationData = getUtilizationData(project.id, timeframe);
resourcePlan.resource_requirements.push({
project_id: project.id,
required_skills: project.required_skills,
estimated_effort: project.estimated_effort,
current_allocation: currentAssignments,
utilization_target: project.utilization_target
});
});
return optimizeResourcePlan(resourcePlan);
}
// Resource Forecasting
function generateResourceForecast(timeframe, historicalData) {
const forecast = {
timeframe: timeframe,
projected_demand: calculateProjectedDemand(historicalData),
capacity_trends: analyzeCapacityTrends(historicalData),
skill_requirements: forecastSkillRequirements(historicalData),
recommendations: []
};
// Analyze historical utilization patterns
const utilizationTrends = analyzeUtilizationTrends(historicalData);
forecast.projected_demand = {
by_month: calculateMonthlyDemand(utilizationTrends),
by_skill: calculateSkillDemand(utilizationTrends),
by_business_unit: calculateBusinessUnitDemand(utilizationTrends)
};
// Generate resource planning recommendations
forecast.recommendations = generateResourceRecommendations(forecast);
return forecast;
}
// Workforce Analytics
function generateWorkforceAnalytics(period) {
return {
utilization_summary: getUtilizationSummary(period),
capacity_analysis: getCapacityAnalysis(period),
productivity_metrics: getProductivityMetrics(period),
resource_efficiency: getResourceEfficiency(period),
skill_distribution: getSkillDistribution(period)
};
}
Resource Reporting and Analytics¶
Comprehensive Resource Reports¶
The F1 integration provides comprehensive resource reporting capabilities:
// Integrated Resource Reporting
function generateResourceReport(reportType, parameters) {
const reportGenerators = {
utilization_summary: generateUtilizationSummaryReport,
project_assignments: generateProjectAssignmentReport,
capacity_analysis: generateCapacityAnalysisReport,
resource_efficiency: generateResourceEfficiencyReport
};
const generator = reportGenerators[reportType];
if (!generator) {
throw new Error(`Unknown report type: ${reportType}`);
}
return generator(parameters);
}
// Project Resource Efficiency Report
function generateResourceEfficiencyReport(parameters) {
const projects = getProjectsInPeriod(parameters.period);
const efficiencyData = [];
projects.forEach(project => {
// Get project assignment data from F1
const assignmentData = getF1ProjectAssignments(project.id, parameters.period);
// Get utilization data from F1
const utilizationData = getF1UtilizationData(project.id, parameters.period);
const efficiency = {
project_id: project.id,
project_name: project.name,
client_name: project.client.name,
resource_metrics: {
assigned_resources: assignmentData.total_assigned,
average_utilization: utilizationData.avg_utilization,
capacity_utilization: utilizationData.capacity_usage
},
performance_indicators: {
delivery_efficiency: calculateDeliveryEfficiency(assignmentData),
resource_optimization: calculateResourceOptimization(utilizationData),
skill_match_score: calculateSkillMatchScore(assignmentData)
}
};
efficiencyData.push(efficiency);
});
return {
report_type: 'resource_efficiency',
period: parameters.period,
projects: efficiencyData,
summary: calculateEfficiencySummary(efficiencyData),
generated_at: new Date()
};
}
Integration Health and Monitoring¶
System Health Monitoring¶
// F1 Integration Health Monitoring
function monitorF1Integration() {
const healthStatus = {
overall_status: 'healthy',
last_check: new Date(),
endpoints: {},
data_quality: {},
performance_metrics: {}
};
// Monitor each F1 endpoint
const endpoints = [
'getProjectAssignments',
'getUtilizationReportByMonth',
'getIdList'
];
endpoints.forEach(endpoint => {
try {
const response = testF1Endpoint(endpoint);
healthStatus.endpoints[endpoint] = {
status: 'healthy',
response_time: response.response_time,
last_successful_call: response.timestamp
};
} catch (error) {
healthStatus.endpoints[endpoint] = {
status: 'unhealthy',
error: error.message,
last_error: new Date()
};
healthStatus.overall_status = 'degraded';
}
});
// Monitor data quality
healthStatus.data_quality = {
completeness: checkDataCompleteness(),
accuracy: checkDataAccuracy(),
timeliness: checkDataTimeliness()
};
return healthStatus;
}
// Resource Data Validation
function validateResourceData(data, endpoint) {
const validation = {
valid: true,
errors: [],
warnings: []
};
switch (endpoint) {
case 'getProjectAssignments':
validation = validateProjectAssignmentData(data);
break;
case 'getUtilizationReportByMonth':
validation = validateUtilizationData(data);
break;
case 'getIdList':
validation = validateFilterData(data);
break;
}
return validation;
}
Best Practices and Guidelines¶
Integration Usage Guidelines¶
When working with the F1 resource management integration, follow these best practices:
Data Quality: - Always validate request parameters before calling F1 endpoints - Implement proper error handling for all API calls - Monitor data quality and completeness regularly
Performance Optimization: - Use appropriate date ranges to limit data volume - Implement caching for frequently accessed data - Use filters to reduce payload sizes
Security Considerations: - Ensure proper authentication for all F1 API calls - Log access for audit purposes - Follow rate limiting guidelines
Error Handling¶
// F1 Error Handling
function handleF1Error(error, endpoint, requestData) {
const errorLog = {
timestamp: new Date(),
endpoint: endpoint,
error_type: error.type || 'unknown',
message: error.message,
request_data: requestData,
severity: determineSeverity(error)
};
logF1Error(errorLog);
// Determine recovery action based on error type
switch (error.type) {
case 'timeout':
return retryWithBackoff(endpoint, requestData);
case 'authentication_failed':
return refreshAuthAndRetry(endpoint, requestData);
case 'validation_error':
return handleValidationError(errorLog);
case 'rate_limit_exceeded':
return scheduleRetry(endpoint, requestData);
default:
return escalateError(errorLog);
}
}
This F1 integration provides essential resource management capabilities for the Stratpoint Timesheet Application, enabling comprehensive workforce analytics, project assignment tracking, and employee utilization reporting for optimal resource planning and strategic decision-making.