semillero-special-hotel/n8n/settlement_calculation_workflow.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"
}