{
  "id":"port11DiagnosticUpdate","name":"Portfolio 11D - Diagnostic Rule Recalculation","active":false,
  "nodes":[
    {"parameters":{"httpMethod":"POST","path":"portfolio-diagnostic-update","responseMode":"responseNode","options":{}},"webhookId":"d1140000-0000-4000-8000-000000000098","id":"d1140000-0000-4000-8000-000000000001","name":"Data Change Webhook","type":"n8n-nodes-base.webhook","typeVersion":2.1,"position":[-940,0]},
    {"parameters":{"jsCode":"const i=$json.body??$json; const required=['providerEventId','caseKey','changeType']; const missing=required.filter(k=>i[k]===undefined||i[k]===null||i[k]===''); if(missing.length)return[{json:{valid:false,error:`Missing update fields: ${missing.join(', ')}`}}]; return[{json:{valid:true,providerEventId:String(i.providerEventId),caseKey:String(i.caseKey),changeType:String(i.changeType),idempotencyKey:`diagnostic:update:${i.providerEventId}`}}];"},"id":"d1140000-0000-4000-8000-000000000002","name":"Validate Change Event","type":"n8n-nodes-base.code","typeVersion":2,"position":[-720,0]},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"d1140000-0000-4000-8000-000000000003","leftValue":"={{ $json.valid }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"d1140000-0000-4000-8000-000000000004","name":"Valid Change?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[-500,0]},
    {"parameters":{"method":"POST","url":"http://127.0.0.1:8787/diagnostic/update","sendBody":true,"contentType":"raw","rawContentType":"application/json","body":"={{ JSON.stringify($json) }}","options":{"timeout":10000}},"id":"d1140000-0000-4000-8000-000000000005","name":"Recalculate Read-Only Status","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[-260,-100],"onError":"continueRegularOutput","retryOnFail":true,"maxTries":3,"waitBetweenTries":1000},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"d1140000-0000-4000-8000-000000000006","leftValue":"={{ Boolean($json.calculatedStatus) }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"d1140000-0000-4000-8000-000000000007","name":"Status Recalculated?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[-20,-100]},
    {"parameters":{"method":"POST","url":"http://127.0.0.1:8787/diagnostic/logs","sendBody":true,"contentType":"raw","rawContentType":"application/json","body":"={{ JSON.stringify({correlationId:$json.providerEventId,workflowKey:'diagnostic-update',severity:'info',eventType:'status-recalculated',caseKey:$json.caseKey}) }}","options":{"timeout":10000}},"id":"d1140000-0000-4000-8000-000000000008","name":"Write Update Log","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[220,-180]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:true,status:'case-recalculated',update:$('Recalculate Read-Only Status').item.json,logId:$json.logId}) }}","options":{"responseCode":200}},"id":"d1140000-0000-4000-8000-000000000009","name":"Return Update Success","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[460,-180]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'invalid-change-event',error:$json.error}) }}","options":{"responseCode":400}},"id":"d1140000-0000-4000-8000-000000000010","name":"Return Invalid Change","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[-260,180]},
    {"parameters":{"method":"POST","url":"http://127.0.0.1:8787/diagnostic/admin-alerts","sendBody":true,"contentType":"raw","rawContentType":"application/json","body":"={{ JSON.stringify({correlationId:$('Validate Change Event').item.json.providerEventId,workflowKey:'diagnostic-update',error:'Rule recalculation failed after retries'}) }}","options":{"timeout":10000}},"id":"d1140000-0000-4000-8000-000000000011","name":"Escalate Update Failure","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[220,40]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'update-service-unavailable',retryable:true,adminAlertId:$json.alertId}) }}","options":{"responseCode":503}},"id":"d1140000-0000-4000-8000-000000000012","name":"Return Update Failure","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[460,40]}
  ],
  "connections":{"Data Change Webhook":{"main":[[{"node":"Validate Change Event","type":"main","index":0}]]},"Validate Change Event":{"main":[[{"node":"Valid Change?","type":"main","index":0}]]},"Valid Change?":{"main":[[{"node":"Recalculate Read-Only Status","type":"main","index":0}],[{"node":"Return Invalid Change","type":"main","index":0}]]},"Recalculate Read-Only Status":{"main":[[{"node":"Status Recalculated?","type":"main","index":0}]]},"Status Recalculated?":{"main":[[{"node":"Write Update Log","type":"main","index":0}],[{"node":"Escalate Update Failure","type":"main","index":0}]]},"Write Update Log":{"main":[[{"node":"Return Update Success","type":"main","index":0}]]},"Escalate Update Failure":{"main":[[{"node":"Return Update Failure","type":"main","index":0}]]}},
  "settings":{"executionOrder":"v1"},"pinData":{},"versionId":"d1140000-0000-4000-8000-000000000099","meta":{"templateCredsSetupCompleted":true},"tags":[]
}
