fix: парсинг клубной карты из следующей строки
- Поддержка многострочного формата из кабинета - Строка 1: название кабинета, дата, время - Строка 2: номер счета - Строка 3: сумма и клубная карта (последнее 4-значное число) - Если карта не найдена в текущей строке, проверяется следующая
This commit is contained in:
@@ -103,9 +103,11 @@ def parse_accounts_from_message(text: str) -> List[str]:
|
||||
Поддерживает формат: "КАРТА СЧЕТ" (например "2521 11-22-33-44-55-66-77")
|
||||
или просто "СЧЕТ" (например "11-22-33-44-55-66-77")
|
||||
|
||||
Также обрабатывает текст из кабинета с мусором:
|
||||
"Viposnova 16-11-2025 22:19:36 17-24-66-42-38-31-53 0.00 2918"
|
||||
Формат: кабинет дата время СЧЕТ сумма КЛУБНАЯ_КАРТА
|
||||
Также обрабатывает многострочный текст из кабинета:
|
||||
Строка 1: "Viposnova 16-11-2025 22:19:36"
|
||||
Строка 2: "17-24-66-42-38-31-53"
|
||||
Строка 3: "0.00 2918"
|
||||
Формат: строка со счетом, следующая строка с суммой и клубной картой
|
||||
|
||||
Args:
|
||||
text: Текст сообщения
|
||||
@@ -118,10 +120,10 @@ def parse_accounts_from_message(text: str) -> List[str]:
|
||||
|
||||
accounts = []
|
||||
|
||||
# Обработка построчно - для текста из кабинета с мусорными данными
|
||||
# Обработка построчно - для текста из кабинета
|
||||
lines = text.strip().split('\n')
|
||||
|
||||
for line in lines:
|
||||
for line_idx, line in enumerate(lines):
|
||||
# Разбиваем строку по пробелам
|
||||
parts = line.strip().split()
|
||||
|
||||
@@ -131,10 +133,9 @@ def parse_accounts_from_message(text: str) -> List[str]:
|
||||
if re.match(r'^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$', part):
|
||||
formatted = format_account_number(part)
|
||||
if formatted and formatted not in accounts:
|
||||
# Проверяем СЛЕДУЮЩУЮ часть после сумм на номер карты (4 цифры)
|
||||
# Формат: ... СЧЕТ СУММА КАРТА
|
||||
# Пропускаем части с суммами (содержат точку или начинаются с 0.)
|
||||
card = None
|
||||
|
||||
# Сначала проверяем текущую строку на карту после счета
|
||||
for j in range(i + 1, len(parts)):
|
||||
if re.match(r'^\d{4}$', parts[j]):
|
||||
card = parts[j]
|
||||
@@ -143,6 +144,14 @@ def parse_accounts_from_message(text: str) -> List[str]:
|
||||
if not re.match(r'^\d+\.\d+$', parts[j]):
|
||||
break
|
||||
|
||||
# Если карты нет в текущей строке, проверяем следующую строку
|
||||
if not card and line_idx + 1 < len(lines):
|
||||
next_line_parts = lines[line_idx + 1].strip().split()
|
||||
# Ищем 4-значное число в следующей строке (обычно последнее)
|
||||
for next_part in next_line_parts:
|
||||
if re.match(r'^\d{4}$', next_part):
|
||||
card = next_part
|
||||
|
||||
if card:
|
||||
full_account = f"{card} {formatted}"
|
||||
if full_account not in accounts:
|
||||
|
||||
Reference in New Issue
Block a user