Material procurement tracker
Track material procurement from requisition to delivery. Monitor lead times, vendors, and costs.From its SKILL.md
npx -y skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill material-procurement-trackerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
5.6 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Material Procurement Tracker
Business Case
Long lead items and material procurement require careful tracking to avoid schedule delays.
Technical Implementation
import pandas as pd
from datetime import date, timedelta
from typing import Dict, Any, List, Optional
from dataclasses import dataclass, field
from enum import Enum
class ProcurementStatus(Enum):
REQUISITIONED = "requisitioned"
RFQ_SENT = "rfq_sent"
QUOTED = "quoted"
PO_ISSUED = "po_issued"
IN_PRODUCTION = "in_production"
SHIPPED = "shipped"
DELIVERED = "delivered"
class Priority(Enum):
CRITICAL = "critical"
HIGH = "high"
NORMAL = "normal"
LOW = "low"
@dataclass
class ProcurementItem:
item_id: str
description: str
spec_section: str
quantity: float
unit: str
required_date: date
lead_time_days: int
status: ProcurementStatus
priority: Priority
vendor: str = ""
po_number: str = ""
po_amount: float = 0.0
order_date: Optional[date] = None
expected_delivery: Optional[date] = None
actual_delivery: Optional[date] = None
@property
def must_order_by(self) -> date:
return self.required_date - timedelta(days=self.lead_time_days)
@property
def is_late_to_order(self) -> bool:
if self.status in [ProcurementStatus.PO_ISSUED, ProcurementStatus.IN_PRODUCTION,
ProcurementStatus.SHIPPED, ProcurementStatus.DELIVERED]:
return False
return date.today() > self.must_order_by
class MaterialProcurementTracker:
def __init__(self, project_name: str):
self.project_name = project_name
self.items: Dict[str, ProcurementItem] = {}
self._counter = 0
def add_item(self, description: str, spec_section: str, quantity: float,
unit: str, required_date: date, lead_time_days: int,
priority: Priority = Priority.NORMAL) -> ProcurementItem:
self._counter += 1
item_id = f"PROC-{self._counter:04d}"
item = ProcurementItem(
item_id=item_id,
description=description,
spec_section=spec_section,
quantity=quantity,
unit=unit,
required_date=required_date,
lead_time_days=lead_time_days,
status=ProcurementStatus.REQUISITIONED,
priority=priority
)
self.items[item_id] = item
return item
def issue_po(self, item_id: str, vendor: str, po_number: str,
amount: float, expected_delivery: date):
if item_id in self.items:
item = self.items[item_id]
item.status = ProcurementStatus.PO_ISSUED
item.vendor = vendor
item.po_number = po_number
item.po_amount = amount
item.order_date = date.today()
item.expected_delivery = expected_delivery
def update_status(self, item_id: str, status: ProcurementStatus):
if item_id in self.items:
self.items[item_id].status = status
if status == ProcurementStatus.DELIVERED:
self.items[item_id].actual_delivery = date.today()
def get_items_to_order(self) -> List[ProcurementItem]:
"""Get items that need to be ordered soon."""
cutoff = date.today() + timedelta(days=14)
return [i for i in self.items.values()
if i.status in [ProcurementStatus.REQUISITIONED, ProcurementStatus.RFQ_SENT,
ProcurementStatus.QUOTED]
and i.must_order_by <= cutoff]
def get_late_items(self) -> List[ProcurementItem]:
return [i for i in self.items.values() if i.is_late_to_order]
def get_summary(self) -> Dict[str, Any]:
by_status = {}
total_value = 0
for item in self.items.values():
status = item.status.value
by_status[status] = by_status.get(status, 0) + 1
total_value += item.po_amount
return {
'total_items': len(self.items),
'by_status': by_status,
'total_po_value': total_value,
'items_to_order': len(self.get_items_to_order()),
'late_items': len(self.get_late_items())
}
def export_log(self, output_path: str):
data = [{
'ID': i.item_id,
'Description': i.description,
'Spec': i.spec_section,
'Qty': i.quantity,
'Unit': i.unit,
'Required': i.required_date,
'Lead Time': i.lead_time_days,
'Must Order By': i.must_order_by,
'Status': i.status.value,
'Vendor': i.vendor,
'PO': i.po_number,
'Amount': i.po_amount
} for i in self.items.values()]
pd.DataFrame(data).to_excel(output_path, index=False)
Quick Start
tracker = MaterialProcurementTracker("Office Tower")
item = tracker.add_item(
description="Structural Steel W14x90",
spec_section="05 12 00",
quantity=500,
unit="TON",
required_date=date(2024, 6, 1),
lead_time_days=90,
priority=Priority.CRITICAL
)
tracker.issue_po(item.item_id, "ABC Steel", "PO-2024-001", 450000,
date(2024, 5, 15))
urgent = tracker.get_items_to_order()
print(f"Items needing order: {len(urgent)}")
Resources
- DDC Book: Chapter 3.4 - Procurement
What ships with it: 2 files
1.6 KB alongside SKILL.md
- claw.json488 B
- instructions.md1.2 KB
Gives 0 of the 12 instructions most operations skills give in ~1.3k tokens
Counted across 483 of the 484 authors here whose files we hold, read 2026-08-07
- Collect monitoring data throughout the simulationin 14 of 483, across 6 files
- Set the random seed for reproducibilityin 14 of 483, across 6 files
- Validate simulations against analytical solutionsin 12 of 483, across 4 files
- Clarify goals, constraints, and inputsin 11 of 483, across 2 files
- Implement contract tests for integration pointsin 11 of 483, across 2 files
- Implement strangler fig infrastructure with API gatewayin 11 of 483, across 2 files
- Audit modernized components for security vulnerabilitiesin 11 of 483, across 2 files
- Avoid Python blocking calls in processesin 10 of 483, across 3 files
- Use resource context managers for automatic cleanupin 9 of 483, across 2 files
- Maintain consistent time unitsin 9 of 483, across 2 files
- Validate outcomes against success criteriain 8 of 483, across 1 file
- Analyze the legacy codebase for technical debtin 8 of 483, across 1 file
Said here and by no other author read
- track items from requisition to delivery
- calculate order deadlines using lead time
- flag items past their order-by date as late
- record purchase order details when issued
- update item status upon delivery
- export the procurement log to excel
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.