@wonsukchoi/crondex 0.20.1 → 0.22.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 (121) hide show
  1. package/README.md +20 -30
  2. package/catalog.json +3052 -81
  3. package/jobs/ecommerce/affiliate-commission-payout-check.yaml +38 -0
  4. package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
  5. package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
  6. package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
  7. package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
  8. package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
  9. package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
  10. package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
  11. package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
  12. package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
  13. package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
  14. package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
  15. package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
  16. package/jobs/fieldservice/maintenance-contract-renewal-check.yaml +36 -0
  17. package/jobs/fieldservice/parts-low-stock-reorder-check.yaml +29 -0
  18. package/jobs/fieldservice/tech-eta-no-show-check.yaml +32 -0
  19. package/jobs/fieldservice/tech-license-renewal-check.yaml +36 -0
  20. package/jobs/fieldservice/unpaid-invoice-aging-check.yaml +35 -0
  21. package/jobs/fieldservice/unresolved-callback-tracker.yaml +35 -0
  22. package/jobs/fieldservice/warranty-claim-expiry-check.yaml +35 -0
  23. package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
  24. package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
  25. package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
  26. package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
  27. package/jobs/finance/credit-utilization-watch.yaml +40 -0
  28. package/jobs/finance/duplicate-payment-detection.yaml +43 -0
  29. package/jobs/finance/expense-report-compliance-check.yaml +46 -0
  30. package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
  31. package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
  32. package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
  33. package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
  34. package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
  35. package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
  36. package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
  37. package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
  38. package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
  39. package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
  40. package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
  41. package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
  42. package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
  43. package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
  44. package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
  45. package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
  46. package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
  47. package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
  48. package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
  49. package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
  50. package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
  51. package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
  52. package/jobs/hr/compliance-training-completion-check.yaml +41 -0
  53. package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
  54. package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
  55. package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
  56. package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
  57. package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
  58. package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
  59. package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
  60. package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
  61. package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
  62. package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
  63. package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
  64. package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
  65. package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
  66. package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
  67. package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
  68. package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
  69. package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
  70. package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
  71. package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
  72. package/jobs/legal/trademark-infringement-watch.yaml +43 -0
  73. package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
  74. package/jobs/publishing/arc-review-copy-followup.yaml +35 -0
  75. package/jobs/publishing/isbn-registration-tracker.yaml +35 -0
  76. package/jobs/publishing/manuscript-deadline-tracker.yaml +34 -0
  77. package/jobs/publishing/permissions-clearance-tracker.yaml +36 -0
  78. package/jobs/publishing/print-run-reorder-threshold-check.yaml +32 -0
  79. package/jobs/publishing/rights-license-expiry-check.yaml +35 -0
  80. package/jobs/publishing/royalty-statement-due-check.yaml +33 -0
  81. package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
  82. package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
  83. package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
  84. package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
  85. package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
  86. package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
  87. package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
  88. package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
  89. package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
  90. package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
  91. package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
  92. package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
  93. package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
  94. package/jobs/sales/champion-departure-watch.yaml +44 -0
  95. package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
  96. package/jobs/sales/commission-payout-tracker.yaml +32 -0
  97. package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
  98. package/jobs/sales/discount-approval-pending-check.yaml +31 -0
  99. package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
  100. package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
  101. package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
  102. package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
  103. package/jobs/sales/referral-followup-tracker.yaml +40 -0
  104. package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
  105. package/jobs/spa/appointment-no-show-tracker.yaml +46 -0
  106. package/jobs/spa/gift-card-expiry-check.yaml +35 -0
  107. package/jobs/spa/license-renewal-tracker.yaml +35 -0
  108. package/jobs/spa/membership-unused-session-expiry-check.yaml +35 -0
  109. package/jobs/spa/product-chemical-expiry-check.yaml +35 -0
  110. package/jobs/spa/retail-product-low-stock-check.yaml +26 -0
  111. package/jobs/spa/safety-inspection-due-reminder.yaml +33 -0
  112. package/jobs/telecom/circuit-outage-detection.yaml +38 -0
  113. package/jobs/telecom/circuit-provisioning-order-aging.yaml +36 -0
  114. package/jobs/telecom/cpe-firmware-update-tracker.yaml +45 -0
  115. package/jobs/telecom/link-capacity-threshold-alert.yaml +37 -0
  116. package/jobs/telecom/peering-transit-contract-renewal-check.yaml +36 -0
  117. package/jobs/telecom/service-ticket-churn-risk-review.yaml +56 -0
  118. package/jobs/telecom/sla-uptime-breach-tracker.yaml +36 -0
  119. package/lib/category-descriptions.js +4 -0
  120. package/lib/duplicates-allowlist.js +10 -0
  121. package/package.json +2 -2
@@ -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,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.
@@ -0,0 +1,40 @@
1
+ id: retirement-plan-enrollment-deadline-check
2
+ version: 1
3
+ name: Retirement Plan Enrollment Deadline Check
4
+ description: >
5
+ Flags employees who are eligible for the 401(k)/retirement plan but
6
+ haven't enrolled or waived as their enrollment deadline approaches. Use
7
+ this if someone has ever missed the window to make an active election
8
+ and got dropped into a default auto-enrollment deferral rate they didn't
9
+ actually want.
10
+ category: hr
11
+ tags: [hr, retirement, 401k, benefits, 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 "ENROLLMENT DEADLINE: %s — eligible since %s, deadline %s (%d days), no election on file\n", $1, $2, $3, diff_days;
26
+ }
27
+ }
28
+ ' "{{retirement_tracking_csv_path}}"
29
+ variables:
30
+ retirement_tracking_csv_path:
31
+ default: "./retirement-plan-tracking.csv"
32
+ description: "Path to a CSV with columns: employee_name,eligibility_date (YYYY-MM-DD),enrollment_deadline (YYYY-MM-DD),election_status (enrolled/waived, blank if no election yet)."
33
+ warn_days_before:
34
+ default: 14
35
+ description: How many days before the enrollment deadline to start warning.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Many plans auto-enroll non-responders at a default deferral rate after
39
+ the deadline rather than defaulting to no contribution — confirm your
40
+ plan document's actual default behavior rather than assuming.
@@ -0,0 +1,42 @@
1
+ id: workers-comp-claim-status-check
2
+ version: 1
3
+ name: Workers' Comp Claim Status Check
4
+ description: >
5
+ Checks open workers' compensation claims with the carrier and flags ones
6
+ that have gone quiet or are approaching an expected return-to-work date
7
+ with no update. Use this if an injured employee's claim has ever
8
+ stalled with the carrier for weeks with nobody at the company noticing
9
+ or following up.
10
+ category: hr
11
+ tags: [hr, workers-comp, compliance, safety]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Check {{wc_carrier}} for open workers' compensation claims and
17
+ cross-reference against {{hris_system}} for each claimant's expected
18
+ return-to-work date, if any.
19
+ 1. List each open claim: employee name, date of injury, days since last
20
+ status update, and expected return date (if set).
21
+ 2. Flag any claim with no status update in the last {{stale_days}} days,
22
+ or with a return date within {{escalate_within_days}} days and no
23
+ recent update, as needing a follow-up call with the carrier.
24
+ 3. If everything is progressing normally, say so in one line.
25
+ variables:
26
+ wc_carrier:
27
+ default: "your workers' compensation carrier/TPA"
28
+ description: Where claim status is tracked (the insurance carrier or third-party administrator portal).
29
+ hris_system:
30
+ default: "your HRIS"
31
+ description: Where employee return-to-work dates and leave status are recorded.
32
+ stale_days:
33
+ default: 14
34
+ description: Days with no status update before a claim is flagged as stalled.
35
+ escalate_within_days:
36
+ default: 7
37
+ description: Days before an expected return date at which a claim with no recent update becomes urgent.
38
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
39
+ notes: >
40
+ Read-only status check — actually contacting the carrier, adjusting
41
+ duties, or making return-to-work decisions is for HR/legal/safety to
42
+ handle. No generic script mode since carrier portals vary widely.
@@ -0,0 +1,38 @@
1
+ id: conflict-of-interest-check-tracker
2
+ version: 1
3
+ name: Conflict-of-Interest Check Tracker
4
+ description: >
5
+ Checks new matters or clients waiting on a conflict-of-interest clearance
6
+ and flags any that have sat unresolved past a set number of days. Use
7
+ this if a new engagement has ever started before the conflicts check
8
+ actually cleared, because the request got sent and then forgotten.
9
+ category: legal
10
+ tags: [legal, conflicts-check, intake, compliance]
11
+ schedule: "0 9 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{overdue_days}}" '
16
+ NR==1 {next}
17
+ $4 == "pending" {
18
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
19
+ cmd | getline requested_epoch; close(cmd);
20
+ "date +%s" | getline now_epoch; close("date +%s");
21
+ pending_days = (now_epoch - requested_epoch) / 86400;
22
+ if (pending_days >= days) {
23
+ printf "CONFLICTS CHECK PENDING: %s (matter: %s) — requested %s (%d days ago)\n", $1, $2, $3, pending_days;
24
+ }
25
+ }
26
+ ' "{{conflicts_csv_path}}"
27
+ variables:
28
+ conflicts_csv_path:
29
+ default: "./conflict-checks.csv"
30
+ description: "Path to a CSV with columns: client_or_matter_name,proposed_matter,check_requested_date (YYYY-MM-DD),status (pending/cleared/conflict-identified)."
31
+ overdue_days:
32
+ default: 2
33
+ description: Days a conflicts check can remain pending before it's flagged.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ This tracks whether a conflicts check was run and resolved before
37
+ engagement start — it does not run the conflicts search itself, which
38
+ depends on your practice management/conflicts database.