@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,45 @@
|
|
|
1
|
+
id: vendor-early-pay-discount-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Vendor Early-Pay Discount Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags vendor invoices with an early-payment discount (like "2/10 net
|
|
6
|
+
30") whose discount window is about to close. Use this if you've ever
|
|
7
|
+
paid a bill on the regular due date and only afterward realized you
|
|
8
|
+
could've saved a couple percent by paying ten days earlier.
|
|
9
|
+
category: finance
|
|
10
|
+
tags: [accounts-payable, discounts, vendor-terms, finance]
|
|
11
|
+
schedule: "0 8 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
file={{payables_terms_file}}; warn_days={{warn_days}};
|
|
16
|
+
[ -f "$file" ] || { echo "ERROR: $file not found"; exit 1; };
|
|
17
|
+
today=$(date +%s);
|
|
18
|
+
tail -n +2 "$file" | while IFS=, read -r vendor amount invoice_date discount_pct discount_days paid; do
|
|
19
|
+
[ "$paid" = "yes" ] && continue;
|
|
20
|
+
[ -z "$discount_days" ] && continue;
|
|
21
|
+
inv_epoch=$(date -j -f %Y-%m-%d "$invoice_date" +%s 2>/dev/null || date -d "$invoice_date" +%s);
|
|
22
|
+
window_epoch=$(( inv_epoch + discount_days*86400 ));
|
|
23
|
+
days_left=$(( (window_epoch-today)/86400 ));
|
|
24
|
+
if [ "$days_left" -ge 0 ] && [ "$days_left" -le "$warn_days" ]; then
|
|
25
|
+
savings=$(awk -v a="$amount" -v p="$discount_pct" 'BEGIN{printf "%.2f", a*(p/100)}');
|
|
26
|
+
echo "DISCOUNT WINDOW CLOSING: $vendor invoice \$$amount — pay within $days_left day(s) to save \$$savings ($discount_pct% discount)";
|
|
27
|
+
fi;
|
|
28
|
+
done
|
|
29
|
+
variables:
|
|
30
|
+
payables_terms_file:
|
|
31
|
+
default: "./vendor-payment-terms.csv"
|
|
32
|
+
description: >
|
|
33
|
+
CSV with header
|
|
34
|
+
"vendor,amount,invoice_date,discount_pct,discount_days,paid"
|
|
35
|
+
(invoice_date is YYYY-MM-DD; discount_days is how many days from
|
|
36
|
+
invoice_date the early-pay discount applies, e.g. 10 for "2/10 net
|
|
37
|
+
30"; leave discount_pct/discount_days blank if no early-pay term
|
|
38
|
+
exists).
|
|
39
|
+
warn_days:
|
|
40
|
+
default: 3
|
|
41
|
+
description: Start warning this many days before the discount window closes.
|
|
42
|
+
compatible_agents: [generic, claude, codex]
|
|
43
|
+
notes: >
|
|
44
|
+
Zero-token. You maintain vendor-payment-terms.csv from vendor
|
|
45
|
+
invoices/contracts — this doesn't parse invoice terms automatically.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: accident-incident-report-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Accident/Incident Report Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags open accident or incident reports that have gone too long without
|
|
6
|
+
being closed out. Use this if a fender-bender report has ever sat
|
|
7
|
+
unresolved for weeks because nobody was tracking it after the initial
|
|
8
|
+
paperwork was filed.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, safety, incidents, compliance]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v max_days="{{max_open_days}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "open" {
|
|
19
|
+
cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
|
|
20
|
+
cmd | getline reported_ts; close(cmd);
|
|
21
|
+
days_open = int((today - reported_ts) / 86400);
|
|
22
|
+
if (days_open >= max_days)
|
|
23
|
+
print "STALE REPORT: vehicle " $1 " incident reported " $2 " (" days_open " days open, driver " $3 ")";
|
|
24
|
+
}
|
|
25
|
+
' "{{incidents_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
incidents_csv_path:
|
|
28
|
+
default: "./fleet-incidents.csv"
|
|
29
|
+
description: "Path to a CSV with columns: vehicle_id,reported_date(YYYY-MM-DD),driver_name,status(open/closed)."
|
|
30
|
+
max_open_days:
|
|
31
|
+
default: 10
|
|
32
|
+
description: Days an incident can stay open before it's flagged as stale.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Tracks report closure aging, not the claim payout itself — see `fleet-insurance-expiry-check` for policy coverage lapses.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: driver-mvr-review-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Driver MVR Review Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Tracks when each driver's motor vehicle record (MVR) was last pulled and
|
|
6
|
+
reviewed, and flags drivers overdue for their periodic re-check. Use
|
|
7
|
+
this if a driver has ever kept racking up points or violations on their
|
|
8
|
+
record for a year or more before anyone at the company noticed.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, drivers, mvr, compliance]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v max_days="{{max_days_since_review}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
|
|
20
|
+
cmd | getline last_ts; close(cmd);
|
|
21
|
+
days_since = int((today - last_ts) / 86400);
|
|
22
|
+
if (days_since >= max_days)
|
|
23
|
+
print "MVR REVIEW OVERDUE: " $1 " — last pulled " $2 " (" days_since " days ago)";
|
|
24
|
+
}
|
|
25
|
+
' "{{mvr_review_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
mvr_review_csv_path:
|
|
28
|
+
default: "./driver-mvr-reviews.csv"
|
|
29
|
+
description: "Path to a CSV with columns: driver_name,last_mvr_pull_date(YYYY-MM-DD)."
|
|
30
|
+
max_days_since_review:
|
|
31
|
+
default: 365
|
|
32
|
+
description: Days since a driver's last MVR pull before it's flagged as overdue for a re-check.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Tracks the periodic driving-record re-check cadence, distinct from `driver-license-cdl-expiry-check`, which tracks license/CDL expiry dates specifically.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: driver-safety-score-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Driver Safety Score Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Reviews telematics-derived driver safety scores (harsh braking, hard
|
|
6
|
+
acceleration, speeding events) and flags drivers trending toward risky
|
|
7
|
+
behavior. Use this if a driver's habits have ever gone unaddressed until
|
|
8
|
+
an accident or a spiked insurance premium made it impossible to ignore.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, drivers, safety, telematics]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Pull this week's driver safety scorecards from {{telematics_provider_hint}}
|
|
16
|
+
for all tracked drivers.
|
|
17
|
+
1. Flag any driver whose composite safety score fell below
|
|
18
|
+
{{min_safety_score}} (0-100 scale).
|
|
19
|
+
2. Flag any driver with more than {{max_harsh_events}} combined harsh
|
|
20
|
+
braking/hard acceleration/speeding events this week.
|
|
21
|
+
3. Note drivers trending downward over the last {{trend_weeks}} weeks even
|
|
22
|
+
if still above threshold.
|
|
23
|
+
4. Report flagged drivers with score, event counts, and week-over-week
|
|
24
|
+
trend so a manager can decide on coaching.
|
|
25
|
+
variables:
|
|
26
|
+
telematics_provider_hint:
|
|
27
|
+
default: "your telematics/GPS provider (Samsara, Motive, Geotab, etc.)"
|
|
28
|
+
description: Name of the telematics provider/portal driver scorecards come from.
|
|
29
|
+
min_safety_score:
|
|
30
|
+
default: 70
|
|
31
|
+
description: Composite safety score (0-100) below which a driver is flagged.
|
|
32
|
+
max_harsh_events:
|
|
33
|
+
default: 5
|
|
34
|
+
description: Combined harsh-driving events per week that triggers a flag.
|
|
35
|
+
trend_weeks:
|
|
36
|
+
default: 4
|
|
37
|
+
description: Number of trailing weeks to check for a declining trend.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: No generic script mode — telematics scorecard formats vary by provider and trend judgment benefits from an agent rather than a fixed CSV parse. Distinct from `vehicle-idle-time-check`, which tracks fuel waste, not driving behavior.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: ev-battery-health-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: EV Battery Health & Charging Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks electric fleet vehicles' battery state-of-health and charging
|
|
6
|
+
session logs, flagging vehicles with degrading batteries or charging
|
|
7
|
+
problems. Use this if an EV has ever shown up for a route with far less
|
|
8
|
+
range than expected because nobody was watching battery degradation
|
|
9
|
+
between scheduled services.
|
|
10
|
+
category: fleet
|
|
11
|
+
tags: [fleet, ev, battery, charging]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v min_soh="{{min_battery_soh_pct}}" -v max_hours="{{max_hours_since_charge}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
if ($2 < min_soh)
|
|
20
|
+
printf "DEGRADED BATTERY: vehicle %s — %s%% state of health (min %s%%)\n", $1, $2, min_soh;
|
|
21
|
+
if ($3 > max_hours)
|
|
22
|
+
printf "NOT CHARGED: vehicle %s — %s hours since last charge (max %s)\n", $1, $3, max_hours;
|
|
23
|
+
}
|
|
24
|
+
' "{{ev_fleet_csv_path}}"
|
|
25
|
+
variables:
|
|
26
|
+
ev_fleet_csv_path:
|
|
27
|
+
default: "./ev-fleet-status.csv"
|
|
28
|
+
description: "Path to a CSV with columns: vehicle_id,battery_soh_pct,hours_since_last_charge."
|
|
29
|
+
min_battery_soh_pct:
|
|
30
|
+
default: 80
|
|
31
|
+
description: Battery state-of-health percentage below which a vehicle is flagged for degradation review.
|
|
32
|
+
max_hours_since_charge:
|
|
33
|
+
default: 24
|
|
34
|
+
description: Hours since last charging session before a vehicle is flagged as possibly not charging on schedule.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Requires an EV telematics/charging-network export with state-of-health and last-charge data; format varies by provider (Ford Pro, Geotab EV, ChargePoint, etc.).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: fuel-efficiency-trend-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Fuel Efficiency Trend Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Tracks each vehicle's miles-per-gallon (or equivalent) trend over time
|
|
6
|
+
and flags vehicles losing efficiency, which often signals a mechanical
|
|
7
|
+
problem before it shows up as a breakdown. Use this if a vehicle's fuel
|
|
8
|
+
costs have ever crept up for months before a mechanic found the actual
|
|
9
|
+
cause.
|
|
10
|
+
category: fleet
|
|
11
|
+
tags: [fleet, fuel, efficiency, maintenance]
|
|
12
|
+
schedule: "0 7 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v drop_pct="{{efficiency_drop_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
baseline=$2; current=$3;
|
|
20
|
+
drop = ((baseline - current) / baseline) * 100;
|
|
21
|
+
if (drop >= drop_pct)
|
|
22
|
+
printf "EFFICIENCY DROP: vehicle %s — %.1f%% below baseline (%.1f -> %.1f mpg)\n", $1, drop, baseline, current;
|
|
23
|
+
}
|
|
24
|
+
' "{{fuel_efficiency_csv_path}}"
|
|
25
|
+
variables:
|
|
26
|
+
fuel_efficiency_csv_path:
|
|
27
|
+
default: "./fleet-fuel-efficiency.csv"
|
|
28
|
+
description: "Path to a monthly CSV with columns: vehicle_id,baseline_mpg,current_month_mpg."
|
|
29
|
+
efficiency_drop_pct:
|
|
30
|
+
default: 15
|
|
31
|
+
description: Percentage drop from baseline mpg before a vehicle is flagged for a possible mechanical issue.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Distinct from `fuel-card-anomaly-check` (fraud/misuse in individual transactions) and `vehicle-idle-time-check` (fuel burned while stationary) — this tracks actual driving efficiency degradation over time.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: geofence-violation-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: GPS Geofence Violation Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews telematics geofence alerts for fleet vehicles that left
|
|
6
|
+
authorized zones or moved outside approved hours, and flags them for
|
|
7
|
+
follow-up. Use this if a vehicle has ever turned up far outside its
|
|
8
|
+
assigned route or job site and nobody knew until a fuel bill or mileage
|
|
9
|
+
report gave it away.
|
|
10
|
+
category: fleet
|
|
11
|
+
tags: [fleet, gps, geofence, telematics]
|
|
12
|
+
schedule: "0 7 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review geofence alerts from {{telematics_provider_hint}} for the last
|
|
17
|
+
24 hours.
|
|
18
|
+
1. Flag any vehicle that exited an assigned geofence zone without a
|
|
19
|
+
matching dispatch/job assignment.
|
|
20
|
+
2. Flag any vehicle movement recorded outside approved operating hours
|
|
21
|
+
({{operating_hours}}).
|
|
22
|
+
3. Group repeat offenders (same vehicle or driver flagged more than
|
|
23
|
+
{{repeat_offense_threshold}} times this week) separately.
|
|
24
|
+
4. Report flagged events with vehicle, driver (if known), zone/time, and
|
|
25
|
+
duration outside bounds.
|
|
26
|
+
variables:
|
|
27
|
+
telematics_provider_hint:
|
|
28
|
+
default: "your telematics/GPS provider (Samsara, Motive, Geotab, etc.)"
|
|
29
|
+
description: Name of the telematics provider/portal geofence alerts come from.
|
|
30
|
+
operating_hours:
|
|
31
|
+
default: "06:00-19:00"
|
|
32
|
+
description: Normal operating hours; movement outside this window is flagged.
|
|
33
|
+
repeat_offense_threshold:
|
|
34
|
+
default: 2
|
|
35
|
+
description: Number of flagged events in a week that marks a vehicle/driver as a repeat offender.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: No generic script mode — geofence alert volume and false-positive rate vary too much by provider/zone setup for a fixed script; judgment is needed to separate legitimate detours from real violations. Distinct from `vehicle-idle-time-check` (fuel waste) and `driver-safety-score-monitor` (driving behavior).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: lease-return-condition-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: End-of-Lease Vehicle Return Condition Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews vehicles approaching lease-end and flags condition issues
|
|
6
|
+
(excess mileage, damage, missing equipment) that could trigger return
|
|
7
|
+
fees, giving time to fix them before turn-in. Use this if a leased
|
|
8
|
+
vehicle has ever come back with a surprise excess-wear bill because
|
|
9
|
+
nobody inspected it until the leasing company did.
|
|
10
|
+
category: fleet
|
|
11
|
+
tags: [fleet, leasing, inspection, cost]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review fleet lease records and identify vehicles reaching lease-end
|
|
17
|
+
within the next {{lookahead_days}} days.
|
|
18
|
+
1. For each vehicle, compare current mileage against the lease's
|
|
19
|
+
allowed mileage; flag any vehicle projected to exceed the allowance
|
|
20
|
+
by return date.
|
|
21
|
+
2. Review the most recent condition/inspection notes for damage beyond
|
|
22
|
+
normal wear, missing equipment, or aftermarket modifications that
|
|
23
|
+
would need reverting.
|
|
24
|
+
3. Estimate likely excess-wear/excess-mileage fees where the lease
|
|
25
|
+
terms make that possible.
|
|
26
|
+
4. Report flagged vehicles with lease-end date, projected mileage
|
|
27
|
+
overage, and condition concerns, ranked by estimated fee exposure.
|
|
28
|
+
variables:
|
|
29
|
+
lookahead_days:
|
|
30
|
+
default: 60
|
|
31
|
+
description: How many days ahead of lease-end to start reviewing a vehicle.
|
|
32
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
33
|
+
notes: No generic script mode — estimating fee exposure from mileage and freeform condition notes needs judgment, not a fixed threshold. Distinct from `vehicle-maintenance-due-check`, which tracks routine service, not lease turn-in condition.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: tire-wear-replacement-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Tire Wear & Replacement Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks tread depth readings against a safe minimum and flags tires
|
|
6
|
+
approaching replacement. Use this if a fleet vehicle has ever failed a
|
|
7
|
+
roadside inspection, or blown a tire on the road, because tread wear was
|
|
8
|
+
only checked at annual service instead of tracked between visits.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, tires, maintenance, safety]
|
|
11
|
+
schedule: "0 7 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v min_tread="{{min_tread_depth_32nds}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
if ($3 <= min_tread)
|
|
19
|
+
printf "REPLACE TIRE: vehicle %s, position %s — %s/32\" tread (min %s/32\")\n", $1, $2, $3, min_tread;
|
|
20
|
+
}
|
|
21
|
+
' "{{tire_tread_csv_path}}"
|
|
22
|
+
variables:
|
|
23
|
+
tire_tread_csv_path:
|
|
24
|
+
default: "./fleet-tire-tread.csv"
|
|
25
|
+
description: "Path to a CSV with columns: vehicle_id,tire_position,tread_depth_32nds_inch."
|
|
26
|
+
min_tread_depth_32nds:
|
|
27
|
+
default: 4
|
|
28
|
+
description: Minimum tread depth in 32nds of an inch before a tire is flagged for replacement (legal minimum is commonly 2/32).
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: Update fleet-tire-tread.csv from tread depth readings taken at fuel stops, inspections, or a telematics tire-pressure/tread add-on.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: toll-violation-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Toll & Parking Violation Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags unpaid tolls and parking citations against fleet vehicles before
|
|
6
|
+
they escalate into late fees, registration holds, or collections. Use
|
|
7
|
+
this if a parking ticket has ever turned into a much bigger bill because
|
|
8
|
+
it sat unnoticed until a renewal got blocked.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, tolls, violations, compliance]
|
|
11
|
+
schedule: "0 7 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v warn_days="{{warn_days_before_due}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "unpaid" {
|
|
19
|
+
cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
|
|
20
|
+
cmd | getline due_ts; close(cmd);
|
|
21
|
+
days_left = int((due_ts - today) / 86400);
|
|
22
|
+
if (days_left <= warn_days)
|
|
23
|
+
print "UNPAID: vehicle " $1 " — " $2 " (" $5 " USD, due " $3 ", " days_left " days left)";
|
|
24
|
+
}
|
|
25
|
+
' "{{violations_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
violations_csv_path:
|
|
28
|
+
default: "./fleet-toll-parking-violations.csv"
|
|
29
|
+
description: "Path to a CSV with columns: vehicle_id,violation_type,due_date(YYYY-MM-DD),status(unpaid/paid),amount_usd."
|
|
30
|
+
warn_days_before_due:
|
|
31
|
+
default: 5
|
|
32
|
+
description: Days before the due date to start warning about an unpaid violation.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Pull unpaid toll/citation exports from your toll transponder provider and city/county ticket portals into the CSV before each run.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: vehicle-pool-scheduling-conflict-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Vehicle Pool Scheduling Conflict Check
|
|
4
|
+
description: >
|
|
5
|
+
Scans upcoming pool vehicle reservations for double-bookings and flags
|
|
6
|
+
overlaps before two employees show up for the same vehicle. Use this if
|
|
7
|
+
a pool vehicle has ever been double-booked because reservations were
|
|
8
|
+
tracked in a shared calendar or spreadsheet with no overlap check.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, scheduling, pool-vehicles]
|
|
11
|
+
schedule: "0 6 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
vehicle=$1; start=$3; end=$4; requester=$2;
|
|
19
|
+
key = vehicle;
|
|
20
|
+
if ((key SUBSEP "count") in count) {
|
|
21
|
+
n = count[key SUBSEP "count"];
|
|
22
|
+
} else { n = 0; }
|
|
23
|
+
for (i = 0; i < n; i++) {
|
|
24
|
+
s2 = starts[key, i]; e2 = ends[key, i]; r2 = reqs[key, i];
|
|
25
|
+
if (start < e2 && s2 < end)
|
|
26
|
+
printf "CONFLICT: vehicle %s booked by %s (%s-%s) overlaps %s (%s-%s)\n", vehicle, requester, start, end, r2, s2, e2;
|
|
27
|
+
}
|
|
28
|
+
starts[key, n] = start; ends[key, n] = end; reqs[key, n] = requester;
|
|
29
|
+
count[key SUBSEP "count"] = n + 1;
|
|
30
|
+
}
|
|
31
|
+
' "{{reservations_csv_path}}"
|
|
32
|
+
variables:
|
|
33
|
+
reservations_csv_path:
|
|
34
|
+
default: "./pool-vehicle-reservations.csv"
|
|
35
|
+
description: "Path to a CSV with columns: vehicle_id,requester_name,start_datetime(sortable string, e.g. ISO 8601),end_datetime(sortable string)."
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: Reservation times must sort correctly as strings (ISO 8601 recommended) for the overlap comparison to work; re-export sorted by vehicle_id if your booking tool doesn't already group by vehicle.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: vehicle-tco-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Vehicle Total Cost of Ownership Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews each vehicle's running cost per mile (fuel, maintenance,
|
|
6
|
+
insurance, depreciation) against a threshold and flags vehicles that
|
|
7
|
+
have quietly become more expensive to keep than to replace. Use this if
|
|
8
|
+
an aging vehicle has ever stayed on the road years past the point it
|
|
9
|
+
made financial sense.
|
|
10
|
+
category: fleet
|
|
11
|
+
tags: [fleet, cost, depreciation, tco]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review this month's fleet cost data from {{fleet_management_system_hint}}
|
|
17
|
+
covering fuel, maintenance, insurance, and depreciation for each vehicle.
|
|
18
|
+
1. Calculate or pull the trailing {{trailing_months}}-month cost per mile
|
|
19
|
+
(or cost per day if mileage isn't tracked) for each vehicle.
|
|
20
|
+
2. Flag any vehicle whose cost per mile exceeds {{max_cost_per_mile_usd}}
|
|
21
|
+
USD, or whose costs have risen more than {{cost_increase_pct}}% versus
|
|
22
|
+
the prior period.
|
|
23
|
+
3. For flagged vehicles, note vehicle age/mileage and whether recent
|
|
24
|
+
costs are dominated by maintenance (repair spiral) or fuel
|
|
25
|
+
(efficiency loss).
|
|
26
|
+
4. Report flagged vehicles ranked by cost per mile, highest first.
|
|
27
|
+
variables:
|
|
28
|
+
fleet_management_system_hint:
|
|
29
|
+
default: "your fleet management/telematics system"
|
|
30
|
+
description: Name of the system fuel, maintenance, insurance, and depreciation data comes from.
|
|
31
|
+
trailing_months:
|
|
32
|
+
default: 3
|
|
33
|
+
description: Number of trailing months to average costs over.
|
|
34
|
+
max_cost_per_mile_usd:
|
|
35
|
+
default: 0.75
|
|
36
|
+
description: Cost per mile (USD) above which a vehicle is flagged.
|
|
37
|
+
cost_increase_pct:
|
|
38
|
+
default: 20
|
|
39
|
+
description: Percentage cost increase versus the prior period that triggers a flag.
|
|
40
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
41
|
+
notes: No generic script mode — cost data is scattered across fuel cards, maintenance logs, and insurance statements, and judging whether a rising cost trend means "replace this vehicle" needs more than a threshold check.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: vehicle-utilization-rate-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Vehicle Utilization Rate Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags fleet vehicles running well below or above a target utilization
|
|
6
|
+
rate (miles or days driven per period). Use this if a vehicle has ever
|
|
7
|
+
sat mostly idle in a lot racking up lease and insurance costs while
|
|
8
|
+
another vehicle got run into the ground.
|
|
9
|
+
category: fleet
|
|
10
|
+
tags: [fleet, vehicles, utilization]
|
|
11
|
+
schedule: "0 7 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v low="{{low_utilization_pct}}" -v high="{{high_utilization_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
pct = ($3 / $2) * 100;
|
|
19
|
+
if (pct < low) {
|
|
20
|
+
printf "UNDERUSED: vehicle %s — %.1f%% utilization (target %d-%d%%)\n", $1, pct, low, high;
|
|
21
|
+
} else if (pct > high) {
|
|
22
|
+
printf "OVERUSED: vehicle %s — %.1f%% utilization (target %d-%d%%)\n", $1, pct, low, high;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{utilization_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
utilization_csv_path:
|
|
28
|
+
default: "./vehicle-utilization.csv"
|
|
29
|
+
description: "Path to a monthly CSV with columns: vehicle_id,available_days_or_miles,used_days_or_miles."
|
|
30
|
+
low_utilization_pct:
|
|
31
|
+
default: 30
|
|
32
|
+
description: Utilization percentage below which a vehicle is flagged as underused.
|
|
33
|
+
high_utilization_pct:
|
|
34
|
+
default: 90
|
|
35
|
+
description: Utilization percentage above which a vehicle is flagged as overused/at risk of premature wear.
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: Pulls whatever "used" metric you track (days checked out, miles driven) against "available" — pick one unit and stay consistent across rows.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: cohort-retention-curve-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Cohort Retention Curve Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Compares a new signup cohort's early retention (e.g. week-1, week-4)
|
|
6
|
+
against your historical baseline and flags when a cohort is retaining
|
|
7
|
+
worse than usual. Use this if a bad cohort has ever only been noticed
|
|
8
|
+
months later when overall retention numbers had already softened.
|
|
9
|
+
category: growth
|
|
10
|
+
tags: [growth, retention, cohort-analysis, activation]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
file={{cohort_retention_csv_path}}; baseline={{baseline_retention_pct}}; drop={{drop_threshold_pct}};
|
|
16
|
+
[ -f "$file" ] || { echo "ERROR: $file not found"; exit 1; };
|
|
17
|
+
tail -n +2 "$file" | while IFS=',' read -r cohort_week cohort_size retained; do
|
|
18
|
+
[ "$cohort_size" -eq 0 ] 2>/dev/null && continue;
|
|
19
|
+
pct=$(awk "BEGIN{printf \"%.1f\", ($retained/$cohort_size)*100}");
|
|
20
|
+
below=$(awk "BEGIN{print ($pct < ($baseline - $drop)) ? 1 : 0}");
|
|
21
|
+
if [ "$below" = "1" ]; then
|
|
22
|
+
echo "BELOW BASELINE: cohort $cohort_week — ${pct}% retained ($retained/$cohort_size), baseline ${baseline}%";
|
|
23
|
+
fi
|
|
24
|
+
done
|
|
25
|
+
variables:
|
|
26
|
+
cohort_retention_csv_path:
|
|
27
|
+
default: "./cohort-retention.csv"
|
|
28
|
+
description: "Path to a CSV with header: cohort_week,cohort_size,retained_at_checkpoint (retained_at_checkpoint is the count still active at your chosen checkpoint, e.g. week 4)."
|
|
29
|
+
baseline_retention_pct:
|
|
30
|
+
default: 60
|
|
31
|
+
description: Your historical average retention percent at the checkpoint being measured.
|
|
32
|
+
drop_threshold_pct:
|
|
33
|
+
default: 10
|
|
34
|
+
description: Percentage points below baseline that flags a cohort as underperforming.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: >
|
|
37
|
+
Zero-token. You maintain cohort-retention.csv yourself (export from
|
|
38
|
+
product analytics, one row per signup cohort with its retention count
|
|
39
|
+
at a fixed checkpoint like week 4).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: customer-health-score-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: Customer Health Score Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Rolls up usage, support, billing, and sentiment signals into a
|
|
6
|
+
per-account health score and flags accounts that dropped into the red
|
|
7
|
+
zone. Use this if account health only ever comes up in a QBR deck, long
|
|
8
|
+
after an account has already quietly gone cold.
|
|
9
|
+
category: growth
|
|
10
|
+
tags: [growth, health-score, retention, customer-success]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Pull recent signals for each active account from {{signal_sources}}:
|
|
16
|
+
product usage trend, open support ticket volume/severity, days since
|
|
17
|
+
last login, payment status, and (if available) latest NPS/CSAT
|
|
18
|
+
response.
|
|
19
|
+
1. Combine the signals into a rough health score per account (e.g.
|
|
20
|
+
green/yellow/red), weighting usage decline and payment issues most
|
|
21
|
+
heavily.
|
|
22
|
+
2. List accounts that land in the red zone, with the specific signals
|
|
23
|
+
that dragged them down.
|
|
24
|
+
3. Note any account that moved from green/yellow to red since the last
|
|
25
|
+
run, since a sudden drop is more urgent than a chronically weak
|
|
26
|
+
score.
|
|
27
|
+
variables:
|
|
28
|
+
signal_sources:
|
|
29
|
+
default: "your product analytics, support/helpdesk tool, and billing system"
|
|
30
|
+
description: Where usage, support, and billing signals come from.
|
|
31
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
32
|
+
notes: >
|
|
33
|
+
No generic script mode — combining several signal types into one score
|
|
34
|
+
and judging what counts as "red" needs reasoning across sources, not a
|
|
35
|
+
single threshold. Distinct from churn-risk-watch (which only looks at
|
|
36
|
+
usage drop-off) — this rolls up multiple signal types into one composite
|
|
37
|
+
score.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: dau-mau-engagement-ratio-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: DAU/MAU Engagement Ratio Check
|
|
4
|
+
description: >
|
|
5
|
+
Computes the daily-active-to-monthly-active user ratio (a standard
|
|
6
|
+
stickiness measure) and flags when it drops below a healthy floor. Use
|
|
7
|
+
this if "engagement feels down lately" has ever been a gut feeling
|
|
8
|
+
nobody could confirm with a number until the next board deck.
|
|
9
|
+
category: growth
|
|
10
|
+
tags: [growth, engagement, stickiness, dau-mau]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
stats=$(curl -s -H "Authorization: Bearer {{analytics_api_token}}" "{{analytics_api_url}}");
|
|
16
|
+
dau=$(echo "$stats" | grep -o '"dau":[0-9]*' | head -n1 | cut -d: -f2);
|
|
17
|
+
mau=$(echo "$stats" | grep -o '"mau":[0-9]*' | head -n1 | cut -d: -f2);
|
|
18
|
+
if [ -z "$dau" ] || [ -z "$mau" ] || [ "$mau" -eq 0 ]; then echo "ERROR: could not compute DAU/MAU from {{analytics_api_url}}"; exit 1; fi;
|
|
19
|
+
ratio=$(awk "BEGIN{printf \"%.1f\", ($dau/$mau)*100}");
|
|
20
|
+
if awk "BEGIN{exit !($ratio < {{min_ratio_pct}})}"; then
|
|
21
|
+
echo "WARNING: DAU/MAU ratio ${ratio}% (min {{min_ratio_pct}}%) — $dau DAU / $mau MAU";
|
|
22
|
+
exit 1;
|
|
23
|
+
else echo "OK: DAU/MAU ratio ${ratio}% — $dau DAU / $mau MAU"; fi
|
|
24
|
+
variables:
|
|
25
|
+
analytics_api_url:
|
|
26
|
+
default: "https://api.example-analytics.com/v1/engagement/summary"
|
|
27
|
+
description: Product analytics endpoint returning current dau and mau counts.
|
|
28
|
+
analytics_api_token:
|
|
29
|
+
default: "your-api-token"
|
|
30
|
+
description: API token for the analytics platform.
|
|
31
|
+
min_ratio_pct:
|
|
32
|
+
default: 15
|
|
33
|
+
description: Minimum acceptable DAU/MAU ratio percent before flagging.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: >
|
|
36
|
+
Generic REST pattern — point at your analytics platform's (Amplitude,
|
|
37
|
+
Mixpanel, PostHog) engagement summary endpoint; adjust field names to
|
|
38
|
+
match its response shape. 15-20% is a common "sticky product" floor for
|
|
39
|
+
B2B SaaS, but tune to your product's natural usage cadence.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: dormant-account-reactivation-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Dormant Account Reactivation Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags accounts that have gone completely silent — no login at all for
|
|
6
|
+
an extended stretch — regardless of payment status, so they can be
|
|
7
|
+
routed into a reactivation effort instead of being written off
|
|
8
|
+
silently. Use this if accounts that stopped logging in months ago only
|
|
9
|
+
come up again when finance asks why you're still paying to host them.
|
|
10
|
+
category: growth
|
|
11
|
+
tags: [growth, dormant-accounts, reactivation, retention]
|
|
12
|
+
schedule: "0 9 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
file={{accounts_csv_path}}; dormant_days={{dormant_days}};
|
|
17
|
+
[ -f "$file" ] || { echo "ERROR: $file not found"; exit 1; };
|
|
18
|
+
today=$(date +%s);
|
|
19
|
+
tail -n +2 "$file" | while IFS=',' read -r account email last_login flagged; do
|
|
20
|
+
[ "$flagged" = "yes" ] && continue;
|
|
21
|
+
l_epoch=$(date -d "$last_login" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$last_login" +%s 2>/dev/null);
|
|
22
|
+
[ -z "$l_epoch" ] && continue;
|
|
23
|
+
days=$(( (today-l_epoch)/86400 ));
|
|
24
|
+
if [ "$days" -ge "$dormant_days" ]; then echo "DORMANT: $account ($email) — last login $days day(s) ago"; fi
|
|
25
|
+
done
|
|
26
|
+
variables:
|
|
27
|
+
accounts_csv_path:
|
|
28
|
+
default: "./account-last-login.csv"
|
|
29
|
+
description: "Path to a CSV with header: account_name,email,last_login_date,already_flagged (last_login_date is YYYY-MM-DD, already_flagged is yes/no)."
|
|
30
|
+
dormant_days:
|
|
31
|
+
default: 60
|
|
32
|
+
description: Days with no login before an account counts as dormant.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: >
|
|
35
|
+
Zero-token. You maintain account-last-login.csv yourself (or export
|
|
36
|
+
from your user database) — mark already_flagged=yes after routing an
|
|
37
|
+
account into reactivation outreach. Distinct from churn-risk-watch
|
|
38
|
+
(partial usage drop-off on paying accounts) — this catches accounts
|
|
39
|
+
with zero activity at all, paying or not.
|