fix: исправлен парсинг клубной карты из текста кабинета
- Клубная карта теперь извлекается как отдельное число ПОСЛЕ счета и суммы - Формат: кабинет дата время СЧЕТ сумма КЛУБНАЯ_КАРТА - Пример: 'Viposnova 16-11-2025 13:48:51 21-04-80-64-68-25-68 0.00 2521' - Карта: 2521 (последнее 4-значное число), а НЕ последние 4 цифры счета - Поиск карты после счета с пропуском сумм (содержат точку)
This commit is contained in:
@@ -105,6 +105,7 @@ def parse_accounts_from_message(text: str) -> List[str]:
|
||||
|
||||
Также обрабатывает текст из кабинета с мусором:
|
||||
"Viposnova 16-11-2025 22:19:36 17-24-66-42-38-31-53 0.00 2918"
|
||||
Формат: кабинет дата время СЧЕТ сумма КЛУБНАЯ_КАРТА
|
||||
|
||||
Args:
|
||||
text: Текст сообщения
|
||||
@@ -130,9 +131,19 @@ 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 цифры)
|
||||
if i > 0 and re.match(r'^\d{4}$', parts[i-1]):
|
||||
card = parts[i-1]
|
||||
# Проверяем СЛЕДУЮЩУЮ часть после сумм на номер карты (4 цифры)
|
||||
# Формат: ... СЧЕТ СУММА КАРТА
|
||||
# Пропускаем части с суммами (содержат точку или начинаются с 0.)
|
||||
card = None
|
||||
for j in range(i + 1, len(parts)):
|
||||
if re.match(r'^\d{4}$', parts[j]):
|
||||
card = parts[j]
|
||||
break
|
||||
# Если нашли не сумму и не карту - выходим
|
||||
if not re.match(r'^\d+\.\d+$', parts[j]):
|
||||
break
|
||||
|
||||
if card:
|
||||
full_account = f"{card} {formatted}"
|
||||
if full_account not in accounts:
|
||||
accounts.append(full_account)
|
||||
|
||||
Reference in New Issue
Block a user