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:
2025-11-17 10:54:30 +09:00
parent 79eb66cf51
commit babaee0ca3
3 changed files with 39 additions and 35 deletions

View File

@@ -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)