Files
crm.clientright.ru/ticket_form/check_claim_226564ce.py
Fedor b7197e0da5 feat(forms): автоподстановка банков и улучшенная обработка телефона
- Step1Phone: добавлена обработка вставки телефона с автоматической очисткой от +7 и обрезкой до 10 цифр
- Step3Payment: заменён Select на AutoComplete для выбора банка с автоподстановкой
- generateConfirmationFormHTML: заменён select на input с datalist для автоподстановки банков в форме подтверждения
- Добавлены скрытые поля bank_id для сохранения ID банка отдельно от названия
- Добавлены файлы для проверки заявки 226564ce

Улучшения UX:
- Пользователь может вводить название банка вместо прокрутки длинного списка
- Автоматическая фильтрация списка банков при вводе
- Предупреждение при обрезке номера телефона при вставке
2025-12-02 17:12:25 +03:00

134 lines
5.0 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
"""
Проверка заявки 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())