Files
aiform_dev/docs/SQL_FIX_CLAIM_DOCUMENTS_FIELD_NAMES.sql
AI Assistant 02689e65db fix: Исправление загрузки документов и SQL запросов
- Исправлена потеря документов при обновлении черновика (SQL объединяет вместо перезаписи)
- Исправлено определение типа документа (приоритет field_label над field_name)
- Исправлены дубликаты в documents_meta и documents_uploaded
- Добавлена передача group_index с фронтенда для правильного field_name
- Исправлены все документы в таблице clpr_claim_documents с правильными field_name
- Обновлены SQL запросы: claimsave и claimsave_final для нового флоу
- Добавлена поддержка multi-file upload для одного документа
- Исправлены дубликаты в списке загруженных документов на фронтенде

Файлы:
- SQL: SQL_CLAIMSAVE_FIXED_NEW_FLOW.sql, SQL_CLAIMSAVE_FINAL_FIXED_NEW_FLOW_WITH_UPLOADED.sql
- n8n: N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js (поддержка group_index)
- Backend: documents.py (передача group_index в n8n)
- Frontend: StepWizardPlan.tsx (передача group_index, исправление дубликатов)
- Скрипты: fix_claim_documents_field_names.py, fix_documents_meta_duplicates.py

Результат: документы больше не теряются, имеют правильные типы и field_name
2025-11-26 19:54:51 +03:00

99 lines
3.1 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================================
-- SQL для исправления field_name в таблице clpr_claim_documents
-- ============================================================================
-- Проблема: Все документы имеют одинаковый field_name (uploads[0][0])
-- Решение: Пересоздаём записи с правильными field_name на основе documents_uploaded
-- ============================================================================
-- Для конкретного claim_id
WITH claim_data AS (
SELECT
id,
payload
FROM clpr_claims
WHERE id::text = 'bddb6815-8e17-4d54-a721-5e94382942c7'
OR payload->>'claim_id' = 'bddb6815-8e17-4d54-a721-5e94382942c7'
ORDER BY updated_at DESC
LIMIT 1
),
-- Извлекаем documents_required для определения индексов
documents_required_array AS (
SELECT
jsonb_array_elements(payload->'documents_required') WITH ORDINALITY AS doc_req(doc, idx)
FROM claim_data
),
-- Извлекаем documents_uploaded с правильными индексами
documents_uploaded_mapped AS (
SELECT
doc_up.*,
(doc_req.idx - 1)::int AS group_index -- Индекс документа (0-based)
FROM claim_data,
jsonb_array_elements(payload->'documents_uploaded') AS doc_up,
documents_required_array doc_req
WHERE (doc_up->>'id' = doc_req.doc->>'id' OR doc_up->>'type' = doc_req.doc->>'id')
),
-- Удаляем старые записи
deleted_old AS (
DELETE FROM clpr_claim_documents
WHERE claim_id = (SELECT id::text FROM claim_data)
RETURNING claim_id, field_name, file_id
),
-- Вставляем новые записи с правильными field_name
inserted_new AS (
INSERT INTO clpr_claim_documents (
claim_id,
field_name,
file_id,
file_name,
original_file_name,
uploaded_at
)
SELECT
(SELECT id::text FROM claim_data) AS claim_id,
'uploads[' || group_index || '][0]' AS field_name,
doc_up->>'file_id' AS file_id,
doc_up->>'file_name' AS file_name,
doc_up->>'original_file_name' AS original_file_name,
COALESCE(
(doc_up->>'uploaded_at')::timestamptz,
now()
) AS uploaded_at
FROM documents_uploaded_mapped doc_up
WHERE doc_up->>'file_id' IS NOT NULL
AND doc_up->>'file_id' <> ''
ON CONFLICT (claim_id, field_name) DO UPDATE SET
file_id = EXCLUDED.file_id,
file_name = EXCLUDED.file_name,
original_file_name = EXCLUDED.original_file_name,
uploaded_at = EXCLUDED.uploaded_at
RETURNING claim_id, field_name, file_id, file_name
)
-- Возвращаем результат
SELECT
'Удалено старых записей' AS action,
COUNT(*) AS count
FROM deleted_old
UNION ALL
SELECT
'Вставлено новых записей' AS action,
COUNT(*) AS count
FROM inserted_new;
-- Проверка результата
SELECT
ccd.claim_id,
ccd.field_name,
ccd.file_id,
ccd.file_name,
ccd.original_file_name,
ccd.uploaded_at
FROM clpr_claim_documents ccd
WHERE ccd.claim_id = 'bddb6815-8e17-4d54-a721-5e94382942c7'
ORDER BY ccd.field_name;