Files
aiform_dev/check_documents_detailed.py
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

87 lines
3.8 KiB
Python
Raw 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.

#!/usr/bin/env python3
"""
Детальная проверка документов в черновике
"""
import asyncio
import asyncpg
import json
POSTGRES_HOST = "147.45.189.234"
POSTGRES_PORT = 5432
POSTGRES_DB = "default_db"
POSTGRES_USER = "gen_user"
POSTGRES_PASSWORD = "2~~9_^kVsU?2\\S"
CLAIM_ID = "bddb6815-8e17-4d54-a721-5e94382942c7"
async def check_documents_detailed():
conn = await asyncpg.connect(
host=POSTGRES_HOST,
port=POSTGRES_PORT,
database=POSTGRES_DB,
user=POSTGRES_USER,
password=POSTGRES_PASSWORD
)
try:
row = await conn.fetchrow("""
SELECT id, status_code, payload, updated_at
FROM clpr_claims
WHERE id::text = $1 OR payload->>'claim_id' = $1
ORDER BY updated_at DESC
LIMIT 1
""", CLAIM_ID)
if not row:
print(f"❌ Черновик {CLAIM_ID} не найден!")
return
payload = row['payload'] if isinstance(row['payload'], dict) else json.loads(row['payload'])
print(f"📋 Статус: {row['status_code']}")
print(f"📋 Обновлён: {row['updated_at']}")
print(f"\n📋 documents_meta ({len(payload.get('documents_meta', []))} шт.):")
for i, doc in enumerate(payload.get('documents_meta', [])):
print(f" {i+1}. {doc.get('field_label', 'N/A')}")
print(f" file_id: {doc.get('file_id', 'N/A')[:80]}...")
print(f" field_name: {doc.get('field_name', 'N/A')}")
print(f"\n📋 documents_uploaded ({len(payload.get('documents_uploaded', []))} шт.):")
for i, doc in enumerate(payload.get('documents_uploaded', [])):
print(f" {i+1}. Тип: {doc.get('type', 'N/A')} / {doc.get('id', 'N/A')}")
print(f" file_id: {doc.get('file_id', 'N/A')[:80]}...")
print(f" original_file_name: {doc.get('original_file_name', 'N/A')}")
print(f"\n📋 documents_required ({len(payload.get('documents_required', []))} шт.):")
for i, doc in enumerate(payload.get('documents_required', [])):
print(f" {i+1}. {doc.get('name', 'N/A')} (id: {doc.get('id', 'N/A')})")
print(f"\n📋 current_doc_index: {payload.get('current_doc_index', 'N/A')}")
# Проверяем уникальность file_id
print(f"\n🔍 Проверка уникальности file_id:")
documents_meta = payload.get('documents_meta', [])
file_ids_meta = [doc.get('file_id') for doc in documents_meta if doc.get('file_id')]
unique_file_ids_meta = list(set(file_ids_meta))
print(f" documents_meta: всего {len(file_ids_meta)}, уникальных {len(unique_file_ids_meta)}")
if len(file_ids_meta) != len(unique_file_ids_meta):
print(f" ⚠️ ЕСТЬ ДУБЛИКАТЫ!")
from collections import Counter
duplicates = [fid for fid, count in Counter(file_ids_meta).items() if count > 1]
for dup in duplicates:
print(f" - {dup[:80]}... (встречается {Counter(file_ids_meta)[dup]} раз)")
documents_uploaded = payload.get('documents_uploaded', [])
file_ids_uploaded = [doc.get('file_id') for doc in documents_uploaded if doc.get('file_id')]
unique_file_ids_uploaded = list(set(file_ids_uploaded))
print(f" documents_uploaded: всего {len(file_ids_uploaded)}, уникальных {len(unique_file_ids_uploaded)}")
if len(file_ids_uploaded) != len(unique_file_ids_uploaded):
print(f" ⚠️ ЕСТЬ ДУБЛИКАТЫ!")
finally:
await conn.close()
if __name__ == "__main__":
asyncio.run(check_documents_detailed())