construction-expert
Expert-level construction management, project planning, BIM, safety compliance, and construction technology
What this skill does
# Construction Expert
Expert guidance for construction management, project planning, Building Information Modeling (BIM), safety compliance, and modern construction technology solutions.
## Core Concepts
### Construction Management
- Project planning and scheduling
- Cost estimation and control
- Resource management
- Quality assurance
- Contract management
- Risk management
- Change order management
### Technologies
- Building Information Modeling (BIM)
- Construction management software
- Drone surveying and inspection
- 3D printing and modular construction
- IoT sensors for monitoring
- Augmented reality for visualization
- Construction robotics
### Standards and Regulations
- OSHA safety regulations
- Building codes (IBC, IRC)
- AIA contracts and standards
- LEED certification
- ISO 19650 (BIM standards)
- CSI MasterFormat
- Environmental regulations
## Project Management System
```python
from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import List, Optional, Dict
from decimal import Decimal
from enum import Enum
class ProjectPhase(Enum):
PRE_CONSTRUCTION = "pre_construction"
SITE_PREPARATION = "site_preparation"
FOUNDATION = "foundation"
FRAMING = "framing"
MEP = "mep" # Mechanical, Electrical, Plumbing
INTERIOR = "interior"
EXTERIOR = "exterior"
FINAL = "final"
CLOSEOUT = "closeout"
class TaskStatus(Enum):
NOT_STARTED = "not_started"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
DELAYED = "delayed"
ON_HOLD = "on_hold"
@dataclass
class ConstructionProject:
"""Construction project information"""
project_id: str
project_name: str
location: dict
project_type: str # 'residential', 'commercial', 'industrial'
owner: str
general_contractor: str
start_date: datetime
planned_end_date: datetime
actual_end_date: Optional[datetime]
budget: Decimal
current_cost: Decimal
square_footage: float
current_phase: ProjectPhase
@dataclass
class Task:
"""Construction task/activity"""
task_id: str
project_id: str
name: str
description: str
phase: ProjectPhase
status: TaskStatus
assigned_to: str # Subcontractor or crew
planned_start: datetime
planned_end: datetime
actual_start: Optional[datetime]
actual_end: Optional[datetime]
budget: Decimal
actual_cost: Decimal
predecessors: List[str] # Task IDs that must complete first
progress_percent: float
class ConstructionManagementSystem:
"""Construction project management system"""
def __init__(self):
self.projects = {}
self.tasks = {}
self.change_orders = []
self.inspections = []
def create_project_schedule(self, project_id: str, tasks_data: List[dict]) -> dict:
"""Create project schedule using Critical Path Method"""
project = self.projects.get(project_id)
if not project:
return {'error': 'Project not found'}
# Create tasks
tasks = []
for task_data in tasks_data:
task = Task(
task_id=self._generate_task_id(),
project_id=project_id,
name=task_data['name'],
description=task_data.get('description', ''),
phase=ProjectPhase(task_data['phase']),
status=TaskStatus.NOT_STARTED,
assigned_to=task_data['assigned_to'],
planned_start=task_data['planned_start'],
planned_end=task_data['planned_end'],
actual_start=None,
actual_end=None,
budget=Decimal(str(task_data['budget'])),
actual_cost=Decimal('0'),
predecessors=task_data.get('predecessors', []),
progress_percent=0.0
)
tasks.append(task)
self.tasks[task.task_id] = task
# Calculate critical path
critical_path = self._calculate_critical_path(tasks)
# Calculate project duration
if tasks:
project_end = max(t.planned_end for t in tasks)
project_duration = (project_end - project.start_date).days
else:
project_duration = 0
return {
'project_id': project_id,
'total_tasks': len(tasks),
'project_duration_days': project_duration,
'critical_path': [t.task_id for t in critical_path],
'critical_path_duration': sum(
(t.planned_end - t.planned_start).days for t in critical_path
)
}
def _calculate_critical_path(self, tasks: List[Task]) -> List[Task]:
"""Calculate critical path through project network"""
# Simplified critical path calculation
# In production, would use proper CPM algorithm
# Find tasks with no predecessors
start_tasks = [t for t in tasks if not t.predecessors]
# Find longest path through network
critical_path = []
current_tasks = start_tasks
while current_tasks:
# Find task with longest duration
longest_task = max(current_tasks,
key=lambda t: (t.planned_end - t.planned_start).days)
critical_path.append(longest_task)
# Find successors
current_tasks = [
t for t in tasks
if longest_task.task_id in t.predecessors
]
return critical_path
def track_progress(self, project_id: str) -> dict:
"""Track project progress and performance"""
project = self.projects.get(project_id)
if not project:
return {'error': 'Project not found'}
project_tasks = [t for t in self.tasks.values() if t.project_id == project_id]
# Calculate overall progress
if project_tasks:
overall_progress = sum(t.progress_percent for t in project_tasks) / len(project_tasks)
else:
overall_progress = 0.0
# Calculate schedule performance
total_planned_days = (project.planned_end_date - project.start_date).days
elapsed_days = (datetime.now() - project.start_date).days
planned_progress = (elapsed_days / total_planned_days * 100) if total_planned_days > 0 else 0
schedule_variance = overall_progress - planned_progress
# Calculate cost performance
cost_variance = project.budget - project.current_cost
cost_performance_index = float(project.budget / project.current_cost) if project.current_cost > 0 else 1.0
# Calculate estimated completion date
if overall_progress > 0:
estimated_total_days = elapsed_days / (overall_progress / 100)
estimated_completion = project.start_date + timedelta(days=estimated_total_days)
else:
estimated_completion = project.planned_end_date
return {
'project_id': project_id,
'overall_progress_percent': overall_progress,
'schedule_variance_percent': schedule_variance,
'schedule_status': 'ahead' if schedule_variance > 0 else 'behind' if schedule_variance < 0 else 'on_track',
'cost_variance': float(cost_variance),
'cost_performance_index': cost_performance_index,
'budget_status': 'under' if cost_variance > 0 else 'over',
'estimated_completion': estimated_completion.isoformat(),
'days_variance': (estimated_completion - project.planned_end_date).days
}
def manage_change_order(self, project_id: str, change_data: dict) -> dict:
"""Manage construction change orders"""
project = self.projects.get(project_id)
if not project:
return {'error': 'Project not found'}
change_order = {
'co_id': self._generate_co_id(),
'project_id': project_id,
'description': change_data['description'],
Related in domains
aerospace-expert
IncludedExpert-level aerospace systems, flight management, maintenance tracking, aviation safety, and aerospace software
automotive-expert
IncludedExpert-level automotive systems, connected vehicles, fleet management, telematics, ADAS, and automotive software
real-estate-expert
IncludedExpert-level real estate systems, property management, MLS integration, CRM, virtual tours, and market analysis
manufacturing-expert
IncludedExpert-level manufacturing systems, Industry 4.0, production optimization, quality control, and smart factory solutions
retail-expert
IncludedExpert-level retail systems, POS, inventory management, e-commerce, customer analytics, and omnichannel retail
insurance-expert
IncludedExpert-level insurance systems, underwriting, claims processing, actuarial analysis, risk assessment, and insurtech solutions