Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 13 additions & 64 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,15 @@
# Reto Técnico: Procesamiento de Transacciones Bancarias (CLI)

## Objetivo:

Desarrolla una aplicación de línea de comandos (CLI) que procese un archivo CSV con transacciones bancarias y genere un reporte que incluya:

- **Balance Final:**
Suma de los montos de las transacciones de tipo "Crédito" menos la suma de los montos de las transacciones de tipo "Débito".

- **Transacción de Mayor Monto:**
Identificar el ID y el monto de la transacción con el valor más alto.

- **Conteo de Transacciones:**
Número total de transacciones para cada tipo ("Crédito" y "Débito").

---

## Instrucciones

1. **Repositorio Base:**
Clona o haz un fork del repositorio base disponible en:
`https://github.com/codeableorg/interbank-academy-25`

2. **Entrada de Datos:**
La aplicación deberá leer un archivo CSV. Ejemplo de contenido:

```
id,tipo,monto
1,Crédito,100.00
2,Débito,50.00
3,Crédito,200.00
4,Débito,75.00
5,Crédito,150.00
```

3. **Salida del Programa:**
La aplicación debe mostrar el reporte final en la terminal.
Ejemplo de salida:

```
Reporte de Transacciones
---------------------------------------------
Balance Final: 325.00
Transacción de Mayor Monto: ID 3 - 200.00
Conteo de Transacciones: Crédito: 3 Débito: 2
```

4. **Lenguaje de Programación:**
Utiliza el lenguaje de tu preferencia. Opciones recomendadas:

- Python
- Java
- C#
- JavaScript (Node.js)

5. **README del Proyecto:**
Incluye un archivo `README.md` con la siguiente estructura:

- **Introducción:** Breve descripción del reto y su propósito.
- **Instrucciones de Ejecución:** Cómo instalar dependencias y ejecutar la aplicación.
- **Enfoque y Solución:** Lógica implementada y decisiones de diseño.
- **Estructura del Proyecto:** Archivos y carpetas principales.

6. **Documentación y Calidad del Código:**
- Código bien documentado y fácil de leer.
- Comentarios explicando pasos clave y lógica del programa.
- **Introducción:**
Este código esta implementado en NodeJS, es un código sencillo y muy preciso. Usé la data del proyecto subido al repositorio. Estoy utilizando la terminan de Git Bash.
- **Instrucciones de Ejecución:**
Para instalar las dependencias solo deben ejecutar lo siguiente:
1. Verificar si tienen instalado el node y el npm.
node -v
npm -v
2. Instalar dependencias
npm install
3. Run Project
node reporte.js data.csv
- **Estructura del Proyecto:**
Agregué una clase reporte.js en la misma rama del archivo data.csv. Adicional a eso he creado el package.json para que puedan instalar las dependencias.
20 changes: 20 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "interbank-academy-25",
"version": "1.0.0",
"description": "Desarrolla una aplicación de línea de comandos (CLI) que procese un archivo CSV con transacciones bancarias y genere un reporte que incluya:",
"main": "reporte.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Msq03/interbank-academy-25.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/Msq03/interbank-academy-25/issues"
},
"homepage": "https://github.com/Msq03/interbank-academy-25#readme"
}
49 changes: 49 additions & 0 deletions reporte.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const fs = require('fs');
const path = require('path');

const archivo = process.argv[2]; // Para correr el proyecto solo lo llamariamos así: node reporte.js data.csv

if (!archivo) { //Si no especificamos el archivo que se leerá, me mostrará el mensaje.
console.error("Por favor, especifica el archivo CSV.");
process.exit(1);
}

const ruta = path.resolve(__dirname, archivo); // con __dirname Obtenemos la ruta actual del archivo a leer, el cual esta en la misma ruta de la clase reporte.js
fs.readFile(ruta, 'utf8', (err, data) => {
if (err) {
console.error("Error leyendo el archivo:", err.message);
return;
}

const lineas = data.trim().split('\n').slice(1); // Ignora encabezado
//Asigno los valores iniciales de mis variables
let balance = 0;
let mayorMonto = 0;
let idMayor = null;
let creditos = 0;
let debitos = 0;

for (const linea of lineas) {
const [id, tipo, montoStr] = linea.split(',');
const monto = parseFloat(montoStr);

if (tipo === 'Crédito') { //Sumo todas las transacciones con tipo Crédito
balance += monto;
creditos++;
} else if (tipo === 'Débito') { //Sumo todas las transacciones con tipo Débito
balance -= monto;
debitos++;
}

if (monto > mayorMonto) { //Busco el monto mayor por cada transacción
mayorMonto = monto;
idMayor = id;
}
}
//VISTA EN LA TERMINAL
console.log("Reporte de Transacciones");
console.log("---------------------------------------------");
console.log(`Balance Final: ${balance.toFixed(2)}`);
console.log(`Transacción de Mayor Monto: ID ${idMayor} - ${mayorMonto.toFixed(2)}`);
console.log(`Conteo de Transacciones: Crédito: ${creditos} Débito: ${debitos}`);
});