- name
- mixed-fleet-coordinator
- description
- Coordinate mixed-brand smaller equipment for mid-size farms (100-2,000 acres) with different tractor and implement brands. Use when the user asks about mixed fleet coordinator.
# Mixed Fleet Coordinator
Coordinate mixed-brand smaller equipment for mid-size farms (100-2,000 acres) with different tractor and implement brands.
## Purpose
Enable mid-size farms to operate mixed-brand equipment efficiently without the complexity and cost of enterprise fleet management systems. Provide coordination capabilities that work across John Deere, Case IH, AGCO, Kubota, and other equipment brands.
## Problem Solved
Mid-size farms often have:
- Mixed equipment brands due to acquisitions, dealer availability, or budget constraints
- Difficulty scheduling operations across different equipment
- Incompatibility between brand-specific systems
- Lack of unified fleet visibility
- Inefficient equipment utilization
Farmers need:
- Single view of all equipment regardless of brand
- Cross-brand operation scheduling
- Equipment availability tracking
- Maintenance coordination
- Cost analysis by equipment piece
## Capabilities
### Equipment Inventory Management
**Equipment Registration**
- Register all equipment regardless of brand
- Store manufacturer, model, serial number
- Capture specifications (horsepower, PTO, hydraulics)
- Track equipment location and status
- Assign equipment to fields/operations
**Equipment Classification**
- Tractors (compact, utility, row crop)
- Implements (planters, drills, sprayers, combines)
- Support equipment (tillage, hay, harvest)
- Utility equipment (skid steers, loaders)
**Status Tracking**
- Available, In Use, Maintenance, Idle
- Location tracking (field, shop, storage)
- Fuel/fuel level monitoring
- Operating hours tracking
- Utilization metrics
### Operation Scheduling
**Cross-Brand Scheduling**
- Schedule operations across all equipment
- Assign equipment based on availability and capability
- Prevent double-booking of equipment
- Prioritize critical operations
- Adjust for weather and delays
**Field Operation Planning**
- Create operation sequences for each field
- Assign optimal equipment per operation
- Estimate operation duration
- Track progress in real-time
- Alert on schedule conflicts
**Resource Allocation**
- Match equipment to field requirements
- Consider equipment size vs field size
- Account for equipment capabilities
- Balance workload across equipment
- Optimize for efficiency
### Maintenance Coordination
**Maintenance Scheduling**
- Track maintenance schedules by equipment
- Alert based on hours, days, or usage
- Coordinate with operation schedules
- Schedule around critical operations
- Track maintenance history
**Service Provider Integration**
- Maintain list of service providers
- Schedule service appointments
- Track service costs
- Coordinate parts ordering
- Document service results
**Breakdown Management**
- Rapid breakdown logging
- Identify backup equipment options
- Reassign operations if needed
- Track downtime and costs
- Generate breakdown reports
### Performance Analytics
**Equipment Utilization**
- Track hours by equipment piece
- Calculate utilization percentage
- Compare actual vs planned usage
- Identify underutilized equipment
- Generate utilization reports
**Cost Analysis**
- Track costs by equipment piece
- Calculate cost per hour of operation
- Compare costs across equipment
- Identify high-cost equipment
- Generate cost optimization reports
**Efficiency Metrics**
- Work rate (acres/hour, tons/hour)
- Fuel efficiency (acres/gallon)
- Downtime percentage
- On-time completion rate
- Overall fleet efficiency
### Communication and Alerts
**Status Notifications**
- Equipment status changes
- Operation completion alerts
- Maintenance due reminders
- Breakdown notifications
- Schedule conflict alerts
**Operator Communication**
- Assign operators to equipment
- Send operation assignments
- Receive status updates
- Track operator hours
- Generate operator reports
**Integration Options**
- SMS/text notifications
- Email alerts
- Mobile app notifications
- Web dashboard access
- API integration
## Instructions
### Usage by AI Agent
#### 1. Initial Setup
**Register Equipment:**
```python
def register_equipment(equipment_data):
"""
Register a new piece of equipment
Args:
equipment_data: Dictionary with equipment details
Returns:
equipment_id: ID of registered equipment
"""
fields = [
'name', 'manufacturer', 'model', 'serial_number',
'equipment_type', 'horsepower', 'pto_hp', 'hydraulics',
'fuel_type', 'year', 'purchase_date', 'purchase_price'
]
# Validate required fields
for field in ['name', 'manufacturer', 'model', 'equipment_type']:
if field not in equipment_data:
raise ValueError(f"Missing required field: {field}")
# Insert into database
equipment_id = db.insert('equipment', equipment_data)
# Log registration
log_event('equipment_registered', equipment_id, equipment_data)
return equipment_id
```
**Import Equipment from Files:**
- CSV import from existing inventories
- JSON import from other systems
- Manual entry for individual pieces
- Bulk import for large fleets
**Configure Equipment Capabilities:**
- Compatible implements
- Field size limitations
- Operation types supported
- Attachment capabilities
- GPS/precision compatibility
#### 2. Operation Planning
**Create Operation Plan:**
1. Select field(s) for operation
2. Define operation type (planting, spraying, harvest, etc.)
3. Set operation window (start/end dates)
4. Assign priority level
5. Select required equipment
6. Estimate duration based on field size
7. Check equipment availability
8. Assign operators if needed
9. Save operation plan
**Validate Operation Plan:**
```python
def validate_operation_plan(operation_plan):
"""
Validate operation plan for conflicts and feasibility
Returns:
dict: Validation results with warnings/errors
"""
issues = []
# Check equipment availability
for equipment_id in operation_plan['equipment_ids']:
if not is_equipment_available(
equipment_id,
operation_plan['start_date'],
operation_plan['end_date']
):
issues.append({
'type': 'conflict',
'equipment_id': equipment_id,
'message': 'Equipment not available'
})
# Check operator availability
for operator_id in operation_plan['operator_ids']:
if not is_operator_available(
operator_id,
operation_plan['start_date'],
operation_plan['end_date']
):
issues.append({
'type': 'conflict',
'operator_id': operator_id,
'message': 'Operator not available'
})
# Check equipment compatibility with field
field = get_field(operation_plan['field_id'])
for equipment_id in operation_plan['equipment_ids']:
equipment = get_equipment(equipment_id)
if not is_equipment_compatible(equipment, field):
issues.append({
'type': 'warning',
'equipment_id': equipment_id,
'message': 'Equipment may not be optimal for field size'
})
return {
'valid': len([i for i in issues if i['type'] == 'error']) == 0,
'issues': issues
}
```
#### 3. Scheduling and Coordination
**Generate Schedule:**
1. Load all pending operations
2. Sort by priority and dependencies
3. Check equipment availability
4. Resolve conflicts
5. Assign dates and times
6. Generate schedule view
7. Send notifications to operators
**Monitor Operations:**
- Track operation progress
- Update equipment status
- Log completion times
- Record any issues
- Update inventory usage
**Handle Schedule Changes:**
```python
def reschedule_operation(operation_id, new_start_date, new_end_date, reason):
"""
Reschedule an operation and handle dependent operations
Args:
operation_id: ID of operation to reschedule
new_start_date: New start date/time
new_end_date: New end date/time
reason: Reason for rescheduling
"""
# Get operation details
operation = get_operation(operation_id)
# Check for conflicts with new dates
conflicts = check_schedule_conflicts(
operation['equipment_ids'],
operation['operator_ids'],
new_start_date,
new_end_date
)
if conflicts:
raise ScheduleConflictError(conflicts)
# Reschedule the operation
update_operation(operation_id, {
'start_date': new_start_date,
'end_date': new_end_date,
'status': 'rescheduled',
'reschedule_reason': reason
})
# Check for dependent operations
dependencies = get_dependent_operations(operation_id)
for dep_op in dependencies:
# Propagate reschedule to dependent operations
shift_operation(
dep_op['id'],
new_end_date - operation['end_date'],
f"Dependent operation rescheduled: {reason}"
)
# Send notifications
notify_stakeholders(
'operation_rescheduled',
operation_id,
{'new_dates': (new_start_date, new_end_date), 'reason': reason}
)
```
#### 4. Maintenance Management
**Track Maintenance Needs:**
```python
def check_maintenance_due():
"""
Check for equipment requiring maintenance
Returns:
list: Equipment IDs requiring maintenance
"""
due_for_maintenance = []
equipment_list = get_all_equipment()
for equipment in equipment_list:
# Check hour-based maintenance
if equipment['current_hours'] >= equipment['maintenance_hours']:
due_for_maintenance.append({
'equipment_id': equipment['id'],
'type': 'hour_based',
'current_hours': equipment['current_hours'],
'maintenance_hours': equipment['maintenance_hours']
})
# Check time-based maintenance
days_since_service = (
datetime.now() - equipment['last_service_date']
).days
if days_since_service >= equipment['maintenance_days']:
due_for_maintenance.append({
'equipment_id': equipment['id'],
'type': 'time_based',
'days_since': days_since_service,
'maintenance_days': equipment['maintenance_days']
})
# Check usage-based maintenance
if equipment['usage_count'] >= equipment['maintenance_usage']:
due_for_maintenance.append({
'equipment_id': equipment['id'],
'type': 'usage_based',
'current_usage': equipment['usage_count'],
'maintenance_usage': equipment['maintenance_usage']
})
return due_for_maintenance
```
**Schedule Maintenance:**
1. Identify equipment needing maintenance
2. Find optimal maintenance window
3. Check for conflicts with operations
4. Schedule maintenance appointment
5. Notify operator and mechanic
6. Track maintenance completion
7. Update equipment status
#### 5. Performance Analysis
**Generate Utilization Report:**
```python
def generate_utilization_report(start_date, end_date, equipment_ids=None):
"""
Generate equipment utilization report
Args:
start_date: Report start date
end_date: Report end date
equipment_ids: Optional list of equipment IDs
Returns:
dict: Utilization data by equipment
"""
report = {}
# Get equipment to report on
if equipment_ids:
equipment_list = [get_equipment(id) for id in equipment_ids]
else:
equipment_list = get_all_equipment()
for equipment in equipment_list:
# Calculate total available hours
total_days = (end_date - start_date).days
available_hours = total_days * 24 # Simplified
# Get operations for this equipment
operations = get_operations_for_equipment(
equipment['id'],
start_date,
end_date
)
# Calculate used hours
used_hours = sum(
(op['end_time'] - op['start_time']).total_seconds() / 3600
for op in operations
)
# Calculate utilization
utilization = (used_hours / available_hours) * 100 if available_hours > 0 else 0
report[equipment['id']] = {
'name': equipment['name'],
'manufacturer': equipment['manufacturer'],
'model': equipment['model'],
'available_hours': available_hours,
'used_hours': used_hours,
'utilization_percent': utilization,
'operation_count': len(operations)
}
return report
```
**Calculate Cost Per Hour:**
```python
def calculate_cost_per_hour(equipment_id, period_start, period_end):
"""
Calculate operating cost per hour for equipment
Args:
equipment_id: Equipment ID
period_start: Period start date
period_end: Period end date
Returns:
float: Cost per hour
"""
equipment = get_equipment(equipment_id)
# Get operating hours for period
operations = get_operations_for_equipment(
equipment_id,
period_start,
period_end
)
operating_hours = sum(
(op['end_time'] - op['start_time']).total_seconds() / 3600
for op in operations
)
# Get costs for period
costs = {
'fuel': get_fuel_costs(equipment_id, period_start, period_end),
'maintenance': get_maintenance_costs(equipment_id, period_start, period_end),
'repairs': get_repair_costs(equipment_id, period_start, period_end),
'depreciation': calculate_depreciation(equipment, period_start, period_end)
}
total_cost = sum(costs.values())
if operating_hours > 0:
cost_per_hour = total_cost / operating_hours
else:
cost_per_hour = 0
return {
'equipment_id': equipment_id,
'period': (period_start, period_end),
'operating_hours': operating_hours,
'costs': costs,
'total_cost': total_cost,
'cost_per_hour': cost_per_hour
}
```
### Implementation Checklist
**Data Collection:**
- [ ] List all equipment (brand, model, serial)
- [ ] Capture equipment specifications
- [ ] Record current hours/usage
- [ ] Note maintenance history
- [ ] Document service providers
**System Setup:**
- [ ] Register all equipment in system
- [ ] Import field boundaries
- [ ] Define operation types
- [ ] Configure notification settings
- [ ] Set up user accounts
**Integration:**
- [ ] Connect to GPS systems (if available)
- [ ] Import maintenance schedules
- [ ] Configure alert thresholds
Ver no GitHub