{
  "id":"port12TranscriptQA","name":"Portfolio 12B - Conversational AI Transcript QA","active":false,
  "nodes":[
    {"parameters":{"httpMethod":"POST","path":"portfolio-conversation-qa","responseMode":"responseNode","options":{}},"webhookId":"e1220000-0000-4000-8000-000000000098","id":"e1220000-0000-4000-8000-000000000001","name":"Transcript QA Webhook","type":"n8n-nodes-base.webhook","typeVersion":2.1,"position":[-760,0]},
    {"parameters":{"jsCode":"const i=$json.body??$json; const required=['evaluationId','botMode','turns','expectedOutcome']; const missing=required.filter(k=>i[k]===undefined||i[k]===null||i[k]===''); if(missing.length)return[{json:{valid:false,error:`Missing QA fields: ${missing.join(', ')}`}}]; if(!Array.isArray(i.turns)||i.turns.length<2)return[{json:{valid:false,error:'At least two transcript turns are required'}}]; return[{json:{valid:true,evaluationId:String(i.evaluationId),botMode:String(i.botMode),turns:i.turns,expectedOutcome:String(i.expectedOutcome),simulateQaFailure:i.simulateQaFailure===true,idempotencyKey:`chatbot:qa:${i.evaluationId}`}}];"},"id":"e1220000-0000-4000-8000-000000000002","name":"Validate QA Fixture","type":"n8n-nodes-base.code","typeVersion":2,"position":[-540,0]},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"e1220000-0000-4000-8000-000000000003","leftValue":"={{ $json.valid }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"e1220000-0000-4000-8000-000000000004","name":"Valid QA Fixture?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[-320,0]},
    {"parameters":{"method":"POST","url":"http://127.0.0.1:8787/chatbot/qa","sendBody":true,"contentType":"raw","rawContentType":"application/json","body":"={{ JSON.stringify($json) }}","options":{"timeout":10000}},"id":"e1220000-0000-4000-8000-000000000005","name":"Score Transcript","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[-80,-100],"onError":"continueRegularOutput","retryOnFail":true,"maxTries":3,"waitBetweenTries":1000},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"e1220000-0000-4000-8000-000000000006","leftValue":"={{ Boolean($json.qaId) }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"e1220000-0000-4000-8000-000000000007","name":"QA Completed?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[160,-100]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:true,status:$json.passed?'qa-passed':'qa-needs-improvement',evaluation:$json}) }}","options":{"responseCode":200}},"id":"e1220000-0000-4000-8000-000000000008","name":"Return QA Result","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[400,-180]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'invalid-qa-fixture',error:$json.error}) }}","options":{"responseCode":400}},"id":"e1220000-0000-4000-8000-000000000009","name":"Return Invalid QA","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[-80,160]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'qa-service-unavailable',retryable:true}) }}","options":{"responseCode":503}},"id":"e1220000-0000-4000-8000-000000000010","name":"Return QA Failure","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[400,20]}
  ],
  "connections":{"Transcript QA Webhook":{"main":[[{"node":"Validate QA Fixture","type":"main","index":0}]]},"Validate QA Fixture":{"main":[[{"node":"Valid QA Fixture?","type":"main","index":0}]]},"Valid QA Fixture?":{"main":[[{"node":"Score Transcript","type":"main","index":0}],[{"node":"Return Invalid QA","type":"main","index":0}]]},"Score Transcript":{"main":[[{"node":"QA Completed?","type":"main","index":0}]]},"QA Completed?":{"main":[[{"node":"Return QA Result","type":"main","index":0}],[{"node":"Return QA Failure","type":"main","index":0}]]}},
  "settings":{"executionOrder":"v1"},"pinData":{},"versionId":"e1220000-0000-4000-8000-000000000099","meta":{"templateCredsSetupCompleted":true},"tags":[]
}
