@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,38 @@
|
|
|
1
|
+
id: minibar-charge-reconciliation-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Minibar Charge Reconciliation Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares housekeeping's logged minibar restocks against folio charges
|
|
6
|
+
posted for the same room and flags mismatches. Use this if a restocked
|
|
7
|
+
minibar has ever gone uncharged, or a guest was charged for an item
|
|
8
|
+
housekeeping never actually replaced.
|
|
9
|
+
category: hospitality
|
|
10
|
+
tags: [hospitality, minibar, revenue-assurance, front-desk]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
FNR==NR {
|
|
17
|
+
if (FNR > 1) restocked[$1] += $3;
|
|
18
|
+
next;
|
|
19
|
+
}
|
|
20
|
+
FNR==1 {next}
|
|
21
|
+
{ charged[$1] += $3 }
|
|
22
|
+
END {
|
|
23
|
+
for (room in restocked) {
|
|
24
|
+
r = restocked[room] + 0; c = charged[room] + 0;
|
|
25
|
+
if (r != c) printf "MISMATCH: room %s — restocked $%.2f, charged $%.2f\n", room, r, c;
|
|
26
|
+
}
|
|
27
|
+
for (room in charged) if (!(room in restocked)) printf "UNMATCHED CHARGE: room %s — charged $%.2f with no restock logged\n", room, charged[room];
|
|
28
|
+
}
|
|
29
|
+
' "{{restock_log_csv}}" "{{folio_charges_csv}}"
|
|
30
|
+
variables:
|
|
31
|
+
restock_log_csv:
|
|
32
|
+
default: "./minibar-restock-log.csv"
|
|
33
|
+
description: "CSV with header row, columns: room_number,date,amount_usd — housekeeping's logged minibar restocks."
|
|
34
|
+
folio_charges_csv:
|
|
35
|
+
default: "./minibar-folio-charges.csv"
|
|
36
|
+
description: "CSV with header row, columns: room_number,date,amount_usd — minibar charges posted to guest folios."
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: Assumes both CSVs cover the same date range; a mismatch doesn't always mean fraud — could be a delayed post or a comped item, so verify before adjusting a folio.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: occupancy-forecast-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Occupancy Forecast Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares this week's forecasted occupancy against actual rooms sold and
|
|
6
|
+
flags a meaningful gap in either direction. Use this if a forecast has
|
|
7
|
+
ever been quietly wrong for weeks, leaving staffing either overbooked
|
|
8
|
+
on labor during a slow stretch or short-staffed during a rush nobody
|
|
9
|
+
planned for.
|
|
10
|
+
category: hospitality
|
|
11
|
+
tags: [hospitality, revenue-management, forecasting, staffing]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v tol="{{tolerance_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
diff = $3 - $2;
|
|
20
|
+
pct = ($2 > 0) ? (diff / $2) * 100 : 0;
|
|
21
|
+
if (pct < 0) pct = -pct;
|
|
22
|
+
if (pct > tol) printf "VARIANCE: %s forecast %d%%, actual %d%% (%.1f pts off, tolerance %.0f)\n", $1, $2, $3, diff, tol;
|
|
23
|
+
}
|
|
24
|
+
' "{{forecast_vs_actual_csv}}"
|
|
25
|
+
variables:
|
|
26
|
+
forecast_vs_actual_csv:
|
|
27
|
+
default: "./occupancy-forecast-vs-actual.csv"
|
|
28
|
+
description: "CSV with header row, columns: date,forecast_occupancy_pct,actual_occupancy_pct."
|
|
29
|
+
tolerance_pct:
|
|
30
|
+
default: 8
|
|
31
|
+
description: Percentage-point gap between forecast and actual occupancy before it's flagged.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Feed this from your revenue management system's forecast export alongside actual rooms-sold data — use recurring misses to recalibrate the forecasting model, not just a one-off flag.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: ota-rate-parity-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: OTA Rate Parity Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares your listed room rates across OTAs (Booking.com, Expedia, etc.)
|
|
6
|
+
against your direct-booking rate and flags any channel undercutting you.
|
|
7
|
+
Use this if an OTA has ever quietly shown a lower rate than your own
|
|
8
|
+
website, driving bookings away from your cheapest channel.
|
|
9
|
+
category: hospitality
|
|
10
|
+
tags: [hospitality, revenue-management, ota, rate-parity]
|
|
11
|
+
schedule: "0 6 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Check today's rate for {{room_type}} on {{ota_platforms}} and compare
|
|
16
|
+
each against the direct rate of {{direct_rate_usd}} on your own booking
|
|
17
|
+
site.
|
|
18
|
+
1. List each platform's displayed rate side by side with the direct rate.
|
|
19
|
+
2. Flag any OTA showing a rate at or below the direct rate — that's a
|
|
20
|
+
parity violation worth chasing with the channel manager or OTA.
|
|
21
|
+
3. Note any OTA showing an unusually high rate too, since that can also
|
|
22
|
+
hurt bookings if it's a stale/unsynced price.
|
|
23
|
+
4. Suggest whether the direct rate, the channel manager mapping, or a
|
|
24
|
+
stale OTA cache is the likely cause for any mismatch found.
|
|
25
|
+
variables:
|
|
26
|
+
room_type:
|
|
27
|
+
default: "Standard Queen"
|
|
28
|
+
description: Room type/rate plan to compare across channels.
|
|
29
|
+
ota_platforms:
|
|
30
|
+
default: "Booking.com, Expedia, Hotels.com"
|
|
31
|
+
description: Comma-separated list of OTA platforms to check.
|
|
32
|
+
direct_rate_usd:
|
|
33
|
+
default: 189
|
|
34
|
+
description: Your current direct-booking rate in USD for the room type/date checked.
|
|
35
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
36
|
+
notes: Read-only comparison — fixing a parity violation usually means updating your channel manager or contacting the OTA's rate-parity team.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: overbooking-risk-alert
|
|
2
|
+
version: 1
|
|
3
|
+
name: Overbooking Risk Alert
|
|
4
|
+
description: >
|
|
5
|
+
Compares confirmed reservations for each upcoming night against total
|
|
6
|
+
available rooms and flags nights where bookings exceed inventory. Use
|
|
7
|
+
this if an intentional overbooking cushion has ever tipped into an
|
|
8
|
+
actual walked guest because nobody was watching the running total as
|
|
9
|
+
last-minute bookings came in.
|
|
10
|
+
category: hospitality
|
|
11
|
+
tags: [hospitality, front-desk, overbooking, reservations]
|
|
12
|
+
schedule: "0 */6 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v rooms="{{total_rooms}}" -v cushion="{{overbook_cushion}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{ booked[$1] += 1 }
|
|
19
|
+
END {
|
|
20
|
+
for (date in booked) {
|
|
21
|
+
limit = rooms + cushion;
|
|
22
|
+
if (booked[date] > limit) printf "OVERBOOKED: %s — %d bookings vs %d rooms (+%d cushion)\n", date, booked[date], rooms, cushion;
|
|
23
|
+
else if (booked[date] > rooms) printf "WITHIN CUSHION: %s — %d bookings vs %d rooms (using overbook cushion)\n", date, booked[date], rooms;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{reservations_by_night_csv}}"
|
|
27
|
+
variables:
|
|
28
|
+
reservations_by_night_csv:
|
|
29
|
+
default: "./reservations-by-night.csv"
|
|
30
|
+
description: "CSV with header row, columns: stay_date,reservation_id — one row per room-night reserved (confirmed status only)."
|
|
31
|
+
total_rooms:
|
|
32
|
+
default: 100
|
|
33
|
+
description: Total available rooms in the property.
|
|
34
|
+
overbook_cushion:
|
|
35
|
+
default: 3
|
|
36
|
+
description: Intentional overbooking cushion above total rooms before a night counts as at-risk of a walk.
|
|
37
|
+
compatible_agents: [generic, claude, codex]
|
|
38
|
+
notes: A count over total_rooms but within the cushion is expected/intentional; only counts exceeding rooms + cushion need a walk plan (relocation agreement with a nearby property) lined up.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: room-maintenance-work-order-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Preventive Maintenance Work Order Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Checks scheduled preventive maintenance work orders (HVAC service,
|
|
6
|
+
fire safety checks, deep cleans) against their due dates and flags any
|
|
7
|
+
overdue or rooms that have gone too long without a PM cycle. Use this
|
|
8
|
+
if a room has ever gone a full year without its scheduled HVAC or
|
|
9
|
+
safety check because it only got attention when something broke.
|
|
10
|
+
category: hospitality
|
|
11
|
+
tags: [hospitality, maintenance, preventive, compliance]
|
|
12
|
+
schedule: "0 7 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v today="$today" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline due_epoch; close(cmd);
|
|
22
|
+
days_over = (today - due_epoch) / 86400;
|
|
23
|
+
if (days_over > 0) printf "OVERDUE: room/area %s — %s work order due %s (%d days overdue)\n", $1, $2, $3, days_over;
|
|
24
|
+
}
|
|
25
|
+
' "{{pm_schedule_csv}}"
|
|
26
|
+
variables:
|
|
27
|
+
pm_schedule_csv:
|
|
28
|
+
default: "./pm-work-orders.csv"
|
|
29
|
+
description: "CSV with header row, columns: room_or_area,work_order_type,due_date (YYYY-MM-DD) — one row per open preventive maintenance work order."
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Distinct from guest-maintenance-request-backlog-check, which tracks guest-reported issues — this tracks scheduled/preventive work orders (PM cycles) that exist whether or not a guest complains.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: upsell-upgrade-conversion-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Room Upsell and Upgrade Conversion Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Analyzes offered room upgrades and add-on upsells (early check-in, view
|
|
6
|
+
upgrade, breakfast package) against how many guests accepted, broken
|
|
7
|
+
down by channel and shift. Use this if front desk upsell offers have
|
|
8
|
+
ever quietly tapered off because nobody was tracking whether the team
|
|
9
|
+
was actually still asking.
|
|
10
|
+
category: hospitality
|
|
11
|
+
tags: [hospitality, revenue-management, upsell, front-desk]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Pull upsell/upgrade offer logs from {{pms_or_upsell_platform}} for the
|
|
17
|
+
past {{lookback_days}} days.
|
|
18
|
+
1. Calculate overall conversion rate (accepted / offered) for each
|
|
19
|
+
upsell type (room upgrade, early check-in, late checkout, breakfast
|
|
20
|
+
package, etc.).
|
|
21
|
+
2. Break the conversion rate down by shift or agent group if that data
|
|
22
|
+
exists, and flag any shift with a rate meaningfully below the
|
|
23
|
+
property average.
|
|
24
|
+
3. Flag any upsell type with an offer count that's dropped sharply
|
|
25
|
+
versus the prior period — that usually means staff stopped asking,
|
|
26
|
+
not that demand dried up.
|
|
27
|
+
4. Estimate incremental revenue if the lowest-converting shift matched
|
|
28
|
+
the property average.
|
|
29
|
+
variables:
|
|
30
|
+
pms_or_upsell_platform:
|
|
31
|
+
default: "your PMS or upsell platform"
|
|
32
|
+
description: System logging upsell offers and outcomes (e.g. "Oracle OPERA", "Zingle", "Duetto").
|
|
33
|
+
lookback_days:
|
|
34
|
+
default: 30
|
|
35
|
+
description: Window of upsell data to analyze.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: Useful as a coaching input for front desk shift leads, not a scorecard for individual write-ups.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: aca-fte-threshold-monitor
|
|
2
|
+
version: 1
|
|
3
|
+
name: ACA Full-Time-Equivalent Threshold Monitor
|
|
4
|
+
description: >
|
|
5
|
+
Estimates the company's total ACA full-time-equivalent count from a
|
|
6
|
+
headcount/hours export and warns when it's approaching the Applicable
|
|
7
|
+
Large Employer threshold. Use this if the company has ever crossed 50
|
|
8
|
+
FTEs without anyone noticing until a compliance filing requirement
|
|
9
|
+
suddenly applied.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, aca, compliance, headcount]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v threshold="{{fte_threshold}}" -v buffer="{{warn_buffer}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$2 == "full-time" {ft_count++; next}
|
|
19
|
+
{pt_hours += $3}
|
|
20
|
+
END {
|
|
21
|
+
pt_fte = pt_hours / 120;
|
|
22
|
+
total_fte = ft_count + pt_fte;
|
|
23
|
+
printf "Full-time headcount: %d, part-time/variable FTE-equivalent: %.1f, total ACA FTE estimate: %.1f\n", ft_count, pt_fte, total_fte;
|
|
24
|
+
if (total_fte >= (threshold - buffer)) {
|
|
25
|
+
printf "WARNING: total FTE estimate %.1f is within %d of the ALE threshold of %d — review ACA Applicable Large Employer status.\n", total_fte, buffer, threshold;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
' "{{aca_headcount_csv_path}}"
|
|
29
|
+
variables:
|
|
30
|
+
aca_headcount_csv_path:
|
|
31
|
+
default: "./aca-headcount-hours.csv"
|
|
32
|
+
description: "Path to a CSV with columns: employee_name,employment_type (full-time/part-time/variable),monthly_hours (only used for non-full-time rows)."
|
|
33
|
+
fte_threshold:
|
|
34
|
+
default: 50
|
|
35
|
+
description: The ACA Applicable Large Employer FTE threshold to watch for (50 under current federal rules; confirm against current law).
|
|
36
|
+
warn_buffer:
|
|
37
|
+
default: 5
|
|
38
|
+
description: How close to the threshold (in FTE count) triggers a warning.
|
|
39
|
+
compatible_agents: [generic, claude, codex]
|
|
40
|
+
notes: >
|
|
41
|
+
This is a rough monthly estimate using the standard 120-hours-per-month
|
|
42
|
+
divisor for part-time/variable-hour employees, not a substitute for the
|
|
43
|
+
IRS's official monthly measurement method — consult counsel/a benefits
|
|
44
|
+
advisor before relying on it for actual ALE determination.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
id: cobra-notification-deadline-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: COBRA Notification Deadline Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Flags terminated employees who are approaching or past the deadline for
|
|
6
|
+
their COBRA election notice with no notice sent on record. Use this if
|
|
7
|
+
a COBRA notice has ever gone out late — or not at all — because
|
|
8
|
+
offboarding paperwork got deprioritized once the employee's last day
|
|
9
|
+
had already passed.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, cobra, offboarding, compliance, benefits]
|
|
12
|
+
schedule: "0 8 * * 1-5"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v today="$today" -v deadline_days="{{notice_deadline_days}}" -v warn="{{warn_days_before}}" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
$3 != "" {next}
|
|
20
|
+
{
|
|
21
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
22
|
+
cmd | getline term_epoch; close(cmd);
|
|
23
|
+
days_since_term = (today - term_epoch) / 86400;
|
|
24
|
+
days_left = deadline_days - days_since_term;
|
|
25
|
+
if (days_left < 0) {
|
|
26
|
+
printf "COBRA NOTICE OVERDUE: %s — terminated %s, %d day(s) past the %d-day notice deadline, no notice sent\n", $1, $2, -days_left, deadline_days;
|
|
27
|
+
} else if (days_left <= warn) {
|
|
28
|
+
printf "COBRA NOTICE DUE: %s — terminated %s, %d day(s) left of the %d-day notice deadline, no notice sent\n", $1, $2, days_left, deadline_days;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
' "{{cobra_tracking_csv_path}}"
|
|
32
|
+
variables:
|
|
33
|
+
cobra_tracking_csv_path:
|
|
34
|
+
default: "./cobra-tracking.csv"
|
|
35
|
+
description: "Path to a CSV with columns: employee_name,termination_date (YYYY-MM-DD),notice_sent_date (blank if not yet sent)."
|
|
36
|
+
notice_deadline_days:
|
|
37
|
+
default: 44
|
|
38
|
+
description: Days from the qualifying event (termination) to get the COBRA election notice out, per your plan's timeline (federal rules generally allow up to 44 days combined; confirm against your plan administrator's actual deadline).
|
|
39
|
+
warn_days_before:
|
|
40
|
+
default: 10
|
|
41
|
+
description: How many days before the deadline to start flagging as due.
|
|
42
|
+
compatible_agents: [generic, claude, codex]
|
|
43
|
+
notes: >
|
|
44
|
+
Federal COBRA timelines and state mini-COBRA rules vary — confirm the
|
|
45
|
+
actual notice_deadline_days with your plan administrator or counsel
|
|
46
|
+
rather than relying on the default. Assumes an already-exported
|
|
47
|
+
termination/notice CSV rather than live benefits-system access.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
id: compliance-training-completion-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Compliance Training Completion Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags employees with a required compliance training (harassment
|
|
6
|
+
prevention, safety cert, data-privacy, etc.) approaching or past its due
|
|
7
|
+
date with no completion on record. Use this if a training deadline has
|
|
8
|
+
ever been missed and only surfaced when a regulator or auditor asked for
|
|
9
|
+
proof of completion.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, compliance, training, deadline]
|
|
12
|
+
schedule: "0 8 * * 1"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 != "" {next}
|
|
19
|
+
{
|
|
20
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline due_epoch; close(cmd);
|
|
22
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
23
|
+
diff_days = (due_epoch - now_epoch) / 86400;
|
|
24
|
+
if (diff_days <= days) {
|
|
25
|
+
printf "TRAINING DUE: %s — \"%s\" due %s (%d days), not completed\n", $1, $2, $3, diff_days;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
' "{{training_tracking_csv_path}}"
|
|
29
|
+
variables:
|
|
30
|
+
training_tracking_csv_path:
|
|
31
|
+
default: "./compliance-training-tracking.csv"
|
|
32
|
+
description: "Path to a CSV with columns: employee_name,training_name,due_date (YYYY-MM-DD),completed_date (blank if not yet done). One row per required training per employee."
|
|
33
|
+
warn_days_before:
|
|
34
|
+
default: 14
|
|
35
|
+
description: How many days before a training's due date to start warning.
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: >
|
|
38
|
+
Assumes a maintained export from your LMS/HRIS listing one row per
|
|
39
|
+
employee per required training. Distinct from new-hire-paperwork-check,
|
|
40
|
+
which covers one-time onboarding documents rather than recurring/annual
|
|
41
|
+
compliance training.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: eeo1-filing-deadline-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: EEO-1 Filing Deadline Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Counts down to the annual EEO-1 component filing deadline so data
|
|
6
|
+
collection and submission don't get rushed at the last minute. Use this
|
|
7
|
+
if the EEO-1 window has ever snuck up because it only comes around once
|
|
8
|
+
a year and nobody put it on a recurring calendar.
|
|
9
|
+
category: hr
|
|
10
|
+
tags: [hr, eeo1, compliance, filing, deadline]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today_epoch=$(date +%s);
|
|
16
|
+
deadline_epoch=$(date -d "{{filing_deadline}}" +%s 2>/dev/null || date -j -f %Y-%m-%d "{{filing_deadline}}" +%s);
|
|
17
|
+
days_left=$(( (deadline_epoch - today_epoch) / 86400 ));
|
|
18
|
+
if [ "$days_left" -lt 0 ]; then
|
|
19
|
+
echo "note: this cycle's EEO-1 deadline ({{filing_deadline}}) has passed — update filing_deadline for next year's cycle.";
|
|
20
|
+
elif [ "$days_left" -le {{warn_days_before}} ]; then
|
|
21
|
+
echo "EEO-1 FILING DUE: $days_left day(s) until deadline ({{filing_deadline}}). Confirm workforce snapshot data and file via the EEOC portal.";
|
|
22
|
+
else
|
|
23
|
+
echo "OK: $days_left day(s) until EEO-1 filing deadline ({{filing_deadline}}).";
|
|
24
|
+
fi
|
|
25
|
+
variables:
|
|
26
|
+
filing_deadline:
|
|
27
|
+
default: "YYYY-MM-DD"
|
|
28
|
+
description: This cycle's EEO-1 Component 1 filing deadline, published annually by the EEOC — update each cycle.
|
|
29
|
+
warn_days_before:
|
|
30
|
+
default: 30
|
|
31
|
+
description: How many days before the deadline to start reminding.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: >
|
|
34
|
+
Only applies to employers required to file (generally 100+ employees, or
|
|
35
|
+
federal contractors meeting lower thresholds) — confirm your filing
|
|
36
|
+
obligation and the current cycle's exact deadline on the EEOC's site
|
|
37
|
+
rather than assuming last year's date still applies.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: handbook-acknowledgment-tracking
|
|
2
|
+
version: 1
|
|
3
|
+
name: Employee Handbook Acknowledgment Tracking
|
|
4
|
+
description: >
|
|
5
|
+
Checks the full roster against the current handbook version and flags
|
|
6
|
+
anyone who hasn't signed off on it yet — including existing employees
|
|
7
|
+
after a handbook update, not just new hires. Use this if a handbook
|
|
8
|
+
revision has ever gone out and only a fraction of the company actually
|
|
9
|
+
acknowledged it, which nobody discovered until it mattered in a dispute.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, handbook, compliance, policy]
|
|
12
|
+
schedule: "0 8 1 * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v current="{{current_handbook_version}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$2 != current {
|
|
19
|
+
printf "NOT ACKNOWLEDGED: %s — on file for v%s, current is v%s\n", $1, ($2 == "" ? "none" : $2), current;
|
|
20
|
+
}
|
|
21
|
+
' "{{handbook_ack_csv_path}}"
|
|
22
|
+
variables:
|
|
23
|
+
handbook_ack_csv_path:
|
|
24
|
+
default: "./handbook-acknowledgments.csv"
|
|
25
|
+
description: "Path to a CSV with columns: employee_name,acknowledged_version (blank if never acknowledged any version)."
|
|
26
|
+
current_handbook_version:
|
|
27
|
+
default: "2026.1"
|
|
28
|
+
description: Version label of the currently effective handbook, updated whenever a new revision goes out.
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: >
|
|
31
|
+
Assumes a maintained acknowledgment export covering the whole roster.
|
|
32
|
+
Distinct from new-hire-paperwork-check, which bundles the initial
|
|
33
|
+
handbook sign-off into a new hire's first-30-days checklist rather than
|
|
34
|
+
tracking re-acknowledgment across the whole company after updates.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: headcount-budget-variance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Headcount vs. Budget Variance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares actual headcount per department against the planned/budgeted
|
|
6
|
+
headcount and flags departments that are over or under plan. Use this
|
|
7
|
+
if a department has ever quietly overhired (or sat understaffed) for a
|
|
8
|
+
quarter before finance and HR compared notes and noticed.
|
|
9
|
+
category: hr
|
|
10
|
+
tags: [hr, headcount, budget, finance, planning]
|
|
11
|
+
schedule: "0 9 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v threshold="{{variance_threshold}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
variance = $3 - $2;
|
|
19
|
+
abs_variance = (variance < 0 ? -variance : variance);
|
|
20
|
+
if (abs_variance >= threshold) {
|
|
21
|
+
direction = (variance > 0 ? "OVER PLAN" : "UNDER PLAN");
|
|
22
|
+
printf "%s: %s — budgeted %d, actual %d (variance %+d)\n", direction, $1, $2, $3, variance;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{headcount_budget_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
headcount_budget_csv_path:
|
|
28
|
+
default: "./headcount-budget.csv"
|
|
29
|
+
description: "Path to a CSV with columns: department,budgeted_headcount,actual_headcount."
|
|
30
|
+
variance_threshold:
|
|
31
|
+
default: 2
|
|
32
|
+
description: Minimum absolute headcount variance (in people) before a department is flagged.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: >
|
|
35
|
+
Assumes a maintained monthly export reconciling the HRIS actual
|
|
36
|
+
headcount against finance's approved plan by department. Zero-token —
|
|
37
|
+
no synthesis or interpretation beyond the raw variance.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
id: leave-of-absence-return-tracker
|
|
2
|
+
version: 1
|
|
3
|
+
name: Leave of Absence Return Tracker
|
|
4
|
+
description: >
|
|
5
|
+
Tracks employees on FMLA, parental, medical, or other formal leave and
|
|
6
|
+
flags upcoming or overdue return dates. Use this if a return-to-work
|
|
7
|
+
date has ever been missed — either the team wasn't ready for someone
|
|
8
|
+
coming back, or nobody noticed an expected return date came and went
|
|
9
|
+
with no check-in.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, leave-of-absence, fmla, parental-leave, compliance]
|
|
12
|
+
schedule: "0 8 * * 1-5"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v today="$today" -v warn="{{warn_days_before}}" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
$4 != "active" {next}
|
|
20
|
+
{
|
|
21
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
22
|
+
cmd | getline return_epoch; close(cmd);
|
|
23
|
+
diff_days = (return_epoch - today) / 86400;
|
|
24
|
+
if (diff_days < 0) {
|
|
25
|
+
printf "OVERDUE RETURN: %s — %s leave, expected back %s (%d day(s) past, still marked active)\n", $1, $2, $3, -diff_days;
|
|
26
|
+
} else if (diff_days <= warn) {
|
|
27
|
+
printf "RETURN UPCOMING: %s — %s leave, expected back %s (%d day(s))\n", $1, $2, $3, diff_days;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
' "{{leave_tracking_csv_path}}"
|
|
31
|
+
variables:
|
|
32
|
+
leave_tracking_csv_path:
|
|
33
|
+
default: "./leave-of-absence-tracking.csv"
|
|
34
|
+
description: "Path to a CSV with columns: employee_name,leave_type,expected_return_date (YYYY-MM-DD),status (active/returned)."
|
|
35
|
+
warn_days_before:
|
|
36
|
+
default: 10
|
|
37
|
+
description: How many days before the expected return date to start flagging as upcoming.
|
|
38
|
+
compatible_agents: [generic, claude, codex]
|
|
39
|
+
notes: >
|
|
40
|
+
Assumes a maintained export from HR/leave-administration tracking active
|
|
41
|
+
leaves; this is the backstop that flags dates, not a substitute for
|
|
42
|
+
legally required FMLA/state-leave notices or interactive-process steps.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: org-chart-manager-drift-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Org Chart Manager Drift Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares the manager field in the HRIS against a separately maintained
|
|
6
|
+
org-chart source of truth and flags mismatches. Use this if the
|
|
7
|
+
"reports to" field has ever gone stale after a reorg, leaving reviews,
|
|
8
|
+
approvals, or reminders routed to someone's old manager for months.
|
|
9
|
+
category: hr
|
|
10
|
+
tags: [hr, org-chart, data-quality, hris]
|
|
11
|
+
schedule: "0 8 1 * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
NR==FNR {
|
|
17
|
+
if (FNR>1) hris_mgr[$1]=$2;
|
|
18
|
+
next;
|
|
19
|
+
}
|
|
20
|
+
FNR==1 {next}
|
|
21
|
+
{
|
|
22
|
+
if (($1 in hris_mgr) && hris_mgr[$1] != $2) {
|
|
23
|
+
printf "MANAGER DRIFT: %s — HRIS says \"%s\", org chart says \"%s\"\n", $1, hris_mgr[$1], $2;
|
|
24
|
+
} else if (!($1 in hris_mgr)) {
|
|
25
|
+
printf "MISSING FROM HRIS: %s — in org chart reporting to \"%s\" but not found in HRIS export\n", $1, $2;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
' "{{hris_manager_csv_path}}" "{{org_chart_csv_path}}"
|
|
29
|
+
variables:
|
|
30
|
+
hris_manager_csv_path:
|
|
31
|
+
default: "./hris-manager-export.csv"
|
|
32
|
+
description: "Path to a CSV export from the HRIS with columns: employee_name,manager_name."
|
|
33
|
+
org_chart_csv_path:
|
|
34
|
+
default: "./org-chart-source.csv"
|
|
35
|
+
description: "Path to a CSV from your org-chart source of truth (e.g. an org-design tool or a maintained spreadsheet) with columns: employee_name,manager_name."
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: >
|
|
38
|
+
Matches purely on employee_name strings — dedupe/normalize names (or
|
|
39
|
+
swap in employee IDs) before relying on this for a large or
|
|
40
|
+
name-collision-prone roster.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
id: pay-equity-band-outlier-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Pay Equity Band Outlier Check
|
|
4
|
+
description: >
|
|
5
|
+
Scans a salary-band export for employees paid outside their role's band
|
|
6
|
+
or unusually far from the band midpoint, and summarizes any patterns
|
|
7
|
+
worth a closer look. Use this if pay outliers have ever gone unnoticed
|
|
8
|
+
for a review cycle simply because nobody cross-checked salaries against
|
|
9
|
+
bands until an audit or a pay-equity complaint forced the issue.
|
|
10
|
+
category: hr
|
|
11
|
+
tags: [hr, pay-equity, compensation, compliance]
|
|
12
|
+
schedule: "0 9 1 1,4,7,10 *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: hybrid
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v tol="{{tolerance_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
band_min=$3; band_max=$4; salary=$5;
|
|
20
|
+
low_bound = band_min * (1 - tol/100);
|
|
21
|
+
high_bound = band_max * (1 + tol/100);
|
|
22
|
+
if (salary < low_bound) {
|
|
23
|
+
printf "BELOW BAND: %s (%s) — $%d vs band $%d-$%d\n", $1, $2, salary, band_min, band_max;
|
|
24
|
+
} else if (salary > high_bound) {
|
|
25
|
+
printf "ABOVE BAND: %s (%s) — $%d vs band $%d-$%d\n", $1, $2, salary, band_min, band_max;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
' "{{salary_band_csv_path}}"
|
|
29
|
+
prompt: |
|
|
30
|
+
Run the outlier check above against {{salary_band_csv_path}} (columns:
|
|
31
|
+
employee_name, role, band_min, band_max, current_salary). Using the
|
|
32
|
+
BELOW BAND / ABOVE BAND lines it produces:
|
|
33
|
+
1. Group outliers by role/level and note any pattern (e.g. one role
|
|
34
|
+
consistently under band, one department skewing above).
|
|
35
|
+
2. Do not draw conclusions about protected-class pay gaps — this export
|
|
36
|
+
has no demographic data. Just flag the raw outliers and patterns for
|
|
37
|
+
HR/legal to review with proper pay-equity analysis tooling.
|
|
38
|
+
3. Summarize as a short list HR can triage, ranked by how far outside
|
|
39
|
+
the band each person is.
|
|
40
|
+
script_note: >
|
|
41
|
+
The command gives you the raw list of employees outside their band for
|
|
42
|
+
free. The prompt adds pattern-level grouping (by role/department) to
|
|
43
|
+
help HR prioritize triage — it does not perform statistical pay-equity
|
|
44
|
+
analysis or draw demographic conclusions.
|
|
45
|
+
variables:
|
|
46
|
+
salary_band_csv_path:
|
|
47
|
+
default: "./salary-bands.csv"
|
|
48
|
+
description: "Path to an anonymized/exported CSV with columns: employee_name,role,band_min,band_max,current_salary. No demographic fields."
|
|
49
|
+
tolerance_pct:
|
|
50
|
+
default: 0
|
|
51
|
+
description: Percent tolerance outside the band before flagging (0 = flag anything strictly outside min/max).
|
|
52
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
53
|
+
notes: >
|
|
54
|
+
This is a band-boundary check, not a statistical pay-equity or
|
|
55
|
+
disparate-impact analysis — it deliberately excludes demographic data.
|
|
56
|
+
Route real pay-equity audits through legal counsel and proper
|
|
57
|
+
statistical tooling. Assumes an already-exported salary-band CSV rather
|
|
58
|
+
than live comp-system access.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
id: pto-year-end-use-it-or-lose-it-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Company-Wide PTO Use-It-or-Lose-It Check
|
|
4
|
+
description: >
|
|
5
|
+
Scans the full employee roster for anyone whose unused PTO balance is
|
|
6
|
+
above the policy cap or won't be usable before the year-end reset, so
|
|
7
|
+
HR/payroll can send a bulk nudge. Use this if payout or forfeiture
|
|
8
|
+
disputes have ever come up in December because nobody flagged high
|
|
9
|
+
balances company-wide until it was too late to schedule time off. This
|
|
10
|
+
is the HR-wide roster check — for tracking just your own balance, use
|
|
11
|
+
team/pto-balance-check instead.
|
|
12
|
+
category: hr
|
|
13
|
+
tags: [hr, pto, vacation, compliance, payroll]
|
|
14
|
+
schedule: "0 9 1 10,11,12 *"
|
|
15
|
+
timezone: "America/New_York"
|
|
16
|
+
runner: shell
|
|
17
|
+
command: >
|
|
18
|
+
today_epoch=$(date +%s);
|
|
19
|
+
cutoff_epoch=$(date -d "{{year_end_date}}" +%s 2>/dev/null || date -j -f %Y-%m-%d "{{year_end_date}}" +%s);
|
|
20
|
+
days_left=$(( (cutoff_epoch - today_epoch) / 86400 ));
|
|
21
|
+
awk -F',' -v cap="{{cap_hours}}" -v days_left="$days_left" -v warn="{{warn_days_before}}" '
|
|
22
|
+
NR==1 {next}
|
|
23
|
+
{
|
|
24
|
+
if ($2 > cap) {
|
|
25
|
+
printf "OVER CAP: %s — %s hours unused (cap %s)\n", $1, $2, cap;
|
|
26
|
+
} else if (days_left <= warn && $2 > 0) {
|
|
27
|
+
printf "USE-IT-OR-LOSE-IT: %s — %s hours unused, %d day(s) until year-end reset (%s)\n", $1, $2, days_left, "{{year_end_date}}";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
' "{{pto_roster_csv_path}}"
|
|
31
|
+
variables:
|
|
32
|
+
pto_roster_csv_path:
|
|
33
|
+
default: "./pto-balances.csv"
|
|
34
|
+
description: "Path to a CSV export with columns: employee_name,pto_balance_hours."
|
|
35
|
+
cap_hours:
|
|
36
|
+
default: 80
|
|
37
|
+
description: Company policy cap on unused PTO hours, above which balances are flagged regardless of date.
|
|
38
|
+
year_end_date:
|
|
39
|
+
default: "2026-12-31"
|
|
40
|
+
description: Date (YYYY-MM-DD) unused PTO resets or is forfeited under company policy.
|
|
41
|
+
warn_days_before:
|
|
42
|
+
default: 45
|
|
43
|
+
description: How many days before year_end_date to start flagging nonzero balances.
|
|
44
|
+
compatible_agents: [generic, claude, codex]
|
|
45
|
+
notes: >
|
|
46
|
+
Assumes a maintained roster export from payroll/HRIS with current PTO
|
|
47
|
+
balances for every employee. Distinct from team/pto-balance-check,
|
|
48
|
+
which is a single self-maintained personal reminder, not a company-wide
|
|
49
|
+
audit.
|