0

Aptra NDC Compatible ATM Controller

A domestic implementation of the Aptra NDC client protocol for Iranian ATMs with custom UI enhancements, full device integration, and large-scale deployment across 2K+ machines.

Project Overview

Before diving into the technical details, it is important to understand the environment in which this project was implemented. Due to international sanctions on Iran, access to external information, technologies, and products is significantly restricted. This limitation created the need for a fully domestic implementation of the Aptra NDC protocol used in ATM networks.

Objective

The primary goal of this project was to develop an Iranian alternative to the Aptra NDC protocol for use in local ATM machines. My main contribution was designing the architecture and implementing the client-side of the protocol. In this design, the server provides a state machine that drives the ATM workflow on the client side.

Responsibilities and Features

The system I developed enabled the ATM controller to:

  • Fetch the state machine from the server and execute it locally.
  • Override specific configurations supplied by the server to improve user interface behavior and overall user experience.
  • Interact seamlessly with all ATM hardware devices, including:
    • Card reader
    • Operator panel
    • Receipt and journal printers
    • Sensors and indicator units
    • Cash dispenser
    • …and other peripheral modules using the WOSA/XFS protocol.
  • Handle back-end communications required to execute financial transactions.
  • Support custom, Iran-specific services such as bill payments that required protocol extensions beyond what the original Aptra NDC specification provides.

Technical Stack

  • Language: C#
  • Framework: WPF (Windows Presentation Foundation), used to deliver a modern UI with smooth animations.

Deployment and Impact

This product was deployed on more than 2,000 ATM devices, processing over 100,000 transactions per day. The architectural approach and service design were inspired by Kalignite Services, adapted to fit local requirements and constraints.