Check data compliance with construction standards. Validate data against ISO 19650, IFC, COBie, UniFormat standards.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install standards-compliance-checker或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install standards-compliance-checker⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/standards-compliance-checker/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: "standards-compliance-checker" description: "Check data compliance with construction standards. Validate data against ISO 19650, IFC, COBie, UniFormat standards." homepage: "https://datadrivenconstruction.io" metadata: {"openclaw": {"emoji": "📐", "os": ["darwin", "linux", "win32"], "homepage": "https://datadrivenconstruction.io", "requires": {"bins": ["python3"]}}} ---
Construction data compliance challenges:
Automated compliance checking against major construction data standards including ISO 19650, IFC, COBie, and UniFormat.
from typing import Dict, Any, List, Optional
from dataclasses import dataclass, field
from enum import Enum
import re
class Standard(Enum):
ISO_19650 = "iso_19650"
IFC = "ifc"
COBIE = "cobie"
UNIFORMAT = "uniformat"
OMNICLASS = "omniclass"
MASTERFORMAT = "masterformat"
class ComplianceLevel(Enum):
COMPLIANT = "compliant"
MINOR_ISSUES = "minor_issues"
MAJOR_ISSUES = "major_issues"
NON_COMPLIANT = "non_compliant"
@dataclass
class ComplianceIssue:
rule_id: str
rule_name: str
severity: str # error, warning, info
message: str
field: str = ""
value: Any = None
@dataclass
class ComplianceReport:
standard: Standard
total_rules: int
passed: int
failed: int
warnings: int
compliance_level: ComplianceLevel
issues: List[ComplianceIssue] = field(default_factory=list)
class StandardsComplianceChecker:
"""Check compliance with construction data standards."""
def __init__(self):
self.rules: Dict[Standard, List[Dict]] = self._load_rules()
def _load_rules(self) -> Dict[Standard, List[Dict]]:
"""Load compliance rules for each standard."""
return {
Standard.ISO_19650: [
{"id": "ISO-001", "name": "File naming convention", "field": "filename",
"pattern": r"^[A-Z]{2,6}-[A-Z]{2,4}-[A-Z]{2,3}-[A-Z0-9]{2,4}-[A-Z]{2,3}-[A-Z]{2,4}-[A-Z0-9]{3,8}$"},
{"id": "ISO-002", "name": "Status code valid", "field": "status",
"values": ["WIP", "S0", "S1", "S2", "S3", "S4", "A", "B", "CR"]},
{"id": "ISO-003", "name": "Revision format", "field": "revision",
"pattern": r"^P[0-9]{2}|C[0-9]{2}$"},
],
Standard.IFC: [
{"id": "IFC-001", "name": "GUID format", "field": "global_id",
"pattern": r"^[0-9A-Za-z_$]{22}$"},
{"id": "IFC-002", "name": "Name required", "field": "name", "required": True},
{"id": "IFC-003", "name": "ObjectType defined", "field": "object_type", "required": True},
],
Standard.COBIE: [
{"id": "COB-001", "name": "Facility name", "field": "facility_name", "required": True},
{"id": "COB-002", "name": "Space name format", "field": "space_name",
"pattern": r"^[A-Z0-9]{2,10}[-_]?[A-Z0-9]{0,10}$"},
{"id": "COB-003", "name": "Component type", "field": "component_type", "required": True},
{"id": "COB-004", "name": "Manufacturer info", "field": "manufacturer", "required": True},
],
Standard.UNIFORMAT: [
{"id": "UNI-001", "name": "Level 1 code", "field": "level1",
"values": ["A", "B", "C", "D", "E", "F", "G", "Z"]},
{"id": "UNI-002", "name": "Code format", "field": "code",
"pattern": r"^[A-G][0-9]{4}$"},
],
Standard.MASTERFORMAT: [
{"id": "MF-001", "name": "Division format", "field": "division",
"pattern": r"^[0-9]{2}$"},
{"id": "MF-002", "name": "Section format", "field": "section",
"pattern": r"^[0-9]{2}\s?[0-9]{2}\s?[0-9]{2}(\.[0-9]{2})?$"},
]
}
def check_compliance(self, data: Dict[str, Any],
standard: Standard) -> ComplianceReport:
"""Check data against specified standard."""
rules = self.rules.get(standard, [])
issues = []
passed = 0
failed = 0
warnings = 0
for rule in rules:
result = self._check_rule(data, rule)
if result:
issues.append(result)
if result.severity == "error":
failed += 1
else:
warnings += 1
else:
passed += 1
# Determine compliance level
if failed == 0 and warnings == 0:
level = ComplianceLevel.COMPLIANT
elif failed == 0:
level = ComplianceLevel.MINOR_ISSUES
elif failed <= len(rules) * 0.3:
level = ComplianceLevel.MAJOR_ISSUES
else:
level = ComplianceLevel.NON_COMPLIANT
return ComplianceReport(
standard=standard,
total_rules=len(rules),
passed=passed,
failed=failed,
warnings=warnings,
compliance_level=level,
issues=issues
)
def _check_rule(self, data: Dict[str, Any], rule: Dict) -> Optional[ComplianceIssue]:
"""Check single compliance rule."""
field = rule.get('field', '')
value = data.get(field)
# Required check
if rule.get('required') and (value is None or value == ''):
return ComplianceIssue(
rule_id=rule['id'],
rule_name=rule['name'],
severity="error",
message=f"Required field '{field}' is missing",
field=field
)
# Skip other checks if value is empty
if value is None or value == '':
return None
# Pattern check
if 'pattern' in rule:
if not re.match(rule['pattern'], str(value)):
return ComplianceIssue(
rule_id=rule['id'],
rule_name=rule['name'],
severity="error",
message=f"Field '{field}' does not match required format",
field=field,
value=value
)
# Allowed values check
if 'values' in rule:
if value not in rule['values']:
return ComplianceIssue(
rule_id=rule['id'],
rule_name=rule['name'],
severity="error",
message=f"Field '{field}' must be one of: {rule['values']}",
field=field,
value=value
)
return None
def check_multiple_standards(self, data: Dict[str, Any],
standards: List[Standard]) -> Dict[str, ComplianceReport]:
"""Check data against multiple standards."""
reports = {}
for standard in standards:
reports[standard.value] = self.check_compliance(data, standard)
return reports
def check_batch(self, records: List[Dict[str, Any]],
standard: Standard) -> Dict[str, Any]:
"""Check multiple records against standard."""
all_issues = []
compliant_count = 0
for i, record in enumerate(records):
report = self.check_compliance(record, standard)
if report.compliance_level == ComplianceLevel.COMPLIANT:
compliant_count += 1
for issue in report.issues:
all_issues.append({
...安装 Standards Compliance Checker 后,可以对 AI 说这些话来触发它
Help me get started with Standards Compliance Checker
Explains what Standards Compliance Checker does, walks through the setup, and runs a quick demo based on your current project
Use Standards Compliance Checker to check data compliance with construction standards
Invokes Standards Compliance Checker with the right parameters and returns the result directly in the conversation
What can I do with Standards Compliance Checker in my developer & devops workflow?
Lists the top use cases for Standards Compliance Checker, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/standards-compliance-checker/ 目录(个人级,所有项目可用),或 .claude/skills/standards-compliance-checker/(项目级)。重启 AI 客户端后,用 /standards-compliance-checker 主动调用,或让 AI 根据上下文自动发现并使用。
Standards Compliance Checker 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Standards Compliance Checker 可免费安装使用。请查阅仓库了解许可证信息。
Check data compliance with construction standards. Validate data against ISO 19650, IFC, COBie, UniFormat standards.
Standards Compliance Checker 属于「Developer & DevOps」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。
Automate my developer & devops tasks using Standards Compliance Checker
Identifies repetitive steps in your workflow and sets up Standards Compliance Checker to handle them automatically