Сценарии сбоев ATM — обзор
Справочная заметка ATM: Сценарии сбоев ATM — обзор.
Сценарии сбоев ATM — обзор
Классификация сбоев
Сбои делятся по точке возникновения и по финансовым последствиям:
mindmap
root((ATM Failures))
Сеть/Хост
Timeout авторизации
Потеря соединения
Network unreachable
Диспенсер
No Dispense
Partial Dispense
Jam банкнот
Кассета пуста
Карта
Card Read Error
Card Capture
Chip fallback
Клиент
PIN timeout
Session timeout
Cash not taken
Хост
Decline
Invalid response
Format error
Питание
Power failure mid-txn
UPS expired
Матрица сценариев — финансовые последствия
| Сценарий | Авторизация | Деньги выданы | Reversal | Финансовый исход |
|---|---|---|---|---|
| Decline | Нет | Нет | Не нужен | Нет списания |
| Timeout (нет ответа) | Неизвестно | Нет | Нужен | Зависит от результата reversal |
| No Dispense | Да (Approved) | Нет | Нужен | Reversal восстанавливает средства |
| Partial Dispense | Да | Частично | Нужен (на разницу) | Списывается фактически выданная сумма |
| Cash not taken (Retract) | Да | Выдано, возвращено | Зависит от схемы | Финансово завершена (деньги у банка) |
| Card Capture | Нет | Нет | Не нужен | Нет списания |
| Power failure after approve | Да | Неизвестно | Обязателен при восстановлении | Требует расследования |
| Format Error | Нет | Нет | Не нужен | Нет списания |
Сводная схема обработки сбоев
flowchart TD
TXN[Транзакция отправлена\nISO 8583 0200]
TXN --> RESP{Ответ получен?}
RESP -->|Нет, таймаут| TO_PATH[Timeout Path]
RESP -->|Да| PARSE{F39 = ?}
TO_PATH --> TO_REV[Reversal 0420\nF39 неизвестен]
TO_REV --> TO_RETRY{Reversal\nдоставлен?}
TO_RETRY -->|Нет| TO_QUEUE[Reversal в очередь\nповторная отправка]
TO_RETRY -->|Да| TO_END[Сессия закрыта\nОшибка клиенту]
PARSE -->|00 Approved| DISP_PATH[Dispense Path]
PARSE -->|Decline код| DECLINE[Decline Path]
PARSE -->|96 Sys Error| SYS_ERR[System Error Path]
DISP_PATH --> DISP{Купюры\nвыданы?}
DISP -->|Да, OK| SHUTTER[Shutter Open\nОжидание клиента]
DISP -->|Нет, сбой| ND_REV[No-Dispense Reversal 0420]
DISP -->|Частично| PART_REV[Partial Reversal 0420\nF95 = фактическая сумма]
SHUTTER --> TAKEN{Деньги взяты?}
TAKEN -->|Да| SUCCESS[Транзакция успешна]
TAKEN -->|Нет, таймаут| RETRACT[Retract\nВозврат в кассету]
RETRACT --> RETRACT_EJ[Запись в EJ:\nReturned-not-taken]
DECLINE --> SHOW_ERR[Показать код ошибки клиенту]
SHOW_ERR --> CAPTURE{F39 = 41/43?}
CAPTURE -->|Да| CARD_CAP[Card Capture\nКарта изъята]
CAPTURE -->|Нет| EJECT[Вернуть карту]
SYS_ERR --> SYS_RETRY{Retry?\n< max retries}
SYS_RETRY -->|Да| TXN
SYS_RETRY -->|Нет| SYS_FAIL[Fatal error\nATM Out of Service]
Приоритет сообщений при сбое
При сбое ATM должен в первую очередь защитить клиента от двойного списания:
- Reversal отправляется немедленно при обнаружении сбоя
- Если reversal не доставлен — хранится в reversal queue (персистентная очередь)
- После восстановления связи — reversal отправляется повторно
- Reversal должен быть доставлен до следующей транзакции на этом терминале
- Некоторые схемы принимают reversal в течение 24–72 часов
[!warning] Потеря reversala Если reversal не доставлен и хост не получил подтверждение — клиент может быть списан за невыданные деньги. Это dispute (опротестование). Разрешается через chargeback процесс карточной схемы.
Логирование сбоев (Electronic Journal)
Каждый сбой должен быть зафиксирован в EJ с полным контекстом:
[2026-05-05 14:23:41] TXN START STAN=123456 PAN=****1234 AMT=5000 RUB
[2026-05-05 14:23:41] AUTH SENT MTI=0200 HOST=192.168.1.100
[2026-05-05 14:23:71] AUTH TIMEOUT no response in 30s
[2026-05-05 14:23:71] REVERSAL MTI=0420 STAN=123456
[2026-05-05 14:23:72] REV ACK MTI=0430 F39=00
[2026-05-05 14:23:72] TXN END STATUS=REVERSED reason=TIMEOUT
Восстановление после сбоя питания
sequenceDiagram
participant ATM as ATM App
participant EJ as EJ Storage
participant HOST as ACQ Switch
Note over ATM: Питание восстановлено\nATM перезагружается
ATM->>EJ: Читать последнюю незавершённую транзакцию
EJ-->>ATM: TXN {STAN, PAN, AMT, STATUS=IN_PROGRESS}
ATM->>ATM: Определить состояние диспенсера\nБыли ли выданы деньги?
alt Деньги в transport/shutter (не выданы клиенту)
ATM->>ATM: Retract деньги
ATM->>HOST: Reversal 0420 {STAN, F95=0}
HOST-->>ATM: 0430 acknowledged
else Состояние диспенсера неизвестно
ATM->>HOST: Reversal 0420 {STAN, F95=0}
Note over ATM,HOST: Банк расследует по EJ\nи камерам
end
ATM->>EJ: Mark TXN as REVERSED
ATM->>ATM: Перейти в In Service
Связанные заметки
- ATM-No-Dispense-и-Reversal — детали no-dispense и reversal механизма
- ATM-Timeout-и-Decline — timeout, decline, card capture
- ATM-Схема-транзакции-Mermaid — общая схема с failure paths
- ATM-Процессинг-обзор — коды ответа F39
- TERM-reversal · TERM-dispute · TERM-chargeback
Ссылаются на эту заметку
Заметка
ATM — база знаний
Заметка
Электронный журнал ATM — виды и особенности
Заметка
Sequence Diagrams: Баланс и Депозит
Заметка
No Dispense и Reversal
Заметка
Процессинг ATM — обзор
Заметка
Схема транзакции ATM (Mermaid)
Заметка
Сценарии: Timeout, Decline, Card Capture
Заметка
Термин: EJ (Electronic Journal)
Заметка
Термин: Reversal (Отмена транзакции)