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 compile

Crear ejecutable escript

mix escript.build

Ejecución

Usar el ejecutable

./ledger balance -c1=userA

Estructura 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_usd

Ejemplo:

BTC;55000
ETH;3000
ARS;0.0012
USDT;1
EUR;1.18

Archivo 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

Ejemplo:

1;1754937004;USDT;USDT;100.50;userA;userB;transferencia
2;1755541804;BTC;USDT;0.1;userB;;swap
3;1756751404;BTC;;50000;userC;;alta_cuenta

Comando balance

Para mostrar el balance de una cuenta:

./ledger balance -c1=userA

El 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=867

Lista por terminal el balance de todas las monedas de la cuenta 867.

./ledger balance -c1=867 -m=BTC

Lista por terminal el balance la cuenta 867 convertido a BTC.

Flags disponibles:

Comando transacciones

Para listar transacciones entre cuentas:

./ledger transacciones -c1=userA -c2=userB

El subcomando transacciones listará por pantalla todas las transacciones que cumplen con los flags propuestos.

Ejemplos:

./ledger transacciones

Lista por terminal todas las transacciones del archivo transacciones.csv

./ledger transacciones -t=transac.csv -c1=345 -o=result.csv

Lista todas las transacciones del archivo transac.csv que fueron realizadas desde la cuenta 345 y las almacena en el archivo result.csv

Flags disponibles:

Tests

Para ejecutar los tests:

mix test

Validaciones 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

Errores de monedas

Errores de comandos

Errores de archivos

Errores de montos