# Лог сессии 28.11.2025 — Дедупликация документов и исправление field_label ## Проблемы, которые были решены ### 1. Неправильный `field_label` ("group-2" вместо "Переписка") **Причина:** В коде `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` использовался индекс `grp` (позиция в `documents_required`) для доступа к массиву `uploads_field_labels`, но этот массив содержит элементы с индексами от 0 (текущий запрос). **Исправление:** Изменён доступ к массивам на индекс `0`: ```javascript // Было: const field_label = uploads_field_labels[grp] || ... // Стало: const field_label = uploads_field_labels[0] || uploads_field_names[0] || uploads_descriptions[0] || `group-${grp}`; ``` **Файл:** `ticket_form/docs/N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` --- ### 2. Дублирование записей в `documents_meta` **Причина:** SQL использовал простую конкатенацию `||` для объединения новых и существующих `documents_meta`, что приводило к накоплению дубликатов (было 28 записей вместо 2). **Исправление:** Создан новый SQL с дедупликацией — новые записи заменяют старые с тем же `field_name`: ```sql SELECT DISTINCT ON (doc->>'field_name') doc FROM ( SELECT ... AS doc, 1 AS priority -- новые (приоритет) UNION ALL SELECT ... AS doc, 2 AS priority -- существующие ) all_docs ORDER BY doc->>'field_name', priority, (doc->>'uploaded_at') DESC NULLS LAST ``` **Файл:** `ticket_form/docs/SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql` --- ### 3. Ошибка `ON CONFLICT` для `document_texts` **Причина:** Уникальный индекс на `file_hash` был частичным (`WHERE file_hash IS NOT NULL`), что не позволяло использовать `ON CONFLICT (file_hash)`. **Исправление:** Создан полный уникальный индекс: ```sql DROP INDEX IF EXISTS idx_document_texts_hash_unique; CREATE UNIQUE INDEX idx_document_texts_hash_unique ON document_texts(file_hash); ``` --- ## Созданные/изменённые файлы | Файл | Описание | |------|----------| | `SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql` | SQL с дедупликацией `documents_meta` | | `SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql` | SQL для очистки существующих дубликатов | | `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` | Исправлен доступ к `uploads_field_labels[0]` | --- ## SQL-запросы для n8n ### Проверка дубликата по хешу ```sql SELECT EXISTS (SELECT 1 FROM document_texts WHERE file_hash = '{{ $json.file_hash }}') AS found, (SELECT id FROM document_texts WHERE file_hash = '{{ $json.file_hash }}' LIMIT 1) AS existing_id; ``` ### Вставка с дедупликацией ```sql INSERT INTO document_texts (file_id, file_url, path, title, filename_for_upload, "text", description, file_hash) VALUES (...) ON CONFLICT (file_hash) DO NOTHING RETURNING id, file_id, title, file_hash; ``` --- ## Изменения в БД 1. Создан уникальный индекс `idx_document_texts_hash_unique` на `document_texts(file_hash)` 2. Очищены дубликаты в `documents_meta` для заявки `ef853bac-f54b-46aa-adf8-f0c9c0cd76bc` (было 28 → стало 2) 3. Исправлен `field_label` для `uploads[2][0]` на "Переписка" --- ## Рекомендации 1. **Обновить SQL в n8n** ноде `claimsave` на версию из `SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql` 2. **Обновить код** в ноде `editfiletobd1` на версию из `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` 3. **Добавить проверку хеша** перед вставкой в `document_texts` для информирования о дубликатах