Открыть меню

Сценарии: Timeout, Decline, Card Capture

Создано 5 мая 2026 г. Обновлено 8 июн. 2026 г. 10 мин чтения

Справочная заметка ATM: Сценарии: Timeout, Decline, Card Capture.

Сценарии: Timeout, Decline, Card Capture


1. Timeout — нет ответа от хоста

Описание

Timeout наступает, когда ATM отправил запрос (0200) и не получил ответ в течение настроенного времени ожидания (обычно 30–60 секунд).

Проблема: ATM не знает, был ли запрос обработан хостом. Возможные состояния:

Состояние хостаЧто произошло
Хост не получил запросТранзакция не создана
Хост получил, не ответилТранзакция может быть создана (hold на счёте)
Ответ lost in transitТранзакция одобрена, ATM не знает

Sequence Diagram — Authorization Timeout

sequenceDiagram
    autonumber
    participant CH as Cardholder
    participant APP as ATM App
    participant ACQ as ACQ Switch
    participant ISS as Issuer Auth

    APP->>ACQ: ISO 8583 0200 (Withdrawal)\nSTAN=789012

    Note over APP: Таймер: 30 секунд

    Note over ACQ: ❌ Сеть недоступна\nили хост перегружен

    Note over APP: ⏱️ Таймаут истёк\nНет ответа

    APP->>APP: Тактика: отправить Reversal\nДаже если транзакция\nне была создана на хосте

    APP->>ACQ: ISO 8583 0420 (Reversal Advice)\nF90 = original STAN 789012\nF95 = 0

    alt Связь восстановилась
        ACQ-->>APP: 0430 F39=00 Acknowledged
        APP->>APP: Reversal confirmed\nLog: TIMEOUT_REVERSED
    else Связь всё ещё недоступна
        APP->>APP: Reversal в queue\nПовтор при восстановлении
    end

    APP->>XFS: Eject Card
    XFS-->>CH: Карта возвращена
    APP->>CH: "Связь недоступна.\nПовторите позже"

Идемпотентность Reversal при Timeout

Если ATM отправляет reversal, а хост никогда не видел оригинальный запрос, то reversal будет получен с неизвестным STAN. Хост должен:

  • Либо принять (F39=00) — безопасно
  • Либо вернуть “original not found” — ATM логирует и не предпринимает дополнительных действий

[!warning] Повторная отправка оригинала ATM никогда не повторяет оригинальный 0200 после таймаута. Только reversal. Повторная отправка 0200 может привести к двойному списанию.


2. Decline — отказ в авторизации

Описание

Хост вернул ответ с F39 ≠ 00. Транзакция отклонена. Деньги не списываются, reversal не нужен.

Полная таблица кодов Decline с поведением ATM

[!warning] Caveat по F39 Коды ниже — типовые ISO 8583/processor examples. Фактическое поведение ATM по card capture зависит от правил платежной системы, политики эмитента/эквайера, конфигурации terminal application, типа карты, юридической среды и возможностей устройства. Для МИР/НСПК нужно сверять актуальные правила и стандарты НСПК.

F39ТекстПричинаПоведение ATM
05Do Not HonorОбщий отказ эмитентаПоказать ошибку, вернуть карту
12Invalid TransactionТип транзакции не поддерживаетсяПоказать ошибку, вернуть карту
13Invalid AmountНекорректная сумма (0 или >max)Показать ошибку
14Invalid Card NumberPAN не существуетПоказать ошибку, вернуть карту
30Format ErrorОшибка формата сообщенияLog error, Out of Service
41Lost CardКарта заявлена утеряннойCard capture, если это требует/разрешает профиль сети и конфигурация ATM
43Stolen CardКарта заявлена украденнойCard capture, если это требует/разрешает профиль сети и конфигурация ATM
51Insufficient FundsНедостаточно средствПредложить меньшую сумму
54Expired CardИстёк срок действияПоказать ошибку, вернуть карту
55Incorrect PINНеверный PINСчётчик PIN попыток +1
57Transaction Not PermittedОперация запрещена для картыПоказать ошибку
61Exceeds Withdrawal LimitПревышен лимит суммыПредложить меньшую сумму
65Exceeds Frequency LimitПревышен лимит количества операцийПоказать ошибку
75PIN Tries ExceededИсчерпаны попытки PINКарта может быть изъята
91Issuer InoperativeЭмитент недоступенПредложить повторить позже
96System MalfunctionОшибка системыПредложить повторить позже

Sequence Diagram — Decline (F39=51, NSF)

sequenceDiagram
    autonumber
    participant CH as Cardholder
    participant APP as ATM App
    participant ACQ as ACQ Switch
    participant ISS as Issuer Auth

    APP->>ACQ: ISO 8583 0200 (Withdrawal 10000 RUB)
    ACQ->>ISS: 0200 route
    ISS->>ISS: Check balance: 3500 RUB\n10000 > 3500 → Decline
    ISS-->>ACQ: 0210 F39=51\n(Insufficient Funds)
    ACQ-->>APP: 0210 F39=51

    APP->>APP: F39=51 → No dispense\nNo reversal needed

    APP->>CH: Показать: "Недостаточно средств"

    opt Предложить меньшую сумму (зависит от реализации ПО)
        APP->>CH: "Хотите ввести другую сумму?"
        CH->>APP: Новая сумма: 3000 RUB
        APP->>ACQ: Новый 0200 с суммой 3000
    end

    APP->>XFS: Eject Card
    XFS-->>CH: Карта возвращена

3. Неверный PIN — счётчик попыток

Логика счётчика PIN

flowchart TD
    PIN_ENTER[Клиент ввёл PIN]
    SEND[Отправить запрос на хост\nISO 8583 0200 + PINBlock]
    RESP{F39 = ?}
    
    RESP -->|00 Approved| OK[Авторизация успешна]
    RESP -->|55 Wrong PIN| COUNTER[PIN Counter +1]
    COUNTER --> CHECK{Counter\n>= max?}
    
    CHECK -->|Нет, < max| RETRY[Предложить\nповторить PIN]
    RETRY --> PIN_ENTER
    
    CHECK -->|Да, >= max| BLOCKED[Карта заблокирована\nна уровне эмитента]
    BLOCKED --> CAPTURE{Capture card?\nПолитика банка}
    CAPTURE -->|Да| CARD_CAP[Card Capture]
    CAPTURE -->|Нет| EJECT[Вернуть карту]

    RESP -->|75 PIN Tries Exceeded| ALREADY[Уже заблокирована\nCard Capture по политике]

Максимум PIN-попыток: обычно 3 (стандарт большинства эмитентов).

[!note] Где хранится счётчик? Счётчик PIN-попыток хранится у эмитента (или на чипе EMV). ATM сам счёт не ведёт — он полагается на ответ хоста. После каждого F39=55 — повторный запрос. После F39=75 — попытки исчерпаны на стороне эмитента.


4. Card Capture — изъятие карты

Когда ATM изымает карту

УсловиеF39Действие
Карта утеряна41Capture, если это предусмотрено правилами/профилем сети и конфигурацией терминала
Карта украдена43Capture, если это предусмотрено правилами/профилем сети и конфигурацией терминала
PIN исчерпан75Capture или возврат карты — по политике эмитента/эквайера и terminal configuration
Карта не извлечена клиентомCapture/retract механически, если карта физически осталась в card reader

Публичные примеры F39 для card capture

В открытых processor/reference docs часто встречаются такие примеры:

F39Типовой текстПрактический смысл
04Pick up cardНе обслуживать карту; возможное изъятие в card-present среде
07Pick up card, special conditionСпециальное условие/подозрение; возможное изъятие
41Lost cardКарта заявлена утерянной; возможное изъятие
43Stolen cardКарта заявлена украденной; возможное изъятие
67Card to be picked up at ATMВ некоторых processor profiles явно трактуется как pickup at ATM

Эта таблица не является правилом для любой сети. Для МИР/НСПК нормативнее использовать Правила/Стандарты ПС «Мир»: публичные Правила ПС «Мир» указывают, что причинами захвата карты в сети устройств эквайера могут быть технический сбой, сообщение от эмитента/операционного центра и наличие карты в stop-list со статусом «изъять» или «потерянная/украденная». | Просроченная карта (локальная проверка) | 54 | Зависит от политики ATM |

Sequence Diagram — Card Capture (Lost Card)

sequenceDiagram
    autonumber
    participant CH as Cardholder
    participant APP as ATM App
    participant XFS as XFS/Card Reader
    participant ACQ as ACQ Switch
    participant ISS as Issuer Auth

    APP->>ACQ: ISO 8583 0200 (Withdrawal)
    ACQ->>ISS: 0200
    ISS->>ISS: Card status: LOST\n→ Capture required
    ISS-->>ACQ: 0210 F39=41 (Lost Card - Capture)
    ACQ-->>APP: 0210 F39=41

    APP->>APP: F39=41 → Capture if configured/required
    APP->>CH: Показать:\n"Карта изъята.\nОбратитесь в банк"

    Note over APP: Карта удерживается\nвнутри ридера

    APP->>XFS: Retain Card (не эжектировать)
    XFS->>XFS: Карта перемещается в\nCard Capture Bin

    APP->>APP: Log в EJ:\nCARD CAPTURED F39=41\nPAN=****1234

    Note over CH: Карта физически у банка\nКлиент обращается в отделение

Card Capture Bin

  • Физический контейнер внутри ATM для изъятых карт
  • Ёмкость: обычно 100–200 карт
  • При инкассации/обслуживании — содержимое извлекается
  • Инкассированные карты уничтожаются по процедуре банка

5. Session Timeout — клиент не взаимодействует

sequenceDiagram
    participant CH as Cardholder
    participant APP as ATM App
    participant XFS as XFS Layer

    APP->>CH: Показать экран операций
    Note over APP: Таймер бездействия: 60 сек
    Note over CH: ❌ Клиент не нажимает ничего

    APP->>APP: Session timeout

    APP->>XFS: Eject Card
    XFS-->>CH: Карта возвращена автоматически
    APP->>CH: Экран: "Время сессии истекло"
    APP->>APP: Возврат на стартовый экран

Стандартные таймауты сессии (зависят от конфигурации ATM):

СостояниеТипичный таймаут
Ввод PIN30–60 сек
Выбор операции60–90 сек
Выбор суммы60 сек
Ожидание ответа хоста30–60 сек
Взятие денег (shutter open)30 сек
Взятие карты (eject)30 сек
Чтение чека30–60 сек

6. Network Failure — потеря связи с хостом

Для российского контекста важно различать отсутствие мобильного интернета у клиента, деградацию внешнего канала банкомата и полную потерю связи ATM с host/processor. Публичные источники подтверждают адаптацию банкоматов к отключениям мобильного интернета через проводные каналы/Wi-Fi, но не подтверждают общий режим полноценного offline cash withdrawal без authorization. См. ATM-Russia-Offline-Operation.

flowchart TD
    CONN[ATM отправляет keepalive\nISO 8583 0800 Network Mgmt]
    RESP{0810 получен?}
    
    RESP -->|Да| OK[Связь в норме\nIn Service]
    RESP -->|Нет, retry N раз| FAILOVER{Backup host\nнастроен?}
    
    FAILOVER -->|Да| SWITCH[Переключение на\nBackup Host\nTCP reconnect]
    SWITCH --> CONN2[Reconnect +\nNetwork Mgmt 0800]
    CONN2 --> RESP2{0810?}
    RESP2 -->|Да| OK
    RESP2 -->|Нет| OOS

    FAILOVER -->|Нет| OOS[ATM Out of Service\nЭкран: "Временно недоступен"]
    
    OOS --> MONITOR[Алерт в EMS\nмониторинг банка]
    MONITOR --> ENGINEER[Инженер / удалённая\nдиагностика]

ISO 8583 Network Management (0800/0810):

ФункцияF70 (Network Management Code)
Sign-On001
Sign-Off002
Echo (Heartbeat)301
Key Exchange101

7. Chip Fallback — переход на магнитную полосу

Fallback — если чип карты не читается, ATM предлагает использовать магнитную полосу.

flowchart TD
    CHIP[Попытка чтения чипа EMV]
    CHIP_OK{Чип прочитан?}
    CHIP_OK -->|Да| EMV_AUTH[EMV авторизация]
    CHIP_OK -->|Нет, 2-3 попытки| FALLBACK{Fallback разрешён\nконфигурацией?}
    FALLBACK -->|Нет| EJECT[Карта возвращена\nОшибка чтения]
    FALLBACK -->|Да| MAG[Mag Stripe авторизация\nF22=021]
    MAG --> HOST_CHECK{Хост/эмитент\nразрешает fallback?}
    HOST_CHECK -->|Да F39=00| OK[Транзакция успешна]
    HOST_CHECK -->|Нет F39=57| DECLINE[Decline: fallback not allowed]

[!warning] Fallback и безопасность PCI DSS и правила карточных схем ограничивают fallback. Многие эмитенты блокируют fallback-транзакции как потенциально мошеннические. Терминал должен фиксировать в F22 код 021 (mag stripe fallback), чтобы эмитент мог принять решение.


Связанные заметки

Источники

Ссылаются на эту заметку

Источник: публичный слой Obsidian Vault.