Se desea construir un aplicativo para el manejo de un cajero automático. El aplicativo debe proporcionar a los clientes de todos los bancos de Mexico y las redes internacionales las siguientes operaciones: a) retiros en efectivo, b) consultas de saldo c) depósitos a cuentas en efectivo d) depósitos en cheque a cuentas e)transferencias bancarias y f) pago de servicios públicos. Todas las operaciones realizadas en el cajero, así sean canceladas por el cliente del cajero deben quedar registradas en la bitácora (log) de transacciones que debe obtener como mínimo: fecha de la transacción, hora de la transacción, número de tarjeta, transacción, valor, respuesta. El flujo de un retiro es: el cliente inserta la tarjeta, selecciona el tipo de cuenta (ahorros, corriente, tarjeta de crédito), selecciona la operación de retiro, selecciona el monto de la pantalla o puede digitar un múltiplo de 10000 pero inferior o igual a 300,000, digita su clave y espera resultado, si la operación es exitosa debe dispensar el dinero y solicitar al usuario si desea recibo o por pantalla el nuevo saldo. En caso de fallas en el dispensador se debe generar una operación automática de reverso para devolver el dinero al cliente a la cuenta afectada. La operación de reverso se debe aplicar en todas las transacciones que viajen al Servidor del banco, se excluye la consulta de saldo. Si la operación no es exitosa se debe informar al cliente el motivo de la declinación y generar recibo. Las transferencias de fondos utilizan las operaciones de retiro a cuenta y de depósito en efectivo aunque para el usuario sea solo una transacción. El pago de servicios públicos utiliza la transacción de retiro para obtener los fondos que cubren el pago, el banco abona directamente a la empresa de servicios los valores pagados por los clientes. El aplicativo debe contar con un modulo administrativo que permita informar al sistema la cantidad de dinero que estará en las gabinetes de retiro, por denominación (aprovisionamiento del cajero), debe permitir imprimir la tira de auditoria del cajero de todas las operaciones realizadas, debe poder generar archivos planos con la información de la tira de auditoria. Se debe contar con un superusuario que sea capaz de manejar todo el modulo administrativo pero que además pueda realizar operaciones de mantenimiento a los sensores del sistema, mantenimientos preventivos a los dispensadores de dinero y receptores de dinero. El sistema debe ser implementado en JAVA bajo la plataforma Windows. El protocolo de comunicación debe ser inicialmente TCP/IP pero debe poderse cambiar a otros protocolos como SNA o X.25. Se debe tener un mecanismo de persistencia basado inicialmente en archivos XML pero luego se debe poder utilizar motores de bases de datos como MYSQL o SQLSERVER. Las pantallas hacia todos los usuarios deben ser fáciles de manejar. El sistema solo debe permitir acceder a los módulos especiales con la seguridad adecuada, y debe consumir servicios Web proporcionados por el sistema de seguridad del banco basado en el protocolo LDAP.