@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.
- package/README.md +20 -30
- package/catalog.json +3052 -81
- 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/fieldservice/maintenance-contract-renewal-check.yaml +36 -0
- package/jobs/fieldservice/parts-low-stock-reorder-check.yaml +29 -0
- package/jobs/fieldservice/tech-eta-no-show-check.yaml +32 -0
- package/jobs/fieldservice/tech-license-renewal-check.yaml +36 -0
- package/jobs/fieldservice/unpaid-invoice-aging-check.yaml +35 -0
- package/jobs/fieldservice/unresolved-callback-tracker.yaml +35 -0
- package/jobs/fieldservice/warranty-claim-expiry-check.yaml +35 -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/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/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/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/publishing/arc-review-copy-followup.yaml +35 -0
- package/jobs/publishing/isbn-registration-tracker.yaml +35 -0
- package/jobs/publishing/manuscript-deadline-tracker.yaml +34 -0
- package/jobs/publishing/permissions-clearance-tracker.yaml +36 -0
- package/jobs/publishing/print-run-reorder-threshold-check.yaml +32 -0
- package/jobs/publishing/rights-license-expiry-check.yaml +35 -0
- package/jobs/publishing/royalty-statement-due-check.yaml +33 -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/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/spa/appointment-no-show-tracker.yaml +46 -0
- package/jobs/spa/gift-card-expiry-check.yaml +35 -0
- package/jobs/spa/license-renewal-tracker.yaml +35 -0
- package/jobs/spa/membership-unused-session-expiry-check.yaml +35 -0
- package/jobs/spa/product-chemical-expiry-check.yaml +35 -0
- package/jobs/spa/retail-product-low-stock-check.yaml +26 -0
- package/jobs/spa/safety-inspection-due-reminder.yaml +33 -0
- package/jobs/telecom/circuit-outage-detection.yaml +38 -0
- package/jobs/telecom/circuit-provisioning-order-aging.yaml +36 -0
- package/jobs/telecom/cpe-firmware-update-tracker.yaml +45 -0
- package/jobs/telecom/link-capacity-threshold-alert.yaml +37 -0
- package/jobs/telecom/peering-transit-contract-renewal-check.yaml +36 -0
- package/jobs/telecom/service-ticket-churn-risk-review.yaml +56 -0
- package/jobs/telecom/sla-uptime-breach-tracker.yaml +36 -0
- package/lib/category-descriptions.js +4 -0
- package/lib/duplicates-allowlist.js +10 -0
- 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.
|