@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.
Files changed (275) hide show
  1. package/README.md +31 -44
  2. package/catalog.json +8862 -1873
  3. package/jobs/automotive/ase-certification-expiry-check.yaml +36 -0
  4. package/jobs/automotive/csi-score-monitor.yaml +33 -0
  5. package/jobs/automotive/customer-pay-warranty-pay-mix-tracker.yaml +47 -0
  6. package/jobs/automotive/fi-product-attachment-rate-tracker.yaml +39 -0
  7. package/jobs/automotive/loaner-fleet-availability-check.yaml +40 -0
  8. package/jobs/automotive/manufacturer-recall-notice-check.yaml +39 -0
  9. package/jobs/automotive/parts-reorder-point-check.yaml +36 -0
  10. package/jobs/automotive/repair-cycle-time-trend-monitor.yaml +42 -0
  11. package/jobs/automotive/service-appointment-no-show-tracker.yaml +38 -0
  12. package/jobs/automotive/service-bay-utilization-check.yaml +38 -0
  13. package/jobs/automotive/shop-supply-reorder-check.yaml +31 -0
  14. package/jobs/automotive/trade-in-appraisal-variance-check.yaml +39 -0
  15. package/jobs/automotive/used-vehicle-inventory-aging-check.yaml +35 -0
  16. package/jobs/construction/critical-path-material-lead-time-review.yaml +43 -0
  17. package/jobs/construction/daily-jobsite-log-compliance-check.yaml +34 -0
  18. package/jobs/construction/equipment-utilization-cost-check.yaml +35 -0
  19. package/jobs/construction/heavy-equipment-inspection-compliance-check.yaml +34 -0
  20. package/jobs/construction/jobsite-safety-incident-near-miss-tracker.yaml +35 -0
  21. package/jobs/construction/lien-waiver-collection-tracker.yaml +27 -0
  22. package/jobs/construction/permit-application-approval-backlog-check.yaml +33 -0
  23. package/jobs/construction/project-budget-variance-check.yaml +34 -0
  24. package/jobs/construction/punch-list-completion-tracker.yaml +36 -0
  25. package/jobs/construction/retainage-holdback-release-tracker.yaml +33 -0
  26. package/jobs/construction/rfi-response-time-tracker.yaml +33 -0
  27. package/jobs/construction/subcontractor-pay-application-approval-tracker.yaml +35 -0
  28. package/jobs/construction/submittal-shop-drawing-review-check.yaml +45 -0
  29. package/jobs/construction/weather-delay-impact-log.yaml +44 -0
  30. package/jobs/ecommerce/affiliate-commission-payout-check.yaml +38 -0
  31. package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
  32. package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
  33. package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
  34. package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
  35. package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
  36. package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
  37. package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
  38. package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
  39. package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
  40. package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
  41. package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
  42. package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
  43. package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
  44. package/jobs/education/department-budget-variance-check.yaml +37 -0
  45. package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
  46. package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
  47. package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
  48. package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
  49. package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
  50. package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
  51. package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
  52. package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
  53. package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
  54. package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
  55. package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
  56. package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
  57. package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
  58. package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
  59. package/jobs/finance/credit-utilization-watch.yaml +40 -0
  60. package/jobs/finance/duplicate-payment-detection.yaml +43 -0
  61. package/jobs/finance/expense-report-compliance-check.yaml +46 -0
  62. package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
  63. package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
  64. package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
  65. package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
  66. package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
  67. package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
  68. package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
  69. package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
  70. package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
  71. package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
  72. package/jobs/fleet/ev-battery-health-check.yaml +36 -0
  73. package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
  74. package/jobs/fleet/geofence-violation-check.yaml +37 -0
  75. package/jobs/fleet/lease-return-condition-check.yaml +33 -0
  76. package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
  77. package/jobs/fleet/toll-violation-tracker.yaml +34 -0
  78. package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
  79. package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
  80. package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
  81. package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
  82. package/jobs/growth/customer-health-score-monitor.yaml +37 -0
  83. package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
  84. package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
  85. package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
  86. package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
  87. package/jobs/growth/nps-trend-tracker.yaml +40 -0
  88. package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
  89. package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
  90. package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
  91. package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
  92. package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
  93. package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
  94. package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
  95. package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
  96. package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
  97. package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
  98. package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
  99. package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
  100. package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
  101. package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
  102. package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
  103. package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
  104. package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
  105. package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
  106. package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
  107. package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
  108. package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
  109. package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
  110. package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
  111. package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
  112. package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
  113. package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
  114. package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
  115. package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
  116. package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
  117. package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
  118. package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
  119. package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
  120. package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
  121. package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
  122. package/jobs/hr/compliance-training-completion-check.yaml +41 -0
  123. package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
  124. package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
  125. package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
  126. package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
  127. package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
  128. package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
  129. package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
  130. package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
  131. package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
  132. package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
  133. package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
  134. package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
  135. package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
  136. package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
  137. package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
  138. package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
  139. package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
  140. package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
  141. package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
  142. package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
  143. package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
  144. package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
  145. package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
  146. package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
  147. package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
  148. package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
  149. package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
  150. package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
  151. package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
  152. package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
  153. package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
  154. package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
  155. package/jobs/legal/trademark-infringement-watch.yaml +43 -0
  156. package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
  157. package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
  158. package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
  159. package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
  160. package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
  161. package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
  162. package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
  163. package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
  164. package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
  165. package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
  166. package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
  167. package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
  168. package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
  169. package/jobs/logistics/route-load-optimization-check.yaml +32 -0
  170. package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
  171. package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
  172. package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
  173. package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
  174. package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
  175. package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
  176. package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
  177. package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
  178. package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
  179. package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
  180. package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
  181. package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
  182. package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
  183. package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
  184. package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
  185. package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
  186. package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
  187. package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
  188. package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
  189. package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
  190. package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
  191. package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
  192. package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
  193. package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
  194. package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
  195. package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
  196. package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
  197. package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
  198. package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
  199. package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
  200. package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
  201. package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
  202. package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
  203. package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
  204. package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
  205. package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
  206. package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
  207. package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
  208. package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
  209. package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
  210. package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
  211. package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
  212. package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
  213. package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
  214. package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
  215. package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
  216. package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
  217. package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
  218. package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
  219. package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
  220. package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
  221. package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
  222. package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
  223. package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
  224. package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
  225. package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
  226. package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
  227. package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
  228. package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
  229. package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
  230. package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
  231. package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
  232. package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
  233. package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
  234. package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
  235. package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
  236. package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
  237. package/jobs/sales/champion-departure-watch.yaml +44 -0
  238. package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
  239. package/jobs/sales/commission-payout-tracker.yaml +32 -0
  240. package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
  241. package/jobs/sales/discount-approval-pending-check.yaml +31 -0
  242. package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
  243. package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
  244. package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
  245. package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
  246. package/jobs/sales/referral-followup-tracker.yaml +40 -0
  247. package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
  248. package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
  249. package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
  250. package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
  251. package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
  252. package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
  253. package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
  254. package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
  255. package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
  256. package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
  257. package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
  258. package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
  259. package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
  260. package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
  261. package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
  262. package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
  263. package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
  264. package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
  265. package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
  266. package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
  267. package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
  268. package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
  269. package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
  270. package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
  271. package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
  272. package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
  273. package/lib/category-descriptions.js +12 -12
  274. package/lib/duplicates-allowlist.js +15 -0
  275. package/package.json +2 -2
@@ -0,0 +1,41 @@
1
+ id: patient-balance-collections-aging-check
2
+ version: 1
3
+ name: Overdue Patient Balance Aging Check
4
+ description: >
5
+ Buckets outstanding self-pay patient balances by how long they've been
6
+ unpaid (30/60/90+ days) and flags the oldest ones for collections
7
+ follow-up. Use this if patient balances have ever quietly aged past the
8
+ point of easy recovery because nobody was reviewing accounts receivable
9
+ by age, only by total dollar amount.
10
+ category: healthcare
11
+ tags: [healthcare, billing, collections, accounts-receivable, patients]
12
+ schedule: "0 8 1,15 * *"
13
+ timezone: "America/New_York"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v flag_days="{{flag_after_days}}" '
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 invoice_epoch; close(cmd);
22
+ age_days = (today - invoice_epoch) / 86400;
23
+ bucket = (age_days < 30) ? "current" : (age_days < 60) ? "30-59" : (age_days < 90) ? "60-89" : "90+";
24
+ if (age_days >= flag_days) {
25
+ printf "OVERDUE BALANCE: %s — $%s, invoiced %s (%d days, bucket %s)\n", $1, $2, $3, age_days, bucket;
26
+ }
27
+ }
28
+ ' "{{patient_balances_csv_path}}"
29
+ variables:
30
+ patient_balances_csv_path:
31
+ default: "./patient-balances.csv"
32
+ description: "Path to a CSV with columns: patient_name,balance_amount,invoice_date (YYYY-MM-DD)."
33
+ flag_after_days:
34
+ default: 60
35
+ description: Days since invoicing before an unpaid balance is flagged for collections follow-up.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Assumes an already-exported CSV from your billing/practice-management system
39
+ rather than live PHI system access. Read-only aging report — actual collections
40
+ outreach should follow your practice's billing/compliance policy (e.g. FDCPA-style
41
+ notice requirements where applicable).
@@ -0,0 +1,41 @@
1
+ id: patient-immunization-schedule-check
2
+ version: 1
3
+ name: Patient Immunization Schedule Check
4
+ description: >
5
+ Checks which patients are due or overdue for a scheduled immunization and
6
+ lists them for outreach. Use this if a patient (child or adult) has ever
7
+ fallen behind on a vaccine series because nobody was tracking due dates
8
+ against the immunization schedule between visits — this is for human
9
+ patients, distinct from jobs/veterinary/pet-vaccine-due-reminder.yaml
10
+ which tracks pet vaccines at an animal clinic.
11
+ category: healthcare
12
+ tags: [healthcare, immunization, vaccine, patients, preventive-care]
13
+ schedule: "0 8 * * *"
14
+ timezone: "America/New_York"
15
+ runner: shell
16
+ command: >
17
+ awk -F',' -v days="{{warn_days_before}}" '
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
+ "date +%s" | getline now_epoch; close("date +%s");
23
+ diff_days = (due_epoch - now_epoch) / 86400;
24
+ if (diff_days <= days) {
25
+ printf "IMMUNIZATION DUE: %s — %s due %s (%d days)\n", $1, $4, $3, diff_days;
26
+ }
27
+ }
28
+ ' "{{patients_csv_path}}"
29
+ variables:
30
+ patients_csv_path:
31
+ default: "./patient-immunizations.csv"
32
+ description: "Path to a CSV with columns: patient_name,date_of_birth,due_date (YYYY-MM-DD),vaccine_name."
33
+ warn_days_before:
34
+ default: 21
35
+ description: How many days before (or past) the due date to start listing.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Assumes an already-exported CSV from your EHR/immunization registry rather than
39
+ live PHI system access. Read-only backstop check — cross-verify against your
40
+ state immunization registry before contacting patients, since due dates can shift
41
+ based on catch-up schedules.
@@ -0,0 +1,39 @@
1
+ id: patient-portal-message-backlog-check
2
+ version: 1
3
+ name: Patient Portal Message Backlog Check
4
+ description: >
5
+ Checks unanswered patient portal messages against a response-time SLA and
6
+ flags anything overdue. Use this if a patient message has ever sat
7
+ unanswered in the portal inbox for days because it scrolled off the top
8
+ of a busy staff member's queue and nobody was tracking age.
9
+ category: healthcare
10
+ tags: [healthcare, patient-portal, messaging, sla, patients]
11
+ schedule: "0 */2 * * 1-6"
12
+ timezone: "America/New_York"
13
+ runner: shell
14
+ command: >
15
+ now=$(date +%s);
16
+ awk -F',' -v now="$now" -v sla="{{sla_hours}}" '
17
+ NR==1 {next}
18
+ $4 == "unanswered" {
19
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f \"%Y-%m-%d %H:%M\" \"" $2 "\" +%s 2>/dev/null";
20
+ cmd | getline received_epoch; close(cmd);
21
+ age_hours = (now - received_epoch) / 3600;
22
+ if (age_hours >= sla) {
23
+ printf "OVERDUE MESSAGE: %s — \"%s\" received %s (%d hrs ago, unanswered)\n", $1, $3, $2, age_hours;
24
+ }
25
+ }
26
+ ' "{{portal_messages_csv_path}}"
27
+ variables:
28
+ portal_messages_csv_path:
29
+ default: "./portal-messages.csv"
30
+ description: "Path to a CSV with columns: patient_name,received_at (YYYY-MM-DD HH:MM),subject,status (unanswered/answered)."
31
+ sla_hours:
32
+ default: 24
33
+ description: Hours a message can go unanswered before it's flagged overdue.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ Assumes an already-exported CSV from your patient portal/EHR messaging module
37
+ rather than live access to message content — export subject lines only if full
38
+ message bodies raise PHI-export concerns for your practice. Read-only — does not
39
+ reply to patients.
@@ -0,0 +1,59 @@
1
+ id: patient-satisfaction-survey-tracking
2
+ version: 1
3
+ name: Patient Satisfaction Survey Response Tracking
4
+ description: >
5
+ Tallies patient satisfaction survey response rates and surfaces low
6
+ scores with comments for follow-up. Use this if low-scoring survey
7
+ responses have ever sat unread in an inbox, or a slipping response rate
8
+ went unnoticed for months — distinct from generic online reviews, this
9
+ tracks a practice's own post-visit survey instrument.
10
+ category: healthcare
11
+ tags: [healthcare, patient-satisfaction, survey, feedback, patients]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "America/New_York"
14
+ runner: hybrid
15
+ command: >
16
+ awk -F',' -v low="{{low_score_threshold}}" '
17
+ NR==1 {next}
18
+ { sent++; }
19
+ $3 != "" { responded++; }
20
+ ($3 != "" && $4 != "" && ($4+0) <= low) {
21
+ printf "LOW SCORE: %s — score %s: \"%s\" (responded %s)\n", $1, $4, $5, $3;
22
+ }
23
+ END {
24
+ rate = (sent > 0) ? (responded / sent * 100) : 0;
25
+ printf "RESPONSE RATE: %d/%d sent (%.1f%%)\n", responded, sent, rate;
26
+ }
27
+ ' "{{survey_csv_path}}"
28
+ prompt: |
29
+ Look at the low-score rows and comments flagged by the tally above (from
30
+ {{survey_csv_path}}).
31
+ 1. Group the comments into common themes (e.g. wait time, billing
32
+ confusion, communication, front-desk experience).
33
+ 2. For each theme, note how many respondents mentioned it and give one
34
+ representative quote.
35
+ 3. For any response that names a specific, addressable problem, draft a
36
+ short, warm outreach note to that patient acknowledging the feedback —
37
+ draft-only, for staff to review before sending.
38
+ 4. If the response rate this run is notably lower than
39
+ {{expected_response_rate}}%, flag that as worth investigating
40
+ separately from the score themes.
41
+ variables:
42
+ survey_csv_path:
43
+ default: "./patient-satisfaction-surveys.csv"
44
+ description: "Path to a CSV with columns: patient_name,visit_date,response_date (blank if no response),score (1-5, blank if no response),comment."
45
+ low_score_threshold:
46
+ default: 3
47
+ description: Scores at or below this value are flagged as low.
48
+ expected_response_rate:
49
+ default: 25
50
+ description: Expected survey response rate (%) — used only as a reference point for flagging an unusually low run.
51
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
52
+ script_note: >
53
+ The command gives you the response rate and raw low-score rows for free. Only the
54
+ prompt pass groups comments into themes and drafts a tactful outreach note to an
55
+ unhappy patient — that synthesis is what the LLM pass adds.
56
+ notes: >
57
+ Assumes an already-exported CSV from your survey tool (e.g. post-visit SMS/email
58
+ survey) rather than live PHI system access. Outreach drafts must be reviewed by
59
+ staff before sending.
@@ -0,0 +1,38 @@
1
+ id: prescription-refill-request-backlog-check
2
+ version: 1
3
+ name: Prescription Refill Request Backlog Check
4
+ description: >
5
+ Checks pending prescription refill requests against how long they've been
6
+ waiting and flags anything past a reasonable turnaround. Use this if a
7
+ refill request has ever sat in a queue long enough that a patient ran out
8
+ of a maintenance medication before the practice got to it.
9
+ category: healthcare
10
+ tags: [healthcare, prescriptions, refills, patients, medication]
11
+ schedule: "0 9,15 * * 1-5"
12
+ timezone: "America/New_York"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v hours="{{escalate_after_hours}}" '
17
+ NR==1 {next}
18
+ $4 == "pending" {
19
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
20
+ cmd | getline requested_epoch; close(cmd);
21
+ age_hours = (today - requested_epoch) / 3600;
22
+ if (age_hours >= hours) {
23
+ printf "REFILL PENDING: %s — %s requested %s (%d hrs ago)\n", $1, $2, $3, age_hours;
24
+ }
25
+ }
26
+ ' "{{refill_requests_csv_path}}"
27
+ variables:
28
+ refill_requests_csv_path:
29
+ default: "./refill-requests.csv"
30
+ description: "Path to a CSV with columns: patient_name,medication,requested_date (YYYY-MM-DD),status (pending/approved/denied)."
31
+ escalate_after_hours:
32
+ default: 48
33
+ description: Hours a refill request can sit pending before it's flagged.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ Assumes an already-exported CSV from your e-prescribing/EHR system rather than
37
+ live PHI system access. Read-only triage — actual approval/denial of a refill is a
38
+ clinical decision made by the prescriber, not this job.
@@ -0,0 +1,53 @@
1
+ id: prior-authorization-expiry-check
2
+ version: 1
3
+ name: Prior Authorization Expiry Check
4
+ description: >
5
+ Checks treatment-specific prior-authorization requests for approvals about
6
+ to expire before the procedure happens, and for requests still stuck
7
+ awaiting payer response. Use this if a procedure has ever been delayed or
8
+ denied because the prior auth expired, or the payer never responded and
9
+ nobody was tracking it — distinct from insurance-eligibility-verification-check,
10
+ which covers general visit eligibility rather than a specific treatment's
11
+ authorization.
12
+ category: healthcare
13
+ tags: [healthcare, prior-authorization, billing, insurance, compliance]
14
+ schedule: "0 9 * * 1-5"
15
+ timezone: "America/New_York"
16
+ runner: shell
17
+ command: >
18
+ today=$(date +%s);
19
+ awk -F',' -v today="$today" -v warn_days="{{warn_days_before_expiry}}" -v stale_days="{{pending_stale_days}}" '
20
+ NR==1 {next}
21
+ {
22
+ if ($4 == "approved" && $6 != "") {
23
+ cmd = "date -d \"" $6 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $6 "\" +%s 2>/dev/null";
24
+ cmd | getline expiry_epoch; close(cmd);
25
+ diff_days = (expiry_epoch - today) / 86400;
26
+ if (diff_days <= warn_days) {
27
+ printf "AUTH EXPIRING: %s — %s (%s) expires %s (%d days)\n", $1, $2, $3, $6, diff_days;
28
+ }
29
+ } else if ($4 == "pending") {
30
+ cmd = "date -d \"" $5 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $5 "\" +%s 2>/dev/null";
31
+ cmd | getline submitted_epoch; close(cmd);
32
+ pending_days = (today - submitted_epoch) / 86400;
33
+ if (pending_days >= stale_days) {
34
+ printf "AUTH STUCK PENDING: %s — %s (%s) submitted %s (%d days, no payer decision)\n", $1, $2, $3, $5, pending_days;
35
+ }
36
+ }
37
+ }
38
+ ' "{{prior_auth_csv_path}}"
39
+ variables:
40
+ prior_auth_csv_path:
41
+ default: "./prior-authorizations.csv"
42
+ description: "Path to a CSV with columns: patient_name,procedure,payer,status (pending/approved/denied),submitted_date (YYYY-MM-DD),auth_expiry_date (YYYY-MM-DD, blank if still pending)."
43
+ warn_days_before_expiry:
44
+ default: 14
45
+ description: How many days before an approved auth expires to start warning.
46
+ pending_stale_days:
47
+ default: 10
48
+ description: Days a request can sit pending with no payer decision before it's flagged as stuck.
49
+ compatible_agents: [generic, claude, codex]
50
+ notes: >
51
+ Assumes an already-exported CSV from your billing/prior-auth tracking system rather
52
+ than live EHR or payer-portal access. Read-only — this flags what needs a call to
53
+ the payer, it doesn't submit or chase the request itself.
@@ -0,0 +1,41 @@
1
+ id: staff-cme-credit-tracking
2
+ version: 1
3
+ name: Staff CME Credit Tracking
4
+ description: >
5
+ Checks each clinician's continuing medical education (CME) credit hours
6
+ completed against what's required by their cycle end date and warns
7
+ before anyone falls short. Use this if a provider has ever discovered
8
+ close to renewal that they were short on CME hours needed to keep their
9
+ license active — distinct from license-credential-expiry-check, which
10
+ tracks the license's own expiry date rather than the ongoing education
11
+ requirement to renew it.
12
+ category: healthcare
13
+ tags: [healthcare, cme, compliance, licensing, staff]
14
+ schedule: "0 8 1 * *"
15
+ timezone: "America/New_York"
16
+ runner: shell
17
+ command: >
18
+ today=$(date +%s);
19
+ awk -F',' -v today="$today" -v warn_days="{{warn_days_before_cycle_end}}" '
20
+ NR==1 {next}
21
+ {
22
+ cmd = "date -d \"" $5 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $5 "\" +%s 2>/dev/null";
23
+ cmd | getline cycle_end_epoch; close(cmd);
24
+ diff_days = (cycle_end_epoch - today) / 86400;
25
+ shortfall = ($4 + 0) - ($3 + 0);
26
+ if (diff_days <= warn_days && shortfall > 0) {
27
+ printf "CME SHORTFALL: %s — %d/%d hours completed, %d short, cycle ends %s (%d days)\n", $1, $3, $4, shortfall, $5, diff_days;
28
+ }
29
+ }
30
+ ' "{{cme_tracking_csv_path}}"
31
+ variables:
32
+ cme_tracking_csv_path:
33
+ default: "./staff-cme-credits.csv"
34
+ description: "Path to a CSV with columns: staff_name,license_type,cme_hours_completed,cme_hours_required,cycle_end_date (YYYY-MM-DD)."
35
+ warn_days_before_cycle_end:
36
+ default: 90
37
+ description: How many days before the CME cycle ends to start warning about a shortfall.
38
+ compatible_agents: [generic, claude, codex]
39
+ notes: >
40
+ Assumes a maintained CSV export from your CME tracking or HR/credentialing
41
+ system, updated whenever a provider logs completed CME hours.
@@ -0,0 +1,51 @@
1
+ id: telehealth-session-issue-check
2
+ version: 1
3
+ name: Telehealth Session No-Show/Tech-Failure Check
4
+ description: >
5
+ Reviews recent telehealth appointments for no-shows and technical-failure
6
+ disconnects, and flags patients hitting either problem repeatedly. Use
7
+ this if a telehealth visit has ever quietly failed to happen — patient
8
+ never joined, or the call dropped and was never rebooked — with nobody
9
+ tracking it the way an in-person no-show would normally get tracked.
10
+ category: healthcare
11
+ tags: [healthcare, telehealth, no-show, appointments, patients]
12
+ schedule: "0 18 * * *"
13
+ timezone: "America/New_York"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v lookback="{{lookback_days}}" -v repeat_threshold="{{repeat_issue_threshold}}" '
18
+ NR==1 {next}
19
+ {
20
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
21
+ cmd | getline appt_epoch; close(cmd);
22
+ age_days = (today - appt_epoch) / 86400;
23
+ if (age_days < 0 || age_days > lookback) next;
24
+ if ($3 == "no-show" || $3 == "tech-failure" || $3 == "disconnected") {
25
+ printf "SESSION ISSUE: %s — %s on %s (%s)\n", $1, $3, $2, $4;
26
+ count[$1]++;
27
+ }
28
+ }
29
+ END {
30
+ for (p in count) {
31
+ if (count[p] >= repeat_threshold) {
32
+ printf "REPEAT ISSUE: %s has had %d telehealth issues in the last %d days\n", p, count[p], lookback;
33
+ }
34
+ }
35
+ }
36
+ ' "{{telehealth_sessions_csv_path}}"
37
+ variables:
38
+ telehealth_sessions_csv_path:
39
+ default: "./telehealth-sessions.csv"
40
+ description: "Path to a CSV with columns: patient_name,appointment_date (YYYY-MM-DD),status (completed/no-show/tech-failure/disconnected),provider_name."
41
+ lookback_days:
42
+ default: 7
43
+ description: How many days back to review telehealth sessions.
44
+ repeat_issue_threshold:
45
+ default: 2
46
+ description: Number of session issues within the lookback window before a patient is flagged as a repeat case (may need an in-person alternative offered).
47
+ compatible_agents: [generic, claude, codex]
48
+ notes: >
49
+ Assumes an already-exported CSV from your telehealth platform or scheduling
50
+ system rather than live PHI system access. Read-only — repeat cases are worth
51
+ offering an in-person or phone alternative rather than retrying video indefinitely.
@@ -0,0 +1,43 @@
1
+ id: adr-revpar-tracker
2
+ version: 1
3
+ name: ADR and RevPAR Tracker
4
+ description: >
5
+ Calculates yesterday's average daily rate (ADR) and revenue per
6
+ available room (RevPAR) from your rooms-sold export and flags a drop
7
+ against your target. Use this if a soft revenue night has ever gone
8
+ unnoticed for a week because nobody was watching the daily numbers,
9
+ only the monthly total.
10
+ category: hospitality
11
+ tags: [hospitality, revenue-management, adr, revpar]
12
+ schedule: "0 6 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v target_adr="{{target_adr_usd}}" -v target_revpar="{{target_revpar_usd}}" -v rooms="{{total_rooms}}" '
17
+ NR==1 {next}
18
+ { rooms_sold += 1; revenue += $2 }
19
+ END {
20
+ if (rooms_sold > 0) {
21
+ adr = revenue / rooms_sold;
22
+ revpar = revenue / rooms;
23
+ printf "ADR: $%.2f (target $%.2f) | RevPAR: $%.2f (target $%.2f) | rooms sold: %d/%d\n", adr, target_adr, revpar, target_revpar, rooms_sold, rooms;
24
+ if (adr < target_adr) printf "LOW ADR: $%.2f below target $%.2f\n", adr, target_adr;
25
+ if (revpar < target_revpar) printf "LOW REVPAR: $%.2f below target $%.2f\n", revpar, target_revpar;
26
+ } else print "WARNING: no rooms sold recorded for the date";
27
+ }
28
+ ' "{{rooms_sold_csv}}"
29
+ variables:
30
+ rooms_sold_csv:
31
+ default: "./rooms-sold-yesterday.csv"
32
+ description: "CSV with header row, columns: room_number,rate_paid_usd — one row per room sold yesterday."
33
+ total_rooms:
34
+ default: 100
35
+ description: Total available rooms in the property (denominator for RevPAR).
36
+ target_adr_usd:
37
+ default: 175
38
+ description: Target average daily rate in USD.
39
+ target_revpar_usd:
40
+ default: 120
41
+ description: Target revenue per available room in USD.
42
+ compatible_agents: [generic, claude, codex]
43
+ notes: Export the rooms-sold CSV from your PMS nightly before this runs; ADR = revenue / rooms sold, RevPAR = revenue / total available rooms.
@@ -0,0 +1,21 @@
1
+ id: cancellation-rate-spike-check
2
+ version: 1
3
+ name: Cancellation Rate Spike Check
4
+ description: >
5
+ Checks yesterday's reservation cancellation rate against your trailing
6
+ baseline and flags a spike. Use this if a booking-engine glitch, a rate
7
+ error, or bad local news has ever driven a wave of cancellations that
8
+ wasn't caught until the week's occupancy numbers came in soft.
9
+ category: hospitality
10
+ tags: [hospitality, reservations, cancellations, revenue-management]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ psql "{{database_url}}" -t -c "select round(100.0 * sum(case when status = 'cancelled' then 1 else 0 end) / nullif(count(*), 0), 1) from reservations where booked_date = current_date - interval '1 day';"
16
+ variables:
17
+ database_url:
18
+ default: "postgres://user:pass@host:5432/db"
19
+ description: Connection string for the reservations database.
20
+ compatible_agents: [generic, claude, codex]
21
+ notes: Assumes a `reservations` table with `status` and `booked_date` columns tracking same-day cancellations against bookings made that day — adjust the query for your PMS schema and compare the printed rate against your normal baseline manually. Complements reservation-noshow-check, which tracks no-shows rather than advance cancellations.
@@ -0,0 +1,40 @@
1
+ id: group-booking-space-utilization-check
2
+ version: 1
3
+ name: Group Booking and Event Space Utilization Check
4
+ description: >
5
+ Reviews upcoming event space bookings against total bookable hours for
6
+ the week and flags rooms sitting mostly empty, plus any booking missing
7
+ a signed contract or deposit close to the event date. Use this if event
8
+ space has ever gone underbooked for weeks with nobody noticing until
9
+ the sales team reviewed the quarter.
10
+ category: hospitality
11
+ tags: [hospitality, events, group-sales, revenue-management]
12
+ schedule: "0 7 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Pull the event space booking calendar from {{events_system}} for the
17
+ next {{lookback_weeks}} weeks.
18
+ 1. Calculate utilization percentage (booked hours / bookable hours) per
19
+ event space/room, and flag any space below {{min_utilization_pct}}%.
20
+ 2. List any booking within {{deposit_deadline_days}} days of its event
21
+ date that's still missing a signed contract or deposit.
22
+ 3. Note any space with a pattern of last-minute cancellations, since
23
+ that's worth a stricter deposit policy.
24
+ 4. Suggest one action for the most underbooked space (promo, package
25
+ deal, or reallocating it to guest room inventory for that period).
26
+ variables:
27
+ events_system:
28
+ default: "your events/catering management system"
29
+ description: System tracking event space bookings (e.g. "Cvent", "Tripleseat", "Delphi").
30
+ lookback_weeks:
31
+ default: 4
32
+ description: How many weeks ahead to review bookings.
33
+ min_utilization_pct:
34
+ default: 40
35
+ description: Utilization percentage below which a space is flagged as underbooked.
36
+ deposit_deadline_days:
37
+ default: 14
38
+ description: Days before an event that a missing contract/deposit becomes urgent.
39
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
40
+ notes: Utilization targets vary a lot by property size and market — adjust min_utilization_pct to your historical baseline rather than a generic number.
@@ -0,0 +1,34 @@
1
+ id: guest-complaint-sla-tracker
2
+ version: 1
3
+ name: Guest Complaint Resolution SLA Tracker
4
+ description: >
5
+ Checks logged guest complaints (not maintenance requests) against your
6
+ resolution SLA and flags any still open past the deadline. Use this if
7
+ a service complaint has ever sat unresolved long enough that the guest
8
+ checked out still angry, instead of getting a recovery gesture while
9
+ they were still on property.
10
+ category: hospitality
11
+ tags: [hospitality, guest-experience, complaints, sla]
12
+ schedule: "0 */4 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v hours="{{sla_hours}}" '
17
+ NR==1 {next}
18
+ $3 == "open" {
19
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f \"%Y-%m-%d %H:%M\" \"" $2 "\" +%s 2>/dev/null";
20
+ cmd | getline logged_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ age_hours = (now_epoch - logged_epoch) / 3600;
23
+ if (age_hours >= hours) printf "OVERDUE: room %s — %s (open %d hrs, category: %s)\n", $1, $4, age_hours, $5;
24
+ }
25
+ ' "{{complaints_csv_path}}"
26
+ variables:
27
+ complaints_csv_path:
28
+ default: "./guest-complaints.csv"
29
+ description: "CSV with columns: room_number,logged_at (YYYY-MM-DD HH:MM),status (open/closed),summary,category (noise/cleanliness/service/billing/other)."
30
+ sla_hours:
31
+ default: 2
32
+ description: Target hours to resolve or acknowledge a guest complaint before it's flagged overdue.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: Distinct from guest-maintenance-request-backlog-check — this tracks service/experience complaints logged by front desk or guest services, not physical repair tickets.
@@ -0,0 +1,41 @@
1
+ id: guest-satisfaction-score-monitor
2
+ version: 1
3
+ name: Guest Satisfaction Score Monitor
4
+ description: >
5
+ Tracks your rolling average guest satisfaction score (post-stay survey
6
+ or aggregated review rating) and flags a meaningful drop against your
7
+ trailing baseline. Use this if satisfaction has ever slid gradually
8
+ over several weeks without triggering any single alarm, until it shows
9
+ up as a rate hit in the OTA ranking algorithm.
10
+ category: hospitality
11
+ tags: [hospitality, guest-experience, satisfaction, reputation]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v window="{{trailing_weeks}}" -v drop="{{alert_drop_points}}" '
17
+ NR==1 {next}
18
+ { scores[NR-1]=$2; dates[NR-1]=$1; n=NR-1 }
19
+ END {
20
+ if (n < window*2) { print "Not enough data yet for a trailing comparison"; exit 0; }
21
+ recent_sum=0; baseline_sum=0;
22
+ for (i=n-window+1; i<=n; i++) recent_sum += scores[i];
23
+ for (i=n-window*2+1; i<=n-window; i++) baseline_sum += scores[i];
24
+ recent_avg = recent_sum/window; baseline_avg = baseline_sum/window;
25
+ diff = baseline_avg - recent_avg;
26
+ printf "Recent %d-week avg: %.2f | Prior %d-week avg: %.2f\n", window, recent_avg, window, baseline_avg;
27
+ if (diff >= drop) printf "ALERT: satisfaction dropped %.2f points (threshold %.2f)\n", diff, drop;
28
+ }
29
+ ' "{{weekly_scores_csv}}"
30
+ variables:
31
+ weekly_scores_csv:
32
+ default: "./weekly-satisfaction-scores.csv"
33
+ description: "CSV with header row, columns: week_start_date,avg_score — one row per week, oldest first, ordered chronologically."
34
+ trailing_weeks:
35
+ default: 4
36
+ description: Number of weeks in each comparison window (recent vs. prior).
37
+ alert_drop_points:
38
+ default: 0.3
39
+ description: Point drop (on your survey's scale) between the two windows that triggers an alert.
40
+ compatible_agents: [generic, claude, codex]
41
+ notes: Score scale depends on your source (5-point survey, 10-point NPS-style, or 100-point aggregate) — keep alert_drop_points proportional to whatever scale weekly-satisfaction-scores.csv uses. Complements guest-review-response-check, which handles individual review replies rather than the trend.
@@ -0,0 +1,35 @@
1
+ id: linen-inventory-turnover-check
2
+ version: 1
3
+ name: Linen and Laundry Inventory Turnover Check
4
+ description: >
5
+ Checks par levels for linens (sheets, towels, robes) against current
6
+ counted stock and flags anything below par or showing an unusually
7
+ high loss/shrink rate versus rooms serviced. Use this if a linen
8
+ shortage has ever forced housekeeping to hold rooms because nobody
9
+ reordered before the closet ran low.
10
+ category: hospitality
11
+ tags: [hospitality, housekeeping, inventory, laundry]
12
+ schedule: "0 6 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v shrink_pct="{{max_shrink_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ item=$1; par=$2; on_hand=$3; sent_to_laundry=$4; returned=$5;
20
+ if (on_hand < par) printf "BELOW PAR: %s — %d on hand, par %d\n", item, on_hand, par;
21
+ if (sent_to_laundry > 0) {
22
+ loss_pct = ((sent_to_laundry - returned) / sent_to_laundry) * 100;
23
+ if (loss_pct > shrink_pct) printf "HIGH SHRINK: %s — sent %d, returned %d (%.1f%% loss, threshold %.0f%%)\n", item, sent_to_laundry, returned, loss_pct, shrink_pct;
24
+ }
25
+ }
26
+ ' "{{linen_inventory_csv}}"
27
+ variables:
28
+ linen_inventory_csv:
29
+ default: "./linen-inventory.csv"
30
+ description: "CSV with header row, columns: item_name,par_level,on_hand_count,sent_to_laundry_count,returned_count — one row per linen category (sheets, towels, robes, etc.)."
31
+ max_shrink_pct:
32
+ default: 5
33
+ description: Acceptable loss percentage between linens sent to laundry and returned before it's flagged.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Count on a consistent cycle (weekly recommended) so par-level and shrink comparisons are apples to apples; persistent high shrink on one item often points to an outside laundry vendor issue.
@@ -0,0 +1,33 @@
1
+ id: loyalty-points-reconciliation-check
2
+ version: 1
3
+ name: Loyalty Program Points Reconciliation Check
4
+ description: >
5
+ Compares points earned per stay against your program's accrual rate
6
+ and flags stays where the posted points don't match, plus any member
7
+ who crossed a tier threshold but hasn't been re-tiered yet. Use this
8
+ if a loyalty member has ever been shorted points from a PMS integration
9
+ glitch, or hit Gold status and kept getting Silver-level perks for months.
10
+ category: hospitality
11
+ tags: [hospitality, loyalty-program, guest-experience, revenue-assurance]
12
+ schedule: "0 8 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v rate="{{points_per_dollar}}" '
17
+ NR==1 {next}
18
+ {
19
+ expected = $3 * rate;
20
+ diff = $4 - expected;
21
+ if (diff < 0) diff = -diff;
22
+ if (diff > 1) printf "MISMATCH: member %s, stay %s — expected %.0f pts, posted %.0f pts\n", $1, $2, expected, $4;
23
+ }
24
+ ' "{{stays_points_csv}}"
25
+ variables:
26
+ stays_points_csv:
27
+ default: "./loyalty-stays-points.csv"
28
+ description: "CSV with header row, columns: member_id,folio_id,eligible_spend_usd,points_posted."
29
+ points_per_dollar:
30
+ default: 10
31
+ description: Program's points-earned-per-dollar-spent accrual rate.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Tier-threshold re-classification is a separate check worth pairing with this — export current tier alongside year-to-date qualifying nights/spend and compare against your program's tier cutoffs.