TP1 - Ledger
Ledger es un sistema de libro contables que registra transacciones de diferentes monedas entre usuarios. El sistema se basa en archivos CSV, funcionando como una base de datos accesible.
Compilación
Compilar el proyecto
mix compileCrear ejecutable escript
mix escript.buildEjecución
Usar el ejecutable
./ledger balance -c1=userAEstructura de archivos
Archivo de monedas (monedas.csv)
Función: Actúa como el registro maestro de las monedas disponibles y su valor de referencia en USD.
Formato: Cada línea representa una moneda.
Estructura:
nombre_moneda;precio_usdEjemplo:
BTC;55000
ETH;3000
ARS;0.0012
USDT;1
EUR;1.18Archivo de transacciones(transacciones.csv)
Función: Registra immutablemente toda actividad financiera en el sistema. Cada línea es una transacción.
Formato: Cada línea representa una transacción única.
Estructura:
id_transaccion;timestamp;moneda_origen;moneda_destino;monto;cuenta_origen;cuenta_destino;tipo- id_transaccion es un identificador unico por transaccion
- fecha_hora indica en que momento se realizo la transaccion
- moneda_origen y moneda_destino indican en que moneda esta el valor de la cuenta de origen y destino, respectivamente
- monto indica el monto de la transaccion
- cuenta_origen y cuenta_destino son los identificadores unicos de las cuentas de origen y destino, respectivamente
-
tipo indica el tipo de transaccion, y este puede ser:
- transferencia : una transaccion que transfiere un monto de una cuenta a otra
- swap : una transaccion que convierte un monto en una moneda a otra
- alta_cuenta : una transaccion que crea una cuenta y fija su valor inicial
Ejemplo:
1;1754937004;USDT;USDT;100.50;userA;userB;transferencia
2;1755541804;BTC;USDT;0.1;userB;;swap
3;1756751404;BTC;;50000;userC;;alta_cuentaComando balance
Para mostrar el balance de una cuenta:
./ledger balance -c1=userAEl subcomando balance calculará el balance de una cuenta. En este subcomando, el flag -c1 es obligatorio. Si no se completa el flag -m se listan los balances de todas las monedas de esa cuenta.
Ejemplos:
./ledger balance -c1=867Lista por terminal el balance de todas las monedas de la cuenta 867.
./ledger balance -c1=867 -m=BTCLista por terminal el balance la cuenta 867 convertido a BTC.
Flags disponibles:
-c1: especifica la cuenta origen (obligatorio)
-t: archivo transacciones input (si no se completa toma por default transacciones.csv )
-m: moneda a utilizar para el cálculo (si no se completa se listan los balances de todas las monedas de esa cuenta)
-o: archivo output (si no se completa se imprimen por terminal)
Comando transacciones
Para listar transacciones entre cuentas:
./ledger transacciones -c1=userA -c2=userBEl subcomando transacciones listará por pantalla todas las transacciones que cumplen con los flags propuestos.
Ejemplos:
./ledger transaccionesLista por terminal todas las transacciones del archivo transacciones.csv
./ledger transacciones -t=transac.csv -c1=345 -o=result.csvLista todas las transacciones del archivo transac.csv que fueron realizadas desde la cuenta 345 y las almacena en el archivo result.csv
Flags disponibles:
- c1: especifica la cuenta origen (si no se completa, toma todas las cuentas)
- c2: especifica la cuenta destino (si no se completa, toma todas las cuentas)
- t: archivo transacciones input (si no se completa toma por default transacciones.csv )
- o: archivo output (si no se completa se imprimen por terminal)
Tests
Para ejecutar los tests:
mix testValidaciones y errores chequeados
En caso de encontrar una incosistencia, se muestra por pantalla la tupla {:error, <nro linea>} . Por ejemplo si la línea 45 no cuenta con el formato indicado, de devolverá {:error, 45} , de la misma manera si una transacción se realiza en una moneda no existente, si un monto es negativo, etc.
Errores de cuenta
- Cuenta no dada de alta previo a realizar una transacción con ella
- Cuenta proporcionada por un flag no existe
- Cuenta intenta realizar un swap o transferencia con un monto mayor al que posee
Errores de monedas
- Moneda proporcionada por un flag no existe en el archivo monedas.csv
- Moneda origen o moneda destino no existe en el archivo monedas.csv
- Moneda origen y moneda destino no coinciden al realizar una transferencia
Errores de comandos
- No se proporciona ningún comando
- El comando proporcionado no es válido
Errores de archivos
- Fallo al leer el archivo
- El archivo de transacciones o monedas está vacío
Errores de montos
- Se intenta transferir un monto inválido (negativo o cero)