cwicr-value-engineering
Perform value engineering analysis using CWICR data. Identify cost-saving alternatives while maintaining function and quality.
git clone --depth 1 https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction /tmp/cwicr-value-engineering && cp -r /tmp/cwicr-value-engineering/1_DDC_Toolkit/CWICR-Database/cwicr-value-engineering ~/.claude/skills/cwicr-value-engineeringSKILL.md
# CWICR Value Engineering
## Business Case
### Problem Statement
Projects often exceed budget:
- Where can costs be reduced?
- What alternatives exist?
- How to maintain quality?
- Document VE decisions
### Solution
Systematic value engineering using CWICR data to identify cost-effective alternatives, analyze trade-offs, and document decisions.
### Business Value
- **Cost savings** - Identify reduction opportunities
- **Quality maintenance** - Function-based analysis
- **Documentation** - VE proposal records
- **Client value** - Optimize value for cost
## Technical Implementation
```python
import pandas as pd
import numpy as np
from typing import Dict, Any, List, Optional, Tuple
from dataclasses import dataclass, field
from datetime import date
from enum import Enum
class VECategory(Enum):
"""Value engineering categories."""
MATERIAL = "material"
METHOD = "method"
DESIGN = "design"
SPECIFICATION = "specification"
SYSTEM = "system"
class VEStatus(Enum):
"""VE proposal status."""
PROPOSED = "proposed"
UNDER_REVIEW = "under_review"
ACCEPTED = "accepted"
REJECTED = "rejected"
IMPLEMENTED = "implemented"
@dataclass
class VEProposal:
"""Value engineering proposal."""
proposal_id: str
title: str
category: VECategory
description: str
original_item: str
proposed_item: str
original_cost: float
proposed_cost: float
savings: float
savings_percent: float
function_impact: str
quality_impact: str
schedule_impact: int
risk_assessment: str
status: VEStatus
@dataclass
class VEAnalysis:
"""Complete VE analysis."""
project_name: str
total_original_cost: float
total_proposed_cost: float
total_savings: float
savings_percent: float
proposals: List[VEProposal]
accepted_savings: float
pending_savings: float
class CWICRValueEngineering:
"""Value engineering analysis using CWICR data."""
def __init__(self, cwicr_data: pd.DataFrame):
self.cost_data = cwicr_data
self._index_data()
self._proposals: Dict[str, VEProposal] = {}
def _index_data(self):
"""Index cost data."""
if 'work_item_code' in self.cost_data.columns:
self._code_index = self.cost_data.set_index('work_item_code')
else:
self._code_index = None
def get_item_cost(self, code: str, quantity: float = 1) -> Tuple[float, Dict[str, float]]:
"""Get item cost breakdown."""
if self._code_index is None or code not in self._code_index.index:
return (0, {})
item = self._code_index.loc[code]
labor = float(item.get('labor_cost', 0) or 0) * quantity
material = float(item.get('material_cost', 0) or 0) * quantity
equipment = float(item.get('equipment_cost', 0) or 0) * quantity
return (labor + material + equipment, {
'labor': labor,
'material': material,
'equipment': equipment
})
def find_alternatives(self,
work_item_code: str,
quantity: float,
max_cost_increase: float = 0) -> List[Dict[str, Any]]:
"""Find alternative work items that could replace original."""
original_cost, _ = self.get_item_cost(work_item_code, quantity)
if self._code_index is None:
return []
# Get original item category
if work_item_code in self._code_index.index:
original = self._code_index.loc[work_item_code]
category = str(original.get('category', '')).lower()
else:
return []
alternatives = []
for code, row in self._code_index.iterrows():
if code == work_item_code:
continue
# Match by category prefix or similar category
item_category = str(row.get('category', '')).lower()
if category[:4] in item_category or item_category[:4] in category:
alt_cost, breakdown = self.get_item_cost(code, quantity)
if alt_cost <= original_cost * (1 + max_cost_increase):
savings = original_cost - alt_cost
alternatives.append({
'code': code,
'description': str(row.get('description', code)),
'cost': round(alt_cost, 2),
'savings': round(savings, 2),
'savings_pct': round(savings / original_cost * 100, 1) if original_cost > 0 else 0,
'breakdown': breakdown
})
# Sort by savings
return sorted(alternatives, key=lambda x: x['savings'], reverse=True)[:10]
def create_proposal(self,
proposal_id: str,
title: str,
category: VECategory,
description: str,
original_item: str,
proposed_item: str,
quantity: float,
function_impact: str = "Equivalent",
quality_impact: str = "Equivalent",
schedule_impact: int = 0,
risk_assessment: str = "Low") -> VEProposal:
"""Create VE proposal."""
original_cost, _ = self.get_item_cost(original_item, quantity)
proposed_cost, _ = self.get_item_cost(proposed_item, quantity)
savings = original_cost - proposed_cost
savings_pct = (savings / original_cost * 100) if original_cost > 0 else 0
proposal = VEProposal(
proposal_id=proposal_id,
title=title,
category=category,
description=description,
original_item=original_item,
proposed_item=proposed_item,
original_cost=round(original_cost, 2),
proposed_cost=round(proposed_cost, 2),Generate automated daily progress reports from site data. Track work completed, labor hours, equipment usage, and weather conditions.
Analyze labor productivity from site data. Compare planned vs actual, identify trends, benchmark against industry standards.
Create interactive KPI dashboards for construction projects. Track schedule, cost, quality, and safety metrics in real-time.
Detect and analyze geometric clashes in BIM models. Identify MEP, structural, and architectural conflicts before construction.
Classify BIM elements using AI and standard classification systems. Map elements to UniFormat, MasterFormat, OmniClass, and CWICR codes.
Generate comprehensive BIM model validation reports. Check data quality, completeness, and compliance with standards.
Calculate CO2 emissions and carbon footprint from BIM model data. Analyze embodied carbon by material, element, and building system.
Extract quantities from IFC/Revit models for quantity takeoff. Uses DDC converters to get element counts, areas, volumes, lengths with grouping and reporting.