442 lines
14 KiB
JSON
442 lines
14 KiB
JSON
{
|
|
"name": "Settlement Calculation Workflow",
|
|
"nodes": [
|
|
{
|
|
"parameters": {
|
|
"httpMethod": "POST",
|
|
"path": "calculate-settlements",
|
|
"responseMode": "responseNode",
|
|
"options": {
|
|
"rawBody": false
|
|
}
|
|
},
|
|
"id": "Webhook-Node-1",
|
|
"name": "Webhook",
|
|
"type": "n8n-nodes-base.webhook",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
100,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"conditions": {
|
|
"string": [
|
|
{
|
|
"value1": "={{ $node[\"Webhook\"].json[\"headers\"][\"x-forwarded-uri\"] || \"\" }}",
|
|
"operation": "contains",
|
|
"value2": "webhook-test"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"id": "If-Node-1",
|
|
"name": "Is Test/Dev Mode?",
|
|
"type": "n8n-nodes-base.if",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
300,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"values": {
|
|
"string": [
|
|
{
|
|
"name": "appUrl",
|
|
"value": "https://special-hotel-dev.gaboggamer.online"
|
|
},
|
|
{
|
|
"name": "signature",
|
|
"value": "qUHuPqPjA65psdtwQU7zgp/DVkvd1xXk2WP/vzbnEdc="
|
|
}
|
|
]
|
|
},
|
|
"options": {}
|
|
},
|
|
"id": "Set-Dev-Env",
|
|
"name": "Set Dev Environment",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
500,
|
|
200
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"values": {
|
|
"string": [
|
|
{
|
|
"name": "appUrl",
|
|
"value": "https://special-hotel.gaboggamer.online"
|
|
},
|
|
{
|
|
"name": "signature",
|
|
"value": "Ecjb2s33tHJppNBDJ/DxXEjHWKow8bNWmsQrk1sQKyQ="
|
|
}
|
|
]
|
|
},
|
|
"options": {}
|
|
},
|
|
"id": "Set-Prod-Env",
|
|
"name": "Set Prod Environment",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
500,
|
|
400
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"method": "GET",
|
|
"url": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.appUrl : $('Set Prod Environment').item.json.appUrl }}/api/n8n/fetch-calculation-data",
|
|
"sendHeaders": true,
|
|
"headerParameters": {
|
|
"parameters": [
|
|
{
|
|
"name": "x-n8n-signature",
|
|
"value": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.signature : $('Set Prod Environment').item.json.signature }}"
|
|
}
|
|
]
|
|
},
|
|
"sendQueryParameters": true,
|
|
"queryParameters": {
|
|
"parameters": [
|
|
{
|
|
"name": "period",
|
|
"value": "={{ $node[\"Webhook\"].json[\"body\"][\"period\"] }}"
|
|
}
|
|
]
|
|
},
|
|
"options": {}
|
|
},
|
|
"id": "Http-Request-Fetch",
|
|
"name": "Fetch Calculation Data",
|
|
"type": "n8n-nodes-base.httpRequest",
|
|
"typeVersion": 4.1,
|
|
"position": [
|
|
700,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"method": "POST",
|
|
"url": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.appUrl : $('Set Prod Environment').item.json.appUrl }}/api/n8n/process-formula",
|
|
"sendHeaders": true,
|
|
"headerParameters": {
|
|
"parameters": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"name": "x-n8n-signature",
|
|
"value": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.signature : $('Set Prod Environment').item.json.signature }}"
|
|
}
|
|
]
|
|
},
|
|
"sendBody": true,
|
|
"specifyBody": "json",
|
|
"jsonBody": "={\n \"period\": \"{{ $node[\"Webhook\"].json[\"body\"][\"period\"] }}\",\n \"simulateOnly\": {{ $node[\"Webhook\"].json[\"body\"][\"simulateOnly\"] }},\n \"collaborators\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"collaborators\"]) }},\n \"activePlans\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"activePlans\"]) }},\n \"goals\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"goals\"]) }},\n \"salesResults\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"salesResults\"]) }},\n \"pastPeriods\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"pastPeriods\"]) }},\n \"approvedPastSettlements\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"approvedPastSettlements\"]) }},\n \"pastSalesResults\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"pastSalesResults\"]) }},\n \"pastGoals\": {{ JSON.stringify($node[\"Fetch Calculation Data\"].json[\"pastGoals\"]) }}\n}",
|
|
"options": {}
|
|
},
|
|
"id": "Http-Request-Process",
|
|
"name": "Process Formula",
|
|
"type": "n8n-nodes-base.httpRequest",
|
|
"typeVersion": 4.1,
|
|
"position": [
|
|
900,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"promptType": "define",
|
|
"text": "=Review the calculated settlements for compliance. For each item in the results array, evaluate the main settlement totals and adjustments. Return a JSON object with a \"results\" array matching the input structure, but adding the fields \"aiAudited\" (boolean) and \"aiAuditNotes\" (string or null).\nIf a collaborator's total payout is negative, set aiAudited to true and aiAuditNotes to \"Audit warning: Negative net payout detected due to clawback adjustments.\"\nIf a collaborator's total payout exceeds 10,000, set aiAudited to true and aiAuditNotes to \"Audit warning: High commission payout exceeding 10K threshold.\"\nOtherwise, set aiAudited to false and aiAuditNotes to null.\n\nInput calculations data:\n{{ JSON.stringify($node[\"Process Formula\"].json[\"results\"]) }}",
|
|
"hasOutputParser": true,
|
|
"needsFallback": true,
|
|
"options": {}
|
|
},
|
|
"id": "LLM-Chain-Audit",
|
|
"name": "LLM Chain: Compliance Audit",
|
|
"type": "@n8n/n8n-nodes-langchain.chainLlm",
|
|
"typeVersion": 1.9,
|
|
"position": [
|
|
1100,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"options": {}
|
|
},
|
|
"id": "DeepSeek-Model-Node-2",
|
|
"name": "Primary Chat Model",
|
|
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
950,
|
|
480
|
|
],
|
|
"credentials": {
|
|
"deepSeekApi": {
|
|
"id": "YbGKBhQ9rlUebE4F",
|
|
"name": "Semillero2_Primary_deepSeekApi"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"parameters": {
|
|
"options": {}
|
|
},
|
|
"id": "Google-Gemini-Model-Node-2",
|
|
"name": "Fallback Chat Model",
|
|
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
1100,
|
|
480
|
|
],
|
|
"credentials": {
|
|
"googlePalmApi": {
|
|
"id": "1Vz05qteUH9kLf7Z",
|
|
"name": "Google Gemini(PaLM) Api account"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"parameters": {
|
|
"jsonSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"results\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"main\": {\n \"type\": \"object\",\n \"properties\": {\n \"period\": { \"type\": \"string\" },\n \"planId\": { \"type\": \"number\" },\n \"userId\": { \"type\": \"number\" },\n \"salesAmount\": { \"type\": \"number\" },\n \"goalAmount\": { \"type\": \"number\" },\n \"achievementPercentage\": { \"type\": \"number\" },\n \"calculatedCommission\": { \"type\": \"number\" },\n \"calculatedBonus\": { \"type\": \"number\" },\n \"adjustmentAmount\": { \"type\": \"number\" },\n \"totalPayout\": { \"type\": \"number\" },\n \"status\": { \"type\": \"string\" },\n \"adjustmentNotes\": { \"type\": \"string\", \"nullable\": true }\n }\n },\n \"adjustments\": { \"type\": \"array\" },\n \"aiAudited\": { \"type\": \"boolean\" },\n \"aiAuditNotes\": { \"type\": \"string\", \"nullable\": true }\n }\n }\n }\n },\n \"required\": [\"results\"]\n}"
|
|
},
|
|
"id": "Structured-Output-Parser-Node-2",
|
|
"name": "Structured Output Parser",
|
|
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
1250,
|
|
480
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"conditions": {
|
|
"boolean": [
|
|
{
|
|
"value1": "={{ $node[\"Webhook\"].json[\"body\"][\"simulateOnly\"] }}",
|
|
"value2": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"id": "If-Node-Simulation",
|
|
"name": "Is Simulation Only?",
|
|
"type": "n8n-nodes-base.if",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
1350,
|
|
300
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"method": "POST",
|
|
"url": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.appUrl : $('Set Prod Environment').item.json.appUrl }}/api/n8n/save-settlements",
|
|
"sendHeaders": true,
|
|
"headerParameters": {
|
|
"parameters": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/json"
|
|
},
|
|
{
|
|
"name": "x-n8n-signature",
|
|
"value": "={{ $('Set Dev Environment').isExecuted ? $('Set Dev Environment').item.json.signature : $('Set Prod Environment').item.json.signature }}"
|
|
}
|
|
]
|
|
},
|
|
"sendBody": true,
|
|
"specifyBody": "json",
|
|
"jsonBody": "={\n \"period\": \"{{ $node[\"Webhook\"].json[\"body\"][\"period\"] }}\",\n \"simulateOnly\": false,\n \"results\": {{ JSON.stringify($node[\"LLM Chain: Compliance Audit\"].json[\"results\"]) }},\n \"uploaderId\": {{ $node[\"Webhook\"].json[\"body\"][\"uploaderId\"] || 1 }}\n}",
|
|
"options": {}
|
|
},
|
|
"id": "Http-Request-Save",
|
|
"name": "Save Settlements",
|
|
"type": "n8n-nodes-base.httpRequest",
|
|
"typeVersion": 4.1,
|
|
"position": [
|
|
1550,
|
|
400
|
|
]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"respondWith": "json",
|
|
"responseBody": "={\n \"success\": true,\n \"code\": \"SETTLEMENTS_CALCULATED\",\n \"metadata\": {\n \"count\": {{ $node[\"Process Formula\"].json[\"metadata\"][\"count\"] }},\n \"totalCommission\": {{ $node[\"Process Formula\"].json[\"metadata\"][\"totalCommission\"] }},\n \"totalAdjustment\": {{ $node[\"Process Formula\"].json[\"metadata\"][\"totalAdjustment\"] }}\n },\n \"simulated\": {{ JSON.stringify($node[\"LLM Chain: Compliance Audit\"].json[\"results\"]) }}\n}"
|
|
},
|
|
"id": "Respond-To-Webhook-Calculated",
|
|
"name": "Respond to Webhook (Calculated)",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"typeVersion": 1,
|
|
"position": [
|
|
1750,
|
|
300
|
|
]
|
|
}
|
|
],
|
|
"connections": {
|
|
"Webhook": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Is Test/Dev Mode?",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Is Test/Dev Mode?": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Set Dev Environment",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "Set Prod Environment",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Set Dev Environment": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Fetch Calculation Data",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Set Prod Environment": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Fetch Calculation Data",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Fetch Calculation Data": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Process Formula",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Process Formula": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "LLM Chain: Compliance Audit",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Primary Chat Model": {
|
|
"ai_languageModel": [
|
|
[
|
|
{
|
|
"node": "LLM Chain: Compliance Audit",
|
|
"type": "ai_languageModel",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Fallback Chat Model": {
|
|
"ai_languageModel": [
|
|
[
|
|
{
|
|
"node": "LLM Chain: Compliance Audit",
|
|
"type": "ai_languageModel",
|
|
"index": 1
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Structured Output Parser": {
|
|
"outputParser": [
|
|
[
|
|
{
|
|
"node": "LLM Chain: Compliance Audit",
|
|
"type": "ai_outputParser",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"LLM Chain: Compliance Audit": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Is Simulation Only?",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Is Simulation Only?": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Respond to Webhook (Calculated)",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
],
|
|
[
|
|
{
|
|
"node": "Save Settlements",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Save Settlements": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Respond to Webhook (Calculated)",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
}
|
|
},
|
|
"active": true,
|
|
"settings": {},
|
|
"id": "settlement-calculation-workflow"
|
|
}
|