No Dispense и Reversal
Справочная заметка ATM: No Dispense и Reversal.
No Dispense и Reversal
No Dispense — определение
No Dispense — ситуация, когда:
- Хост одобрил транзакцию (F39=00, MTI 0210)
- ATM попытался выдать банкноты
- Банкноты не были выданы и не были предъявлены клиенту из-за механического сбоя, jam, пустой кассеты, ошибки сенсора, timeout устройства или сбоя терминального ПО.
Финансовый риск: без reversal клиент списывается за деньги, которые не получил.
No dispense нужно отделять от cash presented but not taken: если деньги были предъявлены в shutter, но клиент их не забрал, правила обработки могут быть другими.
Причины No Dispense
| Причина | Описание | XFS Error |
|---|---|---|
| Mechanical jam | Банкноты застряли в транспортном механизме | WFS_ERR_CDM_TOOMANYITEMS |
| Shutter failure | Затвор не открылся / не закрылся | WFS_ERR_CDM_SHUTTERNOTOPEN |
| Empty cassette | Кассета опустела в момент выдачи | WFS_ERR_CDM_CASHUNITERROR |
| Double detect | Двойная подача, банкноты отправлены в reject | Банкноты в reject кассете |
| Sensor error | Сенсорный сбой во время транспортировки | — |
| Power failure | Питание пропало во время диспенсирования | — |
Sequence Diagram — No Dispense Reversal
sequenceDiagram
autonumber
participant CH as Cardholder
participant APP as ATM App
participant XFS as XFS/CDM
participant ACQ as ACQ Switch
participant CS as Card Scheme
participant ISS as Issuer Auth
APP->>ACQ: ISO 8583 0200 (Withdrawal 5000 RUB)
ACQ->>CS: 0200 forward
CS->>ISS: 0200 route
ISS->>ISS: Approved\nHold funds
ISS-->>CS: 0210 F39=00
CS-->>ACQ: 0210 F39=00
ACQ-->>APP: 0210 F39=00 APPROVED
APP->>XFS: Dispense {5000 RUB}
XFS->>XFS: Transport banknotes...
Note over XFS: ❌ JAM — механический сбой
XFS-->>APP: DispenseFail\nWFS_ERR_CDM_TOOMANYITEMS
APP->>APP: Detect: Approved but not dispensed\n→ Must send Reversal
APP->>ACQ: ISO 8583 0420 (Reversal Advice)\nF2=PAN\nF3=010000\nF4=000000500000\nF90={original MTI, STAN, date}\nF95=000000000000 (replacement amt=0)
Note over APP,ACQ: Reversal Advice (0420) не требует\nподтверждения для продолжения\n(fire-and-forget с retry)
ACQ->>CS: 0420 forward
CS->>ISS: 0420 route
ISS->>ISS: Release hold\nRestore 5000 RUB
ISS-->>CS: 0430 F39=00
CS-->>ACQ: 0430 F39=00
ACQ-->>APP: 0430 Reversal Acknowledged
APP->>XFS: Eject Card
XFS-->>CH: Карта возвращена
APP->>CH: Показать: "Операция не выполнена.\nСредства не списаны.\nОбратитесь к администратору"
APP->>APP: Log в EJ:\nSTATUS=NO_DISPENSE\nREVERSED=true
APP->>APP: Trigger: Диспенсер — Out of Service
APP->>APP: ATM: частичный Out of Service
ISO 8583: Поля Reversal (MTI 0420)
| Field | Название | Значение |
|---|---|---|
| MTI | Message Type Indicator | 0420 (Reversal Advice) |
| F2 | PAN | Тот же, что в оригинале |
| F3 | Processing Code | Тот же, что в оригинале |
| F4 | Transaction Amount | Оригинальная сумма |
| F7 | Transmission Date/Time | Текущее время |
| F11 | STAN | Новый STAN для reversal |
| F38 | Authorization Code | Из ответа 0210 |
| F39 | Response Code | Пусто (не используется в запросе) |
| F41 | Terminal ID | Тот же |
| F90 | Original Data Elements | MTI + STAN + Date + Acq ID + Fwd ID |
| F95 | Replacement Amounts | 0 (no dispense) или фактическая сумма (partial) |
F90 — Original Data Elements (критически важен):
F90 = Original MTI (4) + Original STAN (6) +
Original Transmission Date/Time (10) +
Original Acquirer ID (11) + Original Forwarding ID (11)
Partial Dispense
Partial Dispense — выдана только часть суммы (например, запрошено 5000, выдано 3000).
Отдельная логика:
| Сценарий | Что произошло физически | Типовая финансовая логика |
|---|---|---|
| No dispense | Клиенту ничего не предъявлено | Full reversal / отмена суммы, если оригинал был авторизован |
| Partial dispense | Клиент получил часть суммы | Корректировка до фактически выданной суммы; механизм зависит от сети и профиля ISO 8583 |
| Cash presented but not taken | Деньги были предъявлены, но клиент не забрал их до timeout | Не считать автоматически no dispense; смотреть правила схемы, EJ, retract cassette и видео |
sequenceDiagram
participant APP as ATM App
participant XFS as XFS/CDM
participant ACQ as ACQ Switch
participant ISS as Issuer Auth
APP->>ACQ: 0200 F4=000000500000 (5000)
ACQ-->>APP: 0210 F39=00
APP->>XFS: Dispense 5000
XFS->>XFS: Выдано 3000\nJam на 4-й купюре
XFS-->>APP: PartialDispense {dispensed=3000, failed=2000}
APP->>XFS: Open Shutter (3000)
XFS-->>APP: Cash taken
Note over APP: Выдано 3000 из 5000\nНужен Partial Reversal на 2000
APP->>ACQ: 0420 Reversal Advice\nF4=000000500000 (original)\nF95=000000300000 (actual dispensed=3000)
Note over APP,ACQ: F95 указывает фактически\nвыданную сумму\nСписывается только 3000
ACQ->>ISS: 0420 with F95
ISS->>ISS: Adjust: hold 5000\nCharge only 3000\nRelease 2000
ISS-->>ACQ: 0430 F39=00
ACQ-->>APP: 0430
Reversal Queue — механизм повторной отправки
ATM хранит неподтверждённые reversals в персистентной очереди (файл или БД на диске):
flowchart TD
FAIL[Reversal создан\nNo Dispense / Timeout]
SEND[Отправить 0420]
ACK{0430 получен?}
QUEUE[Добавить в Reversal Queue\nПерсистентное хранилище]
RETRY[Retry при следующей\nвозможности связи]
SENT[Пометить как delivered\nУдалить из очереди]
MAXRETRY{Max retries\nисчерпаны?}
ALERT[Alert: Failed Reversal\nТребует ручного расследования]
FAIL --> SEND
SEND --> ACK
ACK -->|Да| SENT
ACK -->|Нет| QUEUE
QUEUE --> RETRY
RETRY --> ACK
MAXRETRY -->|Да| ALERT
MAXRETRY -->|Нет| RETRY
Важно:
- Очередь должна быть спроектирована так, чтобы переживать перезагрузку ATM.
- Приоритет и порядок повторной отправки reversal определяются terminal software, процессингом и правилами сети.
- Допустимые сроки доставки и retry policy зависят от платёжной схемы и профиля процессинга.
Dispute и Chargeback при неудачном Reversal
Если reversal не доставлен или отклонён:
flowchart LR
A[Клиент обращается в банк\nДеньги списаны, не выданы]
B[Банк-эмитент создаёт\nChargeback]
C[Card Scheme\nарбитраж]
D[Банк-эквайер предоставляет\nEJ + видео + reversal logs]
E{Reversal был\nуспешным?}
F[Chargeback accepted\nСредства возвращены]
G[Dispute resolved in\nfavor of acquirer]
A --> B --> C --> D --> E
E -->|Нет| F
E -->|Да| G
Доказательства для dispute:
- Electronic Journal (EJ) ATM
- Запись камеры ATM
- Логи reversal (отправлен/доставлен)
- Логи диспенсера (что именно произошло)
- Данные из reject/retract кассет (физический счёт)
Что требует проверки
- Конкретные MTI, поля replacement amounts и правила retry зависят от профиля ISO 8583 и платежной схемы.
- Для Mastercard есть публичное правило: acquirer не должен автоматически делать full/partial reversal авторизованной ATM transaction только потому, что cardholder не забрал cash.
- Для МИР/НСПК публичные Правила ПС «Мир» дают общую рамку по авторизации, представлению операций на клиринг, отмене операций в целях исправления ошибок, документам по операциям и спорным ситуациям. Но точные message-level правила no-dispense/partial-dispense reversal требуют актуальных стандартов/руководств НСПК для участников системы.
- Для Visa/UnionPay также нужно смотреть соответствующие operating rules.
- Формулировка клиентского сообщения “Средства не списаны” допустима только если ATM/host уверены в успешной отмене или локальная политика разрешает такую коммуникацию.
Типы MTI Reversal в ISO 8583
| MTI | Тип | Описание |
|---|---|---|
| 0400 | Reversal Request | ATM инициирует, ждёт подтверждения (синхронно) |
| 0410 | Reversal Response | Ответ на 0400 |
| 0420 | Reversal Advice | ATM инициирует, не ждёт (fire-and-forget, с retry) |
| 0430 | Reversal Advice Response | Подтверждение получения 0420 |
[!info] 0420 vs 0400 В отдельных ATM-профилях используется 0420 (Advice): терминал может сохранить сообщение в очереди и доставить его позднее. Выбор между
0400,0420и другими вариантами зависит от профиля ISO 8583, процессинга и правил сети.
Связанные заметки
- ATM-Сценарии-сбоев — общая матрица сбоев
- ATM-Timeout-и-Decline — timeout и decline сценарии
- ATM-ISO-8583 — поля ISO 8583 в деталях (F90, F95)
- ATM-Withdrawal-Sequence — sequence diagram success path
- ATM-Incident-Evidence-Package — единый checklist evidence
- ATM-Cash-Trapping — отдельный fraud-сценарий, который нельзя смешивать с no dispense
- TERM-reversal · TERM-dispute · TERM-chargeback · TERM-stan
- ATM-МИР-и-НСПК · ATM-Российская-регуляторика
Источники
- ISO: ISO 8583:2023.
- НСПК: Правила ПС «Мир» v4.3.
- Mastercard: Transaction Processing Rules.
- Mastercard: Chargeback Guide — ATM disputes.