164 lines
6.9 KiB
JavaScript
164 lines
6.9 KiB
JavaScript
|
|
// ============================================================================
|
|||
|
|
// Code Node: Подготовка данных для claimsave_primary
|
|||
|
|
// ============================================================================
|
|||
|
|
// Назначение: Собрать все данные из предыдущих узлов и подготовить payload
|
|||
|
|
// для сохранения первичного черновика в PostgreSQL
|
|||
|
|
//
|
|||
|
|
// Позиция: После Code4, перед claimsave_primary (PostgreSQL)
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
const items = $input.all();
|
|||
|
|
|
|||
|
|
// Получаем данные из разных узлов
|
|||
|
|
const code4Data = $('Code4').first().json.redis_value || {};
|
|||
|
|
const editFields16 = $('Edit Fields16').first().json;
|
|||
|
|
const aiAgent1Facts = $('пробрасываем факт фул и факт шорт1').first().json;
|
|||
|
|
const aiAgent13 = $('AI Agent13').first().json;
|
|||
|
|
const redisTrigger = $('Redis Trigger').first().json.message || {};
|
|||
|
|
const editFields11 = $('Edit Fields11').first().json || {};
|
|||
|
|
const editFields10 = $('Edit Fields10').first().json || {};
|
|||
|
|
const propertyNameRaw = $('propertyName').first().json || {};
|
|||
|
|
|
|||
|
|
// propertyName может быть массивом или объектом
|
|||
|
|
// Если массив - берем первый элемент, если объект - используем как есть
|
|||
|
|
const propertyName = Array.isArray(propertyNameRaw)
|
|||
|
|
? (propertyNameRaw[0] || {})
|
|||
|
|
: propertyNameRaw;
|
|||
|
|
|
|||
|
|
// Логирование для отладки unified_id
|
|||
|
|
console.log('🔍 Поиск unified_id:');
|
|||
|
|
console.log(' - propertyNameRaw (тип):', Array.isArray(propertyNameRaw) ? 'массив' : 'объект');
|
|||
|
|
console.log(' - propertyName:', propertyName);
|
|||
|
|
console.log(' - propertyName.unified_id:', propertyName?.unified_id);
|
|||
|
|
console.log(' - propertyName.body?.unified_id:', propertyName?.body?.unified_id);
|
|||
|
|
console.log(' - propertyName.result?.unified_id:', propertyName?.result?.unified_id);
|
|||
|
|
console.log(' - editFields10.unified_id:', editFields10?.unified_id);
|
|||
|
|
console.log(' - redisTrigger.unified_id:', redisTrigger?.unified_id);
|
|||
|
|
|
|||
|
|
// Собираем payload для сохранения
|
|||
|
|
const payload = {
|
|||
|
|
// Описание проблемы от пользователя
|
|||
|
|
problem_description: editFields16?.chatInput || redisTrigger?.description || null,
|
|||
|
|
|
|||
|
|
// Wizard plan от AI Agent12 (через Code4)
|
|||
|
|
wizard_plan: code4Data.wizard_plan || null,
|
|||
|
|
|
|||
|
|
// Предзаполненные ответы (если есть)
|
|||
|
|
answers_prefill: code4Data.answers_prefill || [],
|
|||
|
|
|
|||
|
|
// Отчёт о покрытии (если есть)
|
|||
|
|
coverage_report: code4Data.coverage_report || {},
|
|||
|
|
|
|||
|
|
// Данные из AI Agent1 (факты)
|
|||
|
|
ai_agent1_facts: {
|
|||
|
|
facts_short: aiAgent1Facts?.facts_short || null,
|
|||
|
|
facts_full: aiAgent1Facts?.facts_full || null,
|
|||
|
|
problem: aiAgent1Facts?.problem || null
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// Данные из AI Agent13 (RAG ответ)
|
|||
|
|
ai_agent13_rag: aiAgent13?.output || null,
|
|||
|
|
|
|||
|
|
// Контакты
|
|||
|
|
phone: redisTrigger?.phone || null,
|
|||
|
|
email: redisTrigger?.email || null,
|
|||
|
|
|
|||
|
|
// Тип дела (из wizard_plan или по умолчанию)
|
|||
|
|
type_code: code4Data.wizard_plan?.case_type || 'consumer'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// Получаем session_token (приоритет: Edit Fields11 > Redis Trigger)
|
|||
|
|
const session_token = editFields11.session_token
|
|||
|
|
|| redisTrigger.session_id
|
|||
|
|
|| null;
|
|||
|
|
|
|||
|
|
// Получаем unified_id (приоритет: propertyName > Edit Fields10 > Redis Trigger)
|
|||
|
|
// propertyName может быть массивом, объектом, или содержать unified_id в вложенных объектах
|
|||
|
|
let unified_id = null;
|
|||
|
|
|
|||
|
|
// Если propertyName - массив, ищем unified_id в элементах массива
|
|||
|
|
if (Array.isArray(propertyNameRaw)) {
|
|||
|
|
for (const item of propertyNameRaw) {
|
|||
|
|
unified_id = item?.unified_id
|
|||
|
|
|| item?.body?.unified_id
|
|||
|
|
|| item?.result?.unified_id
|
|||
|
|
|| item?.data?.unified_id
|
|||
|
|
|| null;
|
|||
|
|
if (unified_id) break;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
// Если propertyName - объект, ищем unified_id напрямую или в вложенных объектах
|
|||
|
|
unified_id = propertyName.unified_id
|
|||
|
|
|| propertyName.body?.unified_id
|
|||
|
|
|| propertyName.result?.unified_id
|
|||
|
|
|| propertyName.data?.unified_id
|
|||
|
|
|| null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Fallback на другие источники
|
|||
|
|
if (!unified_id) {
|
|||
|
|
unified_id = editFields10.unified_id
|
|||
|
|
|| redisTrigger.unified_id
|
|||
|
|
|| null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Валидация обязательных полей
|
|||
|
|
if (!session_token) {
|
|||
|
|
throw new Error('❌ session_token не найден! Проверьте узлы Edit Fields11 и Redis Trigger.');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!payload.wizard_plan) {
|
|||
|
|
console.warn('⚠️ wizard_plan отсутствует! Черновик будет сохранён без плана вопросов.');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!payload.problem_description) {
|
|||
|
|
console.warn('⚠️ problem_description отсутствует! Черновик будет сохранён без описания проблемы.');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Логирование для отладки
|
|||
|
|
console.log('🔍 Подготовка данных для claimsave_primary:');
|
|||
|
|
console.log(' - session_token:', session_token ? '✅' : '❌');
|
|||
|
|
console.log(' - unified_id:', unified_id || 'null');
|
|||
|
|
if (!unified_id) {
|
|||
|
|
console.warn('⚠️ unified_id не найден! Проверьте ноды: propertyName, Edit Fields10, Redis Trigger');
|
|||
|
|
}
|
|||
|
|
console.log(' - wizard_plan:', payload.wizard_plan ? '✅' : '❌');
|
|||
|
|
console.log(' - problem_description:', payload.problem_description ? '✅' : '❌');
|
|||
|
|
console.log(' - ai_agent1_facts:', payload.ai_agent1_facts.facts_short ? '✅' : '❌');
|
|||
|
|
console.log(' - ai_agent13_rag:', payload.ai_agent13_rag ? '✅' : '❌');
|
|||
|
|
console.log(' - phone:', payload.phone || 'null');
|
|||
|
|
console.log(' - email:', payload.email || 'null');
|
|||
|
|
|
|||
|
|
// Возвращаем данные для PostgreSQL узла
|
|||
|
|
return {
|
|||
|
|
json: {
|
|||
|
|
// Payload для параметра $1
|
|||
|
|
payload_json: payload,
|
|||
|
|
|
|||
|
|
// Session token для параметра $2
|
|||
|
|
session_token: session_token,
|
|||
|
|
|
|||
|
|
// Unified ID для параметра $3 (может быть null)
|
|||
|
|
unified_id: unified_id,
|
|||
|
|
|
|||
|
|
// Дополнительная информация для отладки
|
|||
|
|
_debug: {
|
|||
|
|
has_wizard_plan: !!payload.wizard_plan,
|
|||
|
|
has_problem_description: !!payload.problem_description,
|
|||
|
|
has_ai_agent1: !!payload.ai_agent1_facts.facts_short,
|
|||
|
|
has_ai_agent13: !!payload.ai_agent13_rag,
|
|||
|
|
source_nodes: {
|
|||
|
|
code4: 'Code4',
|
|||
|
|
editFields16: 'Edit Fields16',
|
|||
|
|
aiAgent1: 'пробрасываем факт фул и факт шорт1',
|
|||
|
|
aiAgent13: 'AI Agent13',
|
|||
|
|
redisTrigger: 'Redis Trigger',
|
|||
|
|
editFields11: 'Edit Fields11',
|
|||
|
|
editFields10: 'Edit Fields10',
|
|||
|
|
propertyName: 'propertyName'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|