AutomationFlowsAI & RAG › Monitor Academic Integrity Signals with Gpt-4o, Email Alerts and Case Archiving

Monitor Academic Integrity Signals with Gpt-4o, Email Alerts and Case Archiving

ByCheng Siong Chin @cschin on n8n.io

This workflow automates integrity signal detection and investigation orchestration for compliance officers, ethics teams, and risk managers in financial services, healthcare, and regulated industries. It solves the challenge of identifying potential misconduct while ensuring…

Cron / scheduled trigger★★★★☆ complexityAI-powered28 nodesOpenAI ChatOutput Parser StructuredAgentAgent ToolData TableEmail Send
AI & RAG Trigger: Cron / scheduled Nodes: 28 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #13430 — we link there as the canonical source.

This workflow follows the Agent → Agenttool recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "h7dJ5SDKuJccRPLjGSwYP",
  "name": "AI-powered academic integrity monitoring and investigation system",
  "tags": [],
  "nodes": [
    {
      "id": "5fe6ea16-d1c1-4ca3-95e3-15162bd1b78c",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -48,
        192
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "0017ceb9-f1e9-43a6-ab54-bae6b9df9e54",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        176,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "reviewerEmail",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Academic Integrity Reviewer Email__>"
            },
            {
              "id": "id-2",
              "name": "plagiarismThreshold",
              "type": "number",
              "value": 75
            },
            {
              "id": "id-3",
              "name": "anomalyThreshold",
              "type": "number",
              "value": 80
            },
            {
              "id": "id-4",
              "name": "highRiskThreshold",
              "type": "number",
              "value": 85
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "662519bb-412b-4220-9128-244a5ade6c53",
      "name": "Simulate Assessment Data",
      "type": "n8n-nodes-base.set",
      "position": [
        400,
        192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "studentId",
              "type": "string",
              "value": "=STU-2024-{{ Math.floor(Math.random() * 10000) }}"
            },
            {
              "id": "id-2",
              "name": "assessmentId",
              "type": "string",
              "value": "=ASSESS-{{ Math.floor(Math.random() * 1000) }}"
            },
            {
              "id": "id-3",
              "name": "submissionText",
              "type": "string",
              "value": "This is a sample student submission that may contain plagiarized content or anomalous patterns. The writing style shows inconsistencies and contains phrases commonly found in online sources."
            },
            {
              "id": "id-4",
              "name": "submissionTimestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            },
            {
              "id": "id-5",
              "name": "previousSubmissions",
              "type": "number",
              "value": 5
            },
            {
              "id": "id-6",
              "name": "averageGrade",
              "type": "number",
              "value": 78.5
            },
            {
              "id": "id-7",
              "name": "timeSpentMinutes",
              "type": "number",
              "value": 45
            },
            {
              "id": "id-8",
              "name": "wordCount",
              "type": "number",
              "value": 850
            },
            {
              "id": "id-9",
              "name": "browserFingerprint",
              "type": "string",
              "value": "=FP-{{ Math.floor(Math.random() * 100000) }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0dc63e8a-031c-4072-8676-4a5dd8dccce1",
      "name": "OpenAI Model - Integrity Agent",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        608,
        416
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o"
        },
        "options": {
          "temperature": 0.1
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2a0a50db-177a-4164-932d-f41b67d10690",
      "name": "Structured Output - Integrity Signals",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        800,
        400
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"riskLevel\": \"LOW | MEDIUM | HIGH | CRITICAL\",\n  \"plagiarismScore\": 0,\n  \"plagiarismIndicators\": [],\n  \"anomalyScore\": 0,\n  \"anomalyIndicators\": [],\n  \"behavioralFlags\": [],\n  \"overallConfidence\": 0.0,\n  \"reasoning\": \"Detailed analysis of integrity signals\",\n  \"recommendedAction\": \"MONITOR | INVESTIGATE | ESCALATE\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "447d3db2-ed4e-49b6-ac62-62a714045840",
      "name": "Integrity Signal Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        624,
        192
      ],
      "parameters": {
        "text": "=Student ID: {{ $json.studentId }}\nAssessment ID: {{ $json.assessmentId }}\nSubmission Text: {{ $json.submissionText }}\nSubmission Time: {{ $json.submissionTimestamp }}\nPrevious Submissions: {{ $json.previousSubmissions }}\nAverage Grade: {{ $json.averageGrade }}\nTime Spent: {{ $json.timeSpentMinutes }} minutes\nWord Count: {{ $json.wordCount }}\nBrowser Fingerprint: {{ $json.browserFingerprint }}\n\nPlagiarism Threshold: {{ $('Workflow Configuration').first().json.plagiarismThreshold }}\nAnomaly Threshold: {{ $('Workflow Configuration').first().json.anomalyThreshold }}",
        "options": {
          "systemMessage": "You are an Academic Integrity Signal Agent specialized in detecting plagiarism, anomalies, and suspicious patterns in student assessments.\n\nYour task is to:\n1. Analyze the submission text for plagiarism indicators (common phrases, unnatural language patterns, style inconsistencies)\n2. Calculate a plagiarism score (0-100) based on detected indicators\n3. Analyze behavioral anomalies (unusual submission time, time spent vs word count ratio, browser fingerprint changes)\n4. Calculate an anomaly score (0-100) based on behavioral patterns\n5. Compare scores against provided thresholds\n6. Assign overall risk level: LOW (both scores < thresholds), MEDIUM (one score >= threshold), HIGH (both scores >= threshold), CRITICAL (scores significantly exceed thresholds)\n7. Provide detailed reasoning for your assessment\n8. Recommend action: MONITOR (low risk), INVESTIGATE (medium/high risk), ESCALATE (critical risk)\n\nBe thorough, objective, and evidence-based in your analysis."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "2594646d-4cd2-4b19-92d8-dfc7b5410e41",
      "name": "Route by Risk Level",
      "type": "n8n-nodes-base.switch",
      "position": [
        976,
        160
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Low Risk",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.riskLevel }}",
                    "rightValue": "LOW"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Medium Risk",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.riskLevel }}",
                    "rightValue": "MEDIUM"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "High/Critical Risk",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "or",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.riskLevel }}",
                    "rightValue": "HIGH"
                  },
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.output.riskLevel }}",
                    "rightValue": "CRITICAL"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "Unclassified"
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "883a7dca-fe1e-4c5b-93df-a74c5dadd602",
      "name": "OpenAI Model - Orchestration Agent",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1200,
        592
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o"
        },
        "options": {
          "temperature": 0.2
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "4f850fb2-f32b-4fd2-9e29-8aa584d63fee",
      "name": "OpenAI Model - Investigation Tool",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1680,
        944
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o"
        },
        "options": {
          "temperature": 0.1
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9748d48e-627f-49d7-a36b-32b12d3a9bd9",
      "name": "Investigation Agent Tool",
      "type": "@n8n/n8n-nodes-langchain.agentTool",
      "position": [
        1664,
        736
      ],
      "parameters": {
        "text": "={{ $fromAI(\"caseData\", \"Academic integrity case data requiring investigation\", \"json\") }}",
        "options": {
          "systemMessage": "You are an Investigation Agent Tool specialized in conducting deep investigations into academic integrity violations.\n\nYour task is to:\n1. Receive case data from the orchestration agent\n2. Conduct detailed plagiarism source checking (simulate checking against academic databases, web sources)\n3. Perform timeline analysis of submission patterns\n4. Compare current submission with student previous work for style consistency\n5. Calculate match percentages and evidence strength\n6. Provide comprehensive investigation findings\n7. Recommend next steps based on evidence strength\n\nReturn structured investigation results with clear evidence assessment."
        },
        "hasOutputParser": true,
        "toolDescription": "Conducts detailed investigation into academic integrity cases including plagiarism source checking, timeline analysis, and evidence assessment"
      },
      "typeVersion": 3
    },
    {
      "id": "1dbf5be1-3dfb-492a-92e9-3f52976514a4",
      "name": "Structured Output - Investigation",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1856,
        928
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"investigationFindings\": \"Detailed investigation results\",\n  \"evidenceStrength\": \"WEAK | MODERATE | STRONG | CONCLUSIVE\",\n  \"sourcesChecked\": [],\n  \"matchPercentage\": 0,\n  \"timelineAnalysis\": \"Analysis of submission timeline\",\n  \"comparisonWithPreviousWork\": \"Comparison findings\",\n  \"recommendedNextSteps\": []\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "6eb3e8e9-1734-4cf0-bf42-7d328b670602",
      "name": "Structured Output - Orchestration",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1952,
        736
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"caseId\": \"CASE-XXXX\",\n  \"orchestrationDecision\": \"AUTOMATED_ACTION | HUMAN_REVIEW_REQUIRED\",\n  \"actionsTaken\": [],\n  \"investigationSummary\": \"Summary of investigation findings\",\n  \"documentationGenerated\": \"Complete case documentation\",\n  \"humanReviewRequired\": false,\n  \"humanReviewReason\": \"Reason if human review needed\",\n  \"recommendedSanction\": \"WARNING | GRADE_REDUCTION | COURSE_FAILURE | DISCIPLINARY_ACTION\",\n  \"confidenceLevel\": 0.0,\n  \"nextSteps\": []\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "71e1bbc6-3eba-4e9a-b421-173a48b1c050",
      "name": "Case Orchestration Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1328,
        368
      ],
      "parameters": {
        "text": "=Integrity Signals:\nRisk Level: {{ $json.output.riskLevel }}\nPlagiarism Score: {{ $json.output.plagiarismScore }}\nAnomaly Score: {{ $json.output.anomalyScore }}\nRecommended Action: {{ $json.output.recommendedAction }}\nReasoning: {{ $json.output.reasoning }}\n\nStudent ID: {{ $('Simulate Assessment Data').first().json.studentId }}\nAssessment ID: {{ $('Simulate Assessment Data').first().json.assessmentId }}",
        "options": {
          "systemMessage": "You are a Case Orchestration Agent responsible for coordinating academic integrity investigation workflows, documentation, and human review decisions.\n\nYour task is to:\n1. Review integrity signals from the Integrity Signal Agent\n2. For MEDIUM/HIGH/CRITICAL risk cases, call the Investigation Agent Tool to conduct detailed investigation\n3. Synthesize investigation findings with integrity signals\n4. Generate comprehensive case documentation including timeline, evidence, and analysis\n5. Determine if human review is required based on:\n   - Evidence strength (CONCLUSIVE = automated, WEAK/MODERATE = human review)\n   - Risk level (CRITICAL always requires human review)\n   - Confidence level (< 0.85 requires human review)\n6. Recommend appropriate sanctions based on severity\n7. Document all actions taken and next steps\n8. Return structured orchestration decision\n\nEnsure thorough documentation for audit trails and fair process."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "d22125b9-7be0-478a-813c-d7f896e50bd6",
      "name": "Check if Human Review Required",
      "type": "n8n-nodes-base.if",
      "position": [
        1856,
        464
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.output.humanReviewRequired }}",
              "rightValue": "true"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "8bbac9bc-1aae-4a3e-92c9-9ca4bdf7bf85",
      "name": "Store Case for Human Review",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2064,
        416
      ],
      "parameters": {
        "columns": {
          "value": {
            "caseId": "={{ $json.output.caseId }}",
            "status": "PENDING_REVIEW",
            "createdAt": "={{ $now.toISO() }}",
            "riskLevel": "={{ $('Integrity Signal Agent').first().json.output.riskLevel }}",
            "studentId": "={{ $('Simulate Assessment Data').first().json.studentId }}",
            "assessmentId": "={{ $('Simulate Assessment Data').first().json.assessmentId }}",
            "reviewReason": "={{ $json.output.humanReviewReason }}",
            "documentation": "={{ $json.output.documentationGenerated }}",
            "recommendedSanction": "={{ $json.output.recommendedSanction }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "name",
          "value": "HumanReviewQueue"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "a02eee01-81d3-4594-bbc8-752df359afaf",
      "name": "Send Human Review Alert",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2288,
        416
      ],
      "parameters": {
        "html": "=<html>\n<body style='font-family: Arial, sans-serif;'>\n<div style='background-color: #dc3545; color: white; padding: 20px;'>\n<h2>\ud83d\udea8 Academic Integrity Case - Human Review Required</h2>\n</div>\n\n<div style='padding: 20px;'>\n<p><strong>Case ID:</strong> {{ $json.output.caseId }}</p>\n<p><strong>Student ID:</strong> {{ $('Simulate Assessment Data').first().json.studentId }}</p>\n<p><strong>Assessment ID:</strong> {{ $('Simulate Assessment Data').first().json.assessmentId }}</p>\n<p><strong>Risk Level:</strong> <span style='color: #dc3545; font-weight: bold;'>{{ $('Integrity Signal Agent').first().json.output.riskLevel }}</span></p>\n\n<h3>Review Reason</h3>\n<p>{{ $json.output.humanReviewReason }}</p>\n\n<h3>Investigation Summary</h3>\n<p>{{ $json.output.investigationSummary }}</p>\n\n<h3>Recommended Sanction</h3>\n<p><strong>{{ $json.output.recommendedSanction }}</strong></p>\n\n<h3>Case Documentation</h3>\n<div style='background-color: #f8f9fa; padding: 15px; border-left: 4px solid #007bff;'>\n<pre style='white-space: pre-wrap;'>{{ $json.output.documentationGenerated }}</pre>\n</div>\n\n<h3>Next Steps</h3>\n<ul>\n{{ $json.output.nextSteps.map(step => `<li>${step}</li>`).join('') }}\n</ul>\n\n<p style='margin-top: 30px;'>\n<a href='https://cschin.app.n8n.cloud/webhook/{{ $('Wait for Human Decision').first().webhookId }}' style='background-color: #28a745; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;'>Approve Action</a>\n<a href='https://cschin.app.n8n.cloud/webhook/{{ $('Wait for Human Decision').first().webhookId }}' style='background-color: #dc3545; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; margin-left: 10px;'>Reject Action</a>\n</p>\n\n<p style='color: #666; font-size: 12px; margin-top: 30px;'>This is an automated alert from the Academic Integrity Monitoring System.</p>\n</div>\n</body>\n</html>",
        "options": {},
        "subject": "=Academic Integrity Case Requires Human Review - {{ $json.output.caseId }}",
        "toEmail": "={{ $('Workflow Configuration').first().json.reviewerEmail }}",
        "fromEmail": "<__PLACEHOLDER_VALUE__Sender Email Address__>"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d465a216-f596-4645-b7ec-426ef942ade1",
      "name": "Wait for Human Decision",
      "type": "n8n-nodes-base.wait",
      "position": [
        2512,
        416
      ],
      "parameters": {
        "resume": "webhook",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1.1
    },
    {
      "id": "730e4755-a854-47db-b229-456983f25889",
      "name": "Store Automated Case",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2512,
        608
      ],
      "parameters": {
        "columns": {
          "value": {
            "caseId": "={{ $json.output.caseId }}",
            "status": "AUTOMATED_PROCESSED",
            "riskLevel": "={{ $('Integrity Signal Agent').first().json.output.riskLevel }}",
            "studentId": "={{ $('Simulate Assessment Data').first().json.studentId }}",
            "processedAt": "={{ $now.toISO() }}",
            "actionsTaken": "={{ $json.output.actionsTaken.join(', ') }}",
            "assessmentId": "={{ $('Simulate Assessment Data').first().json.assessmentId }}",
            "documentation": "={{ $json.output.documentationGenerated }}",
            "confidenceLevel": "={{ $json.output.confidenceLevel }}",
            "recommendedSanction": "={{ $json.output.recommendedSanction }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "name",
          "value": "AutomatedCases"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "b01fbfb9-d868-47d2-85d9-428e860255bc",
      "name": "Merge All Cases",
      "type": "n8n-nodes-base.merge",
      "position": [
        2736,
        400
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "5fcb0ca7-9844-4980-9b0e-5bb9af63030f",
      "name": "Archive All Cases",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2960,
        416
      ],
      "parameters": {
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "name",
          "value": "AllCasesArchive"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "3bcdb920-06ca-4333-8443-17ac1a29423d",
      "name": "Prepare Low Risk Response",
      "type": "n8n-nodes-base.set",
      "position": [
        2288,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "caseId",
              "type": "string",
              "value": "=CASE-LOW-{{ Math.floor(Math.random() * 10000) }}"
            },
            {
              "id": "id-2",
              "name": "studentId",
              "type": "string",
              "value": "={{ $('Simulate Assessment Data').first().json.studentId }}"
            },
            {
              "id": "id-3",
              "name": "assessmentId",
              "type": "string",
              "value": "={{ $('Simulate Assessment Data').first().json.assessmentId }}"
            },
            {
              "id": "id-4",
              "name": "riskLevel",
              "type": "string",
              "value": "={{ $json.output.riskLevel }}"
            },
            {
              "id": "id-5",
              "name": "action",
              "type": "string",
              "value": "No action required - monitoring only"
            },
            {
              "id": "id-6",
              "name": "status",
              "type": "string",
              "value": "LOW_RISK_CLEARED"
            },
            {
              "id": "id-7",
              "name": "processedAt",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cee7b6b3-da3e-4ea9-9681-8b63f27145e5",
      "name": "Store Low Risk Case",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2512,
        144
      ],
      "parameters": {
        "columns": {
          "value": {
            "action": "={{ $json.action }}",
            "caseId": "={{ $json.caseId }}",
            "status": "={{ $json.status }}",
            "riskLevel": "={{ $json.riskLevel }}",
            "studentId": "={{ $json.studentId }}",
            "processedAt": "={{ $json.processedAt }}",
            "assessmentId": "={{ $json.assessmentId }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "name",
          "value": "LowRiskCases"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "fc1ddd30-1316-4599-ae58-71bd1a8bed4f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        -352
      ],
      "parameters": {
        "color": 6,
        "width": 496,
        "height": 320,
        "content": "## Prerequisites\nAPI key, Gmail account with app password\n## Use Cases\nFinancial fraud detection, employee misconduct investigation\n## Customization\nIntegrate case management systems, add industry-specific risk models\n## Benefits\nReduces investigation triage time by 65%, ensures consistent risk assessment methodology"
      },
      "typeVersion": 1
    },
    {
      "id": "399f018b-0496-4549-887e-2e4151672028",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -272
      ],
      "parameters": {
        "width": 368,
        "height": 256,
        "content": "## Setup Steps\n1. Configure Llama-3.1-70B-Instruct model access\n2. Set up schedule trigger for daily or continuous monitoring cycles\n3. Configure risk-based routing logic (Low/High thresholds)\n4. Connect Gmail for human review alerts to compliance officers\n5. Set up Google Sheets for case storage and automated archival"
      },
      "typeVersion": 1
    },
    {
      "id": "a9167746-2d2a-4984-be76-d31837300ff7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -272
      ],
      "parameters": {
        "width": 624,
        "height": 288,
        "content": "## How It Works\nThis workflow automates integrity signal detection and investigation orchestration for compliance officers, ethics teams, and risk managers in financial services, healthcare, and regulated industries. It solves the challenge of identifying potential misconduct while ensuring human judgment governs sensitive investigations. Scheduled triggers initiate assessments on synthetic integrity signals, which flow to an AI agent for severity classification based on risk indicators. High-risk signals route to parallel AI investigation agents: data correlation analysis to uncover patterns and anomaly detection to flag statistical outliers. Results converge at mandatory human review gates where compliance professionals evaluate findings before case creation. Approved investigations generate structured case records, while cleared signals archive automatically with full audit trails."
      },
      "typeVersion": 1
    },
    {
      "id": "c789e0bb-b0fc-4b12-a7fd-d4fb51c0bf45",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1616,
        64
      ],
      "parameters": {
        "color": 7,
        "width": 1568,
        "height": 1280,
        "content": "\n## Investigation Analysis\nIdentifies unusual activities warranting deeper investigation through quantitative evidence discovery."
      },
      "typeVersion": 1
    },
    {
      "id": "56229de1-d162-48a7-b42a-89608f0b064c",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        944,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 992,
        "content": "## Data Orchestration \nReveals systemic patterns and repeat offenders that isolated signal analysis would miss."
      },
      "typeVersion": 1
    },
    {
      "id": "d536c889-353c-4acc-beb1-aa7f378f985e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 1024,
        "height": 544,
        "content": "## Integrity Assessment \nPrioritizes investigation resources on high-risk matters requiring immediate attention versus routine monitoring."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "d3acc5cd-369a-4252-8bae-01192e6f4d27",
  "connections": {
    "Merge All Cases": {
      "main": [
        [
          {
            "node": "Archive All Cases",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Risk Level": {
      "main": [
        [
          {
            "node": "Prepare Low Risk Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Case Orchestration Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Case Orchestration Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Low Risk Case": {
      "main": [
        [
          {
            "node": "Merge All Cases",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Store Automated Case": {
      "main": [
        [
          {
            "node": "Merge All Cases",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Integrity Signal Agent": {
      "main": [
        [
          {
            "node": "Route by Risk Level",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Simulate Assessment Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Human Review Alert": {
      "main": [
        [
          {
            "node": "Wait for Human Decision",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Human Decision": {
      "main": [
        [
          {
            "node": "Merge All Cases",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Case Orchestration Agent": {
      "main": [
        [
          {
            "node": "Check if Human Review Required",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Investigation Agent Tool": {
      "ai_tool": [
        [
          {
            "node": "Case Orchestration Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simulate Assessment Data": {
      "main": [
        [
          {
            "node": "Integrity Signal Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Low Risk Response": {
      "main": [
        [
          {
            "node": "Store Low Risk Case",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Case for Human Review": {
      "main": [
        [
          {
            "node": "Send Human Review Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Human Review Required": {
      "main": [
        [
          {
            "node": "Store Case for Human Review",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Store Automated Case",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Model - Integrity Agent": {
      "ai_languageModel": [
        [
          {
            "node": "Integrity Signal Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Model - Investigation Tool": {
      "ai_languageModel": [
        [
          {
            "node": "Investigation Agent Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output - Investigation": {
      "ai_outputParser": [
        [
          {
            "node": "Investigation Agent Tool",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output - Orchestration": {
      "ai_outputParser": [
        [
          {
            "node": "Case Orchestration Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Model - Orchestration Agent": {
      "ai_languageModel": [
        [
          {
            "node": "Case Orchestration Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output - Integrity Signals": {
      "ai_outputParser": [
        [
          {
            "node": "Integrity Signal Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates integrity signal detection and investigation orchestration for compliance officers, ethics teams, and risk managers in financial services, healthcare, and regulated industries. It solves the challenge of identifying potential misconduct while ensuring…

Source: https://n8n.io/workflows/13430/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow automates semiconductor board-level reliability monitoring using AI agents. It targets reliability engineers, manufacturing teams, and quality analysts. The system collects capacity, his

Google Sheets, Agent, OpenAI Chat +10
AI & RAG

This workflow automates procurement fraud detection and supplier compliance monitoring for organizations managing complex purchasing operations. Designed for procurement teams, audit departments, and

OpenAI Chat, Output Parser Structured, Agent +6
AI & RAG

This workflow automates end-to-end medical claims processing using a multi-agent AI orchestration system built on OpenAI GPT-4. It targets healthcare revenue cycle teams, billing departments, and hosp

Agent, Agent Tool, Output Parser Structured +3
AI & RAG

This workflow automates end-to-end recruitment operations for HR teams, talent acquisition specialists, and hiring managers facing high-volume candidate processing challenges. It solves the critical p

Agent, OpenAI Chat, Output Parser Structured +4
AI & RAG

This workflow automates AI decision governance by tracing, assessing, and auditing automated decisions for risk and compliance. Designed for AI governance officers, compliance teams, and regulated ind

Agent, OpenAI Chat, Output Parser Structured +4