HRTech and Workforce SaaS vendors process the most legally sensitive employment data in the economy: overtime calculations that determine back-pay exposure in collective actions, COBRA qualifying events that trigger strict federal notice windows, WARN Act headcount thresholds that mandate 60-day advance layoff notices, and accommodation requests that start an ADA interactive process with no explicit deadline — where silence itself is a violation.
The federal and state employment law framework for this vertical spans six distinct statutes, each with its own enforcement agency, its own penalty structure, and its own specific clock. The automation challenge is not just reminders — it is building workflows that stay inside the litigation privilege boundary when those clocks start running.
The Six Regulations
FLSA (29 USC §207) is the Fair Labor Standards Act. Section 207 requires non-exempt employees to receive 1.5x their regular rate for all hours over 40 per workweek. The 'regular rate' includes non-discretionary bonuses and shift differentials — not just base hourly pay. DOL's Wage and Hour Division enforces FLSA through investigations and civil money penalties. Private plaintiffs bring collective actions under 29 USC §216(b). The statute of limitations is 2 years (3 years for willful violations). Liquidated damages equal 100% of unpaid wages.
NLRA (29 USC §151) is the National Labor Relations Act. Section 7 protects employees' rights to organize, collectively bargain, and engage in concerted activity. Section 8 defines unfair labor practices — including employer interference with organizing (§8(a)(1)) and discrimination for union activity (§8(a)(3)). The NLRA applies even to non-union workplaces. NLRA charges have a 6-month statute of limitations (29 USC §160(b)).
WARN Act (29 USC §2101) requires covered employers (100+ employees) to give 60 calendar days advance written notice before plant closings (50+ employees) or mass layoffs (500+ employees, or 50-499 employees if representing 33%+ of the workforce at a single site). Notice goes to affected employees, the state dislocated worker unit, and the chief elected local official. Ten states have 'mini-WARN' laws with different thresholds — California, New York, and New Jersey have the most significant requirements.
ERISA (29 USC §1001) governs employee benefit plans. The COBRA continuation coverage requirements (29 USC §1161-1168) impose strict notice timelines: employer must notify plan administrator within 14 days of a qualifying event; plan administrator must notify the qualified beneficiary within 44 days total. Penalty for late COBRA notice: $110/day per qualified beneficiary under ERISA §502(c)(1), plus IRS excise taxes under IRC §4980B. Form 5500 must be filed annually by July 31 (calendar year plans) with a $250/day late filing penalty.
ADA Title I (42 USC §12112) prohibits employment discrimination against qualified individuals with disabilities and requires employers to provide reasonable accommodations unless doing so would cause undue hardship. When an employee requests an accommodation, courts require employers to engage promptly in an 'interactive process' — identifying the functional limitation, exploring accommodation options, and documenting each step. There is no fixed statutory deadline for the interactive process, but courts have found that unreasonable delays (typically 30+ days without meaningful engagement) are themselves ADA violations.
EEOC (Title VII, ADA, ADEA, EPA) enforces federal anti-discrimination laws. When an EEOC charge is filed, employers typically have 30 days to submit a Position Statement. The investigation clock varies: charges can remain open for 180-300 days before EEOC issues a right-to-sue letter. Federal contractors must file EEO-1 Component 1 reports annually.
The Cloud iPaaS Risk: FLSA §207 Overtime Records as a Subpoena Target
The sharpest compliance argument for self-hosted automation in HRTech is not privacy — it is litigation privilege.
When an FLSA collective action is filed, plaintiff counsel immediately serves discovery requests and third-party subpoenas. If your cloud iPaaS processes overtime calculations, pay period aggregations, or time record normalization for your customers, it is an external party in possession of those records — outside your customers' litigation privilege boundary.
What that means operationally:
- Plaintiff counsel can subpoena your iPaaS vendor directly, bypassing the employer's legal team entirely.
- The iPaaS vendor receives the subpoena, and under most terms of service, they have no obligation to notify the employer before producing records.
- The employer discovers the subpoena after production — at which point their ability to assert privilege over produced records is substantially compromised.
- DOL Civil Money Penalty subpoenas work the same way: the agency can subpoena a cloud vendor that processes covered payroll data without the employer's knowledge.
Self-hosted n8n changes this architecture. Overtime calculations, pay period aggregations, FLSA-covered time records, and the workflow execution logs documenting how those calculations were run stay inside the employer's infrastructure. One privilege boundary. One litigation hold scope. No external vendor receiving subpoenas for payroll data you process on behalf of your customers.
For enterprise HRIS vendors, payroll SaaS companies, and workforce management platforms whose enterprise customers have legal teams and FLSA litigation exposure, this is a procurement-level concern — not a security checkbox.
Customer Tiers
| Tier | Description | Primary Compliance Driver |
|---|---|---|
| ENTERPRISE_HRIS_PLATFORM | Workday, SAP SuccessFactors, Oracle HCM | FLSA §207 subpoena risk + ERISA §606 COBRA |
| PAYROLL_SAAS_VENDOR | ADP, Paychex, Rippling, Gusto | FLSA overtime calculation + state wage laws |
| TALENT_ACQUISITION_SAAS | Greenhouse, Lever, iCIMS, SmartRecruiters | EEOC Uniform Guidelines + ADA Title I screening |
| WORKFORCE_MANAGEMENT_SAAS | UKG, Deputy, Workforce.com | FLSA time records + WARN Act threshold monitoring |
| EMPLOYEE_BENEFITS_SAAS | Benefitfocus, PlanSource, Businessolver | ERISA COBRA notice windows + Form 5500 |
| LEARNING_MANAGEMENT_SAAS | Cornerstone, Docebo, TalentLMS | ADA Title I accommodation documentation |
| HRTECH_STARTUP | Pre-enterprise HR tools | I-9 verification + basic FLSA + ADA |
Workflow 1: Tier-Segmented Compliance Onboarding Drip
A webhook fires when a new customer signs up. The Switch node routes by tier and compliance flag — enterprise HRIS platforms receive the FLSA §207 subpoena exposure brief on Day 0, payroll SaaS vendors receive the regular rate calculation and state law overlay brief, talent acquisition tools receive the EEOC Uniform Guidelines and ADA Title I screening brief, WARN-applicable employers receive the 60-day advance notice brief.
{
"name": "HRTech Tier-Segmented Compliance Onboarding Drip",
"nodes": [
{
"id": "wh1",
"name": "Customer Signed Up",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
],
"parameters": {
"path": "hrtech-onboarding",
"responseMode": "responseNode"
}
},
{
"id": "res1",
"name": "Respond 200",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
440,
180
],
"parameters": {
"responseCode": 200,
"responseData": "allEntries"
}
},
{
"id": "sw1",
"name": "Segment by Compliance Tier",
"type": "n8n-nodes-base.switch",
"typeVersion": 3,
"position": [
640,
300
],
"parameters": {
"mode": "rules",
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.tier }}",
"rightValue": "ENTERPRISE_HRIS_PLATFORM",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "ENTERPRISE_HRIS"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.tier }}",
"rightValue": "PAYROLL_SAAS_VENDOR",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "PAYROLL"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.tier }}",
"rightValue": "TALENT_ACQUISITION_SAAS",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "TALENT_ACQ"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.flags.warn_act_applicable }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "true"
}
}
]
},
"renameOutput": true,
"outputKey": "WARN_ACT"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.tier }}",
"rightValue": "HRTECH_STARTUP",
"operator": {
"type": "string",
"operation": "notEquals"
}
}
]
},
"renameOutput": true,
"outputKey": "DEFAULT"
}
]
}
}
},
{
"id": "em_hris",
"name": "Day 0 \u2014 FLSA Overtime Record Subpoena Risk",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
100
],
"parameters": {
"fromEmail": "compliance@yourhrissaas.com",
"toEmail": "={{ $json.admin_email }}",
"subject": "[HRisSaaS] FLSA \u00a7207 Overtime Records \u2014 Your Cloud iPaaS Is a DOL Subpoena Target",
"emailType": "text",
"message": "Hi {{ $json.company_name }},\n\nWelcome to the enterprise tier. As an HRIS platform processing overtime calculations for covered employers, your workflow automation touches data that carries one of the highest litigation risks in employment law.\n\nThe FLSA \u00a7207 subpoena exposure:\nWhen a collective action is filed under 29 USC \u00a7216(b), plaintiff counsel immediately subpoenas all pay records, time records, and overtime calculation records. If your cloud iPaaS processes these records, the vendor's servers are a subpoena target independent of your legal hold.\n\nCloud iPaaS risk: your automation vendor's infrastructure is outside your litigation privilege boundary. A DOL Civil Money Penalty subpoena or plaintiff class counsel subpoena can reach your iPaaS vendor directly \u2014 bypassing your legal team entirely.\n\nSelf-hosted n8n: overtime calculations, pay period aggregations, and FLSA-covered time data stay inside your infrastructure. One privilege boundary. One litigation hold scope. No external vendor receiving subpoenas for your customers' payroll data.\n\nFLSA retention requirements:\n- 29 CFR \u00a7516.5(a): basic employee records \u2014 minimum 3 years\n- 29 CFR \u00a7516.6(a): supplementary basic records \u2014 minimum 2 years\n- DOL can go back 3 years in liquidated damages calculations, 5+ years in willful violation cases\n\nYour FLSA compliance workflows: https://stripeai.gumroad.com\n\nHRisSaaS Compliance Team"
}
},
{
"id": "em_payroll",
"name": "Day 0 \u2014 FLSA Wage & Hour + State Law Overlay",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
240
],
"parameters": {
"fromEmail": "compliance@yourpayrollsaas.com",
"toEmail": "={{ $json.admin_email }}",
"subject": "[PayrollSaaS] FLSA \u00a7207 + State Wage Laws \u2014 Payroll Automation Compliance Brief",
"emailType": "text",
"message": "Hi {{ $json.company_name }},\n\nAs a payroll SaaS vendor, your workflows calculate FLSA-covered overtime, withhold taxes, and generate W-2/1099 forms. Multiple overlapping federal and state obligations apply.\n\nFLSA \u00a7207 overtime: non-exempt employees must receive 1.5x their regular rate for all hours over 40 per workweek. The 'regular rate' calculation includes non-discretionary bonuses, shift differentials, and commissions \u2014 not just base hourly rate. Automation errors in regular rate calculation are a common DOL finding.\n\nState law overlay: 29 states have overtime or wage laws stricter than FLSA. California: daily overtime after 8h + double time after 12h + 7th consecutive day rules (Lab. Code \u00a7510). New York: spread-of-hours premium. Colorado: daily overtime. Your payroll automation must handle state-specific rules, not just federal FLSA.\n\nDOL investigation trigger: payroll SaaS platforms appear in WHD investigation records when systematic underpayment is discovered. A single misconfigured workflow affecting 1,000 employees at $50/week underpayment = $2.6M annual FLSA exposure.\n\nYour payroll compliance workflows: https://stripeai.gumroad.com\n\nPayrollSaaS Compliance Team"
}
},
{
"id": "em_talent",
"name": "Day 0 \u2014 EEOC + ADA Title I Compliance Brief",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
380
],
"parameters": {
"fromEmail": "compliance@youratalentsaas.com",
"toEmail": "={{ $json.admin_email }}",
"subject": "[TalentSaaS] EEOC + ADA Title I \u2014 Hiring Automation Compliance Brief",
"emailType": "text",
"message": "Hi {{ $json.company_name }},\n\nAs a talent acquisition SaaS vendor, your workflows automate sourcing, screening, scoring, and interview scheduling. Several federal laws create specific obligations for automated hiring tools.\n\nEEOC automated assessment guidance: In January 2023, the EEOC issued guidance on the use of automated systems in hiring. Employers using AI-powered screening must conduct adverse impact analysis under the Uniform Guidelines on Employee Selection Procedures (29 CFR \u00a71607). If your screening algorithm has disparate impact on a protected class (race, sex, national origin), EEOC can file a pattern-or-practice discrimination charge.\n\nADA Title I and automated screening: per ADA 42 USC \u00a712112(b)(6), qualification standards that 'tend to screen out individuals with disabilities' are prohibited unless job-related and consistent with business necessity. AI screening tools that penalize gaps in work history (often a disability accommodation signal) may violate Title I.\n\nEEOC charge timeline: employers typically have 30 days to submit a Position Statement after EEOC notifies them of a charge. Automated record retrieval workflows reduce the cost of that response significantly.\n\nYour talent compliance workflows: https://stripeai.gumroad.com\n\nTalentSaaS Compliance Team"
}
},
{
"id": "em_warn",
"name": "Day 0 \u2014 WARN Act 60-Day Advance Notice Obligation",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
520
],
"parameters": {
"fromEmail": "compliance@yourworkforcesaas.com",
"toEmail": "={{ $json.admin_email }}",
"subject": "[WorkforceSaaS] WARN Act 29 USC \u00a72101 \u2014 60-Day Advance Notice Requirements for Enterprise Clients",
"emailType": "text",
"message": "Hi {{ $json.company_name }},\n\nAs a workforce management SaaS serving employers with 100+ employees, your platform likely handles RIF planning, headcount tracking, and org restructuring workflows. The WARN Act (29 USC \u00a72101) creates hard notice requirements you should build into your automation architecture.\n\nWARN Act triggers:\n- Plant closing: shutdown of employment site affecting 50+ employees during any 30-day period\n- Mass layoff: reduction of 500+ employees OR 50-499 employees representing 33%+ of the workforce at a single site\n- Required notice: 60 calendar days advance written notice to affected employees, state dislocated worker unit, and chief elected local official\n\nState WARN laws: 10 states have mini-WARN laws with different thresholds or longer notice periods. California: 75+ employees at covered establishment, 30+ affected workers (Lab. Code \u00a71400). New York: 25 employees affected (NY Lab. Law \u00a7860). New Jersey: 100+ employees, 50+ affected (NJ WARN Act). Illinois, Maryland, Hawaii, New Hampshire, Maine, Iowa also have state WARN requirements.\n\nPenalty: back pay + benefits for each day of WARN violation up to 60 days + $500/day civil penalty per day of local government notice violation.\n\nYour WARN Act monitoring workflows: https://stripeai.gumroad.com\n\nWorkforceSaaS Compliance Team"
}
},
{
"id": "em_default",
"name": "Day 0 \u2014 HRTech General Compliance Welcome",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
660
],
"parameters": {
"fromEmail": "onboarding@yourhrtsaas.com",
"toEmail": "={{ $json.admin_email }}",
"subject": "Welcome to HRTechSaaS \u2014 Your Workforce Compliance Automation Is Ready",
"emailType": "text",
"message": "Hi {{ $json.company_name }},\n\nWelcome. Your workforce compliance automation platform is active.\n\nAs an HRTech company, your workflows touch employee PII, compensation data, performance records, and benefits elections. Multiple federal laws govern how this data must be handled, retained, and protected.\n\nKey obligations your automation covers:\n- FLSA \u00a7207: overtime record retention (29 CFR \u00a7516) and wage calculation accuracy\n- ERISA \u00a7606: COBRA qualifying event notice within 44 days\n- ADA Title I: reasonable accommodation interactive process documentation\n- EEOC: position statement response within 30 days of charge notification\n- I-9: employment eligibility verification within 3 business days of first day\n\nSetup guide: https://stripeai.gumroad.com\n\nHRTechSaaS Team"
}
}
],
"connections": {
"Customer Signed Up": {
"main": [
[
{
"node": "Respond 200",
"type": "main",
"index": 0
},
{
"node": "Segment by Compliance Tier",
"type": "main",
"index": 0
}
]
]
},
"Segment by Compliance Tier": {
"main": [
[
{
"node": "Day 0 \u2014 FLSA Overtime Record Subpoena Risk",
"type": "main",
"index": 0
}
],
[
{
"node": "Day 0 \u2014 FLSA Wage & Hour + State Law Overlay",
"type": "main",
"index": 0
}
],
[
{
"node": "Day 0 \u2014 EEOC + ADA Title I Compliance Brief",
"type": "main",
"index": 0
}
],
[
{
"node": "Day 0 \u2014 WARN Act 60-Day Advance Notice Obligation",
"type": "main",
"index": 0
}
],
[
{
"node": "Day 0 \u2014 HRTech General Compliance Welcome",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 2: FLSA / ERISA / WARN Act / EEOC / ADA Compliance Deadline Tracker
A Code node builds a compliance deadline schedule based on the employer's flags and headcount. Returns 12 deadline types: FLSA 3-year and 2-year record retention audits, ERISA COBRA 14-day and 44-day windows, DOL Form 5500 annual filing, WARN Act 60-day notice countdown, state mini-WARN check, EEOC EEO-1 annual report, EEOC position statement 30-day window, ADA interactive process escalation, SOC 2 Type II renewal, OSHA 300A annual posting (February 1 through April 30), and I-9 3-business-day verification. Each deadline includes a self_hosting_note documenting the specific litigation privilege or data containment benefit.
{
"name": "HRTech Compliance Deadline Tracker",
"nodes": [
{
"id": "wh2",
"name": "Deadline Check Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
],
"parameters": {
"path": "hrtech-deadline-check",
"responseMode": "responseNode"
}
},
{
"id": "res2",
"name": "Respond 200",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
440,
180
],
"parameters": {
"responseCode": 200,
"responseData": "allEntries"
}
},
{
"id": "code2",
"name": "Build Deadline Schedule",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
640,
300
],
"parameters": {
"jsCode": "\nconst input = $input.all()[0].json;\nconst now = new Date();\nconst year = now.getFullYear();\nconst employer_id = input.employer_id;\nconst flags = input.flags || {};\nconst headcount = input.headcount || 0;\n\nconst deadlines = [];\n\n// FLSA record retention deadlines\nif (flags.flsa_overtime_records_holder) {\n // Rolling 3-year retention for basic employee records\n const retention3yr = new Date(now.getTime() + 365 * 3 * 86400000);\n deadlines.push({\n type: 'FLSA_BASIC_RECORDS_3YR_RETENTION',\n description: 'FLSA 29 CFR \u00a7516.5(a) \u2014 Basic Employee Records 3-Year Retention Audit',\n regulation: '29 CFR \u00a7516.5(a); 29 USC \u00a7211(c)',\n due_date: new Date(year + 1, 0, 31).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year + 1, 0, 31) - now) / 86400000),\n severity: 'HIGH',\n action: 'Audit retention of: name/address/DOB/sex/occupation for each employee, hour/day/week worked, regular hourly rate, total straight-time earnings, overtime earnings, additions/deductions from wages, total wages paid each period, date of payment and pay period. Retain 3 years minimum. DOL can subpoena records back 3 years in standard cases, 5+ years in willful violation cases.',\n self_hosting_note: 'Self-hosted n8n: FLSA pay records stay in your Postgres instance inside your litigation privilege boundary \u2014 no external subpoena can reach them without going through your legal team first.'\n });\n deadlines.push({\n type: 'FLSA_SUPPLEMENTARY_RECORDS_2YR_RETENTION',\n description: 'FLSA 29 CFR \u00a7516.6(a) \u2014 Supplementary Basic Records 2-Year Retention Audit',\n regulation: '29 CFR \u00a7516.6(a)',\n due_date: new Date(year + 1, 0, 31).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year + 1, 0, 31) - now) / 86400000),\n severity: 'MEDIUM',\n action: 'Retain for 2 years: time cards, piece-work tickets, wage rate tables, work and time schedules, records of additions to or deductions from wages. These are the source records plaintiffs request first in FLSA collective actions.',\n self_hosting_note: 'n8n workflow archives supplementary records to internal Postgres with automated retention tagging \u2014 eliminates manual audit burden.'\n });\n}\n\n// ERISA COBRA deadlines\nif (flags.erisa_plan_administrator) {\n deadlines.push({\n type: 'ERISA_COBRA_EMPLOYER_TO_ADMIN_14_DAY',\n description: 'ERISA COBRA \u2014 Employer Notifies Plan Administrator Within 14 Days of Qualifying Event',\n regulation: '29 USC \u00a71166(a)(2); ERISA \u00a7606(a)(2)',\n due_date: new Date(now.getTime() + 14 * 86400000).toISOString().split('T')[0],\n days_until: 14,\n severity: 'CRITICAL',\n action: 'When a qualifying event occurs (termination, reduction in hours, divorce, loss of dependent status, Medicare entitlement), employer must notify plan administrator within 14 days. Plan administrator then has 14 days to notify qualified beneficiary (44 days total from qualifying event).',\n self_hosting_note: 'n8n automates COBRA qualifying event detection from HRIS webhook \u2014 employer-to-administrator notification fires within seconds of event, eliminating manual 14-day tracking.'\n });\n deadlines.push({\n type: 'ERISA_COBRA_TOTAL_44_DAY_WINDOW',\n description: 'ERISA COBRA \u2014 Total 44-Day Window from Qualifying Event to Beneficiary Notice',\n regulation: '29 USC \u00a71166(a)(4); 26 CFR \u00a754.4980B-6',\n due_date: new Date(now.getTime() + 44 * 86400000).toISOString().split('T')[0],\n days_until: 44,\n severity: 'CRITICAL',\n action: 'Qualified beneficiary must receive COBRA election notice within 44 days of qualifying event (or 14 days after plan administrator receives notice from employer if later). Penalty for late notice: $110/day per qualified beneficiary (ERISA \u00a7502(c)(1)) + excise tax (IRC \u00a74980B).',\n self_hosting_note: 'Automated 44-day countdown from qualifying event webhook \u2014 no manual calendar tracking. Alert fires at day 30 (warning), day 40 (critical), day 43 (emergency escalation to legal).'\n });\n deadlines.push({\n type: 'DOL_FORM_5500_ANNUAL_FILING',\n description: 'ERISA Form 5500 Annual Report Filing',\n regulation: 'ERISA \u00a7104; 29 CFR \u00a72520.104a-5',\n due_date: new Date(year, 6, 31).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year, 6, 31) - now) / 86400000),\n severity: 'HIGH',\n action: 'Form 5500 due 7 months after plan year end (July 31 for calendar year plans). Extension available with Form 5558 (2.5 months, to October 15). Penalty for late filing: $250/day up to $150,000 (ERISA \u00a7502(c)(2)) + IRS penalty $25/day up to $15,000.',\n self_hosting_note: 'n8n deadline tracker monitors Form 5500 due dates per plan. Automated 90/60/30/14-day reminder sequence to benefits administrator and CFO.'\n });\n}\n\n// WARN Act deadlines\nif (flags.warn_act_applicable || headcount >= 100) {\n deadlines.push({\n type: 'WARN_ACT_60_DAY_ADVANCE_NOTICE',\n description: 'WARN Act 29 USC \u00a72101 \u2014 60-Day Advance Notice Requirement',\n regulation: '29 USC \u00a72102(a); 20 CFR \u00a7639.3',\n due_date: new Date(now.getTime() + 60 * 86400000).toISOString().split('T')[0],\n days_until: 60,\n severity: 'CRITICAL',\n action: 'WARN Act requires 60 calendar days advance written notice for plant closings (50+ employees) or mass layoffs (500+ employees OR 50-499 if 33%+ of workforce). Notice to: (1) each affected employee or union representative, (2) state dislocated worker unit, (3) chief elected official of local government unit. Penalty: back pay + benefits for each day of violation (max 60 days) + $500/day civil penalty for local government notice failure.',\n self_hosting_note: 'n8n workforce reduction pipeline detects threshold crossings from HRIS headcount data and fires WARN Act countdown workflows automatically \u2014 no spreadsheet-based RIF tracking.'\n });\n deadlines.push({\n type: 'STATE_MINI_WARN_NOTICE',\n description: 'State Mini-WARN Act Notice \u2014 California/NY/NJ/IL/MD/HI/NH/ME/IA Check',\n regulation: 'CA Lab. Code \u00a71400; NY Lab. Law \u00a7860; NJ WARN Act N.J.S.A. 34:21-1; IL WARN Act 820 ILCS 65',\n due_date: new Date(now.getTime() + 30 * 86400000).toISOString().split('T')[0],\n days_until: 30,\n severity: 'HIGH',\n action: 'State mini-WARN laws: CA (75+ employees, 30+ affected, 30 days notice); NY (25 affected, 90 days notice for 100+ employee employers); NJ (100+ employees, 50+ affected, 60 days + severance equivalent); IL (75+ affected, 60 days); MD/HI/NH/ME/IA \u2014 check state-specific thresholds and notice periods. Some states have stricter thresholds than federal WARN.',\n self_hosting_note: 'n8n WARN tracker maintains per-state threshold parameters and fires state-specific notice workflows based on affected employee location data in your HRIS.'\n });\n}\n\n// EEOC deadlines\nif (flags.eeoc_federal_contractor || flags.flsa_overtime_records_holder) {\n deadlines.push({\n type: 'EEOC_POSITION_STATEMENT_30_DAY',\n description: 'EEOC Charge Position Statement \u2014 Typically 30 Days from Notification',\n regulation: '29 CFR \u00a71601.14; EEOC Enforcement Guidance 915.002',\n due_date: new Date(now.getTime() + 30 * 86400000).toISOString().split('T')[0],\n days_until: 30,\n severity: 'HIGH',\n action: 'After EEOC notifies employer of a charge, employer typically has 30 days to submit a Position Statement. Automated document retrieval workflows can compile: hiring/firing decision records, comparator employee data, performance reviews, progressive discipline records, relevant policy documents. Extensions available but not automatic.',\n self_hosting_note: 'n8n EEOC response workflow assembles required records from HRIS/ATS automatically on charge notification \u2014 reducing attorney review time from days to hours.'\n });\n deadlines.push({\n type: 'EEOC_EEO1_ANNUAL_REPORT',\n description: 'EEOC EEO-1 Component 1 Annual Report',\n regulation: '29 CFR \u00a71602.7; Section 709 of Title VII',\n due_date: new Date(year, 5, 1).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year, 5, 1) - now) / 86400000),\n severity: 'MEDIUM',\n action: 'Employers with 100+ employees (or federal contractors with 50+ employees and $50K+ contracts) must file EEO-1 Component 1 annually. Data: race/ethnicity + sex by job category for all employees. Filing portal opens in spring, deadline typically end of May or June. Penalty for failure: potential subpoena under Section 709.',\n self_hosting_note: 'n8n EEO-1 workflow queries HRIS for race/ethnicity/sex/job category fields and generates EEO-1 Component 1 CSV in standard EEOC format \u2014 eliminates manual export/reconciliation.'\n });\n}\n\n// ADA Title I\nif (flags.ada_title_i_subject) {\n deadlines.push({\n type: 'ADA_REASONABLE_ACCOMMODATION_INTERACTIVE_PROCESS',\n description: 'ADA Title I \u2014 Reasonable Accommodation Interactive Process (No Hard Deadline \u2014 Delay = Violation)',\n regulation: '42 USC \u00a712112(b)(5)(A); 29 CFR \u00a71630.9',\n due_date: new Date(now.getTime() + 5 * 86400000).toISOString().split('T')[0],\n days_until: 5,\n severity: 'CRITICAL',\n action: 'When an employee requests a reasonable accommodation, employer must engage in an \"interactive process\" promptly \u2014 courts have found unreasonable delays (typically 30+ days without communication) are themselves ADA violations. Document: date of request, each communication, accommodation options considered, medical information requested/received, final decision rationale. Failure to engage: $75,000 first violation, $150,000 subsequent violations.',\n self_hosting_note: 'n8n accommodation request tracker fires immediately on intake, creates Slack task for HR, logs each interactive process step with timestamps, escalates at day 14 and day 28 without resolution.'\n });\n}\n\n// SOC 2\nif (flags.soc2_required) {\n deadlines.push({\n type: 'SOC2_TYPE2_RENEWAL',\n description: 'SOC 2 Type II Annual Renewal',\n regulation: 'AICPA TSC 2017 CC6.1 / CC9.2',\n due_date: new Date(year + 1, 2, 31).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year + 1, 2, 31) - now) / 86400000),\n severity: 'HIGH',\n action: 'Renew SOC 2 Type II. HRTech vendors handling employee PII, payroll data, or benefits records are frequently required to produce SOC 2 Type II by enterprise customers under data processing agreements. Lapse = contract breach for enterprise accounts.',\n self_hosting_note: 'Self-hosted n8n: covered under your own SOC 2 boundary \u2014 no CC9.2 external vendor assessment required for the automation layer processing employee PII.'\n });\n}\n\n// I-9 verification\ndeadlines.push({\n type: 'I9_EMPLOYMENT_ELIGIBILITY_3_BUSINESS_DAYS',\n description: 'Form I-9 Employment Eligibility Verification \u2014 3 Business Days',\n regulation: '8 CFR \u00a7274a.2(b)(1)(ii); INA \u00a7274A',\n due_date: new Date(now.getTime() + 3 * 86400000).toISOString().split('T')[0],\n days_until: 3,\n severity: 'HIGH',\n action: 'Employee must complete Section 1 on or before first day of work. Employer must complete Section 2 within 3 business days of first day of work. Penalty: $252\u2013$2,507 per employee for first offense (paperwork only), $1,008\u2013$25,076 for knowingly hiring unauthorized workers. ICE audits request I-9 records with 3-day production notice.',\n self_hosting_note: 'n8n new-hire workflow triggers I-9 Section 2 reminder at day 1 and deadline alert at day 3 \u2014 eliminates the most common I-9 paperwork violation.'\n});\n\n// OSHA 300 annual posting\ndeadlines.push({\n type: 'OSHA_300A_ANNUAL_POSTING_FEB1_APR30',\n description: 'OSHA 300A Annual Summary Posting \u2014 February 1 Through April 30',\n regulation: '29 CFR \u00a71904.32(b)(6)',\n due_date: new Date(year, 1, 1).toISOString().split('T')[0],\n days_until: Math.ceil((new Date(year, 1, 1) - now) / 86400000),\n severity: 'MEDIUM',\n action: 'OSHA Form 300A (Summary of Work-Related Injuries and Illnesses) must be posted at each establishment from February 1 through April 30. Summary must be certified by a company executive. Penalty for failure: $15,625 per violation (other than serious), $15,625\u2013$156,259 (willful).',\n self_hosting_note: 'n8n OSHA 300A workflow compiles injury/illness records from your HRIS into Form 300A format and sends certification reminder to designated executive on January 25.'\n});\n\nreturn deadlines.map(d => ({ json: d }));\n"
}
},
{
"id": "notif2",
"name": "Alert \u2014 Upcoming Deadlines",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
880,
300
],
"parameters": {
"fromEmail": "compliance@yourhrtsaas.com",
"toEmail": "={{ $json.employer_admin_email }}",
"subject": "[HRTechSaaS Compliance] {{ $json.type }} \u2014 {{ $json.days_until }} days",
"emailType": "text",
"message": "COMPLIANCE DEADLINE\n\nType: {{ $json.type }}\nDue: {{ $json.due_date }} ({{ $json.days_until }} days)\nSeverity: {{ $json.severity }}\nRegulation: {{ $json.regulation }}\n\n{{ $json.description }}\n\nRequired action:\n{{ $json.action }}\n\nSelf-hosted n8n advantage:\n{{ $json.self_hosting_note }}\n\nAutomation workflows: https://stripeai.gumroad.com"
}
}
],
"connections": {
"Deadline Check Webhook": {
"main": [
[
{
"node": "Respond 200",
"type": "main",
"index": 0
},
{
"node": "Build Deadline Schedule",
"type": "main",
"index": 0
}
]
]
},
"Build Deadline Schedule": {
"main": [
[
{
"node": "Alert \u2014 Upcoming Deadlines",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 3: HRTech API Health Monitor
Runs every 15 minutes against five endpoints: HRIS core API (FLSA record availability), payroll calculation engine (pay period end downtime = underpayment risk), COBRA administration portal (44-day notice window), applicant tracking system (EEOC adverse impact data must be accessible for investigation), benefits administration API (ERISA §204 DOL audit readiness). Uses $getWorkflowStaticData for 3-hour alert deduplication.
{
"name": "HRTech API Health Monitor",
"nodes": [
{
"id": "sch3",
"name": "Every 15 Minutes",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1,
"position": [
240,
300
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 15
}
]
}
}
},
{
"id": "code3",
"name": "Check Endpoints",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
460,
300
],
"parameters": {
"jsCode": "\nconst staticData = $getWorkflowStaticData('global');\nconst lastAlerted = staticData.lastAlerted || {};\n\nconst endpoints = [\n { id: 'hris_api', url: process.env.HRIS_API_HEALTH_URL || 'https://api.yourhris.com/health', label: 'HRIS Core API', regulation: 'FLSA 29 CFR \u00a7516 \u2014 pay record system availability', alert_code: 'HRIS_API_DOWN' },\n { id: 'payroll_api', url: process.env.PAYROLL_API_HEALTH_URL || 'https://api.yourpayroll.com/v1/health', label: 'Payroll Calculation Engine', regulation: 'FLSA \u00a7207 overtime calculation \u2014 downtime during pay period end = underpayment risk', alert_code: 'PAYROLL_API_DOWN' },\n { id: 'cobra_admin_api', url: process.env.COBRA_ADMIN_URL || 'https://cobra.yourhris.com/health', label: 'COBRA Administration Portal', regulation: 'ERISA \u00a7606 \u2014 44-day COBRA notice window; downtime = missed deadline risk', alert_code: 'COBRA_ADMIN_DOWN' },\n { id: 'ats_api', url: process.env.ATS_API_HEALTH_URL || 'https://api.yourats.com/v2/health', label: 'Applicant Tracking System API', regulation: 'EEOC Uniform Guidelines 29 CFR \u00a71607 \u2014 adverse impact data must be accessible for EEOC investigation', alert_code: 'ATS_API_DOWN' },\n { id: 'benefits_api', url: process.env.BENEFITS_API_HEALTH_URL || 'https://benefits.yourhris.com/health', label: 'Benefits Administration API', regulation: 'ERISA \u00a7204 \u2014 benefits records must be available for DOL audit within 30 days', alert_code: 'BENEFITS_API_DOWN' }\n];\n\nconst now = Date.now();\nconst DEDUP_WINDOW = 3 * 60 * 60 * 1000; // 3h\n\nconst alerts = [];\nfor (const ep of endpoints) {\n const lastAlert = lastAlerted[ep.id] || 0;\n if (now - lastAlert < DEDUP_WINDOW) continue;\n\n try {\n const resp = await fetch(ep.url, { method: 'GET', signal: AbortSignal.timeout(8000) });\n if (!resp.ok) {\n lastAlerted[ep.id] = now;\n alerts.push({ ...ep, status: resp.status, error: `HTTP ${resp.status}`, ts: new Date().toISOString() });\n }\n } catch (e) {\n lastAlerted[ep.id] = now;\n alerts.push({ ...ep, status: 0, error: e.message, ts: new Date().toISOString() });\n }\n}\n\nstaticData.lastAlerted = lastAlerted;\nreturn alerts.length ? alerts.map(a => ({ json: a })) : [{ json: { status: 'ok', ts: new Date().toISOString() } }];\n"
}
},
{
"id": "filter3",
"name": "Alerts Only",
"type": "n8n-nodes-base.filter",
"typeVersion": 2,
"position": [
680,
300
],
"parameters": {
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.alert_code }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "notEmpty"
}
}
]
}
}
},
{
"id": "em3",
"name": "Send Health Alert",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
300
],
"parameters": {
"fromEmail": "alerts@yourhrtsaas.com",
"toEmail": "devops@yourhrtsaas.com",
"subject": "[HRTECH ALERT] {{ $json.alert_code }} \u2014 {{ $json.label }} DOWN",
"emailType": "text",
"message": "HRTECH COMPLIANCE SYSTEM ALERT\n\nAlert: {{ $json.alert_code }}\nEndpoint: {{ $json.label }}\nURL: {{ $json.url }}\nError: {{ $json.error }}\nRegulation: {{ $json.regulation }}\nTime: {{ $json.ts }}\n\nNote: {{ $json.label }} failure may block compliance workflow execution. Investigate immediately.\n\nMonitor: https://stripeai.gumroad.com"
}
}
],
"connections": {
"Every 15 Minutes": {
"main": [
[
{
"node": "Check Endpoints",
"type": "main",
"index": 0
}
]
]
},
"Check Endpoints": {
"main": [
[
{
"node": "Alerts Only",
"type": "main",
"index": 0
}
]
]
},
"Alerts Only": {
"main": [
[
{
"node": "Send Health Alert",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 4: Incident Response Pipeline
A webhook receives incident events and routes them to the correct response handler:
- FLSA_COLLECTIVE_ACTION_FILED: IMMEDIATE legal hold, pay record preservation, plaintiff counsel subpoena warning, back pay + liquidated damages exposure calculation
- DOL_WAGE_HOUR_INVESTIGATION: IMMEDIATE record production notice, 2-3 year payroll subpoena scope, automation log preservation
- WARN_ACT_TRIGGER: 60-day mandatory notice to employees/state/local government, state mini-WARN check, back pay + $500/day penalty calculation
- ERISA_COBRA_QUALIFYING_EVENT: 14-day employer-to-administrator clock, 44-day total window, $110/day penalty escalation
- NLRA_UNFAIR_LABOR_PRACTICE: 6-month SOL defense window, NLRB region routing, Section 7 protected activity documentation
- EEOC_CHARGE_FILED: 30-day position statement assembly, comparator data compilation, right-to-sue timeline
- ADA_TITLE_I_ACCOMMODATION_REQUEST: IMMEDIATE interactive process initiation, documentation chain, day-14 and day-28 escalation without resolution
{
"name": "HRTech Incident Response Pipeline",
"nodes": [
{
"id": "wh4",
"name": "Incident Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
240,
300
],
"parameters": {
"path": "hrtech-incident",
"responseMode": "responseNode"
}
},
{
"id": "res4",
"name": "Respond 202",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
440,
180
],
"parameters": {
"responseCode": 202,
"responseData": "allEntries"
}
},
{
"id": "sw4",
"name": "Route by Incident Type",
"type": "n8n-nodes-base.switch",
"typeVersion": 3,
"position": [
640,
300
],
"parameters": {
"mode": "rules",
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "FLSA_COLLECTIVE_ACTION_FILED",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "FLSA_COLLECTIVE"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "DOL_WAGE_HOUR_INVESTIGATION",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "DOL_WHD"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "WARN_ACT_TRIGGER",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "WARN_ACT"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "ERISA_COBRA_QUALIFYING_EVENT",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "COBRA"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "NLRA_UNFAIR_LABOR_PRACTICE",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "NLRA_ULP"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "EEOC_CHARGE_FILED",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "EEOC"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "ADA_TITLE_I_ACCOMMODATION_REQUEST",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"renameOutput": true,
"outputKey": "ADA_ACCOMMODATION"
},
{
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"leftValue": "={{ $json.incident_type }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "notEmpty"
}
}
]
},
"renameOutput": true,
"outputKey": "GENERAL"
}
]
}
}
},
{
"id": "em_flsa",
"name": "FLSA Collective Action \u2014 IMMEDIATE Legal Hold",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
60
],
"parameters": {
"fromEmail": "incident@yourhrtsaas.com",
"toEmail": "cto@yourhrtsaas.com",
"subject": "[P0 FLSA] COLLECTIVE ACTION FILED \u2014 IMMEDIATE Legal Hold + Pay Record Preservation Required",
"emailType": "text",
"message": "P0 INCIDENT: FLSA_COLLECTIVE_ACTION_FILED\n\nINCIDENT ID: {{ $json.incident_id }}\nEmployer: {{ $json.employer_id }}\nCase: {{ $json.case_number }}\nFiled: {{ $json.filed_at }}\nPlaintiff Counsel: {{ $json.plaintiff_counsel }}\n\nIMEDIATE ACTIONS \u2014 CLOCK RUNNING:\n1. IMMEDIATE: Preserve ALL pay records, time records, overtime calculations \u2014 do NOT delete or overwrite\n2. IMMEDIATE: Issue litigation hold notice to all employees who handled payroll/time data\n3. IMMEDIATELY notify employment counsel \u2014 collective action has conditional certification hearing within 90-180 days\n4. Preserve workflow execution logs from your automation platform \u2014 plaintiff counsel will subpoena these\n5. Identify all affected pay periods and employee count \u2014 determines back pay exposure calculation\n\nFLSA EXPOSURE CALCULATION:\n- Back pay: 29 USC \u00a7216(b) \u2014 up to 2 years (3 years willful) per employee\n- Liquidated damages: equal amount of back pay (29 USC \u00a7216(b)) \u2014 effectively doubles exposure\n- Attorney fees: awarded to prevailing plaintiff (29 USC \u00a7216(b))\n\nCRITICAL NOTE: If your automation platform processes overtime records, plaintiff counsel will subpoena it. Self-hosted n8n = records inside your privilege boundary. Cloud iPaaS = records outside your privilege boundary.\n\nIncident response: https://stripeai.gumroad.com"
}
},
{
"id": "em_dol",
"name": "DOL WHD Investigation \u2014 Subpoena Clock",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
180
],
"parameters": {
"fromEmail": "incident@yourhrtsaas.com",
"toEmail": "cto@yourhrtsaas.com",
"subject": "[P0 DOL] Wage & Hour Investigation \u2014 Respond to Investigator Within Stated Deadline",
"emailType": "text",
"message": "DOL WAGE & HOUR DIVISION INVESTIGATION\n\nInvestigator: {{ $json.investigator_name }}\nEmployer: {{ $json.employer_id }}\nInvestigation #: {{ $json.investigation_number }}\nNotice Received: {{ $json.notice_at }}\nRecord Production Deadline: {{ $json.production_deadline }}\n\nDOL WHD investigations typically request:\n- Complete payroll records for 2-3 years\n- All time records (time cards, schedules, time-tracking system exports)\n- Employee names, addresses, pay rates, job titles for investigation period\n- Overtime calculation methodology documentation\n- Any automation scripts or systems used for payroll calculations\n\nDO NOT destroy records. WHD investigators can and do escalate to civil penalty proceedings if records are missing or incomplete.\n\nSelf-hosted n8n note: n8n workflow execution logs may be relevant records. Preserve them under litigation hold.\n\nIncident response: https://stripeai.gumroad.com"
}
},
{
"id": "em_warn",
"name": "WARN Act \u2014 60-Day Clock Mandatory",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
300
],
"parameters": {
"fromEmail": "legal@yourhrtsaas.com",
"toEmail": "ceo@yourhrtsaas.com",
"subject": "[WARN ACT] Mass Layoff/Plant Closing Threshold Crossed \u2014 60-Day Notice Required",
"emailType": "text",
"message": "WARN ACT TRIGGER EVENT\n\nEmployer: {{ $json.employer_id }}\nLocation: {{ $json.establishment }}\nAffected Employees: {{ $json.affected_count }}\nProposed Effective Date: {{ $json.effective_date }}\nWARN Notice Due By: {{ $json.warn_deadline }} (60 days before effective date)\n\nREQUIRED NOTICES:\n1. Each affected employee (or union rep): written individual notice\n2. State dislocated worker unit: written notice to state agency\n3. Chief elected local official: written notice to mayor/county executive\n\nPENALTY EXPOSURE:\n- Back pay + benefits: up to 60 days per affected employee\n- Civil penalty: $500/day for each day local government notice is insufficient\n\nSTATE MINI-WARN: Check CA (30 days, 75 employees), NY (90 days, 25 affected), NJ (60 days + severance), IL, MD, HI, NH, ME, IA.\n\nWARN workflow: https://stripeai.gumroad.com"
}
},
{
"id": "em_cobra",
"name": "COBRA Qualifying Event \u2014 14-Day Employer Clock",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
420
],
"parameters": {
"fromEmail": "benefits@yourhrtsaas.com",
"toEmail": "hr@yourhrtsaas.com",
"subject": "[COBRA] Qualifying Event \u2014 Notify Plan Administrator Within 14 Days",
"emailType": "text",
"message": "COBRA QUALIFYING EVENT\n\nEmployee: {{ $json.employee_name }}\nEvent Type: {{ $json.event_type }}\nEvent Date: {{ $json.event_date }}\nEmployer Notification Due: {{ $json.employer_deadline }} (14 days \u2014 ERISA \u00a7606(a)(2))\nBeneficiary Notice Due: {{ $json.beneficiary_deadline }} (44 days total \u2014 26 CFR \u00a754.4980B-6)\n\nEVENT TYPES: Termination of employment, Reduction in hours, Divorce or legal separation, Dependent child loss of eligibility, Medicare entitlement, Death of covered employee.\n\nPENALTY: $110/day per qualified beneficiary for late notice (ERISA \u00a7502(c)(1)) + IRC \u00a74980B excise tax ($100/day for unintentional, $200/day for more than de minimis failures).\n\nCOBRA automation: https://stripeai.gumroad.com"
}
},
{
"id": "em_nlra",
"name": "NLRA ULP Charge \u2014 6-Month SOL Defense Window",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
540
],
"parameters": {
"fromEmail": "legal@yourhrtsaas.com",
"toEmail": "ceo@yourhrtsaas.com",
"subject": "[NLRA] Unfair Labor Practice Charge Filed \u2014 6-Month Statute of Limitations Defense Window",
"emailType": "text",
"message": "NLRA UNFAIR LABOR PRACTICE CHARGE\n\nCharge Number: {{ $json.charge_number }}\nRegion: {{ $json.nlrb_region }}\nCharged Party: {{ $json.employer_id }}\nAlleged Violation: {{ $json.violation_description }}\nFiled: {{ $json.filed_at }}\n6-Month SOL Reference Date: {{ $json.sol_date }} (29 USC \u00a7160(b))\n\nNLRB NLRA PROCESS:\n1. NLRB Regional Director investigates charge\n2. If merit found: complaint issues + hearing before ALJ\n3. ALJ decision \u2192 NLRB Board review \u2192 Court of Appeals\n\nCOMMON ULP CHARGES: Section 8(a)(1) \u2014 interference with organizing rights; Section 8(a)(3) \u2014 discrimination for union activity; Section 8(a)(5) \u2014 refusal to bargain in good faith.\n\nAUTOMATION RELEVANCE: Electronic communications (Slack, email) used for labor organizing are protected under NLRA \u00a77. Monitor policies and automation workflows that filter or flag employee communications \u2014 overbroad policies = ULP exposure.\n\nULP response: https://stripeai.gumroad.com"
}
},
{
"id": "em_eeoc",
"name": "EEOC Charge \u2014 30-Day Position Statement Window",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
660
],
"parameters": {
"fromEmail": "legal@yourhrtsaas.com",
"toEmail": "ceo@yourhrtsaas.com",
"subject": "[EEOC] Charge Filed \u2014 Position Statement Due in ~30 Days",
"emailType": "text",
"message": "EEOC CHARGE FILED\n\nCharge Number: {{ $json.charge_number }}\nCharging Party: {{ $json.charging_party }}\nRespondent: {{ $json.employer_id }}\nAlleged Basis: {{ $json.discrimination_basis }}\nFiled: {{ $json.filed_at }}\nPosition Statement Due: {{ $json.position_statement_deadline }}\n\nPOSITION STATEMENT CONTENTS:\n- Factual account of employment decision at issue\n- Personnel file of charging party\n- Comparator employee data (same supervisor, similar conduct)\n- Applicable policies and their enforcement history\n- Any documentation of performance issues or rule violations\n\nTITLE VII TIMELINE: 180 days (state agencies) to 300 days (deferral states) for filing charge. After 180 days, EEOC can issue right-to-sue letter. Lawsuit must be filed within 90 days of right-to-sue.\n\nEEOC response: https://stripeai.gumroad.com"
}
},
{
"id": "em_ada",
"name": "ADA Accommodation Request \u2014 Interactive Process Required Now",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
1000,
780
],
"parameters": {
"fromEmail": "hr@yourhrtsaas.com",
"toEmail": "hr@yourhrtsaas.com",
"subject": "[ADA Title I] Accommodation Request \u2014 Begin Interactive Process Immediately",
"emailType": "text",
"message": "ADA TITLE I REASONABLE ACCOMMODATION REQUEST\n\nEmployee: {{ $json.employee_name }}\nRequest Date: {{ $json.request_date }}\nAccommodation Requested: {{ $json.accommodation_description }}\nDisability/Condition: {{ $json.condition_description }}\n\nADA INTERACTIVE PROCESS \u2014 BEGIN IMMEDIATELY:\n1. Acknowledge receipt in writing (today)\n2. Request medical documentation if condition not obvious\n3. Identify essential functions of the position\n4. Identify potential accommodations\n5. Engage employee in discussion of options\n6. Document each step with dates and communications\n\nVIOLATION RISK: Courts have found failure to engage promptly = ADA violation independent of accommodation outcome. Document every step. Do not let interactive process go silent.\n\nPENALTY: $75,000 first violation, $150,000 each subsequent violation (42 USC \u00a71981a(b)(3)(A)).\n\nADA automation: https://stripeai.gumroad.com"
}
}
],
"connections": {
"Incident Webhook": {
"main": [
[
{
"node": "Respond 202",
"type": "main",
"index": 0
},
{
"node": "Route by Incident Type",
"type": "main",
"index": 0
}
]
]
},
"Route by Incident Type": {
"main": [
[
{
"node": "FLSA Collective Action \u2014 IMMEDIATE Legal Hold",
"type": "main",
"index": 0
}
],
[
{
"node": "DOL WHD Investigation \u2014 Subpoena Clock",
"type": "main",
"index": 0
}
],
[
{
"node": "WARN Act \u2014 60-Day Clock Mandatory",
"type": "main",
"index": 0
}
],
[
{
"node": "COBRA Qualifying Event \u2014 14-Day Employer Clock",
"type": "main",
"index": 0
}
],
[
{
"node": "NLRA ULP Charge \u2014 6-Month SOL Defense Window",
"type": "main",
"index": 0
}
],
[
{
"node": "EEOC Charge \u2014 30-Day Position Statement Window",
"type": "main",
"index": 0
}
],
[
{
"node": "ADA Accommodation Request \u2014 Interactive Process Required Now",
"type": "main",
"index": 0
}
],
[
{
"node": "ADA Accommodation Request \u2014 Interactive Process Required Now",
"type": "main",
"index": 0
}
]
]
}
}
}
Workflow 5: Weekly HRTech KPI Dashboard
Runs Monday at 8 AM. Queries a Postgres database for: enterprise/midmarket/startup account counts, total MRR, open FLSA collective actions, open DOL WHD investigations, WARN Act triggers in the last 30 days, pending COBRA notices, open EEOC charges, and open ADA accommodation requests. Emails CEO with a structured compliance KPI report.
{
"name": "HRTech Weekly KPI Dashboard",
"nodes": [
{
"id": "sch5",
"name": "Monday 8 AM",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1,
"position": [
240,
300
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"weeksInterval": 1,
"triggerAtDay": [
1
],
"triggerAtHour": 8,
"triggerAtMinute": 0
}
]
}
}
},
{
"id": "pg5",
"name": "Query HRTech KPIs",
"type": "n8n-nodes-base.postgres",
"typeVersion": 2,
"position": [
460,
300
],
"parameters": {
"operation": "executeQuery",
"query": "\nSELECT\n COUNT(DISTINCT CASE WHEN tier IN ('ENTERPRISE_HRIS_PLATFORM','PAYROLL_SAAS_VENDOR') THEN employer_id END) AS enterprise_accounts,\n COUNT(DISTINCT CASE WHEN tier IN ('WORKFORCE_MANAGEMENT_SAAS','EMPLOYEE_BENEFITS_SAAS','LEARNING_MANAGEMENT_SAAS') THEN employer_id END) AS midmarket_accounts,\n COUNT(DISTINCT CASE WHEN tier = 'HRTECH_STARTUP' THEN employer_id END) AS startup_accounts,\n ROUND(SUM(mrr)::numeric, 2) AS total_mrr,\n COUNT(CASE WHEN incident_type = 'FLSA_COLLECTIVE_ACTION_FILED' AND status = 'OPEN' THEN 1 END) AS flsa_collective_open,\n COUNT(CASE WHEN incident_type = 'DOL_WAGE_HOUR_INVESTIGATION' AND status = 'OPEN' THEN 1 END) AS dol_whd_open,\n COUNT(CASE WHEN incident_type = 'WARN_ACT_TRIGGER' AND created_at > NOW() - INTERVAL '30 days' THEN 1 END) AS warn_triggers_30d,\n COUNT(CASE WHEN incident_type = 'ERISA_COBRA_QUALIFYING_EVENT' AND status = 'PENDING_NOTICE' THEN 1 END) AS cobra_pending,\n COUNT(CASE WHEN incident_type = 'EEOC_CHARGE_FILED' AND status = 'OPEN' THEN 1 END) AS eeoc_charges_open,\n COUNT(CASE WHEN incident_type = 'ADA_TITLE_I_ACCOMMODATION_REQUEST' AND status IN ('OPEN','IN_PROCESS') THEN 1 END) AS ada_requests_open\nFROM hrtech_weekly_stats\nWHERE week = date_trunc('week', NOW() - INTERVAL '7 days')\n"
}
},
{
"id": "em5",
"name": "Weekly KPI Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
700,
300
],
"parameters": {
"fromEmail": "analytics@yourhrtsaas.com",
"toEmail": "ceo@yourhrtsaas.com",
"subject": "[HRTechSaaS KPI] Weekly Compliance Dashboard \u2014 {{ $now.format('YYYY-MM-DD') }}",
"emailType": "text",
"message": "HRTECH SAAS WEEKLY KPI\nWeek ending: {{ $now.format('YYYY-MM-DD') }}\n\n--- REVENUE ---\nEnterprise Accounts: {{ $json.enterprise_accounts }}\nMidmarket Accounts: {{ $json.midmarket_accounts }}\nStartup Accounts: {{ $json.startup_accounts }}\nTotal MRR: ${{ $json.total_mrr }}\n\n--- COMPLIANCE INCIDENTS ---\nFLSA Collective Actions Open: {{ $json.flsa_collective_open }}\nDOL WHD Investigations Open: {{ $json.dol_whd_open }}\nWARN Act Triggers (30d): {{ $json.warn_triggers_30d }}\nCOBRA Notices Pending: {{ $json.cobra_pending }}\nEEOC Charges Open: {{ $json.eeoc_charges_open }}\nADA Accommodation Requests Open: {{ $json.ada_requests_open }}\n\nKPI trend: https://stripeai.gumroad.com"
}
}
],
"connections": {
"Monday 8 AM": {
"main": [
[
{
"node": "Query HRTech KPIs",
"type": "main",
"index": 0
}
]
]
},
"Query HRTech KPIs": {
"main": [
[
{
"node": "Weekly KPI Email",
"type": "main",
"index": 0
}
]
]
}
}
}
Deployment Notes
FLSA litigation hold architecture: configure n8n with execution log retention policies that preserve records for the FLSA 3-year lookback period. Set executions.pruneDataMaxAge to at least 1095 days (3 years) in your n8n environment. Deploy inside your customers' infrastructure or your own — not a cloud iPaaS that creates an external subpoena target.
COBRA qualifying event webhook: your HRIS should fire a qualifying event webhook on every termination, hours reduction, divorce/separation notification, and Medicare enrollment. N8n triggers the 14-day employer clock automatically on receipt — no manual calendar entry.
WARN Act headcount monitoring: the incident pipeline requires a headcount query to determine if a proposed RIF crosses WARN thresholds. Configure n8n to query your workforce management system's headcount API weekly and store the rolling 30-day establishment-level counts needed for threshold detection.
ADA interactive process documentation: each step of the interactive process — acknowledgment, medical documentation request, accommodation options discussion, final decision — should be logged to your Postgres instance with timestamp and communication type. Courts have found undocumented interactive process steps as adverse evidence in ADA litigation.
All five workflows are available as ready-to-import JSON at stripeai.gumroad.com — part of the FlowKit n8n Compliance Automation Bundle.
FlowKit builds n8n workflow templates for compliance-heavy SaaS vendors. See the full vertical series at dev.to/flowkithq.
Top comments (0)