Files
aiform_prod/docs/CODE_CLAIMSAVE_PRIMARY_PREPARE.js

164 lines
6.9 KiB
JavaScript
Raw Permalink Normal View History

// ============================================================================
// 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'
}
}
}
};