@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,35 @@
|
|
|
1
|
+
id: failed-payment-dunning-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Failed Payment Dunning Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks recurring/subscription orders with a failed payment and flags
|
|
6
|
+
ones that have been retrying too long without success, so you can step
|
|
7
|
+
in before the customer silently churns. Use this if a subscriber has
|
|
8
|
+
ever stayed on "payment failed" for weeks with nobody following up,
|
|
9
|
+
quietly costing you recurring revenue.
|
|
10
|
+
category: ecommerce
|
|
11
|
+
tags: [ecommerce, subscriptions, payments, dunning, churn]
|
|
12
|
+
schedule: "0 9 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v max_days="{{max_retry_days}}" -v max_attempts="{{max_retry_attempts}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$2 == "failed" {
|
|
19
|
+
if ($3+0 >= max_days || $4+0 >= max_attempts) {
|
|
20
|
+
printf "NEEDS ACTION: subscription %s — %d days failing, %d retry attempts\n", $1, $3, $4;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
' "{{subscriptions_csv_path}}"
|
|
24
|
+
variables:
|
|
25
|
+
subscriptions_csv_path:
|
|
26
|
+
default: "./subscriptions.csv"
|
|
27
|
+
description: "Path to a CSV with columns: subscription_id,status (failed/active),days_since_first_failure,retry_attempt_count."
|
|
28
|
+
max_retry_days:
|
|
29
|
+
default: 7
|
|
30
|
+
description: Days a subscription can sit in failed-payment status before it needs a manual touch (update card, human outreach, or cancel).
|
|
31
|
+
max_retry_attempts:
|
|
32
|
+
default: 4
|
|
33
|
+
description: Number of automatic retry attempts before it needs a manual touch instead of another silent retry.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: This flags when automatic dunning has run its course — pair with an actual outreach step (email, SMS, or account pause) since the job itself only identifies who needs it.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
id: marketplace-listing-sync-drift-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Marketplace Listing Sync Drift Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares price and stock on your source-of-truth catalog against what's
|
|
6
|
+
actually live on a marketplace (Amazon, eBay, Etsy) and flags any SKU
|
|
7
|
+
that's drifted out of sync. Use this if a marketplace listing has ever
|
|
8
|
+
shown a stale price or "in stock" on an item you'd already sold out of
|
|
9
|
+
on your own store, because the sync job silently failed.
|
|
10
|
+
category: ecommerce
|
|
11
|
+
tags: [ecommerce, marketplace, sync, inventory, pricing]
|
|
12
|
+
schedule: "0 */4 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' '
|
|
17
|
+
FNR==NR {
|
|
18
|
+
if (FNR==1) {next}
|
|
19
|
+
truth_price[$1]=$2; truth_stock[$1]=$3; next
|
|
20
|
+
}
|
|
21
|
+
{
|
|
22
|
+
if (FNR==1) {next}
|
|
23
|
+
sku=$1; mkt_price=$2; mkt_stock=$3; marketplace=$4;
|
|
24
|
+
if (sku in truth_price) {
|
|
25
|
+
price_diff = truth_price[sku] - mkt_price; if (price_diff < 0) price_diff = -price_diff;
|
|
26
|
+
if (price_diff > {{price_tolerance_usd}}) {
|
|
27
|
+
printf "PRICE DRIFT: %s on %s — source: $%.2f, listed: $%.2f\n", sku, marketplace, truth_price[sku], mkt_price;
|
|
28
|
+
}
|
|
29
|
+
if ((truth_stock[sku]+0 <= 0) != (mkt_stock+0 <= 0)) {
|
|
30
|
+
printf "STOCK DRIFT: %s on %s — source stock: %s, listed stock: %s\n", sku, marketplace, truth_stock[sku], mkt_stock;
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
printf "UNMATCHED SKU: %s on %s not found in source-of-truth catalog\n", sku, marketplace;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
' "{{source_of_truth_csv_path}}" "{{marketplace_export_csv_path}}"
|
|
37
|
+
variables:
|
|
38
|
+
source_of_truth_csv_path:
|
|
39
|
+
default: "./catalog-source-of-truth.csv"
|
|
40
|
+
description: "Path to a CSV with columns: sku,price,stock — your own store's authoritative price/stock."
|
|
41
|
+
marketplace_export_csv_path:
|
|
42
|
+
default: "./marketplace-listings.csv"
|
|
43
|
+
description: "Path to a CSV export with columns: sku,listed_price,listed_stock,marketplace — one row per live listing per marketplace."
|
|
44
|
+
price_tolerance_usd:
|
|
45
|
+
default: 1.00
|
|
46
|
+
description: Acceptable price difference in dollars between source and marketplace before flagging drift.
|
|
47
|
+
compatible_agents: [generic, claude, codex]
|
|
48
|
+
notes: Requires both exports to use the same SKU values — normalize SKU formatting on export if a marketplace mangles it (e.g. adds a prefix).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: product-feed-health-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Product Feed Health Check
|
|
4
|
+
description: >
|
|
5
|
+
Scans your product catalog export for listings that are live but broken
|
|
6
|
+
in some way — missing title, missing description, missing image, a
|
|
7
|
+
zero/blank price, or marked out-of-stock while still visible to
|
|
8
|
+
shoppers. Use this if a product has ever sat on your storefront for
|
|
9
|
+
weeks with a broken image or a $0 price because nobody was checking
|
|
10
|
+
feed quality after the initial upload.
|
|
11
|
+
category: ecommerce
|
|
12
|
+
tags: [ecommerce, product-feed, seo, catalog, data-quality]
|
|
13
|
+
schedule: "0 5 * * *"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: shell
|
|
16
|
+
command: >
|
|
17
|
+
awk -F',' '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
sku=$1; title=$2; description=$3; image_url=$4; price=$5; in_stock=$6; visible=$7;
|
|
21
|
+
issues="";
|
|
22
|
+
if (title == "") issues = issues "missing title; ";
|
|
23
|
+
if (description == "") issues = issues "missing description; ";
|
|
24
|
+
if (image_url == "") issues = issues "missing image; ";
|
|
25
|
+
if (price+0 <= 0) issues = issues "zero/blank price; ";
|
|
26
|
+
if (in_stock == "false" && visible == "true") issues = issues "out-of-stock but still visible; ";
|
|
27
|
+
if (issues != "") printf "ISSUE: %s — %s\n", sku, issues;
|
|
28
|
+
}
|
|
29
|
+
' "{{product_feed_csv_path}}"
|
|
30
|
+
variables:
|
|
31
|
+
product_feed_csv_path:
|
|
32
|
+
default: "./product-feed.csv"
|
|
33
|
+
description: "Path to a CSV export with columns: sku,title,description,image_url,price,in_stock(true/false),visible(true/false)."
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Export this from whatever generates your storefront/Google Shopping feed on a schedule — the checks are only as fresh as the export. Distinct from `low-stock-reorder-alert`, which tracks stock levels, not listing data quality.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: purchase-order-overdue-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Purchase Order Overdue Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks open purchase orders to suppliers against their expected
|
|
6
|
+
delivery date and flags anything that hasn't arrived on time. Use this
|
|
7
|
+
if a supplier has ever gone quiet on a PO and you only found out stock
|
|
8
|
+
wasn't coming when you were already out of the item.
|
|
9
|
+
category: ecommerce
|
|
10
|
+
tags: [ecommerce, purchase-orders, suppliers, inventory]
|
|
11
|
+
schedule: "0 7 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "pending" {
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline expected_epoch; close(cmd);
|
|
21
|
+
if (today > expected_epoch) {
|
|
22
|
+
overdue_days = (today - expected_epoch) / 86400;
|
|
23
|
+
printf "OVERDUE PO: %s from %s — expected %s (%d days late)\n", $1, $2, $3, overdue_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{purchase_orders_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
purchase_orders_csv_path:
|
|
29
|
+
default: "./purchase-orders.csv"
|
|
30
|
+
description: "Path to a CSV with columns: po_id,supplier_name,expected_delivery_date (YYYY-MM-DD),status (pending/received)."
|
|
31
|
+
compatible_agents: [generic, claude, codex]
|
|
32
|
+
notes: Mark a PO "received" as soon as stock lands so this only ever flags genuinely overdue orders. Distinct from `low-stock-reorder-alert` (decides when to place an order) and `shipping-delay-check` (tracks outbound orders to customers) — this tracks inbound supplier orders after they've been placed.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
id: storefront-ssl-domain-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Storefront SSL & Domain Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks your storefront's SSL certificate and domain registration expiry
|
|
6
|
+
dates and flags anything expiring soon. Use this if your store has ever
|
|
7
|
+
gone down — or thrown a scary browser security warning at checkout —
|
|
8
|
+
because an SSL cert or domain renewal quietly lapsed.
|
|
9
|
+
category: ecommerce
|
|
10
|
+
tags: [ecommerce, ssl, domain, uptime, infrastructure]
|
|
11
|
+
schedule: "0 6 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
domain="{{storefront_domain}}";
|
|
16
|
+
warn_days="{{warn_days}}";
|
|
17
|
+
cert_end=$(echo | openssl s_client -servername "$domain" -connect "$domain":443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2);
|
|
18
|
+
if [ -n "$cert_end" ]; then
|
|
19
|
+
cert_epoch=$(date -d "$cert_end" +%s 2>/dev/null || date -j -f "%b %d %T %Y %Z" "$cert_end" +%s 2>/dev/null);
|
|
20
|
+
now_epoch=$(date +%s);
|
|
21
|
+
cert_days_left=$(( (cert_epoch - now_epoch) / 86400 ));
|
|
22
|
+
if [ "$cert_days_left" -le "$warn_days" ]; then
|
|
23
|
+
echo "SSL WARNING: cert for $domain expires in $cert_days_left days ($cert_end)";
|
|
24
|
+
fi;
|
|
25
|
+
else
|
|
26
|
+
echo "ERROR: could not read SSL cert for $domain";
|
|
27
|
+
fi;
|
|
28
|
+
domain_end=$(whois "$domain" 2>/dev/null | grep -iE "registry expiry|expiration date" | head -n1 | sed -E 's/.*: *//');
|
|
29
|
+
if [ -n "$domain_end" ]; then
|
|
30
|
+
dom_epoch=$(date -d "$domain_end" +%s 2>/dev/null);
|
|
31
|
+
if [ -n "$dom_epoch" ]; then
|
|
32
|
+
dom_days_left=$(( (dom_epoch - now_epoch) / 86400 ));
|
|
33
|
+
if [ "$dom_days_left" -le "$warn_days" ]; then
|
|
34
|
+
echo "DOMAIN WARNING: $domain registration expires in $dom_days_left days ($domain_end)";
|
|
35
|
+
fi;
|
|
36
|
+
fi;
|
|
37
|
+
fi
|
|
38
|
+
variables:
|
|
39
|
+
storefront_domain:
|
|
40
|
+
default: "example.com"
|
|
41
|
+
description: The domain your storefront is served from (no protocol/path).
|
|
42
|
+
warn_days:
|
|
43
|
+
default: 21
|
|
44
|
+
description: Days before SSL cert or domain expiry to start warning.
|
|
45
|
+
compatible_agents: [generic, claude, codex]
|
|
46
|
+
notes: Requires `openssl` and `whois` on the runner; whois output format varies by registrar/TLD, so treat a missing DOMAIN WARNING line as inconclusive rather than "all clear" and spot-check manually a few times after setup.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
id: vip-tier-reclassification-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: VIP Tier Reclassification Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each customer's year-to-date spend against your VIP tier
|
|
6
|
+
thresholds and flags anyone due to move up or down a tier, drafting a
|
|
7
|
+
short outreach note for new upgrades. Use this if a top customer has
|
|
8
|
+
ever crossed your VIP spend threshold months ago and never got the
|
|
9
|
+
perks (or the acknowledgment) because nobody was tracking tier
|
|
10
|
+
crossings.
|
|
11
|
+
category: ecommerce
|
|
12
|
+
tags: [ecommerce, vip, customers, ltv, segmentation]
|
|
13
|
+
schedule: "0 8 1 * *"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: hybrid
|
|
16
|
+
command: >
|
|
17
|
+
awk -F',' -v gold="{{gold_threshold_usd}}" -v platinum="{{platinum_threshold_usd}}" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
customer=$1; spend=$2; current_tier=$3;
|
|
21
|
+
new_tier = "standard";
|
|
22
|
+
if (spend+0 >= platinum) new_tier = "platinum";
|
|
23
|
+
else if (spend+0 >= gold) new_tier = "gold";
|
|
24
|
+
if (new_tier != current_tier) {
|
|
25
|
+
printf "TIER CHANGE: %s — %s -> %s (YTD spend $%.2f)\n", customer, current_tier, new_tier, spend;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
' "{{customers_csv_path}}"
|
|
29
|
+
prompt: |
|
|
30
|
+
The script above compared each customer's YTD spend to the VIP tier
|
|
31
|
+
thresholds and listed everyone whose tier should change.
|
|
32
|
+
1. For each upgrade (moving to a higher tier), draft a short, warm
|
|
33
|
+
note acknowledging the milestone and naming the specific new perk
|
|
34
|
+
they've unlocked.
|
|
35
|
+
2. For each downgrade, just list it plainly — no outreach needed, this
|
|
36
|
+
is usually just for internal tracking/perk removal timing.
|
|
37
|
+
3. Group the final output into "Upgrades (draft ready)" and
|
|
38
|
+
"Downgrades (no action needed)".
|
|
39
|
+
script_note: >
|
|
40
|
+
`command` gives you the raw list of who crossed a threshold in either
|
|
41
|
+
direction, at zero token cost. `prompt` adds the human touch: a
|
|
42
|
+
genuine, specific congratulations note for upgrades instead of a
|
|
43
|
+
generic template, which is the part worth spending tokens on.
|
|
44
|
+
variables:
|
|
45
|
+
customers_csv_path:
|
|
46
|
+
default: "./customer-ytd-spend.csv"
|
|
47
|
+
description: "Path to a CSV with columns: customer_name,ytd_spend_usd,current_tier (standard/gold/platinum)."
|
|
48
|
+
gold_threshold_usd:
|
|
49
|
+
default: 500
|
|
50
|
+
description: YTD spend at or above which a customer qualifies for gold tier.
|
|
51
|
+
platinum_threshold_usd:
|
|
52
|
+
default: 2000
|
|
53
|
+
description: YTD spend at or above which a customer qualifies for platinum tier.
|
|
54
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
55
|
+
notes: Distinct from `loyalty-points-expiry-reminder` in retail, which tracks points balances expiring — this tracks total spend against tier thresholds, independent of any points program.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: wishlist-abandonment-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Wishlist Abandonment Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks customer wishlists for items that have sat untouched for a while
|
|
6
|
+
and drafts a nudge email when there's a real reason to reach out — a
|
|
7
|
+
price drop or the item is back in stock — instead of a generic
|
|
8
|
+
"you still want this?" reminder. Use this if you've ever had a wishlist
|
|
9
|
+
feature that quietly collects intent and never converts any of it back
|
|
10
|
+
into a sale.
|
|
11
|
+
category: ecommerce
|
|
12
|
+
tags: [ecommerce, wishlist, recovery, conversion, sales]
|
|
13
|
+
schedule: "0 11 * * 1"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: agent-prompt
|
|
16
|
+
prompt: |
|
|
17
|
+
Check {{store_platform}} for wishlist items added at least
|
|
18
|
+
{{min_days_on_wishlist}} days ago that are still in the customer's
|
|
19
|
+
wishlist (not purchased).
|
|
20
|
+
1. For each, check whether the item's price has dropped or it went
|
|
21
|
+
from out-of-stock to in-stock since it was wishlisted.
|
|
22
|
+
2. Only draft an outreach email for items with one of those real
|
|
23
|
+
triggers — skip items where nothing has changed, since a nudge with
|
|
24
|
+
no news performs worse than no email at all.
|
|
25
|
+
3. Draft a short, specific email per triggered item: name the item, the
|
|
26
|
+
specific change (price/stock), and a clear link back to it.
|
|
27
|
+
4. Report how many wishlist items were checked, how many had a real
|
|
28
|
+
trigger, and how many drafts were produced.
|
|
29
|
+
variables:
|
|
30
|
+
store_platform:
|
|
31
|
+
default: "your storefront platform"
|
|
32
|
+
description: Name of the e-commerce platform with wishlist data (e.g. "Shopify", "WooCommerce").
|
|
33
|
+
min_days_on_wishlist:
|
|
34
|
+
default: 14
|
|
35
|
+
description: Minimum days an item must have sat on a wishlist before it's eligible for a re-engagement check.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: Draft-only — review before sending, and confirm your platform's marketing-consent rules cover wishlist-triggered email. Distinct from `abandoned-cart-recovery-check`, which targets items already added to an active cart; this targets earlier-funnel intent that never reached checkout, and only fires on a real trigger rather than time elapsed alone.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: chronic-absenteeism-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Chronic Absenteeism Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Calculates each student's missed-day percentage for the term and flags
|
|
6
|
+
anyone crossing the chronic-absenteeism threshold. Use this if a student
|
|
7
|
+
has ever quietly racked up enough missed days to count as chronically
|
|
8
|
+
absent before anyone outside the attendance office noticed.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, attendance, chronic-absenteeism, students]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v threshold="{{chronic_threshold_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
enrolled = $2; absent = $3;
|
|
19
|
+
if (enrolled <= 0) next;
|
|
20
|
+
pct = (absent / enrolled) * 100;
|
|
21
|
+
if (pct >= threshold) {
|
|
22
|
+
printf "CHRONIC: %s — %d/%d days missed (%.1f%%)\n", $1, absent, enrolled, pct;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{attendance_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
attendance_csv_path:
|
|
28
|
+
default: "./term-attendance.csv"
|
|
29
|
+
description: "Path to a CSV with columns: student_name,enrolled_days,absent_days."
|
|
30
|
+
chronic_threshold_pct:
|
|
31
|
+
default: 10
|
|
32
|
+
description: Percentage of enrolled days missed that counts as chronically absent (10% is the common federal benchmark).
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: This looks at the whole term to date, unlike attendance-anomaly-check which flags a short-term drop — the two catch different problems.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: department-budget-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Department Budget Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares each department's or program's actual spending against its
|
|
6
|
+
budget and flags meaningful overages or underspend. Use this if a
|
|
7
|
+
department has ever blown through its annual budget months early
|
|
8
|
+
because nobody was checking actual-vs-budget until year-end
|
|
9
|
+
reconciliation.
|
|
10
|
+
category: education
|
|
11
|
+
tags: [education, budget, finance, departments]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review department/program budget vs. actual spending from
|
|
17
|
+
{{finance_system_hint}} for the current fiscal year to date.
|
|
18
|
+
1. For each department or program, compute spend as a percentage of its
|
|
19
|
+
annual budget and compare that to the expected percentage of the
|
|
20
|
+
fiscal year elapsed.
|
|
21
|
+
2. Flag departments running more than {{variance_threshold_pct}}
|
|
22
|
+
percentage points ahead of pace (overspend risk) or behind pace
|
|
23
|
+
(possible underspend, use-it-or-lose-it risk, or a stalled
|
|
24
|
+
initiative).
|
|
25
|
+
3. Note any single large transactions that materially explain a
|
|
26
|
+
variance, if visible in the data.
|
|
27
|
+
4. Summarize so budget owners can adjust spending or reforecast before
|
|
28
|
+
the next reporting cycle.
|
|
29
|
+
variables:
|
|
30
|
+
finance_system_hint:
|
|
31
|
+
default: "your district finance/ERP system"
|
|
32
|
+
description: Where budget and actuals data lives.
|
|
33
|
+
variance_threshold_pct:
|
|
34
|
+
default: 15
|
|
35
|
+
description: Percentage-point gap between spend pace and time-elapsed pace that counts as worth flagging.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: This tracks department/program-level spending, not headcount or payroll cost, which HR budget jobs already cover separately.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: enrollment-withdrawal-trend-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Enrollment/Withdrawal Trend Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Reviews new enrollments and withdrawals over time and flags a school or
|
|
6
|
+
grade level that's losing students faster than usual. Use this if
|
|
7
|
+
enrollment decline has ever gone unnoticed for a semester because
|
|
8
|
+
individual withdrawals looked routine one at a time.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, enrollment, students, trends]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Review enrollment and withdrawal records from {{sis_hint}} for the last
|
|
16
|
+
{{lookback_months}} months.
|
|
17
|
+
1. Calculate net enrollment change by school and by grade level over the
|
|
18
|
+
window.
|
|
19
|
+
2. Flag any school or grade with a withdrawal rate above
|
|
20
|
+
{{withdrawal_rate_threshold_pct}}%, or a net enrollment decline that's
|
|
21
|
+
unusual compared to the same period in prior years if that data is
|
|
22
|
+
available.
|
|
23
|
+
3. Where withdrawal reasons are recorded, summarize the most common ones
|
|
24
|
+
(moved out of district, transferred to another school, homeschooling,
|
|
25
|
+
etc.) to help spot a pattern worth addressing versus normal mobility.
|
|
26
|
+
4. Summarize findings for administration, since sustained enrollment
|
|
27
|
+
decline affects staffing and funding decisions.
|
|
28
|
+
variables:
|
|
29
|
+
sis_hint:
|
|
30
|
+
default: "your student information system"
|
|
31
|
+
description: Where enrollment and withdrawal records live.
|
|
32
|
+
lookback_months:
|
|
33
|
+
default: 6
|
|
34
|
+
description: How many months of enrollment history to review.
|
|
35
|
+
withdrawal_rate_threshold_pct:
|
|
36
|
+
default: 8
|
|
37
|
+
description: Withdrawal rate percentage that counts as worth flagging.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: No generic script mode — SIS platforms and how they record withdrawal reasons vary too widely to assume a common export format.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: facility-work-order-backlog-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Facility Work Order Backlog Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews open facility maintenance work orders and flags the ones that
|
|
6
|
+
have been sitting too long, especially safety-related requests. Use
|
|
7
|
+
this if a maintenance ticket has ever gone stale for weeks until it
|
|
8
|
+
turned into a bigger, more expensive problem.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, facilities, maintenance, work-orders]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Review open facility work orders from {{facilities_system_hint}}.
|
|
16
|
+
1. List every work order still open after {{stale_days}} days, with its
|
|
17
|
+
school/building, description, and age.
|
|
18
|
+
2. Call out anything that reads as a safety or code issue (electrical,
|
|
19
|
+
HVAC failure in occupied spaces, structural, fire/life-safety,
|
|
20
|
+
accessibility) separately from routine cosmetic or convenience
|
|
21
|
+
requests — those need different urgency.
|
|
22
|
+
3. Group the remaining backlog by building so facilities staff can see
|
|
23
|
+
where the workload is concentrated.
|
|
24
|
+
4. Summarize counts and the oldest few tickets so leadership can decide
|
|
25
|
+
where to add capacity or reprioritize.
|
|
26
|
+
variables:
|
|
27
|
+
facilities_system_hint:
|
|
28
|
+
default: "your facilities/maintenance ticketing system"
|
|
29
|
+
description: Where work orders are tracked.
|
|
30
|
+
stale_days:
|
|
31
|
+
default: 14
|
|
32
|
+
description: Days a work order can stay open before it's counted as backlog.
|
|
33
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
34
|
+
notes: No generic script mode — facilities/maintenance ticketing systems vary too widely for a single export format.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: free-reduced-lunch-eligibility-renewal-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Free/Reduced Lunch Eligibility Renewal Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks free/reduced meal eligibility records for approvals that are
|
|
6
|
+
about to expire and flags families who need to renew. Use this if a
|
|
7
|
+
student has ever lost meal benefits mid-year because their eligibility
|
|
8
|
+
lapsed and nobody sent a renewal reminder in time.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, meals, eligibility, compliance]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v warnDays="{{warn_days}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
$3 == "no" {next}
|
|
18
|
+
{
|
|
19
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline exp_epoch; close(cmd);
|
|
21
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
22
|
+
days_left = (exp_epoch - now_epoch) / 86400;
|
|
23
|
+
if (days_left <= warnDays) {
|
|
24
|
+
printf "%s: %s eligibility expires %s (%d days)\n", (days_left < 0 ? "EXPIRED" : "RENEW SOON"), $1, $2, days_left;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{eligibility_csv_path}}"
|
|
28
|
+
variables:
|
|
29
|
+
eligibility_csv_path:
|
|
30
|
+
default: "./meal-eligibility.csv"
|
|
31
|
+
description: "Path to a CSV with columns: student_name,expiration_date (YYYY-MM-DD),active (yes/no)."
|
|
32
|
+
warn_days:
|
|
33
|
+
default: 21
|
|
34
|
+
description: Days before expiration to start warning, giving families time to resubmit paperwork.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Route renewal notices through whatever family-communication channel the district already uses for meal program paperwork.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: iep-504-review-deadline-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: IEP/504 Review Deadline Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks upcoming IEP and 504 plan review deadlines and flags any that are
|
|
6
|
+
close or already past due. Use this if a required review has ever slipped
|
|
7
|
+
past its compliance deadline because it wasn't on anyone's calendar until
|
|
8
|
+
a parent or auditor asked about it.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, iep, 504-plan, compliance, deadlines]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v warnDays="{{warn_days}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline due_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
days_left = (due_epoch - now_epoch) / 86400;
|
|
22
|
+
if (days_left <= warnDays) {
|
|
23
|
+
printf "%s: %s review due %s (%d days)\n", (days_left < 0 ? "OVERDUE" : "DUE SOON"), $1, $2, days_left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{plans_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
plans_csv_path:
|
|
29
|
+
default: "./iep-504-plans.csv"
|
|
30
|
+
description: "Path to a CSV with columns: student_name,next_review_due (YYYY-MM-DD)."
|
|
31
|
+
warn_days:
|
|
32
|
+
default: 14
|
|
33
|
+
description: Days before the review deadline to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: These deadlines are legally mandated in most jurisdictions — treat overdue results as urgent, not routine.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: parent-teacher-conference-noshow-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Parent-Teacher Conference No-Show Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks scheduled parent-teacher conferences against attendance and flags
|
|
6
|
+
no-shows for follow-up. Use this if a family has ever missed a
|
|
7
|
+
conference slot and nobody rescheduled it, especially for a student
|
|
8
|
+
where that conversation actually mattered.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, parent-engagement, conferences]
|
|
11
|
+
schedule: "0 17 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
noshows=$(awk -F',' 'NR>1 && $4=="no-show" {print $1" (with "$2", "$3")"}' "{{conferences_csv_path}}");
|
|
16
|
+
count=$(echo "$noshows" | grep -c . || true);
|
|
17
|
+
if [ "$count" -gt 0 ]; then
|
|
18
|
+
echo "NO-SHOWS TO FOLLOW UP:";
|
|
19
|
+
echo "$noshows";
|
|
20
|
+
exit 1;
|
|
21
|
+
else
|
|
22
|
+
echo "OK: no unaddressed conference no-shows";
|
|
23
|
+
fi
|
|
24
|
+
variables:
|
|
25
|
+
conferences_csv_path:
|
|
26
|
+
default: "./conference-schedule.csv"
|
|
27
|
+
description: "Path to a CSV with columns: student_name,parent_name,teacher_name,status (attended, no-show, rescheduled)."
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: Mark a no-show as rescheduled once a follow-up slot is booked, or it will keep showing up here.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: school-bus-route-ontime-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: School Bus Route On-Time Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews bus route arrival data and flags routes that are consistently
|
|
6
|
+
running late. Use this if a route has ever drifted later and later over
|
|
7
|
+
weeks with only individual parent complaints, never a pattern anyone
|
|
8
|
+
actually looked at.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, transportation, bus-routes]
|
|
11
|
+
schedule: "0 16 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Review bus arrival/departure data from {{transportation_system_hint}} for
|
|
16
|
+
the last {{lookback_days}} days.
|
|
17
|
+
1. For each route, compare actual arrival times against the scheduled
|
|
18
|
+
times at each stop.
|
|
19
|
+
2. Flag any route that was late by more than {{late_threshold_min}}
|
|
20
|
+
minutes on {{repeat_occurrences}} or more days in the window —
|
|
21
|
+
one bad day is noise, a pattern is a scheduling or staffing problem.
|
|
22
|
+
3. For flagged routes, note whether the lateness looks tied to a specific
|
|
23
|
+
stop, time of day, or driver, since that changes what the fix is.
|
|
24
|
+
4. Summarize findings so transportation staff can adjust schedules or
|
|
25
|
+
staffing before it becomes a parent-complaint pattern.
|
|
26
|
+
variables:
|
|
27
|
+
transportation_system_hint:
|
|
28
|
+
default: "your bus/transportation tracking system"
|
|
29
|
+
description: Where route timing data lives (GPS tracker, dispatch software, etc.).
|
|
30
|
+
lookback_days:
|
|
31
|
+
default: 10
|
|
32
|
+
description: How many school days of route data to review.
|
|
33
|
+
late_threshold_min:
|
|
34
|
+
default: 10
|
|
35
|
+
description: Minutes past scheduled time that counts as late.
|
|
36
|
+
repeat_occurrences:
|
|
37
|
+
default: 3
|
|
38
|
+
description: Number of late days within the window that counts as a pattern worth flagging.
|
|
39
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
40
|
+
notes: No generic script mode — bus tracking/GPS systems vary too widely to assume a common export format.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: standardized-test-registration-deadline-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Standardized Test Registration Deadline Check
|
|
4
|
+
description: >
|
|
5
|
+
Warns before the registration cutoff for a standardized test (state
|
|
6
|
+
assessment, AP, SAT, etc.). Use this if a student has ever missed the
|
|
7
|
+
window to register for a test because the deadline landed during a busy
|
|
8
|
+
stretch of the term and nobody flagged it in advance.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, testing, deadlines]
|
|
11
|
+
schedule: "0 8 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
due_ts=$(date -d "{{registration_deadline}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{registration_deadline}}" +%s);
|
|
17
|
+
days_left=$(( (due_ts - today) / 86400 ));
|
|
18
|
+
if [ "$days_left" -le "{{warn_days}}" ] && [ "$days_left" -ge 0 ]; then
|
|
19
|
+
echo "WARNING: {{test_name}} registration closes in $days_left days ({{registration_deadline}})";
|
|
20
|
+
exit 1;
|
|
21
|
+
else
|
|
22
|
+
echo "OK: {{test_name}} registration closes in $days_left days";
|
|
23
|
+
fi
|
|
24
|
+
variables:
|
|
25
|
+
test_name:
|
|
26
|
+
default: "state standardized assessment"
|
|
27
|
+
description: Name of the test whose registration window this tracks.
|
|
28
|
+
registration_deadline:
|
|
29
|
+
default: "2026-12-15"
|
|
30
|
+
description: Registration cutoff date (YYYY-MM-DD).
|
|
31
|
+
warn_days:
|
|
32
|
+
default: 10
|
|
33
|
+
description: Days before the deadline to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Run one instance per test/deadline you need to track — AP, SAT, and state assessments usually have different windows.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: substitute-teacher-fill-rate-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Substitute Teacher Fill Rate Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Compares substitute requests against how many were actually filled and
|
|
6
|
+
flags days or schools with a low fill rate. Use this if classes have
|
|
7
|
+
ever gone uncovered because nobody was tracking whether sub requests
|
|
8
|
+
were actually getting filled.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, staffing, substitute-teachers]
|
|
11
|
+
schedule: "0 6 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v minRate="{{min_fill_rate_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{ requested[$1] += 1; if ($3 == "filled") filled[$1] += 1; }
|
|
18
|
+
END {
|
|
19
|
+
for (school in requested) {
|
|
20
|
+
rate = (filled[school] / requested[school]) * 100;
|
|
21
|
+
if (rate < minRate) {
|
|
22
|
+
printf "LOW FILL RATE: %s — %.1f%% (%d/%d requests filled)\n", school, rate, filled[school], requested[school];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{sub_requests_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
sub_requests_csv_path:
|
|
29
|
+
default: "./sub-requests.csv"
|
|
30
|
+
description: "Path to a CSV with columns: school,request_date,status (filled or unfilled)."
|
|
31
|
+
min_fill_rate_pct:
|
|
32
|
+
default: 85
|
|
33
|
+
description: Fill rate percentage below which a school is flagged.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Run this early in the morning before the school day starts so unfilled slots can still be covered.
|