Spaces:
Sleeping
Sleeping
import matplotlib.pyplot as plt | |
def validate_inputs(input_data): | |
""" | |
Validate input data for required fields and ranges. | |
""" | |
required_fields = [ | |
"project_name", "phase", "task", "current_progress", | |
"task_expected_duration", "task_actual_duration", "workforce_gap", | |
"workforce_skill_level", "workforce_shift_hours", "weather_impact_score", | |
"weather_condition", "weather_forecast_date", "project_location" | |
] | |
for field in required_fields: | |
if not input_data[field]: | |
return f"Please select or fill in {field.replace('_', ' ').lower()}" | |
if not (0 <= input_data["current_progress"] <= 100): | |
return "Current progress must be between 0 and 100" | |
if not (0 <= input_data["workforce_gap"] <= 100): | |
return "Workforce gap must be between 0 and 100" | |
if not (0 <= input_data["weather_impact_score"] <= 100): | |
return "Weather impact score must be between 0 and 100" | |
return None | |
def generate_heatmap(delay_probability, label): | |
""" | |
Generate a Chart.js bar chart configuration to visualize delay probability. | |
Returns a Chart.js configuration dictionary. | |
""" | |
color = '#FF0000' if delay_probability > 75 else '#FFFF00' if delay_probability > 50 else '#00FF00' | |
chart_config = { | |
"type": "bar", | |
"data": { | |
"labels": [label], | |
"datasets": [{ | |
"label": "Delay Probability (%)", | |
"data": [delay_probability], | |
"backgroundColor": [color], | |
"borderColor": ["#000000"], | |
"borderWidth": 1 | |
}] | |
}, | |
"options": { | |
"indexAxis": "y", | |
"scales": { | |
"x": { | |
"beginAtZero": True, | |
"max": 100, | |
"title": {"display": True, "text": "Delay Probability (%)"} | |
}, | |
"y": {"title": {"display": True, "text": "Task"}} | |
}, | |
"plugins": { | |
"title": {"display": True, "text": "Delay Risk Heatmap"} | |
} | |
} | |
} | |
return chart_config |