@wonsukchoi/crondex 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -44
- package/catalog.json +8862 -1873
- package/jobs/automotive/ase-certification-expiry-check.yaml +36 -0
- package/jobs/automotive/csi-score-monitor.yaml +33 -0
- package/jobs/automotive/customer-pay-warranty-pay-mix-tracker.yaml +47 -0
- package/jobs/automotive/fi-product-attachment-rate-tracker.yaml +39 -0
- package/jobs/automotive/loaner-fleet-availability-check.yaml +40 -0
- package/jobs/automotive/manufacturer-recall-notice-check.yaml +39 -0
- package/jobs/automotive/parts-reorder-point-check.yaml +36 -0
- package/jobs/automotive/repair-cycle-time-trend-monitor.yaml +42 -0
- package/jobs/automotive/service-appointment-no-show-tracker.yaml +38 -0
- package/jobs/automotive/service-bay-utilization-check.yaml +38 -0
- package/jobs/automotive/shop-supply-reorder-check.yaml +31 -0
- package/jobs/automotive/trade-in-appraisal-variance-check.yaml +39 -0
- package/jobs/automotive/used-vehicle-inventory-aging-check.yaml +35 -0
- package/jobs/construction/critical-path-material-lead-time-review.yaml +43 -0
- package/jobs/construction/daily-jobsite-log-compliance-check.yaml +34 -0
- package/jobs/construction/equipment-utilization-cost-check.yaml +35 -0
- package/jobs/construction/heavy-equipment-inspection-compliance-check.yaml +34 -0
- package/jobs/construction/jobsite-safety-incident-near-miss-tracker.yaml +35 -0
- package/jobs/construction/lien-waiver-collection-tracker.yaml +27 -0
- package/jobs/construction/permit-application-approval-backlog-check.yaml +33 -0
- package/jobs/construction/project-budget-variance-check.yaml +34 -0
- package/jobs/construction/punch-list-completion-tracker.yaml +36 -0
- package/jobs/construction/retainage-holdback-release-tracker.yaml +33 -0
- package/jobs/construction/rfi-response-time-tracker.yaml +33 -0
- package/jobs/construction/subcontractor-pay-application-approval-tracker.yaml +35 -0
- package/jobs/construction/submittal-shop-drawing-review-check.yaml +45 -0
- package/jobs/construction/weather-delay-impact-log.yaml +44 -0
- package/jobs/ecommerce/affiliate-commission-payout-check.yaml +38 -0
- package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
- package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
- package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
- package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
- package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
- package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
- package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
- package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
- package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
- package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
- package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
- package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
- package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
- package/jobs/education/department-budget-variance-check.yaml +37 -0
- package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
- package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
- package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
- package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
- package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
- package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
- package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
- package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
- package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
- package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
- package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
- package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
- package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
- package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
- package/jobs/finance/credit-utilization-watch.yaml +40 -0
- package/jobs/finance/duplicate-payment-detection.yaml +43 -0
- package/jobs/finance/expense-report-compliance-check.yaml +46 -0
- package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
- package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
- package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
- package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
- package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
- package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
- package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
- package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
- package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
- package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
- package/jobs/fleet/ev-battery-health-check.yaml +36 -0
- package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
- package/jobs/fleet/geofence-violation-check.yaml +37 -0
- package/jobs/fleet/lease-return-condition-check.yaml +33 -0
- package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
- package/jobs/fleet/toll-violation-tracker.yaml +34 -0
- package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
- package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
- package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
- package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
- package/jobs/growth/customer-health-score-monitor.yaml +37 -0
- package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
- package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
- package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
- package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
- package/jobs/growth/nps-trend-tracker.yaml +40 -0
- package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
- package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
- package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
- package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
- package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
- package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
- package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
- package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
- package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
- package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
- package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
- package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
- package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
- package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
- package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
- package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
- package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
- package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
- package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
- package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
- package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
- package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
- package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
- package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
- package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
- package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
- package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
- package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
- package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
- package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
- package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
- package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
- package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
- package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
- package/jobs/hr/compliance-training-completion-check.yaml +41 -0
- package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
- package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
- package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
- package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
- package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
- package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
- package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
- package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
- package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
- package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
- package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
- package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
- package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
- package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
- package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
- package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
- package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
- package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
- package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
- package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
- package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
- package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
- package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
- package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
- package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
- package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
- package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
- package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
- package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
- package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
- package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
- package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
- package/jobs/legal/trademark-infringement-watch.yaml +43 -0
- package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
- package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
- package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
- package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
- package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
- package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
- package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
- package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
- package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
- package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
- package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
- package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
- package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
- package/jobs/logistics/route-load-optimization-check.yaml +32 -0
- package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
- package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
- package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
- package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
- package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
- package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
- package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
- package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
- package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
- package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
- package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
- package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
- package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
- package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
- package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
- package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
- package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
- package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
- package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
- package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
- package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
- package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
- package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
- package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
- package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
- package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
- package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
- package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
- package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
- package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
- package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
- package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
- package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
- package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
- package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
- package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
- package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
- package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
- package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
- package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
- package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
- package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
- package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
- package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
- package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
- package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
- package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
- package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
- package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
- package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
- package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
- package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
- package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
- package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
- package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
- package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
- package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
- package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
- package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
- package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
- package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
- package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
- package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
- package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
- package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
- package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
- package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
- package/jobs/sales/champion-departure-watch.yaml +44 -0
- package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
- package/jobs/sales/commission-payout-tracker.yaml +32 -0
- package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
- package/jobs/sales/discount-approval-pending-check.yaml +31 -0
- package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
- package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
- package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
- package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
- package/jobs/sales/referral-followup-tracker.yaml +40 -0
- package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
- package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
- package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
- package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
- package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
- package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
- package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
- package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
- package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
- package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
- package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
- package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
- package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
- package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
- package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
- package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
- package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
- package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
- package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
- package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
- package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
- package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
- package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
- package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
- package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
- package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
- package/lib/category-descriptions.js +12 -12
- package/lib/duplicates-allowlist.js +15 -0
- package/package.json +2 -2
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: ase-certification-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: ASE Certification Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks technician ASE (or equivalent manufacturer) certifications
|
|
6
|
+
against their expiration date and flags any expiring soon. Use this if
|
|
7
|
+
a tech has ever kept working on certified-only repair categories after
|
|
8
|
+
their certification quietly lapsed, putting warranty reimbursement at
|
|
9
|
+
risk.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, technician, certification, compliance]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v warn="{{warn_days}}" -v today="$today" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline exp_ts; close(cmd);
|
|
22
|
+
days_left = (exp_ts - today) / 86400;
|
|
23
|
+
if (days_left <= warn) {
|
|
24
|
+
printf "EXPIRING: %s — %s certification expires %s (%d days left)\n", $1, $2, $3, days_left;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{tech_certs_csv_path}}"
|
|
28
|
+
variables:
|
|
29
|
+
tech_certs_csv_path:
|
|
30
|
+
default: "./technician-certifications.csv"
|
|
31
|
+
description: "Path to a CSV with columns: technician_name,certification_name,expiry_date (YYYY-MM-DD)."
|
|
32
|
+
warn_days:
|
|
33
|
+
default: 45
|
|
34
|
+
description: Days before expiry to start warning, giving time to schedule recertification testing.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Distinct from fieldservice's `tech-license-renewal-check` — same pattern applied to a different credential (ASE/manufacturer certs for auto technicians vs EPA/electrician/plumbing licenses for field trades).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: csi-score-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Customer Satisfaction Index (CSI) Score Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Checks incoming customer satisfaction (CSI) survey scores from service
|
|
6
|
+
and sales against a minimum threshold and flags any individual score
|
|
7
|
+
low enough to put the dealership's manufacturer standing at risk. Use
|
|
8
|
+
this if a bad CSI score has ever sat unnoticed in a survey inbox until
|
|
9
|
+
the manufacturer's monthly report flagged it first.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, csi, customer-satisfaction, survey]
|
|
12
|
+
schedule: "0 8 * * 1-5"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v min="{{minimum_score}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
score = $3 + 0;
|
|
20
|
+
if (score < min) {
|
|
21
|
+
printf "LOW CSI: %s — score %s for %s (%s)\n", $1, $3, $4, $2;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
' "{{csi_surveys_csv_path}}"
|
|
25
|
+
variables:
|
|
26
|
+
csi_surveys_csv_path:
|
|
27
|
+
default: "./csi-surveys.csv"
|
|
28
|
+
description: "Path to a CSV with columns: ro_or_sale_id,survey_date (YYYY-MM-DD),score (e.g. 1-10),department (service/sales)."
|
|
29
|
+
minimum_score:
|
|
30
|
+
default: 7
|
|
31
|
+
description: Score below which a survey response counts as low and worth a manager follow-up.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: A low score is worth a direct callback while the visit is still fresh in the customer's mind — this job only flags it, it doesn't reach out.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
id: customer-pay-warranty-pay-mix-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Customer-Pay vs Warranty-Pay Mix Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks the weekly split of repair order revenue between customer-pay,
|
|
6
|
+
warranty-pay, and internal-pay against your target mix and flags a
|
|
7
|
+
drift. Use this if a service department has ever found out at
|
|
8
|
+
month-end that warranty work quietly ate into the higher-margin
|
|
9
|
+
customer-pay volume nobody was tracking day to day.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, revenue-mix, warranty, service-department]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v target="{{target_customer_pay_pct}}" -v tolerance="{{tolerance_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
pay_type = $3;
|
|
20
|
+
amount = $4 + 0;
|
|
21
|
+
total += amount;
|
|
22
|
+
sums[pay_type] += amount;
|
|
23
|
+
}
|
|
24
|
+
END {
|
|
25
|
+
if (total <= 0) { print "NO DATA: no repair order revenue found for the period"; exit; }
|
|
26
|
+
cp_pct = (sums["customer-pay"] / total) * 100;
|
|
27
|
+
printf "MIX: customer-pay %.1f%%, warranty-pay %.1f%%, internal-pay %.1f%% (total $%.2f)\n", \
|
|
28
|
+
cp_pct, (sums["warranty-pay"] / total) * 100, (sums["internal-pay"] / total) * 100, total;
|
|
29
|
+
diff = cp_pct - target;
|
|
30
|
+
if (diff < 0) diff = -diff;
|
|
31
|
+
if (diff > tolerance) {
|
|
32
|
+
printf "DRIFT: customer-pay share %.1f%% is more than %.1f points off target %.1f%%\n", cp_pct, tolerance, target;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
' "{{repair_order_revenue_csv_path}}"
|
|
36
|
+
variables:
|
|
37
|
+
repair_order_revenue_csv_path:
|
|
38
|
+
default: "./repair-order-revenue.csv"
|
|
39
|
+
description: "Path to a CSV with columns: ro_number,closed_date,pay_type (customer-pay/warranty-pay/internal-pay),amount."
|
|
40
|
+
target_customer_pay_pct:
|
|
41
|
+
default: 65
|
|
42
|
+
description: Target share of revenue that should be customer-pay.
|
|
43
|
+
tolerance_pct:
|
|
44
|
+
default: 8
|
|
45
|
+
description: Percentage points of drift from target allowed before flagging.
|
|
46
|
+
compatible_agents: [generic, claude, codex]
|
|
47
|
+
notes: A drift toward warranty-pay isn't automatically bad — it can mean a recall push — but it's worth knowing before it shows up as a margin surprise.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: fi-product-attachment-rate-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: F&I Product Attachment Rate Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews the past week's vehicle sales against how many attached an F&I
|
|
6
|
+
product (extended warranty, gap insurance, service contract) and flags
|
|
7
|
+
a drop against target, plus which products are underperforming. Use
|
|
8
|
+
this if F&I income has ever slipped for weeks before anyone noticed the
|
|
9
|
+
attach rate had quietly drifted down.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, finance-insurance, fi, attachment-rate]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review the vehicle sales and F&I product records in {{sales_records_path}}
|
|
17
|
+
for the last 7 days at {{dealership_name}}.
|
|
18
|
+
1. Calculate the overall attachment rate: percent of vehicle sales with
|
|
19
|
+
at least one F&I product attached.
|
|
20
|
+
2. Break the rate down per product (extended warranty, gap insurance,
|
|
21
|
+
service contract, etc.) if the data supports it.
|
|
22
|
+
3. Compare the overall rate to the target of {{target_attachment_rate_pct}}
|
|
23
|
+
percent and flag if it's below target.
|
|
24
|
+
4. Call out which individual F&I manager or salesperson, if tracked in
|
|
25
|
+
the data, has the lowest attach rate this week.
|
|
26
|
+
5. Summarize as: overall rate vs target, per-product breakdown, and any
|
|
27
|
+
notable underperformer.
|
|
28
|
+
variables:
|
|
29
|
+
sales_records_path:
|
|
30
|
+
default: "./vehicle-sales-fi-records.csv"
|
|
31
|
+
description: "Path to a CSV of the week's vehicle sales with F&I product flags, e.g. columns like sale_id, fi_manager, extended_warranty, gap_insurance, service_contract."
|
|
32
|
+
dealership_name:
|
|
33
|
+
default: "the dealership"
|
|
34
|
+
description: Name of the dealership, for report context.
|
|
35
|
+
target_attachment_rate_pct:
|
|
36
|
+
default: 45
|
|
37
|
+
description: Target percent of vehicle sales that should carry at least one F&I product.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: Coaching or process changes still need a manager's judgment — this job only surfaces where the attach rate is slipping.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: loaner-fleet-availability-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Loaner Fleet Availability Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks how many loaner vehicles are currently available against
|
|
6
|
+
tomorrow's scheduled service appointments that requested one, and flags
|
|
7
|
+
a shortfall before it becomes a counter argument. Use this if a
|
|
8
|
+
customer has ever shown up for a scheduled loaner only to be told the
|
|
9
|
+
fleet was already fully checked out.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, loaner, fleet, availability]
|
|
12
|
+
schedule: "0 16 * * 1-5"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$2 == "available" {available++}
|
|
19
|
+
{total++}
|
|
20
|
+
END {
|
|
21
|
+
printf "LOANER FLEET: %d of %d loaners available\n", available+0, total+0;
|
|
22
|
+
}
|
|
23
|
+
' "{{loaner_fleet_csv_path}}";
|
|
24
|
+
requested=$(awk -F',' -v d="{{tomorrow_date}}" 'NR>1 && $1==d && $2=="loaner-requested" {c++} END{print c+0}' "{{appointments_csv_path}}");
|
|
25
|
+
available=$(awk -F',' 'NR>1 && $2=="available" {c++} END{print c+0}' "{{loaner_fleet_csv_path}}");
|
|
26
|
+
if [ "$requested" -gt "$available" ]; then
|
|
27
|
+
echo "SHORTFALL: $requested loaners requested for {{tomorrow_date}}, only $available currently available";
|
|
28
|
+
fi
|
|
29
|
+
variables:
|
|
30
|
+
loaner_fleet_csv_path:
|
|
31
|
+
default: "./loaner-fleet-status.csv"
|
|
32
|
+
description: "Path to a CSV with columns: loaner_vehicle_id,status (available/checked-out/in-service)."
|
|
33
|
+
appointments_csv_path:
|
|
34
|
+
default: "./service-appointments.csv"
|
|
35
|
+
description: "Path to a CSV with columns: appointment_date (YYYY-MM-DD),status (loaner-requested/no-loaner/...)."
|
|
36
|
+
tomorrow_date:
|
|
37
|
+
default: "$(date -v+1d +%Y-%m-%d 2>/dev/null || date -d '+1 day' +%Y-%m-%d)"
|
|
38
|
+
description: Date to check demand against, defaults to tomorrow.
|
|
39
|
+
compatible_agents: [generic, claude, codex]
|
|
40
|
+
notes: Distinct from `loaner-vehicle-return-reminder` — that job chases individual overdue loaners; this one looks at fleet-wide availability against near-term demand.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: manufacturer-recall-notice-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Manufacturer Recall Notice Check
|
|
4
|
+
description: >
|
|
5
|
+
Cross-references newly issued manufacturer recall notices against
|
|
6
|
+
vehicles in service history and current inventory, flagging any match
|
|
7
|
+
that hasn't been contacted or scheduled yet. Use this if a customer has
|
|
8
|
+
ever found out about a safety recall on their own before the shop that
|
|
9
|
+
services their car did.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, recall, safety, compliance]
|
|
12
|
+
schedule: "0 8 * * 1-5"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Compare the new recall bulletins in {{recall_bulletins_path}} against
|
|
17
|
+
the vehicle records in {{vehicle_records_path}} for {{shop_name}}.
|
|
18
|
+
1. Match recalls by make/model/year range and, where given, VIN range
|
|
19
|
+
against the vehicle records.
|
|
20
|
+
2. For each match, check whether the vehicle record already shows a
|
|
21
|
+
"recall_contacted" or "recall_scheduled" status for that recall
|
|
22
|
+
campaign number.
|
|
23
|
+
3. List every matched vehicle without that status: VIN, owner contact
|
|
24
|
+
info if available, recall campaign number, and a one-line summary of
|
|
25
|
+
the defect/remedy from the bulletin.
|
|
26
|
+
4. Flag any recall bulletin that mentions a stop-drive or do-not-drive
|
|
27
|
+
warning separately at the top, since those need same-day outreach.
|
|
28
|
+
variables:
|
|
29
|
+
recall_bulletins_path:
|
|
30
|
+
default: "./recall-bulletins.csv"
|
|
31
|
+
description: "Path to a CSV/export of open recall bulletins with columns like campaign_number, make, model, year_range, vin_range, defect_summary."
|
|
32
|
+
vehicle_records_path:
|
|
33
|
+
default: "./vehicle-service-records.csv"
|
|
34
|
+
description: "Path to the shop's vehicle records (service history and/or inventory) with VIN, make, model, year, owner_contact, recall_status columns."
|
|
35
|
+
shop_name:
|
|
36
|
+
default: "the shop"
|
|
37
|
+
description: Name of the dealership or repair shop, for report context.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: Outreach and scheduling still need a human or a separate workflow — this job only identifies which vehicles are affected and unresolved.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: parts-reorder-point-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Parts Department Reorder Point Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks parts counter stock-on-hand against each SKU's reorder point and
|
|
6
|
+
flags anything that's dropped below it, so a routine oil filter or brake
|
|
7
|
+
pad isn't out of stock when a tech needs it mid-repair. Use this if a
|
|
8
|
+
common part has ever run out because nobody was watching the shelf until
|
|
9
|
+
it was already empty.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, parts, inventory, reorder]
|
|
12
|
+
schedule: "0 6 * * 1-6"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
onhand = $2 + 0;
|
|
20
|
+
reorder_point = $3 + 0;
|
|
21
|
+
if (onhand <= reorder_point) {
|
|
22
|
+
printf "REORDER: %s (%s) — %d on hand, reorder point %d\n", $1, $4, onhand, reorder_point;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{parts_stock_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
parts_stock_csv_path:
|
|
28
|
+
default: "./parts-stock.csv"
|
|
29
|
+
description: "Path to a CSV with columns: part_number,qty_on_hand,reorder_point,description."
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: >
|
|
32
|
+
Distinct from `parts-backorder-check` — that job tracks parts already
|
|
33
|
+
ordered and now late from the supplier; this one tracks shelf stock
|
|
34
|
+
levels before an order is even placed. Also distinct from fieldservice's
|
|
35
|
+
`parts-low-stock-reorder-check`, which watches traveling techs' truck
|
|
36
|
+
and warehouse stock rather than a dealership parts counter.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: repair-cycle-time-trend-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Repair Order Cycle Time Trend Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Reviews closed repair orders from the past week and compares the
|
|
6
|
+
average check-in-to-checkout cycle time against your rolling baseline,
|
|
7
|
+
flagging a trend drift even when no single order looks late. Use this
|
|
8
|
+
if turnaround has ever quietly crept up week over week without any one
|
|
9
|
+
repair order tripping an aging alert.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, repair-shop, cycle-time, trend]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Using the closed repair orders in {{closed_ros_path}} for the last 7
|
|
17
|
+
days, for {{shop_name}}:
|
|
18
|
+
1. Calculate the average cycle time (checkin_date to checkout_date, in
|
|
19
|
+
hours) across all closed repair orders in the period.
|
|
20
|
+
2. Compare it to the rolling baseline of {{baseline_cycle_hours}} hours.
|
|
21
|
+
3. Flag a drift if the weekly average is more than {{drift_threshold_pct}}
|
|
22
|
+
percent above baseline.
|
|
23
|
+
4. Break down the average by repair type or department if that data is
|
|
24
|
+
present, and call out which category is driving the drift.
|
|
25
|
+
5. Summarize as: this week's average, baseline, percent change, and the
|
|
26
|
+
likely driver if identifiable (e.g. one tech, one repair type, parts
|
|
27
|
+
delays).
|
|
28
|
+
variables:
|
|
29
|
+
closed_ros_path:
|
|
30
|
+
default: "./closed-repair-orders.csv"
|
|
31
|
+
description: "Path to a CSV of closed ROs with columns like ro_number, checkin_date, checkout_date, repair_type, technician."
|
|
32
|
+
shop_name:
|
|
33
|
+
default: "the shop"
|
|
34
|
+
description: Name of the dealership or repair shop, for report context.
|
|
35
|
+
baseline_cycle_hours:
|
|
36
|
+
default: 48
|
|
37
|
+
description: The shop's target/rolling-average cycle time in hours to compare against.
|
|
38
|
+
drift_threshold_pct:
|
|
39
|
+
default: 15
|
|
40
|
+
description: Percent above baseline that counts as a meaningful drift worth flagging.
|
|
41
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
42
|
+
notes: Distinct from `repair-order-aging-check` — that job flags individual open ROs sitting past a per-repair target today; this one watches the trend across closed ROs over time to catch slow process drift.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: service-appointment-no-show-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Service Appointment No-Show Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks today's service appointment schedule partway through the day
|
|
6
|
+
and flags customers who booked a slot but never checked in, so the bay
|
|
7
|
+
can be reopened to a walk-in instead of sitting empty. Use this if a
|
|
8
|
+
bay has ever sat idle all morning because a no-show was never noticed
|
|
9
|
+
until the tech asked what happened to their 9 o'clock.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, service-bay, no-show, scheduling]
|
|
12
|
+
schedule: "30 9,13 * * 1-6"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
now=$(date +%H:%M);
|
|
17
|
+
awk -F',' -v now="$now" -v grace="{{grace_minutes}}" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
$3 == "scheduled" {
|
|
20
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %H:%M \"" $2 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline slot_epoch; close(cmd);
|
|
22
|
+
cmd2 = "date -d \"" now "\" +%s 2>/dev/null || date -j -f %H:%M \"" now "\" +%s 2>/dev/null";
|
|
23
|
+
cmd2 | getline now_epoch; close(cmd2);
|
|
24
|
+
late_min = (now_epoch - slot_epoch) / 60;
|
|
25
|
+
if (late_min >= grace) {
|
|
26
|
+
printf "NO-SHOW: %s — appointment %s (%d min past slot, not checked in)\n", $1, $2, late_min;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
' "{{appointments_csv_path}}"
|
|
30
|
+
variables:
|
|
31
|
+
appointments_csv_path:
|
|
32
|
+
default: "./service-appointments-today.csv"
|
|
33
|
+
description: "Path to a CSV with columns: customer_name,appointment_time (HH:MM),status (scheduled/checked-in/completed)."
|
|
34
|
+
grace_minutes:
|
|
35
|
+
default: 30
|
|
36
|
+
description: Minutes past the scheduled time before a missed appointment counts as a no-show.
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: Distinct from fieldservice's `tech-eta-no-show-check` — that job flags the shop's own technician running late to a customer site; this one flags the customer not showing up to the shop.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: service-bay-utilization-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Service Bay Utilization Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each service bay's scheduled hours against its available hours
|
|
6
|
+
for the day and flags bays running well under or over target
|
|
7
|
+
utilization. Use this if a shop has ever had techs standing around on
|
|
8
|
+
one side of the floor while the other side is double-booked, and
|
|
9
|
+
nobody noticed until the day was already gone.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, service-bay, scheduling, utilization]
|
|
12
|
+
schedule: "0 7 * * 1-6"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v low="{{low_utilization_pct}}" -v high="{{high_utilization_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
available = $2 + 0;
|
|
20
|
+
scheduled = $3 + 0;
|
|
21
|
+
if (available <= 0) next;
|
|
22
|
+
pct = (scheduled / available) * 100;
|
|
23
|
+
if (pct < low) printf "UNDER-BOOKED: bay %s — %.0f%% scheduled (%s of %s hrs)\n", $1, pct, $3, $2;
|
|
24
|
+
else if (pct > high) printf "OVER-BOOKED: bay %s — %.0f%% scheduled (%s of %s hrs)\n", $1, pct, $3, $2;
|
|
25
|
+
}
|
|
26
|
+
' "{{bay_schedule_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
bay_schedule_csv_path:
|
|
29
|
+
default: "./bay-schedule.csv"
|
|
30
|
+
description: "Path to a CSV with columns: bay_id,available_hours,scheduled_hours (both for today)."
|
|
31
|
+
low_utilization_pct:
|
|
32
|
+
default: 50
|
|
33
|
+
description: Below this percent scheduled, a bay counts as under-booked and available for walk-ins.
|
|
34
|
+
high_utilization_pct:
|
|
35
|
+
default: 95
|
|
36
|
+
description: Above this percent scheduled, a bay counts as over-booked and at risk of running late all day.
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: Rebalance jobs across bays/techs once flagged — this job only surfaces the imbalance, it doesn't move appointments.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: shop-supply-reorder-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Shop Supply & Consumables Reorder Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks bulk shop consumables (shop towels, degreaser, disposable
|
|
6
|
+
gloves, oil dry, bulk fluids) against reorder thresholds and flags
|
|
7
|
+
anything running low. Use this if a tech has ever had to stop mid-job
|
|
8
|
+
because the shop ran out of a supply nobody tracks as closely as
|
|
9
|
+
billable parts.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, shop-supplies, consumables, reorder]
|
|
12
|
+
schedule: "0 6 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
onhand = $2 + 0;
|
|
20
|
+
reorder_point = $3 + 0;
|
|
21
|
+
if (onhand <= reorder_point) {
|
|
22
|
+
printf "REORDER: %s — %s %s on hand, reorder point %s %s\n", $1, $2, $4, $3, $4;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{shop_supplies_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
shop_supplies_csv_path:
|
|
28
|
+
default: "./shop-supplies-stock.csv"
|
|
29
|
+
description: "Path to a CSV with columns: supply_name,qty_on_hand,reorder_point,unit."
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Distinct from `parts-reorder-point-check` — that job tracks customer-billable repair parts; this one tracks internal bulk consumables that never hit a repair order.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: trade-in-appraisal-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Trade-In Appraisal Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares trade-in vehicles' initial appraised value against their
|
|
6
|
+
actual wholesale/auction sale price once sold, and flags appraisers or
|
|
7
|
+
vehicle categories with a consistent gap. Use this if trade-in
|
|
8
|
+
appraisals have ever quietly run high (or low) for months before
|
|
9
|
+
anyone lined them up against what the cars actually brought at auction.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, trade-in, appraisal, wholesale]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review the trade-in records in {{trade_in_records_path}} for
|
|
17
|
+
{{dealership_name}} covering vehicles both appraised and subsequently
|
|
18
|
+
sold wholesale/at auction in the last month.
|
|
19
|
+
1. For each vehicle, calculate the variance between appraised_value and
|
|
20
|
+
actual_sale_price as both a dollar amount and a percent.
|
|
21
|
+
2. Flag any vehicle where the variance exceeds {{variance_threshold_pct}}
|
|
22
|
+
percent in either direction.
|
|
23
|
+
3. Aggregate variance by appraiser (if tracked) and by vehicle category
|
|
24
|
+
to identify whether the gap is a person-specific or category-specific
|
|
25
|
+
pattern rather than noise.
|
|
26
|
+
4. Summarize: average variance overall, worst individual outliers, and
|
|
27
|
+
any appraiser or category trending consistently high or low.
|
|
28
|
+
variables:
|
|
29
|
+
trade_in_records_path:
|
|
30
|
+
default: "./trade-in-appraisals.csv"
|
|
31
|
+
description: "Path to a CSV with columns like vin, appraiser, category, appraised_value, actual_sale_price, sale_date."
|
|
32
|
+
dealership_name:
|
|
33
|
+
default: "the dealership"
|
|
34
|
+
description: Name of the dealership, for report context.
|
|
35
|
+
variance_threshold_pct:
|
|
36
|
+
default: 10
|
|
37
|
+
description: Percent variance between appraised and actual sale price that counts as worth flagging.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: A pattern here can mean retraining an appraiser or adjusting a valuation guide — this job only surfaces the gap.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: used-vehicle-inventory-aging-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Used Vehicle Inventory Aging Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks used vehicle inventory against days-on-lot and flags anything
|
|
6
|
+
past your reconditioning or pricing review threshold. Use this if a
|
|
7
|
+
used car has ever sat on the lot for two months quietly losing value
|
|
8
|
+
before anyone noticed it needed a price cut.
|
|
9
|
+
category: automotive
|
|
10
|
+
tags: [automotive, used-vehicle, inventory, aging]
|
|
11
|
+
schedule: "0 7 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v days="{{aging_threshold_days}}" -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 != "sold" {
|
|
19
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline acquired_epoch; close(cmd);
|
|
21
|
+
age_days = (today - acquired_epoch) / 86400;
|
|
22
|
+
if (age_days >= days) {
|
|
23
|
+
printf "AGING: %s (%s) — %d days on lot, listed at $%s\n", $1, $3, age_days, $5;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{used_inventory_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
used_inventory_csv_path:
|
|
29
|
+
default: "./used-vehicle-inventory.csv"
|
|
30
|
+
description: "Path to a CSV with columns: vin,acquired_date (YYYY-MM-DD),description,status,listed_price."
|
|
31
|
+
aging_threshold_days:
|
|
32
|
+
default: 60
|
|
33
|
+
description: Days on lot before a used vehicle counts as aging and worth a pricing/reconditioning review.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Pricing decisions still need a human call — this job only surfaces which units have crossed the aging threshold.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
id: critical-path-material-lead-time-review
|
|
2
|
+
version: 1
|
|
3
|
+
name: Critical-Path Material Lead Time Review
|
|
4
|
+
description: >
|
|
5
|
+
Reviews long-lead-time materials (elevators, structural steel, custom
|
|
6
|
+
windows, switchgear, and similar) against the project schedule to catch
|
|
7
|
+
items that haven't been ordered yet but need to be, given their lead
|
|
8
|
+
time. Use this if a schedule has ever slipped months because a
|
|
9
|
+
long-lead item wasn't placed on order until someone finally asked "wait,
|
|
10
|
+
did we order that yet?"
|
|
11
|
+
category: construction
|
|
12
|
+
tags: [construction, procurement, schedule, long-lead]
|
|
13
|
+
schedule: "0 8 * * 1"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: agent-prompt
|
|
16
|
+
prompt: |
|
|
17
|
+
Compare the long-lead material procurement log ({{procurement_log_path}})
|
|
18
|
+
against the project schedule milestones ({{schedule_path}}) for project
|
|
19
|
+
{{project_name}}.
|
|
20
|
+
1. For each material not yet marked "ordered," calculate the latest safe
|
|
21
|
+
order date by working backward from its need-by milestone using its
|
|
22
|
+
stated lead time.
|
|
23
|
+
2. Flag any item where today is at or past that latest safe order date,
|
|
24
|
+
or within {{buffer_days}} days of it.
|
|
25
|
+
3. Note which milestone each flagged item threatens if the order slips
|
|
26
|
+
further.
|
|
27
|
+
4. Summarize as a short action list: item, days of buffer remaining
|
|
28
|
+
(negative if already late), milestone at risk.
|
|
29
|
+
variables:
|
|
30
|
+
procurement_log_path:
|
|
31
|
+
default: "./long-lead-procurement-log.csv"
|
|
32
|
+
description: "Path to the procurement log — expects columns like material, lead_time_days, need_by_milestone, status (ordered/not ordered)."
|
|
33
|
+
schedule_path:
|
|
34
|
+
default: "./project-schedule.csv"
|
|
35
|
+
description: Path to the project schedule with milestone dates.
|
|
36
|
+
project_name:
|
|
37
|
+
default: "the project"
|
|
38
|
+
description: Name of the project being reviewed.
|
|
39
|
+
buffer_days:
|
|
40
|
+
default: 14
|
|
41
|
+
description: How many days of buffer before the safe-order deadline to start flagging.
|
|
42
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
43
|
+
notes: Distinct from material-delivery-delay-check — that job flags materials already ordered and now overdue; this one catches items that should have been ordered already but weren't.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: daily-jobsite-log-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Daily Jobsite Log Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews whether each active site's daily log/report was actually
|
|
6
|
+
submitted and contains the expected substance (crew count, weather,
|
|
7
|
+
work performed, delays) rather than being a rubber-stamped copy of the
|
|
8
|
+
day before. Use this if a dispute has ever come down to "what actually
|
|
9
|
+
happened on site that day" and the daily logs were too thin to help.
|
|
10
|
+
category: construction
|
|
11
|
+
tags: [construction, daily-log, documentation, compliance]
|
|
12
|
+
schedule: "0 7 * * 2-6"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review yesterday's daily jobsite logs ({{daily_logs_path}}) for each
|
|
17
|
+
active site listed in {{active_sites_path}}.
|
|
18
|
+
1. Flag any active site with no log submitted for yesterday.
|
|
19
|
+
2. For submitted logs, check each includes: crew headcount, weather
|
|
20
|
+
conditions, a description of work performed, and any delays or
|
|
21
|
+
issues noted.
|
|
22
|
+
3. Flag logs that look copy-pasted from the prior day (near-identical
|
|
23
|
+
wording with no site-specific detail) as low-substance.
|
|
24
|
+
4. Summarize: sites missing a log, sites with thin/low-substance logs,
|
|
25
|
+
sites fully compliant.
|
|
26
|
+
variables:
|
|
27
|
+
daily_logs_path:
|
|
28
|
+
default: "./daily-logs/"
|
|
29
|
+
description: Folder containing yesterday's daily jobsite log submissions, one per site.
|
|
30
|
+
active_sites_path:
|
|
31
|
+
default: "./active-sites.csv"
|
|
32
|
+
description: CSV or list of currently active jobsite names/IDs expected to submit a daily log.
|
|
33
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
34
|
+
notes: Judging log substance and copy-paste patterns needs reading comprehension, not a fit for a fixed script.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: equipment-utilization-cost-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Equipment Utilization & Cost Check
|
|
4
|
+
description: >
|
|
5
|
+
Calculates how many billable/working days each piece of rented or owned
|
|
6
|
+
equipment actually logged against its rental or ownership cost, and flags
|
|
7
|
+
anything sitting idle while still costing money. Use this if a rental has
|
|
8
|
+
ever been kept "just in case" for weeks with nothing to show for it on a
|
|
9
|
+
timesheet.
|
|
10
|
+
category: construction
|
|
11
|
+
tags: [construction, equipment, cost, utilization]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v min_util="{{min_utilization_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
equip=$1; days_on_site=$2; days_used=$3; daily_cost=$4;
|
|
20
|
+
utilization = (days_on_site > 0) ? (days_used / days_on_site * 100) : 0;
|
|
21
|
+
total_cost = days_on_site * daily_cost;
|
|
22
|
+
if (utilization < min_util) {
|
|
23
|
+
printf "LOW UTILIZATION: %s — used %d of %d days on site (%.0f%%), cost so far $%.2f\n", equip, days_used, days_on_site, utilization, total_cost;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{equipment_log_csv}}"
|
|
27
|
+
variables:
|
|
28
|
+
equipment_log_csv:
|
|
29
|
+
default: "./equipment-utilization-log.csv"
|
|
30
|
+
description: "Path to a CSV with columns: equipment_name,days_on_site,days_used,daily_cost."
|
|
31
|
+
min_utilization_pct:
|
|
32
|
+
default: 50
|
|
33
|
+
description: Minimum acceptable utilization percentage before it's flagged as underused.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Distinct from equipment-rental-return-reminder — that job watches the return-by deadline; this one watches whether idle equipment is worth the cost while it's still on site.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: heavy-equipment-inspection-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Heavy Equipment Inspection Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks owned heavy equipment (excavators, cranes, lifts, and similar)
|
|
6
|
+
against their required annual/periodic safety inspection dates and
|
|
7
|
+
flags anything overdue or coming due. Use this if a piece of owned
|
|
8
|
+
equipment has ever kept running past its inspection date because
|
|
9
|
+
nobody was tracking it the way rentals get tracked.
|
|
10
|
+
category: construction
|
|
11
|
+
tags: [construction, equipment, inspection, safety, compliance]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v today="$today" -v warn="{{warn_days}}" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline due_ts; close(cmd);
|
|
22
|
+
days_left = int((due_ts - today) / 86400);
|
|
23
|
+
if (days_left <= warn) printf "INSPECTION DUE: %s (%s) — due %s (%d days)\n", $1, $3, $2, days_left;
|
|
24
|
+
}
|
|
25
|
+
' "{{owned_equipment_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
owned_equipment_csv:
|
|
28
|
+
default: "./owned-equipment-inspections.csv"
|
|
29
|
+
description: "Path to a CSV with columns: equipment_name,next_inspection_due (YYYY-MM-DD),equipment_id."
|
|
30
|
+
warn_days:
|
|
31
|
+
default: 21
|
|
32
|
+
description: Days before the inspection due date to start warning.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Distinct from equipment-rental-return-reminder — that job covers rented equipment due back to the rental company; this one covers company-owned equipment's own safety inspection cycle.
|