@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,37 @@
|
|
|
1
|
+
id: loyalty-enrollment-redemption-rate-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Loyalty Enrollment & Redemption Rate Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Tracks new loyalty program enrollments and reward redemptions against
|
|
6
|
+
targets, not just whether individual points are about to expire. Use
|
|
7
|
+
this if enrollment has ever quietly stalled, or redemption has ever
|
|
8
|
+
dropped off a cliff, for months before anyone looked at the trend.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, loyalty, customers, rewards, metrics]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v enroll_target="{{monthly_enrollment_target}}" -v redeem_floor="{{redemption_rate_floor_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{ enrolled += $2; redeemed += $3; eligible += $4 }
|
|
18
|
+
END {
|
|
19
|
+
redeem_pct = (eligible > 0) ? (redeemed / eligible) * 100 : 0;
|
|
20
|
+
printf "New enrollments this period: %d (target %d)\n", enrolled, enroll_target;
|
|
21
|
+
if (enrolled < enroll_target) printf "BELOW TARGET: enrollment %d short of target %d\n", enroll_target - enrolled, enroll_target;
|
|
22
|
+
printf "Redemption rate: %.1f%% (%d redeemed of %d eligible)\n", redeem_pct, redeemed, eligible;
|
|
23
|
+
if (redeem_pct < redeem_floor) printf "LOW REDEMPTION: %.1f%% is below the %.1f%% floor\n", redeem_pct, redeem_floor;
|
|
24
|
+
}
|
|
25
|
+
' "{{loyalty_activity_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
loyalty_activity_csv:
|
|
28
|
+
default: "./loyalty-activity.csv"
|
|
29
|
+
description: "CSV with header row, columns: store_id,new_enrollments,points_redeemed,points_eligible_for_redemption — one row per store or period."
|
|
30
|
+
monthly_enrollment_target:
|
|
31
|
+
default: 100
|
|
32
|
+
description: Target number of new loyalty enrollments for the period across the file.
|
|
33
|
+
redemption_rate_floor_pct:
|
|
34
|
+
default: 20
|
|
35
|
+
description: Minimum acceptable redemption rate (redeemed / eligible) before flagging.
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: Complements `loyalty-points-expiry-reminder` (individual point expiry) by tracking program health as an aggregate trend — enrollment growth and redemption engagement, not per-customer expiry.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: markdown-execution-audit-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Markdown Execution Audit Check
|
|
4
|
+
description: >
|
|
5
|
+
Confirms that approved markdowns were actually applied at the register,
|
|
6
|
+
not just flagged as candidates. Use this if a markdown has ever been
|
|
7
|
+
approved on paper but never keyed into the POS, so the item kept
|
|
8
|
+
ringing at full price for weeks while it sat on the clearance rack.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, markdown, pricing, audit]
|
|
11
|
+
schedule: "0 8 * * 2"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
approved = $2; pos_current = $3;
|
|
19
|
+
if (approved != pos_current) {
|
|
20
|
+
printf "NOT APPLIED: SKU %s — approved markdown price $%s, POS still shows $%s\n", $1, approved, pos_current;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
' "{{markdown_approvals_csv}}"
|
|
24
|
+
variables:
|
|
25
|
+
markdown_approvals_csv:
|
|
26
|
+
default: "./markdown-approvals.csv"
|
|
27
|
+
description: "CSV with header row, columns: sku,approved_markdown_price,pos_current_price — one row per approved markdown."
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: Complements `markdown-aging-inventory-check` (flags candidates for markdown) by auditing the other end — whether an already-approved markdown was actually executed at the register.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: planogram-compliance-audit-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Planogram Compliance Audit Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews a store's shelf/floor photos against the current planogram and
|
|
6
|
+
flags sections that are out of compliance. Use this if a reset has ever
|
|
7
|
+
quietly drifted out of plan for weeks — wrong facings, missing
|
|
8
|
+
end-caps, product in the wrong bay — before a district visit caught it.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, planogram, merchandising, compliance]
|
|
11
|
+
schedule: "0 8 * * 3"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Compare this week's shelf photos ({{shelf_photos_path}}) against the
|
|
16
|
+
current planogram document ({{planogram_doc_path}}) for store
|
|
17
|
+
{{store_id}}.
|
|
18
|
+
1. Go section by section and note any bay where product placement,
|
|
19
|
+
facing count, or signage doesn't match the planogram.
|
|
20
|
+
2. Flag missing or expired promotional signage separately from pure
|
|
21
|
+
placement drift.
|
|
22
|
+
3. Rank findings by sections that drive the most revenue first (per the
|
|
23
|
+
planogram's priority notes, if included).
|
|
24
|
+
4. Produce a short punch list a store associate could act on today.
|
|
25
|
+
variables:
|
|
26
|
+
shelf_photos_path:
|
|
27
|
+
default: "./planogram-photos/"
|
|
28
|
+
description: Folder or path containing this cycle's shelf/section photos for the store.
|
|
29
|
+
planogram_doc_path:
|
|
30
|
+
default: "./current-planogram.pdf"
|
|
31
|
+
description: Path to the current approved planogram document or image set.
|
|
32
|
+
store_id:
|
|
33
|
+
default: "store-001"
|
|
34
|
+
description: Identifier for the store being audited.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: Needs visual comparison and judgment about what counts as meaningful drift versus a shopper-caused mess — not a fit for a fixed script.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: pos-void-refund-anomaly-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: POS Void & Refund Anomaly Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags cashiers or registers with an unusually high rate of transaction
|
|
6
|
+
voids and refunds instead of treating each one as an isolated event.
|
|
7
|
+
Use this if register-level fraud or sweethearting has ever gone
|
|
8
|
+
unnoticed for months because void/refund activity was never rolled up
|
|
9
|
+
per employee.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, pos, fraud, loss-prevention]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v void_pct_max="{{void_rate_threshold_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
employee[$1] += 1;
|
|
20
|
+
total[$1] += 1;
|
|
21
|
+
if ($2 == "void" || $2 == "refund") flagged[$1] += 1;
|
|
22
|
+
}
|
|
23
|
+
END {
|
|
24
|
+
for (e in total) {
|
|
25
|
+
if (total[e] > 0) {
|
|
26
|
+
pct = (flagged[e] / total[e]) * 100;
|
|
27
|
+
if (pct >= void_pct_max) {
|
|
28
|
+
printf "HIGH VOID/REFUND RATE: %s — %.1f%% of %d transactions (%d void/refund)\n", e, pct, total[e], flagged[e];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
' "{{transactions_csv_path}}"
|
|
34
|
+
variables:
|
|
35
|
+
transactions_csv_path:
|
|
36
|
+
default: "./pos-transactions.csv"
|
|
37
|
+
description: "Path to a CSV with columns: employee_id,transaction_type (sale/void/refund) — one row per transaction in the period."
|
|
38
|
+
void_rate_threshold_pct:
|
|
39
|
+
default: 8
|
|
40
|
+
description: Percentage of an employee's transactions that are voids/refunds before flagging for review.
|
|
41
|
+
compatible_agents: [generic, claude, codex]
|
|
42
|
+
notes: A flag is a prompt for a manager to review video/receipts, not proof of wrongdoing — some roles (returns desk) will legitimately run higher.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: price-tag-audit-accuracy-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Price Tag Audit Accuracy Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews photos of shelf price tags against the current POS price file
|
|
6
|
+
and flags mismatches. Use this if a customer has ever caught a
|
|
7
|
+
scan-versus-tag price discrepancy at the register before the store did
|
|
8
|
+
— those add up fast in refunds, complaints, and occasional fines.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, pricing, audit, compliance]
|
|
11
|
+
schedule: "0 8 * * 4"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Compare this week's shelf tag photos ({{tag_photos_path}}) against the
|
|
16
|
+
current POS price export ({{pos_price_file}}) for store {{store_id}}.
|
|
17
|
+
1. Read the SKU and posted price off each tag photo (OCR/read the
|
|
18
|
+
image directly).
|
|
19
|
+
2. Match each tag to its POS price by SKU and flag any mismatch,
|
|
20
|
+
noting whether the tag is higher or lower than the register price.
|
|
21
|
+
3. Prioritize mismatches where the tag price is lower than the POS
|
|
22
|
+
price — those are the ones customers will notice and complain about
|
|
23
|
+
first, and in some states are a pricing-accuracy compliance risk.
|
|
24
|
+
4. Summarize as a punch list: SKU, tag price, POS price, and which tag
|
|
25
|
+
needs reprinting.
|
|
26
|
+
variables:
|
|
27
|
+
tag_photos_path:
|
|
28
|
+
default: "./shelf-tag-photos/"
|
|
29
|
+
description: Folder of this week's shelf price tag photos for the store.
|
|
30
|
+
pos_price_file:
|
|
31
|
+
default: "./pos-price-export.csv"
|
|
32
|
+
description: Current POS price export, columns sku,price.
|
|
33
|
+
store_id:
|
|
34
|
+
default: "store-001"
|
|
35
|
+
description: Identifier for the store being audited.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: Reading prices off photographed tags and matching them against a price list needs visual judgment a fixed script can't reliably do.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: sales-per-square-foot-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Sales Per Square Foot Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Calculates each store's sales-per-square-foot for the period and flags
|
|
6
|
+
stores falling below a benchmark. Use this if underperforming store
|
|
7
|
+
footprints have ever gone unnoticed until an annual real-estate review
|
|
8
|
+
instead of getting flagged while there was still time to act.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, sales, performance, benchmarking]
|
|
11
|
+
schedule: "0 7 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v floor="{{benchmark_sales_per_sqft}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
sqft = $3;
|
|
19
|
+
if (sqft > 0) {
|
|
20
|
+
rate = $2 / sqft;
|
|
21
|
+
status = (rate < floor) ? "BELOW BENCHMARK" : "ok";
|
|
22
|
+
if (status == "BELOW BENCHMARK") {
|
|
23
|
+
printf "BELOW BENCHMARK: store %s — $%.2f/sqft (benchmark $%.2f/sqft)\n", $1, rate, floor;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{store_sales_csv}}"
|
|
28
|
+
variables:
|
|
29
|
+
store_sales_csv:
|
|
30
|
+
default: "./store-sales-sqft.csv"
|
|
31
|
+
description: "CSV with header row, columns: store_id,period_sales_usd,selling_sqft — one row per store for the period."
|
|
32
|
+
benchmark_sales_per_sqft:
|
|
33
|
+
default: 300
|
|
34
|
+
description: Minimum acceptable sales-per-square-foot for the period before a store gets flagged.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: A single low period isn't necessarily a problem store — track the trend across periods before drawing conclusions about a location.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: seasonal-staffing-coverage-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Seasonal Staffing Coverage Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares scheduled labor hours against a forecasted seasonal-peak
|
|
6
|
+
staffing plan and flags stores that are under-scheduled. Use this if a
|
|
7
|
+
store has ever gone into a holiday or back-to-school rush understaffed
|
|
8
|
+
because the seasonal plan and the actual schedule quietly drifted apart.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, staffing, seasonal, scheduling]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v gap_pct="{{coverage_gap_threshold_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
planned = $2; scheduled = $3;
|
|
19
|
+
if (planned > 0) {
|
|
20
|
+
gap = ((planned - scheduled) / planned) * 100;
|
|
21
|
+
if (gap >= gap_pct) {
|
|
22
|
+
printf "UNDER-SCHEDULED: store %s — planned %.0f hrs, scheduled %.0f hrs (%.1f%% short)\n", $1, planned, scheduled, gap;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{seasonal_staffing_csv}}"
|
|
27
|
+
variables:
|
|
28
|
+
seasonal_staffing_csv:
|
|
29
|
+
default: "./seasonal-staffing-plan.csv"
|
|
30
|
+
description: "CSV with header row, columns: store_id,planned_hours,scheduled_hours — one row per store for the upcoming seasonal window."
|
|
31
|
+
coverage_gap_threshold_pct:
|
|
32
|
+
default: 10
|
|
33
|
+
description: Percentage shortfall between planned and scheduled hours that triggers a flag.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Complements `employee-shift-gap-check` (day-to-day unfilled shifts) by checking whether the whole store is resourced against a seasonal peak plan, weeks ahead of the rush rather than shift by shift.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: store-closing-checklist-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Store Closing Checklist Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews logged closing checklist completions and flags stores or shifts
|
|
6
|
+
that skipped required steps, rather than just reminding staff of the
|
|
7
|
+
checklist. Use this if a store has ever opened the next morning to a
|
|
8
|
+
safe left unlocked, alarm not set, or cash not dropped because closing
|
|
9
|
+
execution was never actually checked afterward.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, checklist, closing, compliance, loss-prevention]
|
|
12
|
+
schedule: "0 7 * * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
if ($3 == "incomplete" || $3 == "") {
|
|
20
|
+
printf "INCOMPLETE CLOSE: store %s on %s — missing step: %s\n", $1, $2, $4;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
' "{{closing_log_csv}}"
|
|
24
|
+
variables:
|
|
25
|
+
closing_log_csv:
|
|
26
|
+
default: "./closing-checklist-log.csv"
|
|
27
|
+
description: "CSV with header row, columns: store_id,close_date,status(complete/incomplete),missing_step — one row per required closing step per night."
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: >
|
|
30
|
+
Distinct from `store-opening-checklist-reminder`, which just prints the
|
|
31
|
+
standard checklist as a reminder — this audits a logged closing record
|
|
32
|
+
after the fact to catch steps that were actually skipped.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: visual-merchandising-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Visual Merchandising Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Reviews store-front and window display photos against the current
|
|
6
|
+
visual merchandising directive and flags stores that haven't executed
|
|
7
|
+
it. Use this if a seasonal window or entrance display has ever stayed
|
|
8
|
+
up stale for weeks after corporate sent the new directive.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, merchandising, visual, compliance]
|
|
11
|
+
schedule: "0 8 * * 5"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Compare this week's store-front/window/entrance photos
|
|
16
|
+
({{store_photos_path}}) against the current visual merchandising
|
|
17
|
+
directive ({{vm_directive_path}}) for store {{store_id}}.
|
|
18
|
+
1. Note whether the required theme, signage, mannequin styling, and
|
|
19
|
+
entrance table match the directive.
|
|
20
|
+
2. Flag anything stale (a prior season's display still up) separately
|
|
21
|
+
from anything simply missing.
|
|
22
|
+
3. Note any obviously damaged or faded display elements that need
|
|
23
|
+
replacing regardless of the current directive.
|
|
24
|
+
4. Give a short, actionable punch list, not a general aesthetic
|
|
25
|
+
critique.
|
|
26
|
+
variables:
|
|
27
|
+
store_photos_path:
|
|
28
|
+
default: "./vm-photos/"
|
|
29
|
+
description: Folder of this week's store-front and window display photos.
|
|
30
|
+
vm_directive_path:
|
|
31
|
+
default: "./current-vm-directive.pdf"
|
|
32
|
+
description: Path to the current corporate visual merchandising directive.
|
|
33
|
+
store_id:
|
|
34
|
+
default: "store-001"
|
|
35
|
+
description: Identifier for the store being reviewed.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: >
|
|
38
|
+
Distinct from `planogram-compliance-audit-check`, which audits shelf/bay
|
|
39
|
+
product placement inside the store — this covers window, entrance, and
|
|
40
|
+
seasonal display execution instead.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: champion-departure-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Champion Departure Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks whether your champion or economic-buyer contact at open or
|
|
6
|
+
recently-closed accounts has left the company, using bounce signals or
|
|
7
|
+
a job-change lookup, and drafts a plan to find the new point of contact.
|
|
8
|
+
Use this if a deal has ever gone quiet for weeks before you found out
|
|
9
|
+
your one internal advocate had already left the company.
|
|
10
|
+
category: sales
|
|
11
|
+
tags: [sales, champion, contact-departure, account-risk]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Review the champion/decision-maker contacts listed in {{contacts_source}}
|
|
17
|
+
for accounts with an open deal or a contract within
|
|
18
|
+
{{renewal_lookback_days}} days of renewal.
|
|
19
|
+
1. For each contact, check for signs they've left the company: a bounced
|
|
20
|
+
email address, an outdated title, or a job-change signal on
|
|
21
|
+
{{signal_source}} (e.g. LinkedIn).
|
|
22
|
+
2. List any contact flagged as likely departed, with the account name,
|
|
23
|
+
deal/contract at risk, and what signal triggered the flag.
|
|
24
|
+
3. For each flagged account, suggest the most likely replacement contact
|
|
25
|
+
if one is visible in the account (another named stakeholder, or a
|
|
26
|
+
generic role like "VP of [department]"), and draft a short
|
|
27
|
+
re-introduction email to that person or a warm-intro request to
|
|
28
|
+
another contact at the account.
|
|
29
|
+
4. If no departures are found, say so in one line.
|
|
30
|
+
variables:
|
|
31
|
+
contacts_source:
|
|
32
|
+
default: "your CRM's contact list, or a champions.csv with columns: account,contact_name,contact_email,title,deal_or_contract"
|
|
33
|
+
description: Where champion/decision-maker contacts and the account/deal they're tied to are recorded.
|
|
34
|
+
signal_source:
|
|
35
|
+
default: "LinkedIn, or email bounce logs from your email platform"
|
|
36
|
+
description: Where to check for a job-change or departure signal.
|
|
37
|
+
renewal_lookback_days:
|
|
38
|
+
default: 90
|
|
39
|
+
description: How far ahead to include upcoming renewals when scoping which accounts' champions to check.
|
|
40
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
41
|
+
notes: >
|
|
42
|
+
Draft-only — review the suggested replacement contact and re-intro email
|
|
43
|
+
before sending. Respect LinkedIn's terms of use; a manual check or a
|
|
44
|
+
licensed data provider is safer than scraping.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: closed-lost-reason-audit
|
|
2
|
+
version: 1
|
|
3
|
+
name: Closed-Lost Reason Audit
|
|
4
|
+
description: >
|
|
5
|
+
Finds recently closed-lost deals with no loss reason recorded, and
|
|
6
|
+
summarizes the reasons that were captured into a short pattern report.
|
|
7
|
+
Use this if closed-lost deals have ever piled up with a blank reason
|
|
8
|
+
field, making it impossible to tell whether you're losing to a
|
|
9
|
+
competitor, on price, or on missing features.
|
|
10
|
+
category: sales
|
|
11
|
+
tags: [sales, closed-lost, win-loss, reporting]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: hybrid
|
|
15
|
+
command: >
|
|
16
|
+
psql "{{database_url}}" -t -c "select name, owner, amount, loss_reason from deals where stage = 'closed_lost' and closed_at > now() - interval '{{lookback_days}} days' order by closed_at desc;"
|
|
17
|
+
prompt: |
|
|
18
|
+
Review closed-lost deals from the last {{lookback_days}} days (from the
|
|
19
|
+
script output above, or by querying {{database_url}} directly).
|
|
20
|
+
1. List every deal with a blank/missing loss_reason — these need a rep
|
|
21
|
+
follow-up to fill in before the data is usable.
|
|
22
|
+
2. For deals that do have a loss_reason, group them into a short summary
|
|
23
|
+
of the top 3-5 recurring themes (e.g. "price", "lost to [competitor]",
|
|
24
|
+
"missing feature X", "no budget/timing").
|
|
25
|
+
3. Note if one theme is trending upward compared to what you'd normally
|
|
26
|
+
expect, so it can be raised with product/pricing.
|
|
27
|
+
script_note: >
|
|
28
|
+
`command` lists closed-lost deals and their recorded (or missing) loss
|
|
29
|
+
reason with zero tokens. `prompt` adds the missing-reason follow-up list
|
|
30
|
+
and the qualitative theme summary across free-text reasons.
|
|
31
|
+
variables:
|
|
32
|
+
database_url:
|
|
33
|
+
default: "postgres://user:pass@host:5432/db"
|
|
34
|
+
description: Connection string for the CRM/deals database.
|
|
35
|
+
lookback_days:
|
|
36
|
+
default: 30
|
|
37
|
+
description: How many days of closed-lost deals to review.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: >
|
|
40
|
+
Assumes a `deals` table with `stage`, `closed_at`, and a free-text
|
|
41
|
+
`loss_reason` column — adjust to your CRM's schema and loss-reason
|
|
42
|
+
taxonomy if it uses a fixed picklist instead of free text.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: commission-payout-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Commission Payout Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Finds closed-won deals whose sales commission hasn't been marked as paid
|
|
6
|
+
even though the payout grace period has passed, and totals what's owed
|
|
7
|
+
per rep. Use this if a rep has ever had to chase finance to find out why
|
|
8
|
+
a commission from weeks ago never showed up in their paycheck.
|
|
9
|
+
category: sales
|
|
10
|
+
tags: [sales, commission, payroll-adjacent, compensation]
|
|
11
|
+
schedule: "0 8 1,15 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
psql "{{database_url}}" -t -c "select owner, count(*) as unpaid_deals, sum(amount) as unpaid_revenue, round(sum(amount) * {{commission_rate_pct}} / 100.0, 2) as commission_owed from deals where stage = 'closed_won' and commission_paid = false and closed_at < now() - interval '{{grace_days}} days' group by owner order by commission_owed desc;"
|
|
16
|
+
variables:
|
|
17
|
+
database_url:
|
|
18
|
+
default: "postgres://user:pass@host:5432/db"
|
|
19
|
+
description: Connection string for the CRM/deals database.
|
|
20
|
+
commission_rate_pct:
|
|
21
|
+
default: 10
|
|
22
|
+
description: Flat commission rate percent applied to closed-won revenue, for the estimate.
|
|
23
|
+
grace_days:
|
|
24
|
+
default: 15
|
|
25
|
+
description: Days after close before an unpaid commission counts as overdue for payout.
|
|
26
|
+
compatible_agents: [generic, claude, codex]
|
|
27
|
+
notes: >
|
|
28
|
+
Assumes a `deals` table with a `commission_paid` boolean column and a
|
|
29
|
+
flat commission rate — replace the flat-rate math with your real
|
|
30
|
+
commission plan (tiers, accelerators, clawbacks) if it's more complex.
|
|
31
|
+
This is separate from any HR payroll job — it only flags CRM-side deal
|
|
32
|
+
data, it does not run payroll.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
id: contract-renewal-opportunity-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Contract Renewal Opportunity Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags existing customer contracts approaching their renewal date so
|
|
6
|
+
account management can start the renewal conversation early. Use this
|
|
7
|
+
if a contract has ever auto-lapsed or renewed on unfavorable terms
|
|
8
|
+
because nobody flagged it until it was almost too late.
|
|
9
|
+
category: sales
|
|
10
|
+
tags: [sales, renewals, contracts, account-management]
|
|
11
|
+
schedule: "0 8 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
psql "{{database_url}}" -t -c "select customer_name, owner, contract_value, renewal_date from contracts where status = 'active' and renewal_date < now() + interval '{{warn_days}} days' order by renewal_date;"
|
|
16
|
+
variables:
|
|
17
|
+
database_url:
|
|
18
|
+
default: "postgres://user:pass@host:5432/db"
|
|
19
|
+
description: Connection string for the contracts/CRM database.
|
|
20
|
+
warn_days:
|
|
21
|
+
default: 60
|
|
22
|
+
description: Days before renewal_date to start flagging a contract for renewal outreach.
|
|
23
|
+
compatible_agents: [generic, claude, codex]
|
|
24
|
+
notes: >
|
|
25
|
+
Assumes a `contracts` table with `status`, `renewal_date`, `owner`, and
|
|
26
|
+
`contract_value` columns — adjust to your schema. Distinct from
|
|
27
|
+
`quote-expiry-reminder` (pre-sale quotes that haven't been signed yet);
|
|
28
|
+
this tracks signed, active customer contracts nearing their renewal date.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: discount-approval-pending-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Discount Approval Pending Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags deals with a discount above your standard threshold that are
|
|
6
|
+
still waiting on manager approval, especially ones that have been
|
|
7
|
+
sitting for a while. Use this if a rep has ever quoted a customer a
|
|
8
|
+
deep discount and the deal stalled for days waiting on an approval
|
|
9
|
+
nobody knew was pending.
|
|
10
|
+
category: sales
|
|
11
|
+
tags: [sales, discounts, approvals, deal-desk]
|
|
12
|
+
schedule: "0 */4 * * 1-5"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
psql "{{database_url}}" -t -c "select name, owner, discount_pct, approval_requested_at from deals where discount_pct >= {{discount_threshold_pct}} and approval_status = 'pending' and approval_requested_at < now() - interval '{{stale_hours}} hours' order by approval_requested_at;"
|
|
17
|
+
variables:
|
|
18
|
+
database_url:
|
|
19
|
+
default: "postgres://user:pass@host:5432/db"
|
|
20
|
+
description: Connection string for the CRM/deals database.
|
|
21
|
+
discount_threshold_pct:
|
|
22
|
+
default: 15
|
|
23
|
+
description: Discount percent that requires manager approval in your process.
|
|
24
|
+
stale_hours:
|
|
25
|
+
default: 24
|
|
26
|
+
description: Hours an approval request can sit pending before it's flagged.
|
|
27
|
+
compatible_agents: [generic, claude, codex]
|
|
28
|
+
notes: >
|
|
29
|
+
Assumes a `deals` table with `discount_pct`, `approval_status`, and
|
|
30
|
+
`approval_requested_at` columns from a deal-desk/CPQ approval workflow
|
|
31
|
+
— adjust field names to match your process.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: forecast-submission-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Forecast Submission Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares your active rep roster against submitted forecast records for
|
|
6
|
+
the current period and flags anyone who hasn't submitted yet. Use this
|
|
7
|
+
if sales leadership has ever walked into a forecast review meeting only
|
|
8
|
+
to find out half the team never actually submitted numbers.
|
|
9
|
+
category: sales
|
|
10
|
+
tags: [sales, forecasting, compliance, sales-ops]
|
|
11
|
+
schedule: "0 9 * * 5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
period="{{current_period}}";
|
|
16
|
+
if [ -z "$period" ]; then period=$(date +%G-W%V); fi;
|
|
17
|
+
awk -F',' -v period="$period" '
|
|
18
|
+
NR==FNR { if (FNR>1) reps[$1]=1; next }
|
|
19
|
+
FNR==1 { next }
|
|
20
|
+
$2 == period { submitted[$1]=1 }
|
|
21
|
+
END {
|
|
22
|
+
for (r in reps) {
|
|
23
|
+
if (!(r in submitted)) print "MISSING FORECAST: " r " has not submitted for " period;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{reps_csv_path}}" "{{forecasts_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
reps_csv_path:
|
|
29
|
+
default: "./active-reps.csv"
|
|
30
|
+
description: "Path to a CSV with header row and column: rep_name — one row per active rep expected to submit a forecast."
|
|
31
|
+
forecasts_csv_path:
|
|
32
|
+
default: "./forecast-submissions.csv"
|
|
33
|
+
description: "Path to a CSV with header row and columns: rep_name,period,submitted_at — one row per submitted forecast."
|
|
34
|
+
current_period:
|
|
35
|
+
default: ""
|
|
36
|
+
description: 'The period identifier to check submissions against (e.g. ISO week or "2026-Q3"). Leave blank to default to the current ISO week (YYYY-Www) — override if your forecasts CSV uses a different period format.'
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: >
|
|
39
|
+
You maintain both CSVs yourself (export active-reps.csv from your HRIS
|
|
40
|
+
or CRM user list, and forecast-submissions.csv from wherever forecasts
|
|
41
|
+
are logged) — the `current_period` value must match how periods are
|
|
42
|
+
written in forecast-submissions.csv exactly.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: multi-year-renewal-escalation-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Multi-Year Renewal Escalation Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags multi-year contracts approaching their next contract-year
|
|
6
|
+
anniversary, where a pre-agreed price escalation kicks in, so the
|
|
7
|
+
customer gets notice before the higher invoice arrives. Use this if a
|
|
8
|
+
customer has ever been surprised by a built-in price increase on a
|
|
9
|
+
multi-year deal because nobody sent the required notice ahead of the
|
|
10
|
+
anniversary date.
|
|
11
|
+
category: sales
|
|
12
|
+
tags: [sales, renewals, multi-year, pricing, account-management]
|
|
13
|
+
schedule: "0 8 * * 1"
|
|
14
|
+
timezone: "UTC"
|
|
15
|
+
runner: shell
|
|
16
|
+
command: >
|
|
17
|
+
psql "{{database_url}}" -t -c "select customer_name, owner, escalation_pct, next_anniversary_date from multi_year_contracts where next_anniversary_date < now() + interval '{{notice_days}} days' order by next_anniversary_date;"
|
|
18
|
+
variables:
|
|
19
|
+
database_url:
|
|
20
|
+
default: "postgres://user:pass@host:5432/db"
|
|
21
|
+
description: Connection string for the contracts/CRM database.
|
|
22
|
+
notice_days:
|
|
23
|
+
default: 45
|
|
24
|
+
description: Days of advance notice required before a contract's next anniversary/escalation date.
|
|
25
|
+
compatible_agents: [generic, claude, codex]
|
|
26
|
+
notes: >
|
|
27
|
+
Assumes a `multi_year_contracts` table with `next_anniversary_date` and
|
|
28
|
+
`escalation_pct` columns tracking the pre-agreed annual price increase
|
|
29
|
+
— adjust to your schema. Distinct from `contract-renewal-opportunity-tracker`,
|
|
30
|
+
which covers the end-of-term renewal decision rather than an in-term
|
|
31
|
+
contractual price step-up.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: pipeline-hygiene-audit
|
|
2
|
+
version: 1
|
|
3
|
+
name: Pipeline Hygiene Audit
|
|
4
|
+
description: >
|
|
5
|
+
Finds open deals missing basic required fields, like an amount, a close
|
|
6
|
+
date, or a next step, so forecasts and reports aren't quietly built on
|
|
7
|
+
bad data. Use this if a forecast has ever been wrong because half the
|
|
8
|
+
pipeline had blank fields nobody was checking for.
|
|
9
|
+
category: sales
|
|
10
|
+
tags: [sales, pipeline, data-quality, crm-hygiene]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
psql "{{database_url}}" -t -c "select name, owner, stage, (case when amount is null then 'missing amount' end) || (case when close_date is null then ' missing close_date' end) || (case when next_step is null or next_step = '' then ' missing next_step' end) as issues from deals where stage not in ('closed_won','closed_lost') and (amount is null or close_date is null or next_step is null or next_step = '');"
|
|
16
|
+
variables:
|
|
17
|
+
database_url:
|
|
18
|
+
default: "postgres://user:pass@host:5432/db"
|
|
19
|
+
description: Connection string for the CRM/deals database.
|
|
20
|
+
compatible_agents: [generic, claude, codex]
|
|
21
|
+
notes: >
|
|
22
|
+
Assumes a `deals` table with `amount`, `close_date`, and `next_step`
|
|
23
|
+
columns — adjust the query and the required-field list to what your
|
|
24
|
+
team actually treats as mandatory. Distinct from `stale-deal-nudge`
|
|
25
|
+
(which flags deals with no recent activity) — this flags deals with
|
|
26
|
+
incomplete data regardless of how recently they were touched.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: poc-trial-conversion-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Sales-Led POC Conversion Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags sales-assisted proof-of-concept (POC) engagements approaching or
|
|
6
|
+
past their end date with no closed-won or closed-lost outcome recorded.
|
|
7
|
+
Use this if an enterprise POC has ever quietly run past its agreed end
|
|
8
|
+
date with no clear owner pushing toward a decision.
|
|
9
|
+
category: sales
|
|
10
|
+
tags: [sales, poc, enterprise, conversion]
|
|
11
|
+
schedule: "0 8 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
psql "{{database_url}}" -t -c "select account_name, owner, poc_end_date, stage from pocs where stage = 'in_progress' and poc_end_date < now() + interval '{{lookahead_days}} days' order by poc_end_date;"
|
|
16
|
+
variables:
|
|
17
|
+
database_url:
|
|
18
|
+
default: "postgres://user:pass@host:5432/db"
|
|
19
|
+
description: Connection string for the CRM/deals database (a `pocs` table or equivalent stage on `deals`).
|
|
20
|
+
lookahead_days:
|
|
21
|
+
default: 7
|
|
22
|
+
description: How many days ahead (or past, if negative logic is added) to flag a POC nearing its end date.
|
|
23
|
+
compatible_agents: [generic, claude, codex]
|
|
24
|
+
notes: >
|
|
25
|
+
Assumes a `pocs` table (or a `deals` table filtered to a POC stage) with
|
|
26
|
+
`poc_end_date` and `stage` columns — adjust to your CRM's schema. This
|
|
27
|
+
is a sales-assisted enterprise POC tracked in the CRM by a rep, distinct
|
|
28
|
+
from growth's `trial-expiring-nudge`, which tracks self-serve product
|
|
29
|
+
trials nearing expiration.
|