129 lines
3.0 KiB
JSON
129 lines
3.0 KiB
JSON
{
|
|
"name": "WorkerAvailability",
|
|
"type": "object",
|
|
"properties": {
|
|
"staff_id": {
|
|
"type": "string",
|
|
"description": "Reference to Staff entity"
|
|
},
|
|
"staff_name": {
|
|
"type": "string",
|
|
"description": "Staff member name"
|
|
},
|
|
"availability_status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CONFIRMED_AVAILABLE",
|
|
"UNKNOWN",
|
|
"BLOCKED"
|
|
],
|
|
"default": "UNKNOWN",
|
|
"description": "Current availability status"
|
|
},
|
|
"predicted_availability_score": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 100,
|
|
"default": 50,
|
|
"description": "ML/rules-based prediction of availability (0-100)"
|
|
},
|
|
"need_work_index": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 100,
|
|
"default": 0,
|
|
"description": "How much worker needs hours (0-100)"
|
|
},
|
|
"scheduled_hours_this_period": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "Hours scheduled in current period"
|
|
},
|
|
"desired_hours_this_period": {
|
|
"type": "number",
|
|
"default": 40,
|
|
"description": "Hours worker wants in current period"
|
|
},
|
|
"last_shift_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"description": "Date of last completed shift"
|
|
},
|
|
"acceptance_rate": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 100,
|
|
"default": 0,
|
|
"description": "Historical acceptance rate percentage"
|
|
},
|
|
"utilization_percentage": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 100,
|
|
"default": 0,
|
|
"description": "Scheduled hours / desired hours * 100"
|
|
},
|
|
"days_since_last_shift": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "Days since last shift"
|
|
},
|
|
"total_shifts_this_period": {
|
|
"type": "number",
|
|
"default": 0,
|
|
"description": "Number of shifts in current period"
|
|
},
|
|
"available_dates": {
|
|
"type": "array",
|
|
"description": "Dates worker is confirmed available",
|
|
"items": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
},
|
|
"blocked_dates": {
|
|
"type": "array",
|
|
"description": "Dates worker is blocked/unavailable",
|
|
"items": {
|
|
"type": "string",
|
|
"format": "date"
|
|
}
|
|
},
|
|
"preferences": {
|
|
"type": "object",
|
|
"description": "Worker preferences",
|
|
"properties": {
|
|
"preferred_days": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"preferred_shift_types": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Morning",
|
|
"Day",
|
|
"Evening",
|
|
"Night",
|
|
"Overnight"
|
|
]
|
|
}
|
|
},
|
|
"max_commute_miles": {
|
|
"type": "number"
|
|
},
|
|
"wants_more_hours": {
|
|
"type": "boolean",
|
|
"default": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"staff_id",
|
|
"staff_name"
|
|
]
|
|
} |