Открыть меню
Концепция

NDC: формат стейтов и экранов

Справочная заметка ATM: концептуальный обзор формата строки стейта NDC State Table, Card Read State, FIT, буфер FDK — по независимым открытым источникам.

Создано 17 июн. 2026 г. Обновлено 17 июн. 2026 г. 4 мин чтения 3 входящих 9 исходящих

Обзор

Эта заметка дополняет ATM-NDC-DDC (где уже описаны классы NDC-сообщений — Transaction Request/Reply, Status, State Table Load, Screen Data Load) концептуальным разбором того, как устроена сама строка стейта в NDC State Table.

[!warning] Источник и точность Материал собран по независимым открытым источникам — open-source реализациям NDC ATM-эмулятора и публичным обзорным материалам (см. «Источники» внизу). Точные числовые форматы, диапазоны и позиции параметров не воспроизводятся: полная спецификация NDC/NDC+/Advance NDC — проприетарная документация вендора, недоступная как открытый источник. Описание ниже — концептуальное и может отличаться по версиям NDC; для точных деталей конкретного проекта нужна официальная документация вендора или внутренние материалы банка.


Формат строки стейта (концептуально)

Каждый стейт в State Table описывается типом (один символ) и набором параметров, смысл которых зависит от типа. Типовой стейт включает номер экрана для показа клиенту, стейт перехода при успешном результате и стейт перехода при ошибке. Стейтов одного типа может быть произвольное количество.

Card Read State — пример типового стейта

Стейт, отвечающий за чтение карты, обычно выполняется первым при входе ATM в рабочий режим. Он определяет:

  • экран приглашения вставить карту;
  • экран ошибки чтения;
  • стейт перехода при успешном чтении карты и при ошибке чтения.

FIT — Financial Institution Table

FIT (Financial Institution Table) — локальная (загруженная в ATM) конфигурация, которая после чтения карты определяет, какому банку/эмитенту она принадлежит, и какие параметры обработки применить дальше (например, как трактовать данные карты для этой группы эмитентов).

Открытая реализация FIT-сервиса для NDC-эмулятора подтверждает базовую механику: каждой институции соответствует запись с идентификатором (включая поддержку wildcard-маски при сравнении с номером карты), и при совпадении нескольких записей используется запись с наименьшим индексом.

FIT — это решение, принимаемое локально на ATM, отдельно от финального решения хоста/issuer routing на уровне switch/host (ср. ATM-Процессинг-обзор). Совпадение результата FIT-классификации с финальным решением хоста не гарантировано — FIT влияет только на то, какие экраны/ветки сценария ATM предложит клиенту локально, до отправки запроса на хост.


FDK (Function Defined Keys) и их буфер

Боковые функциональные клавиши (FDK), либо их эмуляция на тач-скрине, при нажатии записывают свой код в отдельный буфер. Последующие стейты — вплоть до отправки запроса на хост — используют содержимое этого буфера, чтобы понять, какой вариант выбрал клиент (например, тип операции или пункт меню).


Close State (общая идея)

Большинство сценариев — и успешные, и ошибочные — обычно сходятся в одном общем «выходном» стейте: он отвечает за отдачу или захват карты и показ финального экрана клиенту. Сам факт перехода в такой стейт не говорит об исходе транзакции — нужен контекст предыдущих стейтов и ответа хоста.


Формат экрана

Экран ATM в NDC — символьная сетка фиксированного размера, которая может содержать текст и/или графику; позиционирование текста задаётся управляющими последовательностями. Загрузка экранов выполняется отдельным классом сообщений Screen Data Load, формат полей которого уже описан в ATM-NDC-DDC.


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

Источники

  • timgabets/atm-fits — открытая реализация парсинга Financial Institution Table для NDC ATM-эмулятора.
  • timgabets/atm-states, timgabets/electron-atm — открытая реализация NDC state machine и ATM-эмулятора.
  • US20150278785A1 — патент NCR, описывающий общую структуру NDC state table (номер, тип, параметры, экран, следующий стейт) как известный уровень техники.
  • «What is NDC+?» — публичный обзорный материал по NDC+/FIT.

Живой сад

Этот текст можно улучшать вместе

Нашёл опечатку?

Выдели фрагмент в заметке и нажми «Сообщить» — откроется короткая форма с контекстом.

Хочешь обсудить?

Ниже можно оставить комментарий через Telegram, когда заметка связана с публикацией канала.

Telegram-комментарии

Добавь `telegramPostId` в публичную заметку, чтобы здесь появился виджет обсуждения.

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