diff --git a/README.md b/README.md index 668a6a2..32cbc43 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/package.json b/package.json new file mode 100644 index 0000000..eeefc99 --- /dev/null +++ b/package.json @@ -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" +} diff --git a/reporte.js b/reporte.js new file mode 100644 index 0000000..612c6f1 --- /dev/null +++ b/reporte.js @@ -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}`); +});