Открыть меню

Sequence Diagrams: Баланс и Депозит

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

Справочная заметка ATM: Sequence Diagrams: Баланс и Депозит.

Sequence Diagrams: Баланс и Депозит


1. Balance Inquiry (Запрос баланса)

Описание

Запрос баланса — нефинансовая транзакция. Деньги не перемещаются.
ISO 8583: MTI 0200, Processing Code F3 = 31 0000 00.

Баланс может быть:

  • Ledger balance — бухгалтерский баланс (все проведённые операции)
  • Available balance — доступный баланс (с учётом лимитов и холдов)

ATM обычно показывает available balance. Зависит от реализации эмитента.

sequenceDiagram
    autonumber
    participant CH as Cardholder
    participant APP as ATM App
    participant XFS as XFS Layer
    participant ACQ as ACQ Switch
    participant CS as Card Scheme
    participant ISS as Issuer Auth

    CH->>XFS: Вставить карту
    XFS-->>APP: CardInserted
    APP->>XFS: Read Card
    XFS-->>APP: CardData {PAN, Track2, EMV}

    APP->>CH: Показать: Введите PIN
    CH->>XFS: Ввод PIN (EPP)
    XFS-->>APP: PINBlock encrypted

    APP->>CH: Выберите операцию
    CH->>APP: Balance Inquiry

    APP->>APP: Формировать ISO 8583 MTI=0200\nF3=310000 (Balance Inquiry)\nF11=STAN, F41=TermID\nF52=PINBlock, F55=EMV data

    APP->>ACQ: ISO 8583 0200 (Balance Request)

    ACQ->>ACQ: BIN routing

    alt On-Us
        ACQ->>ACQ: Query account balance
    else Off-Us
        ACQ->>CS: ISO 8583 0200 forward
        CS->>ISS: ISO 8583 0200
        ISS->>ISS: Get available balance\nGet ledger balance
        ISS-->>CS: ISO 8583 0210\nF39=00\nF54=Balance {available, ledger}
        CS-->>ACQ: ISO 8583 0210
    end

    ACQ-->>APP: ISO 8583 0210\nF39=00\nF54 = Balance fields

    APP->>APP: Parse F54:\nAvailable Balance\nLedger Balance

    alt Баланс получен
        APP->>CH: Показать баланс на экране\n"Доступно: 12 500.00 RUB"
        APP->>CH: Распечатать баланс на чеке? (Y/N)
        alt Да
            APP->>XFS: Print Receipt (баланс)
            XFS-->>CH: Чек напечатан
        end
    else F39 != 00 (ошибка)
        APP->>CH: Показать: Баланс недоступен\nResponse code: XX
    end

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

Особенности Balance Inquiry

ПараметрЗначение
MTI0200
F3 (Processing Code)31 0000 00
F52 (PIN)Требуется (стандартно)
F54 (Additional Amounts)Ответ содержит баланс
SettlementНет финансового списания
InterchangeМинимальная или нулевая

[!note] PIN при запросе баланса Большинство сетей требуют PIN даже для balance inquiry. Некоторые банки/схемы позволяют баланс без PIN через contactless (NFC), в этом случае PIN не запрашивается.


2. Deposit (Внесение наличных / Cash-In)

Описание

Депозит — вносение наличных через ATM с зачислением на счёт.
Требует наличия Cash-In модуля: BNA (Banknote Acceptor) или CRM (Cash Recycler).

ISO 8583: MTI 0200, Processing Code F3 = 21 0000 00.

Ключевые особенности:

  • Клиент вносит банкноты → ATM верифицирует → подтверждает сумму → клиент принимает или отменяет → транзакция отправляется на хост
  • Если транзакция отклонена хостом — ATM возвращает банкноты клиенту
  • Транзакция двухфазная: верификация банкнот → подтверждение → авторизация
sequenceDiagram
    autonumber
    participant CH as Cardholder
    participant APP as ATM App
    participant XFS as XFS Layer
    participant BNA as BNA/CRM Module
    participant ACQ as ACQ Switch
    participant CS as Card Scheme
    participant ISS as Issuer Auth

    CH->>XFS: Вставить карту
    XFS-->>APP: CardInserted
    APP->>XFS: Read Card
    XFS-->>APP: CardData

    APP->>CH: Введите PIN
    CH->>XFS: Ввод PIN
    XFS-->>APP: PINBlock

    APP->>CH: Выберите операцию
    CH->>APP: Deposit / Cash In

    APP->>XFS: Open Deposit Shutter
    XFS-->>BNA: Open input slot

    APP->>CH: Вложите банкноты

    CH->>BNA: Внести банкноты

    BNA->>BNA: Захватить банкноты\nТранспортировать в escrow

    Note over BNA: Валидация каждой банкноты:\n- подлинность (UV, IR, magnetic)\n- номинал (размер, рисунок)\n- пригодность (целостность)\n- дублирование (anti-double)

    alt Банкноты приняты
        BNA-->>APP: NotesCounted {count, amount, denominations}\nEscrow: 3x1000 + 2x500 = 4000 RUB
        XFS-->>APP: EscrowFull / InputComplete

        APP->>CH: Показать: Обнаружено 4 000.00 RUB\nПодтвердить?

        alt Клиент подтверждает
            CH->>APP: Confirm

            APP->>APP: Формировать ISO 8583 MTI=0200\nF3=210000 (Deposit)\nF4=000000400000\nF52=PINBlock

            APP->>ACQ: ISO 8583 0200 (Deposit Request)
            ACQ->>CS: ISO 8583 0200 (если Off-Us)
            CS->>ISS: ISO 8583 0200
            ISS->>ISS: Validate account\nZачислить средства

            ISS-->>CS: ISO 8583 0210 F39=00
            CS-->>ACQ: ISO 8583 0210 F39=00
            ACQ-->>APP: ISO 8583 0210 F39=00

            APP->>BNA: Stack (принять банкноты в кассету)
            BNA->>BNA: Перевести из escrow в кассету

            APP->>CH: Показать: 4 000.00 RUB зачислено
            APP->>XFS: Print Receipt
            XFS-->>CH: Чек с подтверждением

        else Клиент отменяет
            CH->>APP: Cancel
            APP->>BNA: Return (вернуть из escrow)
            BNA-->>CH: Банкноты возвращены
        end

    else Банкноты отклонены (частично)
        BNA-->>APP: PartialAccept {accepted=3, rejected=1}
        APP->>CH: Показать: 1 банкнота не принята\nВозьмите отклонённые банкноты
        BNA-->>CH: Вернуть отклонённые банкноты
        Note over APP: Продолжить с принятыми (если > 0)\nили отменить
    end

    alt Хост отклоняет транзакцию
        ACQ-->>APP: ISO 8583 0210 F39≠00
        APP->>BNA: Return from escrow
        BNA-->>CH: Все банкноты возвращены
        APP->>CH: Показать: Зачисление невозможно
    end

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

Режим Recycling (CRM)

flowchart TD
    IN[Клиент вносит банкноты]
    VALID{Банкнота\nпроверена}
    FIT{Банкнота\nпригодна\nдля выдачи?}
    RECYCLE[Recycling Cassette\nПригодна для выдачи]
    REJECT[Reject Cassette\nНепригодна]
    ESCROW[Escrow до\nподтверждения]
    STACK_OK[Stack в cassette]

    IN --> VALID
    VALID -->|Фальшивая / ошибка| REJECT
    VALID -->|OK| ESCROW
    ESCROW --> FIT
    FIT -->|Да, годная| RECYCLE
    FIT -->|Нет, ветхая| REJECT
    RECYCLE --> STACK_OK

[!warning] Recycling и регуляторные требования Банки обязаны верифицировать подлинность банкнот перед рециклингом согласно требованиям ЦБ РФ (Положение 630-П) и аналогичным международным нормативам. Не все ATM и не всё ПО поддерживает сертифицированные алгоритмы проверки.


Сравнение операций

ПараметрWithdrawalBalance InquiryDeposit
MTI020002000200
F301 0000 0031 0000 0021 0000 00
Финансовая?ДаНетДа
PINДаДа (обычно)Да
Reversal возможен?Да (no-dispense)НетДа (если не зачислено)
Требует специальный модульCDM / CRMНетBNA / CRM
EMV данные (F55)ДаДаДа
SettlementДаНетДа

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

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

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