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 |