ATMClerk

event driven ATM reconciliation system

View on GitHub

Build Status

ATMClerk

event driven ATM reconciliation system

About ATMClerk

This repo is an attempt to scratch my own itch. I am trying to build a new ATM Cash Management system based on problems I am currently facing with an inhouse system. Why not fix your own system you ask? well, I’m glad you asked. This in-house system was built using the wrong design, changing it to solve the problems I am facing would mean a complete re-write. hence this project.

So, back to the original question; what this project does? Let us first define how an ATM works. Automatic Teller Machine (ATM) is a blend of a safe, lending agent, and a robot.

ATM owner would feed the safe inside the machine with some cash. This safe is made of some compartments called cassettes, each cassette is filled with one type of denomination; think USD $20s or CAD $50s, etc.

when you insert your card, key in your PIN, and ask for some cash, this machine will have a brief chat with its driver (called ATM Switch), and that driver will advise the machine to dispense certain number of notes from each cassettes.

when you walk away from that ATM with cash, your bank account was debited with that amount, while the ATM account (yes ATMs has bank accounts) it gets credited with the same amount. in some cases ATM owner would charge you surcharge amount, in some other cases, your bank gets charged what is called interchange amount.

so what’s the big deal you ask?

at the end of the day, we need to solve the following problems:

you see how things are getting complicated?

And that’s not all, there are some subtle exceptions to handle. For example, when we decide to refill the machine, we don’t just decide to fill it. we need to get cash from some cash provider, sort notes, fill cassettes, and send some technician to service this machine. this needs some lead time.