Delegate independent tasks to specialized agents working concurrently with isolated context.
Compliance Tracker
compliance-tracker
Track regulatory compliance for construction projects. Monitor permits, certifications, inspections, and regulatory requirements with automated alerts and reporting.
SKILL.md
Full skill instructions
Compliance Tracker
Overview
Track and manage regulatory compliance across construction projects. Monitor permits, licenses, certifications, inspections, and regulatory requirements. Automated alerts for expirations and deadlines.
"Proactive compliance tracking prevents costly project delays and penalties" — DDC Community
Compliance Categories
┌─────────────────────────────────────────────────────────────────┐
│ COMPLIANCE TRACKING │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Permits Certifications Inspections Training │
│ ─────── ────────────── ─────────── ──────── │
│ 🏗️ Building 👷 Workers 📋 Fire 🎓 OSHA │
│ 🔥 Fire 🏢 Company ⚡ Electrical 🦺 Safety │
│ ⚡ Electrical 🔧 Equipment 🔧 Mechanical 🏗️ Trade │
│ 🚰 Plumbing 📜 Insurance 🏗️ Structural 🚗 Equipment │
│ │
└─────────────────────────────────────────────────────────────────┘
Technical Implementation
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from enum import Enum
from datetime import datetime, timedelta
import json
class ComplianceType(Enum):
PERMIT = "permit"
LICENSE = "license"
CERTIFICATION = "certification"
INSURANCE = "insurance"
INSPECTION = "inspection"
TRAINING = "training"
SUBMITTAL = "submittal"
class ComplianceStatus(Enum):
ACTIVE = "active"
PENDING = "pending"
EXPIRED = "expired"
EXPIRING_SOON = "expiring_soon"
NOT_APPLICABLE = "not_applicable"
REJECTED = "rejected"
class Priority(Enum):
CRITICAL = "critical" # Work stoppage if missing
HIGH = "high" # Significant impact
MEDIUM = "medium" # Moderate impact
LOW = "low" # Administrative
@dataclass
class ComplianceItem:
id: str
name: str
compliance_type: ComplianceType
category: str
description: str
# Dates
issue_date: Optional[datetime] = None
expiration_date: Optional[datetime] = None
renewal_date: Optional[datetime] = None
# Status
status: ComplianceStatus = ComplianceStatus.PENDING
priority: Priority = Priority.MEDIUM
# Ownership
responsible_party: str = ""
issuing_authority: str = ""
# Documentation
document_url: str = ""
reference_number: str = ""
notes: str = ""
# Tracking
alert_days_before: int = 30
last_checked: Optional[datetime] = None
@dataclass
class ComplianceAlert:
id: str
compliance_item_id: str
alert_type: str # expiring, expired, action_required
message: str
due_date: datetime
acknowledged: bool = False
acknowledged_by: str = ""
class ComplianceTracker:
"""Track construction regulatory compliance."""
# Standard compliance requirements by project type
STANDARD_REQUIREMENTS = {
"commercial": [
{"name": "Building Permit", "type": ComplianceType.PERMIT, "category": "Building", "priority": Priority.CRITICAL},
{"name": "Fire Permit", "type": ComplianceType.PERMIT, "category": "Fire", "priority": Priority.CRITICAL},
{"name": "Electrical Permit", "type": ComplianceType.PERMIT, "category": "Electrical", "priority": Priority.HIGH},
{"name": "Plumbing Permit", "type": ComplianceType.PERMIT, "category": "Plumbing", "priority": Priority.HIGH},
{"name": "Mechanical Permit", "type": ComplianceType.PERMIT, "category": "Mechanical", "priority": Priority.HIGH},
{"name": "General Liability Insurance", "type": ComplianceType.INSURANCE, "category": "Insurance", "priority": Priority.CRITICAL},
{"name": "Workers Comp Insurance", "type": ComplianceType.INSURANCE, "category": "Insurance", "priority": Priority.CRITICAL},
{"name": "OSHA 10/30 Training", "type": ComplianceType.TRAINING, "category": "Safety", "priority": Priority.HIGH},
],
"residential": [
{"name": "Building Permit", "type": ComplianceType.PERMIT, "category": "Building", "priority": Priority.CRITICAL},
{"name": "Electrical Permit", "type": ComplianceType.PERMIT, "category": "Electrical", "priority": Priority.HIGH},
{"name": "Plumbing Permit", "type": ComplianceType.PERMIT, "category": "Plumbing", "priority": Priority.HIGH},
{"name": "General Liability Insurance", "type": ComplianceType.INSURANCE, "category": "Insurance", "priority": Priority.CRITICAL},
]
}
# Required inspections by permit type
REQUIRED_INSPECTIONS = {
"Building": ["Foundation", "Framing", "Insulation", "Final"],
"Electrical": ["Rough-in", "Service", "Final"],
"Plumbing": ["Underground", "Rough-in", "Final"],
"Mechanical": ["Rough-in", "Final"],
"Fire": ["Underground", "Rough-in", "Final", "Alarm"]
}
def __init__(self, project_id: str, project_name: str):
self.project_id = project_id
self.project_name = project_name
self.compliance_items: Dict[str, ComplianceItem] = {}
self.alerts: List[ComplianceAlert] = []
def initialize_requirements(self, project_type: str = "commercial") -> List[ComplianceItem]:
"""Initialize standard compliance requirements."""
requirements = self.STANDARD_REQUIREMENTS.get(project_type, [])
created = []
for req in requirements:
item = self.add_compliance_item(
name=req["name"],
compliance_type=req["type"],
category=req["category"],
description=f"Standard {req['name']} requirement",
priority=req["priority"]
)
created.append(item)
return created
def add_compliance_item(self, name: str, compliance_type: ComplianceType,
category: str, description: str = "",
priority: Priority = Priority.MEDIUM,
expiration_date: datetime = None,
responsible_party: str = "",
issuing_authority: str = "") -> ComplianceItem:
"""Add compliance item to track."""
item_id = f"COMP-{datetime.now().strftime('%Y%m%d%H%M%S')}-{len(self.compliance_items)}"
item = ComplianceItem(
id=item_id,
name=name,
compliance_type=compliance_type,
category=category,
description=description,
priority=priority,
expiration_date=expiration_date,
responsible_party=responsible_party,
issuing_authority=issuing_authority
)
self.compliance_items[item_id] = item
return item
def update_status(self, item_id: str, status: ComplianceStatus,
issue_date: datetime = None,
expiration_date: datetime = None,
reference_number: str = "",
document_url: str = "") -> ComplianceItem:
"""Update compliance item status."""
if item_id not in self.compliance_items:
raise ValueError(f"Compliance item {item_id} not found")
item = self.compliance_items[item_id]
item.status = status
item.last_checked = datetime.now()
if issue_date:
item.issue_date = issue_date
if expiration_date:
item.expiration_date = expiration_date
if reference_number:
item.reference_number = reference_number
if document_url:
item.document_url = document_url
return item
def check_all_status(self) -> List[ComplianceAlert]:
"""Check status of all items and generate alerts."""
new_alerts = []
today = datetime.now()
for item in self.compliance_items.values():
# Skip non-applicable items
if item.status == ComplianceStatus.NOT_APPLICABLE:
continue
# Check for expired
if item.expiration_date and item.expiration_date < today:
if item.status != ComplianceStatus.EXPIRED:
item.status = ComplianceStatus.EXPIRED
alert = self._create_alert(item, "expired",
f"EXPIRED: {item.name} expired on {item.expiration_date.strftime('%Y-%m-%d')}")
new_alerts.append(alert)
# Check for expiring soon
elif item.expiration_date:
days_until = (item.expiration_date - today).days
if days_until <= item.alert_days_before:
if item.status != ComplianceStatus.EXPIRING_SOON:
item.status = ComplianceStatus.EXPIRING_SOON
alert = self._create_alert(item, "expiring",
f"EXPIRING: {item.name} expires in {days_until} days")
new_alerts.append(alert)
# Check pending items
elif item.status == ComplianceStatus.PENDING:
if item.priority == Priority.CRITICAL:
alert = self._create_alert(item, "action_required",
f"ACTION REQUIRED: {item.name} is pending - Critical priority")
new_alerts.append(alert)
self.alerts.extend(new_alerts)
return new_alerts
def _create_alert(self, item: ComplianceItem, alert_type: str, message: str) -> ComplianceAlert:
"""Create compliance alert."""
return ComplianceAlert(
id=f"ALERT-{datetime.now().strftime('%Y%m%d%H%M%S')}",
compliance_item_id=item.id,
alert_type=alert_type,
message=message,
due_date=item.expiration_date or datetime.now()
)
def get_compliance_summary(self) -> Dict:
"""Get compliance status summary."""
total = len(self.compliance_items)
by_status = {}
by_type = {}
by_priority = {}
for item in self.compliance_items.values():
# By status
status = item.status.value
by_status[status] = by_status.get(status, 0) + 1
# By type
comp_type = item.compliance_type.value
by_type[comp_type] = by_type.get(comp_type, 0) + 1
# By priority
priority = item.priority.value
by_priority[priority] = by_priority.get(priority, 0) + 1
# Calculate compliance rate
active = by_status.get("active", 0)
compliance_rate = (active / total * 100) if total else 0
critical_missing = len([i for i in self.compliance_items.values()
if i.priority == Priority.CRITICAL
and i.status in [ComplianceStatus.PENDING, ComplianceStatus.EXPIRED]])
return {
"total_items": total,
"compliance_rate": compliance_rate,
"by_status": by_status,
"by_type": by_type,
"by_priority": by_priority,
"critical_missing": critical_missing,
"active_alerts": len([a for a in self.alerts if not a.acknowledged])
}
def get_expiring_items(self, days: int = 30) -> List[ComplianceItem]:
"""Get items expiring within specified days."""
cutoff = datetime.now() + timedelta(days=days)
return [item for item in self.compliance_items.values()
if item.expiration_date and item.expiration_date <= cutoff
and item.status != ComplianceStatus.EXPIRED]
def get_required_inspections(self, permit_category: str) -> List[str]:
"""Get required inspections for permit type."""
return self.REQUIRED_INSPECTIONS.get(permit_category, [])
def schedule_inspection(self, permit_id: str, inspection_name: str,
scheduled_date: datetime) -> ComplianceItem:
"""Schedule required inspection."""
if permit_id not in self.compliance_items:
raise ValueError(f"Permit {permit_id} not found")
permit = self.compliance_items[permit_id]
inspection = self.add_compliance_item(
name=f"{permit.category} - {inspection_name} Inspection",
compliance_type=ComplianceType.INSPECTION,
category=permit.category,
description=f"Required inspection for {permit.name}",
priority=Priority.HIGH,
expiration_date=scheduled_date
)
return inspection
def generate_compliance_report(self) -> str:
"""Generate compliance status report."""
summary = self.get_compliance_summary()
lines = [
f"# Compliance Status Report",
f"",
f"**Project:** {self.project_name}",
f"**Date:** {datetime.now().strftime('%Y-%m-%d')}",
f"**Compliance Rate:** {summary['compliance_rate']:.1f}%",
f"",
f"## Summary",
f"",
f"| Status | Count |",
f"|--------|-------|",
]
for status, count in summary['by_status'].items():
lines.append(f"| {status.title()} | {count} |")
# Critical items
critical_pending = [i for i in self.compliance_items.values()
if i.priority == Priority.CRITICAL
and i.status == ComplianceStatus.PENDING]
if critical_pending:
lines.extend([
f"",
f"## Critical Items Pending",
f""
])
for item in critical_pending:
lines.append(f"- **{item.name}** - {item.responsible_party or 'Unassigned'}")
# Expiring items
expiring = self.get_expiring_items(30)
if expiring:
lines.extend([
f"",
f"## Items Expiring in 30 Days",
f""
])
for item in expiring:
days = (item.expiration_date - datetime.now()).days
lines.append(f"- **{item.name}** - Expires in {days} days ({item.expiration_date.strftime('%Y-%m-%d')})")
# Active alerts
active_alerts = [a for a in self.alerts if not a.acknowledged]
if active_alerts:
lines.extend([
f"",
f"## Active Alerts ({len(active_alerts)})",
f""
])
for alert in active_alerts[:10]:
lines.append(f"- {alert.message}")
return "\n".join(lines)
Quick Start
# Initialize tracker
tracker = ComplianceTracker("PRJ-001", "Office Tower")
# Initialize standard requirements
items = tracker.initialize_requirements("commercial")
print(f"Initialized {len(items)} compliance items")
# Update permit status
building_permit = [i for i in tracker.compliance_items.values()
if i.name == "Building Permit"][0]
tracker.update_status(
building_permit.id,
status=ComplianceStatus.ACTIVE,
issue_date=datetime.now(),
expiration_date=datetime.now() + timedelta(days=365),
reference_number="BP-2024-12345"
)
# Check all status and generate alerts
alerts = tracker.check_all_status()
print(f"Generated {len(alerts)} alerts")
# Get summary
summary = tracker.get_compliance_summary()
print(f"Compliance Rate: {summary['compliance_rate']:.1f}%")
print(f"Critical Missing: {summary['critical_missing']}")
# Generate report
print(tracker.generate_compliance_report())
Requirements
pip install (no external dependencies)
More Other skills
brand-guidelines
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
theme-factory
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
internal-comms
A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Fundamental design principles for writing maintainable, testable Python code.
responsive-design
Modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first strategies.
Generate Playwright tests from scenarios using interactive browser exploration and validation.
Automated website exploration and test case generation using Playwright.
Modern React state management with Redux Toolkit, Zustand, Jotai, and React Query for every state category.
gdpr-data-handling
GDPR-compliant data handling with consent management, data subject rights, and privacy controls.
Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs.
refactor-plan
Detailed multi-file refactor planning with safety checks and rollback guidance.
