Открыть меню

Sequence Diagram: Снятие наличных (Withdrawal)

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

Справочная заметка ATM: Sequence Diagram: Снятие наличных (Withdrawal).

Sequence Diagram: Снятие наличных (Withdrawal)

Детализированный sequence diagram полного цикла операции снятия наличных.
Участники: клиент, ATM (приложение), XFS-уровень, Acquirer Switch, Card Scheme, Issuer.


Участники диаграммы

УчастникРоль
CardholderКлиент ATM
ATM AppПрикладное ПО ATM (APTRA, Vynamic, Kalignite и др.)
XFS LayerCEN/XFS Service Providers: card reader, EPP, dispenser
ACQ SwitchAcquiring Switch / ATM Host банка-эквайера
Card SchemeПлатёжная система (Visa, MC, МИР)
Issuer AuthАвторизационная система банка-эмитента

[!note] Российский профиль Для операций с картами «Мир» приоритетный схемный слой — ATM-МИР-и-НСПК. Российская антифрод-специфика может добавлять проверки до dispense: Банк России с 2025-09-01 определил признаки выдачи наличных без добровольного согласия клиента через банкоматы. См. ATM-Russia-Anti-Fraud-Cash-Withdrawal.


Полный Sequence Diagram — Withdrawal (Success)

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 event
    APP->>XFS: Read Card (Track2 + EMV chip)
    XFS-->>APP: CardData {PAN, ExpDate, Track2, ICC data}

    APP->>APP: Validate card data\nCheck expiry, BIN lookup
    APP->>CH: Показать: Введите PIN

    CH->>XFS: Ввод PIN (EPP)
    Note over XFS: EPP шифрует PIN → PIN Block\n(ISO 9564 Format 0/3/4)
    XFS-->>APP: PINEntered {PINBlock encrypted}

    APP->>CH: Показать: Выберите операцию
    CH->>APP: Withdrawal selected

    APP->>CH: Показать: Введите сумму
    CH->>APP: Amount = 5000 RUB

    APP->>APP: Сформировать ISO 8583 MTI=0200\nF2=PAN, F3=010000\nF4=000000500000\nF11=STAN, F22=051\nF35=Track2, F41=TermID\nF49=643, F52=PINBlock\nF55=EMV ICC data

    APP->>ACQ: ISO 8583 0200 (Financial Request)\nover TLS/TCP

    ACQ->>ACQ: Log transaction\nValidate MAC\nBIN routing decision

    alt On-Us (карта эквайера)
        ACQ->>ACQ: Internal authorization
    else Off-Us (карта другого банка)
        ACQ->>CS: ISO 8583 0200 → forward
        CS->>ISS: ISO 8583 0200 → route to issuer
        ISS->>ISS: Check: balance, limits\nPIN verify (decrypt PINBlock)\nFraud rules, card status
        ISS-->>CS: ISO 8583 0210\nF39=00 (Approved)\nF38=AuthCode
        CS-->>ACQ: ISO 8583 0210\nF39=00, F38=AuthCode
    end

    ACQ-->>APP: ISO 8583 0210\nF39=00, F38=AuthCode\nF54=Balance (optional)

    APP->>APP: Parse response\nF39 == 00 → proceed to dispense

    APP->>XFS: Dispense {amount=5000, denominations}
    XFS->>XFS: CDM: count notes\nTransport to shutter
    Note over XFS: Сенсоры: double-detect,\nthickness, UV, IR

    alt Dispense OK
        XFS-->>APP: DispenseOK {notes dispensed: 5x1000}
        APP->>XFS: Open Shutter
        XFS-->>APP: ShutterOpen

        APP->>CH: Показать: Возьмите деньги

        Note over CH,XFS: Ожидание таймаут 30 сек

        alt Клиент взял деньги
            XFS-->>APP: CashTaken event
            APP->>XFS: Close Shutter
        else Таймаут — клиент не взял
            APP->>XFS: Retract
            XFS->>XFS: Retract notes → Retract Cassette
            XFS-->>APP: RetractComplete
            Note over APP: Cash presented but not taken\nНе считать автоматически no-dispense\nФиксировать retract в EJ
        end

        APP->>CH: Вернуть карту?
        APP->>XFS: Eject Card
        XFS-->>CH: Карта возвращена

        APP->>XFS: Print Receipt
        XFS-->>CH: Чек напечатан

        APP->>ACQ: ISO 8583 0220 (Financial Advice / Completion)\nесли требует схема
        ACQ-->>APP: ISO 8583 0230 (Advice Response)

    else Dispense FAIL — No Dispense
        XFS-->>APP: DispenseFail {error code}
        APP->>ACQ: ISO 8583 0420 (Reversal Advice)\nF39=00, F90=STAN original\nF95=replacement amounts=0
        ACQ->>CS: ISO 8583 0420 → forward
        CS->>ISS: ISO 8583 0420
        ISS->>ISS: Restore funds\nCancel authorization
        ISS-->>CS: ISO 8583 0430
        CS-->>ACQ: ISO 8583 0430
        ACQ-->>APP: ISO 8583 0430 (Reversal Ack)

        APP->>XFS: Eject Card
        XFS-->>CH: Карта возвращена
        APP->>CH: Показать: Операция не выполнена\nОбратитесь в банк
    end

EMV-специфика (chip card)

sequenceDiagram
    participant APP as ATM App
    participant XFS as XFS / Card Reader
    participant CHIP as EMV Chip

    APP->>XFS: Select Application (PSE/PPSE)
    XFS->>CHIP: SELECT PPSE
    CHIP-->>XFS: Application list {AID: A0000000031010 Visa}
    XFS-->>APP: Available AIDs

    APP->>XFS: SELECT AID A0000000031010
    XFS->>CHIP: SELECT AID
    CHIP-->>XFS: FCI {PDOL}
    XFS-->>APP: PDOL (Processing Options Data Object List)

    APP->>XFS: GET PROCESSING OPTIONS
    XFS->>CHIP: GPO {PDOL data}
    CHIP-->>XFS: AIP, AFL (Application File Locator)
    XFS-->>APP: AIP, AFL

    APP->>XFS: READ RECORDs (по AFL)
    XFS->>CHIP: READ RECORD
    CHIP-->>XFS: Card data: PAN, Expiry, CVR, issuer data
    XFS-->>APP: Cardholder data + risk parameters

    Note over APP: Offline data auth (SDA/DDA/CDA)\nTerminal risk management

    APP->>XFS: GENERATE AC (ARQC request)
    XFS->>CHIP: GENERATE APPLICATION CRYPTOGRAM
    CHIP-->>XFS: ARQC (cryptogram для онлайн-авторизации)
    XFS-->>APP: ARQC + IAD + CVR

    Note over APP: ARQC включается в F55 ISO 8583\nИмитент верифицирует ARQC

Таймауты и retry-политика

СобытиеТипичный таймаутДействие
Ответ хоста (authorization)30–60 секReversal + error to customer
Клиент вводит PIN60 секCancel, eject card
Клиент выбирает операцию90–120 секIdle timeout, eject card
Клиент берёт деньги (shutter open)30 секRetract cash
Клиент берёт карту (eject)30 секCard capture (retract into reader)

Важное различие: no dispense vs not taken

  • No dispense: деньги не были предъявлены клиенту после approval. Обычно нужен reversal/advice или exception workflow.
  • Cash presented but not taken: деньги были выведены к shutter, но клиент не забрал их до timeout; ATM выполняет retract и фиксирует событие в EJ/retract cassette.
  • Для cash presented but not taken нельзя автоматически применять ту же логику, что для no dispense. Правила платежной схемы и банка могут требовать отдельного расследования.

Коды ошибок диспенсера (XFS / CDM)

КодОписание
WFS_ERR_CDM_CASHUNITERRORОшибка кассеты (нет денег, jam)
WFS_ERR_CDM_TOOMANYITEMSСлишком много банкнот (jam)
WFS_ERR_CDM_SHUTTERNOTOPENShutter не открылся
WFS_ERR_CDM_SHUTTERNOTCLOSEDShutter не закрылся
WFS_ERR_CDM_NOITEMSНет банкнот требуемого номинала
WFS_ERR_CDM_ITEMSTAKENБанкноты взяты (успешно)
WFS_ERR_CDM_ITEMSRETRACTEDБанкноты возвращены (retracted)

Defensive view: authorization, devices и evidence

Эта схема отделяет authorization path от локального device layer и показывает, где собирать evidence:

sequenceDiagram
    participant Client as Client
    participant APP as ATM Application
    participant EPP as EPP
    participant XFS as XFS
    participant CDM as Dispenser
    participant ACQ as Acquirer Switch / Processor
    participant HSM as HSM
    participant ISS as Issuer / Core Banking
    participant LOG as EJ / Logs

    Client->>APP: Start withdrawal
    Client->>EPP: Enter PIN
    EPP-->>APP: Protected PIN result
    APP->>ACQ: Authorization request
    ACQ->>HSM: PIN-related cryptographic operation
    ACQ->>ISS: Authorization decision request
    ISS-->>ACQ: Approve or decline
    ACQ-->>APP: Authorization response
    APP->>XFS: Dispense request after approval
    XFS->>CDM: Device operation
    CDM-->>XFS: Result and events
    XFS-->>APP: Dispense outcome
    APP->>LOG: Transaction and device context
    ACQ->>LOG: Host / switch context

Для расследования используйте ATM-Incident-Evidence-Package. XFS управляет устройствами, но не является authorization layer.

В degraded/offline-сценариях cash withdrawal нельзя считать штатным continuation flow без подтвержденной политики банка: потеря связи с host влияет на PIN/limit/fraud checks, reversal/advice и reconciliation. Российский контекст вынесен в ATM-Russia-Offline-Operation.


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

Источники

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

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