#!/usr/bin/env python3 """ Проверка заявки 226564ce-d7cf-48ee-a820-690e8f5ec8e5 """ import asyncio import asyncpg import json from datetime import datetime 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 = "226564ce-d7cf-48ee-a820-690e8f5ec8e5" async def check_claim(): conn = await asyncpg.connect( host=POSTGRES_HOST, port=POSTGRES_PORT, database=POSTGRES_DB, user=POSTGRES_USER, password=POSTGRES_PASSWORD ) try: # 1. Проверяем заявку claim_row = await conn.fetchrow(""" SELECT id, status_code, created_at, updated_at, expires_at, payload FROM clpr_claims WHERE id::text = $1 OR payload->>'claim_id' = $1 ORDER BY updated_at DESC LIMIT 1 """, CLAIM_ID) if not claim_row: print(f"❌ Заявка {CLAIM_ID} не найдена!") return print(f"✅ Заявка найдена:") print(f" ID: {claim_row['id']}") print(f" Status: {claim_row['status_code']}") print(f" Created: {claim_row['created_at']}") print(f" Updated: {claim_row['updated_at']}") print(f" Expires: {claim_row['expires_at']}") payload = claim_row['payload'] if isinstance(claim_row['payload'], dict) else json.loads(claim_row['payload']) # 2. Проверяем documents_meta documents_meta = payload.get('documents_meta', []) print(f"\n📋 documents_meta: {len(documents_meta)} записей") if documents_meta: # Проверяем на дубликаты field_names = [doc.get('field_name') for doc in documents_meta] duplicates = [name for name in field_names if field_names.count(name) > 1] if duplicates: print(f" ⚠️ Найдены дубликаты field_name: {set(duplicates)}") for i, doc in enumerate(documents_meta): print(f"\n {i+1}. field_name: {doc.get('field_name', 'N/A')}") print(f" field_label: {doc.get('field_label', 'N/A')}") print(f" file_id: {doc.get('file_id', 'N/A')}") print(f" file_name: {doc.get('file_name', 'N/A')}") print(f" uploaded_at: {doc.get('uploaded_at', 'N/A')}") else: print(" ⚠️ documents_meta пуст!") # 3. Проверяем документы в таблице claim_uuid = claim_row['id'] docs_rows = await conn.fetch(""" SELECT id, claim_id, field_name, file_id, file_name, original_file_name, uploaded_at, file_hash FROM clpr_claim_documents WHERE claim_id = $1 ORDER BY uploaded_at DESC """, str(claim_uuid)) print(f"\n📄 Документы в clpr_claim_documents: {len(docs_rows)} записей") for i, row in enumerate(docs_rows): print(f"\n {i+1}. field_name: {row['field_name']}") print(f" file_id: {row['file_id']}") print(f" file_name: {row['file_name']}") print(f" file_hash: {row['file_hash'] or 'NULL'}") print(f" uploaded_at: {row['uploaded_at']}") # 4. Сравниваем documents_meta и clpr_claim_documents print(f"\n🔍 Сравнение:") meta_field_names = set(doc.get('field_name') for doc in documents_meta) table_field_names = set(row['field_name'] for row in docs_rows) only_in_meta = meta_field_names - table_field_names only_in_table = table_field_names - meta_field_names if only_in_meta: print(f" ⚠️ Только в documents_meta: {only_in_meta}") if only_in_table: print(f" ⚠️ Только в clpr_claim_documents: {only_in_table}") if not only_in_meta and not only_in_table: print(f" ✅ Все field_name совпадают") # 5. Проверяем поле upload_description upload_description = payload.get('upload_description') print(f"\n📝 upload_description: {upload_description}") # 6. Проверяем answers answers = payload.get('answers', {}) print(f"\n💬 answers: {len(answers)} полей") if answers: for key, value in list(answers.items())[:5]: # Первые 5 print(f" {key}: {str(value)[:50]}...") finally: await conn.close() if __name__ == "__main__": asyncio.run(check_claim())