BIM Validation Report Generator Business Case Problem Statement BIM models often have quality issues: - Missing required properties - Invalid or inconsistent data - Non-compliant with project standards - Incomplete model information Solution Automated BIM validation system that checks models against configurable rules and generates detailed compliance reports. Business Value - Quality assurance - Catch issues early - Standards compliance - Meet project requirements - Automation - Reduce manual QC effort - Transparency - Clear validation results Technical Implementation Quick Start Common Use…

, name))\n\n def _check_valid_bbox(self, element: Dict[str, Any]) -> bool:\n \"\"\"Check for valid bounding box.\"\"\"\n try:\n min_x = float(element.get('min_x', 0))\n max_x = float(element.get('max_x', 0))\n min_y = float(element.get('min_y', 0))\n max_y = float(element.get('max_y', 0))\n min_z = float(element.get('min_z', 0))\n max_z = float(element.get('max_z', 0))\n return max_x > min_x and max_y > min_y and max_z > min_z\n except (ValueError, TypeError):\n return False\n\n def add_rule(self, rule: ValidationRule):\n \"\"\"Add validation rule.\"\"\"\n self.rules.append(rule)\n\n def add_custom_rule(self, rule_id: str, name: str, category: RuleCategory,\n check_function: Callable, severity: ValidationSeverity = ValidationSeverity.WARNING,\n description: str = \"\", categories: List[str] = None):\n \"\"\"Add custom validation rule.\"\"\"\n rule = ValidationRule(\n rule_id=rule_id,\n name=name,\n category=category,\n description=description,\n severity=severity,\n check_function=check_function,\n applicable_categories=categories or []\n )\n self.add_rule(rule)\n\n def validate_element(self, element: Dict[str, Any]) -> List[ValidationIssue]:\n \"\"\"Validate single element against all rules.\"\"\"\n issues = []\n element_category = element.get('category', '')\n\n for rule in self.rules:\n if not rule.enabled:\n continue\n\n # Check if rule applies to this category\n if rule.applicable_categories and element_category not in rule.applicable_categories:\n continue\n\n try:\n passed = rule.check_function(element)\n if not passed:\n self._issue_counter += 1\n issue = ValidationIssue(\n issue_id=f\"ISS-{self._issue_counter:05d}\",\n rule_id=rule.rule_id,\n rule_name=rule.name,\n element_id=str(element.get('element_id', '')),\n element_name=str(element.get('name', '')),\n element_category=element_category,\n severity=rule.severity,\n message=rule.description\n )\n issues.append(issue)\n except Exception as e:\n # Rule check failed\n self._issue_counter += 1\n issue = ValidationIssue(\n issue_id=f\"ISS-{self._issue_counter:05d}\",\n rule_id=rule.rule_id,\n rule_name=rule.name,\n element_id=str(element.get('element_id', '')),\n element_name=str(element.get('name', '')),\n element_category=element_category,\n severity=ValidationSeverity.ERROR,\n message=f\"Rule check error: {str(e)}\"\n )\n issues.append(issue)\n\n return issues\n\n def validate_model(self, elements_df: pd.DataFrame) -> ValidationReport:\n \"\"\"Validate entire BIM model.\"\"\"\n self.issues = []\n elements_with_issues = set()\n\n for _, row in elements_df.iterrows():\n element = row.to_dict()\n element_issues = self.validate_element(element)\n\n if element_issues:\n elements_with_issues.add(element.get('element_id'))\n self.issues.extend(element_issues)\n\n # Calculate summaries\n summary_by_severity = {\n 'error': sum(1 for i in self.issues if i.severity == ValidationSeverity.ERROR),\n 'warning': sum(1 for i in self.issues if i.severity == ValidationSeverity.WARNING),\n 'info': sum(1 for i in self.issues if i.severity == ValidationSeverity.INFO)\n }\n\n summary_by_category = {}\n for issue in self.issues:\n cat = issue.element_category\n summary_by_category[cat] = summary_by_category.get(cat, 0) + 1\n\n # Determine overall status\n if summary_by_severity['error'] > 0:\n status = ValidationStatus.FAILED\n elif summary_by_severity['warning'] > 0:\n status = ValidationStatus.PASSED_WITH_WARNINGS\n else:\n status = ValidationStatus.PASSED\n\n return ValidationReport(\n project_name=self.project_name,\n model_name=self.model_name,\n validated_at=datetime.now(),\n status=status,\n total_elements=len(elements_df),\n elements_with_issues=len(elements_with_issues),\n issues=self.issues,\n rules_checked=len([r for r in self.rules if r.enabled]),\n summary_by_severity=summary_by_severity,\n summary_by_category=summary_by_category\n )\n\n def export_report(self, report: ValidationReport, output_path: str):\n \"\"\"Export validation report to Excel.\"\"\"\n with pd.ExcelWriter(output_path, engine='openpyxl') as writer:\n # Summary sheet\n summary_data = {\n 'Metric': ['Project', 'Model', 'Validated At', 'Status',\n 'Total Elements', 'Elements with Issues', 'Rules Checked',\n 'Errors', 'Warnings', 'Info'],\n 'Value': [report.project_name, report.model_name,\n report.validated_at.isoformat(), report.status.value,\n report.total_elements, report.elements_with_issues,\n report.rules_checked, report.summary_by_severity['error'],\n report.summary_by_severity['warning'], report.summary_by_severity['info']]\n }\n pd.DataFrame(summary_data).to_excel(writer, sheet_name='Summary', index=False)\n\n # Issues sheet\n issues_df = pd.DataFrame([i.to_dict() for i in report.issues])\n if not issues_df.empty:\n issues_df.to_excel(writer, sheet_name='Issues', index=False)\n\n # By Category sheet\n cat_df = pd.DataFrame([\n {'Category': k, 'Issue Count': v}\n for k, v in report.summary_by_category.items()\n ])\n if not cat_df.empty:\n cat_df.to_excel(writer, sheet_name='By Category', index=False)\n\n return output_path\n\n\ndef generate_validation_report(elements_df: pd.DataFrame,\n project_name: str,\n model_name: str,\n output_path: str = None) -> ValidationReport:\n \"\"\"Quick function to generate validation report.\"\"\"\n engine = BIMValidationEngine(project_name, model_name)\n report = engine.validate_model(elements_df)\n\n if output_path:\n engine.export_report(report, output_path)\n\n return report\n```\n\n## Quick Start\n\n```python\n# Load BIM elements\nelements = pd.read_excel(\"bim_elements.xlsx\")\n\n# Run validation\nreport = generate_validation_report(\n elements,\n project_name=\"Office Tower\",\n model_name=\"Architectural Model v3.2\",\n output_path=\"validation_report.xlsx\"\n)\n\nprint(f\"Status: {report.status.value}\")\nprint(f\"Errors: {report.summary_by_severity['error']}\")\nprint(f\"Warnings: {report.summary_by_severity['warning']}\")\n```\n\n## Common Use Cases\n\n### 1. Custom Validation Rules\n```python\nengine = BIMValidationEngine(\"Project\", \"Model\")\n\n# Add custom rule\nengine.add_custom_rule(\n rule_id=\"CUSTOM-001\",\n name=\"Fire Rating Required\",\n category=RuleCategory.REQUIRED_PROPERTIES,\n check_function=lambda e: bool(e.get('fire_rating')),\n severity=ValidationSeverity.ERROR,\n categories=[\"Walls\", \"Doors\"]\n)\n```\n\n### 2. Filter Issues\n```python\n# Get only errors\nerrors = [i for i in report.issues if i.severity == ValidationSeverity.ERROR]\n\n# Get issues for specific category\nwall_issues = [i for i in report.issues if i.element_category == \"Walls\"]\n```\n\n### 3. Automated QC Pipeline\n```python\nreport = engine.validate_model(elements)\nif report.status == ValidationStatus.FAILED:\n send_notification(\"BIM validation failed\", report.summary_by_severity)\n```\n\n## Resources\n- **DDC Book**: Chapter 4.3 - BIM Validation\n- **Reference**: ISO 19650, buildingSMART IDS\n---","attachment_filenames":["claw.json","instructions.md"],"attachments":[{"filename":"claw.json","content":"{\n \"name\": \"bim-validation-report\",\n \"version\": \"2.0.0\",\n \"description\": \"Generate comprehensive BIM model validation reports. Check data quality, completeness, and compliance with standards.\",\n \"author\": \"datadrivenconstruction\",\n \"license\": \"MIT\",\n \"permissions\": [\n \"filesystem\"\n ],\n \"entry\": \"instructions.md\",\n \"tags\": [\n \"construction\",\n \"BIM\",\n \"data-processing\",\n \"safety\",\n \"reporting\"\n ],\n \"models\": [\n \"claude-*\",\n \"gpt-*\"\n ],\n \"minOpenClawVersion\": \"0.8.0\"\n}","content_type":"application/json; charset=utf-8","language":"json","size":507,"content_sha256":"d61cc1c2e902a4cef198f6e6087d2203fac9f7e891b9ce6d8f591fdd265e5cf1"},{"filename":"instructions.md","content":"You are a construction industry assistant specializing in BIM (Building Information Modeling) data processing.\n\nGenerate comprehensive BIM model validation reports. Check data quality, completeness, and compliance with standards.\n\nWhen the user asks to generate documents or reports:\n1. Gather the required input data from the user\n2. Process the data using the methods described in SKILL.md\n3. Present results in a clear, structured format\n4. Offer follow-up analysis or export options\n\n## Input Format\n- The user provides project data, file paths, or parameters as described in SKILL.md\n- Accept data in common formats: CSV, Excel, JSON, or direct input\n\n## Output Format\n- Present results in structured tables when applicable\n- Include summary statistics and key findings\n- Offer export to Excel/CSV/JSON when relevant\n\n## Key Reference\n- See SKILL.md for detailed implementation code, classes, and methods\n- Follow the patterns and APIs defined in the skill documentation\n\n## Constraints\n- Only use data provided by the user or referenced in the skill\n- Validate inputs before processing\n- Report errors clearly with suggested fixes\n- Follow construction industry standards and best practices\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1197,"content_sha256":"8d6fc6a96b46e0b5ce42f767f1fe89b0549e22590cb7a0132d68055c08b89aa7"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"BIM Validation Report Generator","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Business Case","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Problem Statement","type":"text"}]},{"type":"paragraph","content":[{"text":"BIM models often have quality issues:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Missing required properties","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Invalid or inconsistent data","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Non-compliant with project standards","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Incomplete model information","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Solution","type":"text"}]},{"type":"paragraph","content":[{"text":"Automated BIM validation system that checks models against configurable rules and generates detailed compliance reports.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Business Value","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Quality assurance","type":"text","marks":[{"type":"strong"}]},{"text":" - Catch issues early","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Standards compliance","type":"text","marks":[{"type":"strong"}]},{"text":" - Meet project requirements","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Automation","type":"text","marks":[{"type":"strong"}]},{"text":" - Reduce manual QC effort","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Transparency","type":"text","marks":[{"type":"strong"}]},{"text":" - Clear validation results","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Technical Implementation","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"import pandas as pd\nfrom datetime import datetime\nfrom typing import Dict, Any, List, Optional, Callable\nfrom dataclasses import dataclass, field\nfrom enum import Enum\n\n\nclass ValidationSeverity(Enum):\n \"\"\"Validation issue severity.\"\"\"\n ERROR = \"error\"\n WARNING = \"warning\"\n INFO = \"info\"\n\n\nclass ValidationStatus(Enum):\n \"\"\"Overall validation status.\"\"\"\n PASSED = \"passed\"\n PASSED_WITH_WARNINGS = \"passed_with_warnings\"\n FAILED = \"failed\"\n\n\nclass RuleCategory(Enum):\n \"\"\"Validation rule categories.\"\"\"\n REQUIRED_PROPERTIES = \"required_properties\"\n DATA_FORMAT = \"data_format\"\n NAMING_CONVENTION = \"naming_convention\"\n GEOMETRIC = \"geometric\"\n CLASSIFICATION = \"classification\"\n RELATIONSHIPS = \"relationships\"\n\n\n@dataclass\nclass ValidationRule:\n \"\"\"Single validation rule.\"\"\"\n rule_id: str\n name: str\n category: RuleCategory\n description: str\n severity: ValidationSeverity\n check_function: Callable\n applicable_categories: List[str] = field(default_factory=list)\n enabled: bool = True\n\n\n@dataclass\nclass ValidationIssue:\n \"\"\"Single validation issue.\"\"\"\n issue_id: str\n rule_id: str\n rule_name: str\n element_id: str\n element_name: str\n element_category: str\n severity: ValidationSeverity\n message: str\n details: Dict[str, Any] = field(default_factory=dict)\n\n def to_dict(self) -> Dict[str, Any]:\n return {\n 'issue_id': self.issue_id,\n 'rule_id': self.rule_id,\n 'rule_name': self.rule_name,\n 'element_id': self.element_id,\n 'element_name': self.element_name,\n 'element_category': self.element_category,\n 'severity': self.severity.value,\n 'message': self.message\n }\n\n\n@dataclass\nclass ValidationReport:\n \"\"\"Complete validation report.\"\"\"\n project_name: str\n model_name: str\n validated_at: datetime\n status: ValidationStatus\n total_elements: int\n elements_with_issues: int\n issues: List[ValidationIssue]\n rules_checked: int\n summary_by_severity: Dict[str, int]\n summary_by_category: Dict[str, int]\n\n\nclass BIMValidationEngine:\n \"\"\"BIM model validation engine.\"\"\"\n\n def __init__(self, project_name: str, model_name: str):\n self.project_name = project_name\n self.model_name = model_name\n self.rules: List[ValidationRule] = []\n self.issues: List[ValidationIssue] = []\n self._issue_counter = 0\n\n # Load default rules\n self._load_default_rules()\n\n def _load_default_rules(self):\n \"\"\"Load standard validation rules.\"\"\"\n\n # Required properties rules\n self.add_rule(ValidationRule(\n rule_id=\"REQ-001\",\n name=\"Element Name Required\",\n category=RuleCategory.REQUIRED_PROPERTIES,\n description=\"All elements must have a name\",\n severity=ValidationSeverity.ERROR,\n check_function=lambda e: bool(e.get('name'))\n ))\n\n self.add_rule(ValidationRule(\n rule_id=\"REQ-002\",\n name=\"Level Assignment Required\",\n category=RuleCategory.REQUIRED_PROPERTIES,\n description=\"Elements must be assigned to a level\",\n severity=ValidationSeverity.WARNING,\n check_function=lambda e: bool(e.get('level')),\n applicable_categories=[\"Walls\", \"Floors\", \"Doors\", \"Windows\"]\n ))\n\n self.add_rule(ValidationRule(\n rule_id=\"REQ-003\",\n name=\"Material Required\",\n category=RuleCategory.REQUIRED_PROPERTIES,\n description=\"Structural elements must have material defined\",\n severity=ValidationSeverity.ERROR,\n check_function=lambda e: bool(e.get('material')),\n applicable_categories=[\"Structural Columns\", \"Structural Framing\", \"Floors\"]\n ))\n\n # Naming convention rules\n self.add_rule(ValidationRule(\n rule_id=\"NAM-001\",\n name=\"No Special Characters\",\n category=RuleCategory.NAMING_CONVENTION,\n description=\"Names should not contain special characters\",\n severity=ValidationSeverity.WARNING,\n check_function=self._check_no_special_chars\n ))\n\n self.add_rule(ValidationRule(\n rule_id=\"NAM-002\",\n name=\"Name Length Check\",\n category=RuleCategory.NAMING_CONVENTION,\n description=\"Names should be between 3 and 100 characters\",\n severity=ValidationSeverity.INFO,\n check_function=lambda e: 3 \u003c= len(e.get('name', '')) \u003c= 100\n ))\n\n # Classification rules\n self.add_rule(ValidationRule(\n rule_id=\"CLS-001\",\n name=\"Classification Code Present\",\n category=RuleCategory.CLASSIFICATION,\n description=\"Elements should have classification code\",\n severity=ValidationSeverity.WARNING,\n check_function=lambda e: bool(e.get('classification_code') or e.get('uniformat'))\n ))\n\n # Geometric rules\n self.add_rule(ValidationRule(\n rule_id=\"GEO-001\",\n name=\"Non-Zero Volume\",\n category=RuleCategory.GEOMETRIC,\n description=\"3D elements must have non-zero volume\",\n severity=ValidationSeverity.ERROR,\n check_function=lambda e: float(e.get('volume', 0)) > 0,\n applicable_categories=[\"Walls\", \"Floors\", \"Structural Columns\", \"Structural Framing\"]\n ))\n\n self.add_rule(ValidationRule(\n rule_id=\"GEO-002\",\n name=\"Valid Bounding Box\",\n category=RuleCategory.GEOMETRIC,\n description=\"Elements must have valid bounding box\",\n severity=ValidationSeverity.ERROR,\n check_function=self._check_valid_bbox\n ))\n\n def _check_no_special_chars(self, element: Dict[str, Any]) -> bool:\n \"\"\"Check name for special characters.\"\"\"\n import re\n name = element.get('name', '')\n return bool(re.match(r'^[\\w\\s\\-\\.]+

BIM Validation Report Generator Business Case Problem Statement BIM models often have quality issues: - Missing required properties - Invalid or inconsistent data - Non-compliant with project standards - Incomplete model information Solution Automated BIM validation system that checks models against configurable rules and generates detailed compliance reports. Business Value - Quality assurance - Catch issues early - Standards compliance - Meet project requirements - Automation - Reduce manual QC effort - Transparency - Clear validation results Technical Implementation Quick Start Common Use…

, name))\n\n def _check_valid_bbox(self, element: Dict[str, Any]) -> bool:\n \"\"\"Check for valid bounding box.\"\"\"\n try:\n min_x = float(element.get('min_x', 0))\n max_x = float(element.get('max_x', 0))\n min_y = float(element.get('min_y', 0))\n max_y = float(element.get('max_y', 0))\n min_z = float(element.get('min_z', 0))\n max_z = float(element.get('max_z', 0))\n return max_x > min_x and max_y > min_y and max_z > min_z\n except (ValueError, TypeError):\n return False\n\n def add_rule(self, rule: ValidationRule):\n \"\"\"Add validation rule.\"\"\"\n self.rules.append(rule)\n\n def add_custom_rule(self, rule_id: str, name: str, category: RuleCategory,\n check_function: Callable, severity: ValidationSeverity = ValidationSeverity.WARNING,\n description: str = \"\", categories: List[str] = None):\n \"\"\"Add custom validation rule.\"\"\"\n rule = ValidationRule(\n rule_id=rule_id,\n name=name,\n category=category,\n description=description,\n severity=severity,\n check_function=check_function,\n applicable_categories=categories or []\n )\n self.add_rule(rule)\n\n def validate_element(self, element: Dict[str, Any]) -> List[ValidationIssue]:\n \"\"\"Validate single element against all rules.\"\"\"\n issues = []\n element_category = element.get('category', '')\n\n for rule in self.rules:\n if not rule.enabled:\n continue\n\n # Check if rule applies to this category\n if rule.applicable_categories and element_category not in rule.applicable_categories:\n continue\n\n try:\n passed = rule.check_function(element)\n if not passed:\n self._issue_counter += 1\n issue = ValidationIssue(\n issue_id=f\"ISS-{self._issue_counter:05d}\",\n rule_id=rule.rule_id,\n rule_name=rule.name,\n element_id=str(element.get('element_id', '')),\n element_name=str(element.get('name', '')),\n element_category=element_category,\n severity=rule.severity,\n message=rule.description\n )\n issues.append(issue)\n except Exception as e:\n # Rule check failed\n self._issue_counter += 1\n issue = ValidationIssue(\n issue_id=f\"ISS-{self._issue_counter:05d}\",\n rule_id=rule.rule_id,\n rule_name=rule.name,\n element_id=str(element.get('element_id', '')),\n element_name=str(element.get('name', '')),\n element_category=element_category,\n severity=ValidationSeverity.ERROR,\n message=f\"Rule check error: {str(e)}\"\n )\n issues.append(issue)\n\n return issues\n\n def validate_model(self, elements_df: pd.DataFrame) -> ValidationReport:\n \"\"\"Validate entire BIM model.\"\"\"\n self.issues = []\n elements_with_issues = set()\n\n for _, row in elements_df.iterrows():\n element = row.to_dict()\n element_issues = self.validate_element(element)\n\n if element_issues:\n elements_with_issues.add(element.get('element_id'))\n self.issues.extend(element_issues)\n\n # Calculate summaries\n summary_by_severity = {\n 'error': sum(1 for i in self.issues if i.severity == ValidationSeverity.ERROR),\n 'warning': sum(1 for i in self.issues if i.severity == ValidationSeverity.WARNING),\n 'info': sum(1 for i in self.issues if i.severity == ValidationSeverity.INFO)\n }\n\n summary_by_category = {}\n for issue in self.issues:\n cat = issue.element_category\n summary_by_category[cat] = summary_by_category.get(cat, 0) + 1\n\n # Determine overall status\n if summary_by_severity['error'] > 0:\n status = ValidationStatus.FAILED\n elif summary_by_severity['warning'] > 0:\n status = ValidationStatus.PASSED_WITH_WARNINGS\n else:\n status = ValidationStatus.PASSED\n\n return ValidationReport(\n project_name=self.project_name,\n model_name=self.model_name,\n validated_at=datetime.now(),\n status=status,\n total_elements=len(elements_df),\n elements_with_issues=len(elements_with_issues),\n issues=self.issues,\n rules_checked=len([r for r in self.rules if r.enabled]),\n summary_by_severity=summary_by_severity,\n summary_by_category=summary_by_category\n )\n\n def export_report(self, report: ValidationReport, output_path: str):\n \"\"\"Export validation report to Excel.\"\"\"\n with pd.ExcelWriter(output_path, engine='openpyxl') as writer:\n # Summary sheet\n summary_data = {\n 'Metric': ['Project', 'Model', 'Validated At', 'Status',\n 'Total Elements', 'Elements with Issues', 'Rules Checked',\n 'Errors', 'Warnings', 'Info'],\n 'Value': [report.project_name, report.model_name,\n report.validated_at.isoformat(), report.status.value,\n report.total_elements, report.elements_with_issues,\n report.rules_checked, report.summary_by_severity['error'],\n report.summary_by_severity['warning'], report.summary_by_severity['info']]\n }\n pd.DataFrame(summary_data).to_excel(writer, sheet_name='Summary', index=False)\n\n # Issues sheet\n issues_df = pd.DataFrame([i.to_dict() for i in report.issues])\n if not issues_df.empty:\n issues_df.to_excel(writer, sheet_name='Issues', index=False)\n\n # By Category sheet\n cat_df = pd.DataFrame([\n {'Category': k, 'Issue Count': v}\n for k, v in report.summary_by_category.items()\n ])\n if not cat_df.empty:\n cat_df.to_excel(writer, sheet_name='By Category', index=False)\n\n return output_path\n\n\ndef generate_validation_report(elements_df: pd.DataFrame,\n project_name: str,\n model_name: str,\n output_path: str = None) -> ValidationReport:\n \"\"\"Quick function to generate validation report.\"\"\"\n engine = BIMValidationEngine(project_name, model_name)\n report = engine.validate_model(elements_df)\n\n if output_path:\n engine.export_report(report, output_path)\n\n return report","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Start","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"# Load BIM elements\nelements = pd.read_excel(\"bim_elements.xlsx\")\n\n# Run validation\nreport = generate_validation_report(\n elements,\n project_name=\"Office Tower\",\n model_name=\"Architectural Model v3.2\",\n output_path=\"validation_report.xlsx\"\n)\n\nprint(f\"Status: {report.status.value}\")\nprint(f\"Errors: {report.summary_by_severity['error']}\")\nprint(f\"Warnings: {report.summary_by_severity['warning']}\")","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Common Use Cases","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"1. Custom Validation Rules","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"engine = BIMValidationEngine(\"Project\", \"Model\")\n\n# Add custom rule\nengine.add_custom_rule(\n rule_id=\"CUSTOM-001\",\n name=\"Fire Rating Required\",\n category=RuleCategory.REQUIRED_PROPERTIES,\n check_function=lambda e: bool(e.get('fire_rating')),\n severity=ValidationSeverity.ERROR,\n categories=[\"Walls\", \"Doors\"]\n)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"2. Filter Issues","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"# Get only errors\nerrors = [i for i in report.issues if i.severity == ValidationSeverity.ERROR]\n\n# Get issues for specific category\nwall_issues = [i for i in report.issues if i.element_category == \"Walls\"]","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"3. Automated QC Pipeline","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"python"},"content":[{"text":"report = engine.validate_model(elements)\nif report.status == ValidationStatus.FAILED:\n send_notification(\"BIM validation failed\", report.summary_by_severity)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Resources","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DDC Book","type":"text","marks":[{"type":"strong"}]},{"text":": Chapter 4.3 - BIM Validation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Reference","type":"text","marks":[{"type":"strong"}]},{"text":": ISO 19650, buildingSMART IDS","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"bim-validation-report","author":"@skillopedia","source":{"stars":155,"repo_name":"ddc_skills_for_ai_agents_in_construction","origin_url":"https://github.com/datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/blob/HEAD/1_DDC_Toolkit/BIM-Analysis/bim-validation-report/SKILL.md","repo_owner":"datadrivenconstruction","body_sha256":"d0a65d0366460e3b0b13f809be58570a29b0e6026bf134cf136dec8362a53ad6","cluster_key":"2c47c2c9ec541bc323d6ac0c9eff3676fba546e9e99d12665a74dc536f11047a","clean_bundle":{"format":"clean-skill-bundle-v1","source":"datadrivenconstruction/ddc_skills_for_ai_agents_in_construction/1_DDC_Toolkit/BIM-Analysis/bim-validation-report/SKILL.md","attachments":[{"id":"10c429ea-e725-544a-bb24-c4f3f1002c41","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/10c429ea-e725-544a-bb24-c4f3f1002c41/attachment.json","path":"claw.json","size":507,"sha256":"d61cc1c2e902a4cef198f6e6087d2203fac9f7e891b9ce6d8f591fdd265e5cf1","contentType":"application/json; charset=utf-8"},{"id":"35b295b6-3035-5eaf-a659-43026eb8e623","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/35b295b6-3035-5eaf-a659-43026eb8e623/attachment.md","path":"instructions.md","size":1197,"sha256":"8d6fc6a96b46e0b5ce42f767f1fe89b0549e22590cb7a0132d68055c08b89aa7","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"8d83810b14cae2ca27f2a77cd2bf4ab67da71c7eb2ae2828574e16ce8b081a41","attachment_count":2,"text_attachments":2,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"1_DDC_Toolkit/BIM-Analysis/bim-validation-report/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"data-analytics","category_label":"Data"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"data-analytics","homepage":"https://datadrivenconstruction.io","metadata":{"openclaw":{"os":["darwin","linux","win32"],"emoji":"🔍","homepage":"https://datadrivenconstruction.io","requires":{"bins":["python3"]}}},"import_tag":"clean-skills-v1","description":"Generate comprehensive BIM model validation reports. Check data quality, completeness, and compliance with standards."}},"renderedAt":1782980485711}

BIM Validation Report Generator Business Case Problem Statement BIM models often have quality issues: - Missing required properties - Invalid or inconsistent data - Non-compliant with project standards - Incomplete model information Solution Automated BIM validation system that checks models against configurable rules and generates detailed compliance reports. Business Value - Quality assurance - Catch issues early - Standards compliance - Meet project requirements - Automation - Reduce manual QC effort - Transparency - Clear validation results Technical Implementation Quick Start Common Use…