Ein n8n-Flow, der einen Litigation-Hold-Ausgabezyklus orchestriert — die Hold-Mitteilung per E-Mail und Slack an benannte Custodians ausstellt, Bestätigungen mit Erinnerungen in einem konfigurierbaren Rhythmus verfolgt, Nicht-Bestätigende an den Legal-Ops-Leiter und den Vorgesetzten des Custodians eskaliert und jede Aktion in einer unveränderlichen Audit-Tabelle protokolliert, die die Kanzlei verwendet, wenn die Angemessenheit des Holds später in Frage gestellt wird. Ersetzt den manuellen Zyklus des Legal-Ops-Administrators mit Tabellenkalkulation und Outlook-Regeln (typischerweise eine laufende Belastung von 2–4 Stunden pro Woche bei wenigen aktiven Holds) durch einen deterministischen Flow, der keinen Custodian fallen lassen kann.
Wann verwenden
Die Kanzlei stellt Litigation Holds mit einer Häufigkeit aus, bei der manuelle Verfolgung zu Fehlern führt — üblicherweise bei mehr als 3 aktiven Holds gleichzeitig.
Sie haben eine Custodian-of-Record-Quelle: eine Custodian-Verwaltungstabelle in der E-Discovery-Plattform (Relativity, Everlaw, Logikcull) oder in einem gepflegten Legal-Ops-CSV.
Die Kanzlei benötigt einen verteidigbaren Audit-Trail für die Hold-Angemessenheit. Die Audit-Tabelle des Flows ist die Antwort auf „zeigen Sie uns, dass Sie vernünftig gehandelt haben, um Daten zu erhalten”.
Der Legal-Ops-Leiter und externe Anwälte genehmigen die Hold-Ausstellung; der Flow übernimmt die laufende Verfolgung, nicht die Entscheidung zur Ausstellung.
Wann NICHT verwenden
Einzelne Holds, bei denen manuelle Verfolgung in Ordnung ist. Die Einrichtungskosten (120 Minuten plus Integration mit der Custodian-Quelle) amortisieren sich ab der ~3-aktive-Holds-Marke, nicht bei einem.
Auto-Eskalation, die Counsel umgeht. Die Eskalationspfade des Flows sind konfigurierbar, aber der Standard sendet an den Legal-Ops-Leiter, NICHT direkt an den GC oder externe Anwälte. Der Leiter wendet Urteilsvermögen an, welche Nicht-Bestätigungen Aufmerksamkeit von Counsel verdienen.
Hold-Mitteilungen, die maßgeschneiderte Sprache pro Custodian erfordern. Der Flow erstellt Vorlagen pro Mandat; wenn jede Mitteilung handgeschriebene Sprache braucht, ist der Engpass nicht die Orchestrierung.
Ersatz des Urteils von Counsel bezüglich Hold-Umfang. Der Flow verfolgt den Hold für die Custodians, die Counsel benannt hat. Custodians hinzuzufügen oder zu entfernen ist eine Entscheidung von Counsel, keine Flow-Entscheidung.
Setup
Importieren Sie den Flow. Legen Sie apps/web/public/artifacts/litigation-hold-orchestration-n8n/litigation-hold-orchestration-n8n.json in Ihre n8n-Instanz.
Verdrahten Sie die Credentials. Vier erforderliche: PLACEHOLDER_CUSTODIAN_DB_CRED_ID (Lesezugriff auf Custodian-Quelle), PLACEHOLDER_SMTP_CRED_ID (SMTP für Hold-Mitteilungs-E-Mail), PLACEHOLDER_SLACK_CRED_ID (Slack für In-Channel-Benachrichtigung), PLACEHOLDER_AUDIT_DB_CRED_ID (Schreibzugriff auf unveränderliche Audit-Tabelle).
Verfassen Sie die Hold-Mitteilungsvorlage. Pro Mandat schreiben Sie eine Markdown-Vorlage unter n8n/data/hold-notices/<matter-id>.md. Die Vorlage enthält von Counsel genehmigte Sprache zum Erhaltungsumfang, verbotene Aktionen (Löschung, Änderung) und Bestätigungsanweisungen.
Konfigurieren Sie die Eskalationspfade. Standard des Flows: Erinnerung bei +3, +7, +14 Tagen; Eskalation an Legal-Ops-Leiter bei +14; Eskalation an Vorgesetzten des Custodians bei +21. Passen Sie je nach Risikobereitschaft der Kanzlei an.
Richten Sie die Audit-Tabelle ein. Eine Postgres/Snowflake-Tabelle, die nach (hold_id, custodian_id, action, timestamp) kodiert ist, mit einer Append-Only-Einschränkung auf DB-Ebene (unveränderlich; Counsel muss nachweisen können, dass das Audit-Log nachträglich nicht bearbeitet werden kann).
Trockenlauf bei einem abgeschlossenen Hold. Replizieren Sie die Custodian-Liste eines abgeschlossenen Holds. Bestätigen Sie, dass die Benachrichtigungs-, Erinnerungs- und Eskalations-Timings dem entsprechen, was der Legal-Ops-Administrator zuvor manuell getan hat.
Was der Flow tut
Sieben Knoten in zwei Phasen. Phase 1 (Ausstellung) feuert einmalig pro Hold. Phase 2 (Verfolgung) ist ein täglicher Cron, der auf Nicht-Bestätigende prüft und Erinnerungen/Eskalationen versendet.
Issue Trigger — manueller oder Webhook-Trigger von der Legal-Ops-Plattform, wenn Counsel einen Hold als ausstellungsbereit markiert.
Load Custodian List — lädt die Custodian-Liste aus der konfigurierten Quelle für das Mandat.
Send Hold Notice — E-Mail + Slack an jeden Custodian. Die E-Mail enthält die Hold-Mitteilungsvorlage und einen eindeutigen Bestätigungslink pro Custodian. Audit-Log: eine Zeile pro Custodian pro notice_sent.
Daily Cron Tracker (separater Workflow-Trigger) — Montag bis Freitag um 9 Uhr Bürozeitzone. Prüft die Audit-Tabelle auf Custodians, die innerhalb des konfigurierten Fensters nicht bestätigt haben.
Determine Action — Code-Knoten. Bestimmt für jeden Nicht-Bestätigenden: Erinnerung senden (bei +3, +7), an Legal-Ops-Leiter eskalieren (bei +14), an Vorgesetzten eskalieren (bei +21).
Dispatch Reminder / Escalation — sendet Erinnerungs-E-Mail oder Eskalation je nach bestimmter Aktion. Audit-Log-Eintrag pro Versand.
Acknowledgement Webhook — separater Webhook, der den Bestätigungsklick des Custodians empfängt. Schreibt in die Audit-Tabelle; stoppt weitere Erinnerungen für diesen Custodian.
Kostenrealität
n8n-Kosten — selbst gehostet kostenlos; n8n Cloud beim Workflow-Ausführungsvolumen, das dieser erzeugt (~3–5/Tag pro aktivem Hold) liegt bequem im Starter-Plan.
LLM-Token — keine. Der Flow ist deterministisch.
SMTP / Slack — innerhalb der Standardkontingente.
Legal-Ops-Admin-Zeit — der Gewinn. Manuelle Verfolgung von 5–10 aktiven Holds ist 4–8 Stunden/Woche. Flow-Betrieb bedeutet das Überwachen der Audit-Tabelle auf echte Ausnahmen, ~30 Min./Woche.
Einrichtungszeit — 120 Minuten einschließlich der Audit-Tabellen-Bereitstellung, plus 30–60 Minuten pro Mandat für das Verfassen der Hold-Mitteilungsvorlage.
Erfolgsmetrik
Zeit von der „Ausstellen”-Entscheidung von Counsel bis zur tatsächlichen Ausstellung — sollte auf unter 1 Stunde sinken (manuell ist es bei großen Custodian-Listen oft ein Tag).
Bestätigungsrate bei +14 Tagen — sollte bei Routine-Holds über 95% liegen. Darunter muss die Mitteilungsvorlage überarbeitet werden oder die Custodian-Liste hat veraltete Einträge.
Audit-Vollständigkeit bei Counsel-Überprüfung — Anteil der Holds, für die Counsel bei Bedarf eine vollständige verteidigbare Audit-Kette vorlegen kann. Sollte 100% betragen; die Audit-Tabelle ist die Quelle.
Vergleich mit Alternativen
vs. integriertem Hold-Modul der E-Discovery-Plattform (Relativity Legal Hold, Logikcull, Everlaw). Wählen Sie das Plattformmodul, wenn Sie in der E-Discovery-Plattform leben. Wählen Sie den Flow, wenn Ihre Custodians Slack, E-Mail und HR-Systeme umfassen und Sie Benachrichtigungsoberflächen jenseits der Plattform-Standardwerte benötigen.
vs. SaaS-Hold-Management-Tools (Onna, Exterro Legal Hold). Wählen Sie jene für erweitertes Custodian-Self-Service und integrierte Erhaltung. Wählen Sie den Flow, wenn Sie die Orchestrierung in Ihrer eigenen Infrastruktur mit dem Audit-Log in Ihrer eigenen DB wünschen.
vs. Tabellenkalkulation + Outlook-Regeln. Der Standard und die Ursache verlorener Custodians im großen Maßstab. Der Flow ist der deterministische Ersatz.
Fallstricke
Custodian-Listen-Drift.Schutz: Der Flow zieht die Custodian-Liste bei jeder Prüfung erneut, mit dem last_updated_at der Quelle geprüft. Wenn die Liste ohne Genehmigung von Counsel gedriftet ist (Custodian hinzugefügt/entfernt), stellt der Flow die Diff dem Legal-Ops-Leiter vor, anstatt still auf der neuen Liste zu handeln.
Mutierbarkeit der Audit-Tabelle.Schutz: Die Audit-Tabelle muss auf DB-Ebene Append-Only sein (Postgres: REVOKE UPDATE, DELETE FROM ALL). Der Flow erzwingt das nicht — die DB tut es. Das README dokumentiert das Schema mit der Einschränkung inline.
Mitteilungstext-Drift.Schutz: Mandatsbezogene Mitteilungsvorlagen werden zum Zeitpunkt der Ausstellung gehasht; das Audit-Log erfasst den SHA. Wenn Counsel die Mitteilung ändern möchte, ist die Änderung eine separate Aktion im Flow, keine stille Neuausstellung.
Custodian-Opt-out / stilles Ignorieren.Schutz: Die Eskalation an den Vorgesetzten bei +21 Tagen verwandelt das Problem von einem Custodian-Problem in ein Management-Problem. Darüber hinaus muss der Legal-Ops-Leiter möglicherweise externe Anwälte einbeziehen — der Flow stellt das dar, handelt aber nicht.
Unterschiede bei Holds über Jurisdiktionen hinweg.Schutz: Der Flow geht von US-amerikanischer Litigation-Hold-Semantik aus. EU-spezifische „Duty to Preserve” unter dem kommenden AI Act und DSGVO hat einen anderen Umfang; die mandatsbezogene Mitteilungsvorlage behandelt diese Fälle.
Datenschutzposition bei Custodian-E-Mail.Schutz: Hold-Mitteilungen können dem Custodian das Vorhandensein eines Rechtsstreits signalisieren; der SMTP-Pfad nutzt das Mail-Relay der Kanzlei (kein Drittanbieter-SaaS) zur Wahrung der Vertraulichkeit.
Stack
Das Bundle befindet sich unter apps/web/public/artifacts/litigation-hold-orchestration-n8n/:
litigation-hold-orchestration-n8n.json — der Flow-Export
audit-table-schema.sql — DDL für die unveränderliche Audit-Tabelle
hold-notice-template.md — ausfüllbare Hold-Mitteilungsvorlage pro Mandat
Tools: n8n (Orchestrierung), Slack (In-Channel-Benachrichtigung), Claude (optional — für die tägliche Zusammenfassung der Audit-Log-Aktivität an den Legal-Ops-Leiter, nicht für Entscheidungsschritte).
# Litigation hold orchestration — n8n flow
Orchestrates a litigation-hold issue cycle: notification, acknowledgement tracking, reminder cadence, escalation paths, and an immutable audit log. Replaces the spreadsheet-and-Outlook-rules manual cycle with a deterministic flow that can't drop a custodian.
## Import
1. Import `litigation-hold-orchestration-n8n.json` into n8n.
2. Set workflow timezone to your office TZ.
3. Provision the audit table (DDL in `audit-table-schema.sql`).
4. Wire credentials.
5. Do NOT enable until dry-run confirms behavior on a closed hold.
## What ships in this bundle
This n8n export covers the **issuance** half of the cycle (Phase 1). The tracking + escalation half (Phase 2 — daily cron, reminders, escalation) is intentionally a separate workflow you wire to the same audit table; that lets the issuance flow be triggered fresh per hold while the tracker runs continuously across all active holds.
The Phase 2 tracker is a 4-node workflow:
1. Cron daily 9am office TZ.
2. Postgres query against the audit table: select hold/custodian pairs without `acknowledged` action.
3. Code node: determine action (reminder at +3, +7; escalation to legal-ops lead at +14; escalation to manager at +21).
4. Email send + audit-log append.
The DDL and the audit-query are in this README's appendix below; the Phase 2 export is left to the legal-ops engineer to assemble per the firm's escalation paths (which vary by jurisdiction and matter type more than the issuance step does).
## Credentials
### `PLACEHOLDER_CUSTODIAN_DB_CRED_ID` — Custodian source
Read access to wherever the custodian list lives:
- **In-house Postgres** — the default. Schema documented in the `Load Custodian List` node.
- **Relativity / Everlaw / Logikcull** — replace the Postgres node with an HTTP node calling the platform's custodian endpoint.
- **HRIS** — possible if HRIS is the source of truth, but legal-ops typically maintains the custodian list separately.
### `PLACEHOLDER_SMTP_CRED_ID` — SMTP
Use the **firm's own mail relay**, not a third-party SaaS like SendGrid. Hold notices may flag the existence of a litigation matter; routing them through a third party expands the privilege exposure.
### `PLACEHOLDER_SLACK_CRED_ID` — Slack bot token
`chat:write` scope. The bot needs to be invited to the workspaces where custodians live; per-custodian DMs require user-level scope which Slack handles automatically when the bot is in the workspace.
### `PLACEHOLDER_AUDIT_DB_CRED_ID` — Audit table
Write access to the audit table. The table itself must be append-only at the DB level (DDL below).
## Audit table schema
```sql
CREATE TABLE hold_audit (
audit_id BIGSERIAL PRIMARY KEY,
hold_id TEXT NOT NULL,
custodian_id TEXT NOT NULL,
action TEXT NOT NULL CHECK (action IN (
'notice_sent',
'reminder_sent',
'escalated_to_lead',
'escalated_to_manager',
'acknowledged',
'released'
)),
template_sha TEXT,
payload_json JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX hold_audit_lookup_idx ON hold_audit (hold_id, custodian_id, action);
-- Immutability: the audit table is the firm's defensibility chain.
-- Counsel needs to be able to demonstrate the log can't be edited.
REVOKE UPDATE, DELETE, TRUNCATE ON hold_audit FROM PUBLIC;
REVOKE UPDATE, DELETE, TRUNCATE ON hold_audit FROM <legal_ops_app_role>;
GRANT INSERT, SELECT ON hold_audit TO <legal_ops_app_role>;
```
The `REVOKE` statements are NOT optional. Without them the table is editable, and counsel cannot demonstrate the audit log's defensibility under e-discovery scrutiny.
## Hold-notice template
Save per-matter templates as `n8n/data/hold-notices/<matter-id>.md`. The template uses these placeholders, replaced per custodian by the `Personalize Notice` node:
- `{{custodian_name}}` — custodian's full name
- `{{matter_id}}` — matter identifier
- `{{hold_id}}` — hold identifier
- `{{ack_url}}` — per-custodian acknowledgement URL
Sample template structure (counsel approves the actual language):
```
Dear {{custodian_name}},
This is a litigation hold notice for Matter {{matter_id}}.
You are required to preserve all documents, communications, and electronic
data related to [counsel-defined scope]. This includes [specific systems
and document types].
You must NOT delete, alter, or destroy any potentially relevant material,
even if it would be deleted under normal retention policy.
Please acknowledge receipt of this notice by clicking the link below
within 7 business days:
{{ack_url}}
If you have questions about scope or what to preserve, contact [legal-ops
contact].
This hold remains in effect until you receive a written release notice
from the legal department.
[counsel signature block]
```
## Phase 2 tracker query
The Phase 2 daily cron uses this query to find non-acknowledgers:
```sql
WITH last_action AS (
SELECT hold_id, custodian_id, MAX(created_at) AS last_action_at,
BOOL_OR(action = 'acknowledged') AS acknowledged
FROM hold_audit
WHERE action IN ('notice_sent', 'reminder_sent', 'acknowledged', 'released')
GROUP BY hold_id, custodian_id
)
SELECT
la.hold_id,
la.custodian_id,
la.last_action_at,
EXTRACT(EPOCH FROM (NOW() - la.last_action_at)) / 86400 AS days_since_last_action,
(SELECT MIN(created_at) FROM hold_audit ha
WHERE ha.hold_id = la.hold_id AND ha.custodian_id = la.custodian_id
AND ha.action = 'notice_sent') AS first_notice_at
FROM last_action la
WHERE la.acknowledged = false
AND NOT EXISTS (
SELECT 1 FROM hold_audit ha
WHERE ha.hold_id = la.hold_id AND ha.custodian_id = la.custodian_id
AND ha.action = 'released'
);
```
The tracker computes `days_since_first_notice`, decides action, dispatches.
## Dry-run procedure
1. Provision the audit table on a non-production DB.
2. Wire credentials against staging endpoints (test SMTP, test Slack workspace).
3. Replay a closed hold's custodian list manually.
4. Confirm: notification fires once per custodian; audit log records each send; per-custodian acknowledgement URLs are unique.
5. Switch to production DB. Issue your next real hold via the flow.
## Known limits
- Phase 1 issuance only ships in this n8n export; Phase 2 tracker is documented but not bundled.
- The flow assumes per-custodian email + Slack. Custodians without Slack accounts (contractors, alumni) get email only — the Slack node fails gracefully but the failure is silent in the audit log. The Phase 2 tracker should treat email-only custodians the same as Slack+email.
- Acknowledgement URL routing requires a separate webhook endpoint (the `/ack/<hold>/<custodian>/<token>` URL) — deploy that as a small Express / Flask endpoint that writes `action: acknowledged` to the audit table. The endpoint is NOT bundled.
- The flow does not handle hold-release. Release is its own action — when counsel releases, a separate webhook writes `action: released` to the audit table per custodian. The tracker stops sending reminders to released custodian/hold pairs.
-- Litigation hold audit table — append-only DDL.
-- Counsel's defensibility chain depends on this table being immutable.
CREATE TABLE hold_audit (
audit_id BIGSERIAL PRIMARY KEY,
hold_id TEXT NOT NULL,
custodian_id TEXT NOT NULL,
action TEXT NOT NULL CHECK (action IN (
'notice_sent',
'reminder_sent',
'escalated_to_lead',
'escalated_to_manager',
'acknowledged',
'released'
)),
template_sha TEXT,
payload_json JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX hold_audit_lookup_idx
ON hold_audit (hold_id, custodian_id, action);
CREATE INDEX hold_audit_created_idx
ON hold_audit (created_at);
-- Immutability constraints. NOT optional.
-- Replace <legal_ops_app_role> with the DB role your n8n flow uses.
REVOKE UPDATE, DELETE, TRUNCATE ON hold_audit FROM PUBLIC;
GRANT INSERT, SELECT ON hold_audit TO <legal_ops_app_role>;
-- Optional: row-level revisioning if you anticipate legitimate
-- corrections (e.g. a custodian acknowledged offline and the lead
-- needs to record it). Even then, NEVER UPDATE existing rows —
-- INSERT a 'corrected_offline' action with a payload_json reference
-- to the prior row's audit_id, preserving the original record.
# Hold notice template
Per-matter template the litigation-hold flow personalizes per custodian. Copy this file to `n8n/data/hold-notices/<matter-id>.md` per matter and customize counsel-approved language.
The template uses these placeholders, replaced per custodian by the `Personalize Notice` node:
- `{{custodian_name}}`
- `{{matter_id}}`
- `{{hold_id}}`
- `{{ack_url}}`
---
# Litigation Hold Notice — Matter {{matter_id}} — Hold {{hold_id}}
Dear {{custodian_name}},
The firm's legal department is issuing a litigation hold related to Matter {{matter_id}}. As a custodian whose records may be relevant, you are required to take immediate steps to preserve potentially relevant material.
## What you must preserve
You must preserve all documents, communications, and electronic data related to [counsel-defined scope — replace with matter-specific scope]. This includes, but is not limited to:
- Email (work and any personal email used for work-related communication on this matter)
- Slack messages, including DMs and channel posts
- Documents (Google Drive, SharePoint, OneDrive, local files)
- Calendar entries
- [Other systems specific to this matter — replace with named systems]
The scope covers material from [counsel-defined date range] to the date this hold is released in writing.
## What you must NOT do
You must NOT delete, alter, modify, or destroy any potentially relevant material, even if the firm's normal retention policy would otherwise permit deletion.
You must NOT discuss this hold's scope or substance with anyone outside the legal team and your direct counsel of record.
## What this means in practice
- **Auto-deletion settings:** check email, Slack, and document-system retention settings. If any are set to delete material in the relevant scope, contact [legal-ops contact] immediately.
- **Personal devices:** if you have used personal devices or accounts for any work related to this matter, [legal-ops contact] will work with you on appropriate preservation.
- **Departing the firm:** if you leave the firm while this hold is in effect, [legal-ops contact] will work with HR and IT to preserve your records before any account decommissioning.
- **Replacement of equipment:** do not destroy or recycle hardware in scope until [legal-ops contact] confirms preservation.
## Acknowledgement
You must acknowledge receipt of this notice within 7 business days. Please click the link below:
[{{ack_url}}]({{ack_url}})
If you have not received an automated reminder by [date + 14 days], please contact [legal-ops contact] to confirm your acknowledgement was recorded.
## Questions
For questions about scope or what to preserve, contact:
- [legal-ops contact name and email]
- [outside counsel contact, if applicable]
Do NOT discuss the substance of the matter outside this channel.
## When this hold ends
This hold remains in effect until you receive a written release notice from the legal department. Verbal release is not sufficient. Until you receive written release, you must continue to preserve material in scope.
---
[counsel signature block]
[firm letterhead — match firm's standard hold-notice formatting]