114 lines
4.0 KiB
JavaScript
114 lines
4.0 KiB
JavaScript
|
|
// ============================================================================
|
|||
|
|
// n8n Code Node: Подготовка параметров для SQL при пропуске документа
|
|||
|
|
// ============================================================================
|
|||
|
|
// Входные данные: массив с объектом [{ propertyName: {...}, body: {...} }]
|
|||
|
|
// Выходные данные: { $1: jsonb_payload, $2: claim_id_string }
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
// Получаем входные данные
|
|||
|
|
const inputData = $input.all();
|
|||
|
|
|
|||
|
|
if (!inputData || inputData.length === 0) {
|
|||
|
|
return [{
|
|||
|
|
json: {
|
|||
|
|
error: "Нет входных данных",
|
|||
|
|
$1: null,
|
|||
|
|
$2: null
|
|||
|
|
}
|
|||
|
|
}];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Берём первый элемент
|
|||
|
|
// Если это массив - берём первый элемент массива
|
|||
|
|
// Если это объект - используем его напрямую
|
|||
|
|
let firstItem = inputData[0].json;
|
|||
|
|
|
|||
|
|
if (Array.isArray(firstItem)) {
|
|||
|
|
firstItem = firstItem[0];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Извлекаем данные
|
|||
|
|
const propertyName = firstItem.propertyName || {};
|
|||
|
|
const body = firstItem.body || {};
|
|||
|
|
|
|||
|
|
// Извлекаем claim_id (приоритет: body -> propertyName)
|
|||
|
|
const claim_id = body.claim_id || propertyName.claim_id || null;
|
|||
|
|
|
|||
|
|
if (!claim_id) {
|
|||
|
|
return [{
|
|||
|
|
json: {
|
|||
|
|
error: "claim_id не найден",
|
|||
|
|
$1: null,
|
|||
|
|
$2: null,
|
|||
|
|
debug: {
|
|||
|
|
body_keys: Object.keys(body),
|
|||
|
|
propertyName_keys: Object.keys(propertyName)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Формируем payload для $1 (jsonb)
|
|||
|
|
// SQL ищет данные в разных местах: p->>'document_type', p->'body'->>'document_type', p->'edit_fields_raw'->'body'->>'document_type'
|
|||
|
|
const payload = {
|
|||
|
|
// ✅ Основные идентификаторы (в корне для быстрого доступа)
|
|||
|
|
session_id: body.session_id || propertyName.session_id,
|
|||
|
|
claim_id: claim_id,
|
|||
|
|
unified_id: body.unified_id || propertyName.unified_id,
|
|||
|
|
contact_id: body.contact_id || propertyName.contact_id,
|
|||
|
|
phone: body.phone || propertyName.phone,
|
|||
|
|
|
|||
|
|
// ✅ Информация о пропущенном документе (в корне для быстрого доступа)
|
|||
|
|
document_type: body.document_type,
|
|||
|
|
document_name: body.document_name || body.document_type,
|
|||
|
|
group_index: body.group_index ? parseInt(body.group_index) : (body.group_index || null),
|
|||
|
|
|
|||
|
|
// ✅ Метаданные пропуска
|
|||
|
|
skipped: body.skipped,
|
|||
|
|
action: body.action,
|
|||
|
|
skip_timestamp: body.skip_timestamp || new Date().toISOString(),
|
|||
|
|
|
|||
|
|
// ✅ Данные из propertyName (для сохранения в payload)
|
|||
|
|
problem_description: propertyName.description || propertyName.problem_description,
|
|||
|
|
email: propertyName.email,
|
|||
|
|
|
|||
|
|
// ✅ Данные из body (для совместимости)
|
|||
|
|
form_id: body.form_id,
|
|||
|
|
stage: body.stage,
|
|||
|
|
client_ip: body.client_ip,
|
|||
|
|
|
|||
|
|
// ✅ Поля для совместимости с существующим SQL (SQL ищет данные здесь)
|
|||
|
|
body: {
|
|||
|
|
document_type: body.document_type,
|
|||
|
|
document_name: body.document_name || body.document_type,
|
|||
|
|
group_index: body.group_index ? parseInt(body.group_index) : (body.group_index || null),
|
|||
|
|
session_id: body.session_id,
|
|||
|
|
claim_id: claim_id,
|
|||
|
|
unified_id: body.unified_id,
|
|||
|
|
contact_id: body.contact_id,
|
|||
|
|
phone: body.phone
|
|||
|
|
},
|
|||
|
|
edit_fields_raw: {
|
|||
|
|
propertyName: propertyName,
|
|||
|
|
body: body
|
|||
|
|
},
|
|||
|
|
edit_fields_parsed: {
|
|||
|
|
propertyName: propertyName,
|
|||
|
|
body: body
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// Возвращаем параметры для SQL
|
|||
|
|
return [{
|
|||
|
|
json: {
|
|||
|
|
$1: payload, // JSONB payload для SQL (будет передан как $1::jsonb)
|
|||
|
|
$2: claim_id, // TEXT claim_id для SQL (будет передан как $2::text)
|
|||
|
|
// Дополнительные поля для отладки
|
|||
|
|
claim_id: claim_id,
|
|||
|
|
document_type: body.document_type,
|
|||
|
|
document_name: body.document_name,
|
|||
|
|
group_index: body.group_index
|
|||
|
|
}
|
|||
|
|
}];
|
|||
|
|
|