From 81e2d656b96b4ade4754b07f853de26cb6fd96b9 Mon Sep 17 00:00:00 2001 From: Msq03 <71024685+Msq03@users.noreply.github.com> Date: Fri, 11 Apr 2025 00:38:48 -0500 Subject: [PATCH 1/4] clase nodeJS --- reporte.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 reporte.js diff --git a/reporte.js b/reporte.js new file mode 100644 index 0000000..cdd163a --- /dev/null +++ b/reporte.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const path = require('path'); + +const archivo = process.argv[2]; // Ej: node reporte.js data.csv + +if (!archivo) { + console.error("Por favor, especifica el archivo CSV."); + process.exit(1); +} + +const ruta = path.resolve(__dirname, archivo); +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 + 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') { + balance += monto; + creditos++; + } else if (tipo === 'Débito') { + balance -= monto; + debitos++; + } + + if (monto > mayorMonto) { + mayorMonto = monto; + idMayor = id; + } + } + + 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}`); +}); From 99cbd99482f9dd3c2a443c23fa5284f753a424e1 Mon Sep 17 00:00:00 2001 From: Msq03 <71024685+Msq03@users.noreply.github.com> Date: Fri, 11 Apr 2025 00:49:11 -0500 Subject: [PATCH 2/4] Agregar package.json con dependencias --- package.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 package.json 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" +} From cee03095aa51dbb51f9500e1202d30b3efc4fff6 Mon Sep 17 00:00:00 2001 From: Msq03 <71024685+Msq03@users.noreply.github.com> Date: Fri, 11 Apr 2025 01:03:01 -0500 Subject: [PATCH 3/4] desafio culminado --- README.md | 80 +++++++++++------------------------------------------- reporte.js | 17 ++++++------ 2 files changed, 25 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 668a6a2..693d55b 100644 --- a/README.md +++ b/README.md @@ -1,66 +1,18 @@ # 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 + +- **Enfoque y Solución:** Lógica implementada y decisiones de diseño. + +- **Estructura del Proyecto:** +Agregue 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/reporte.js b/reporte.js index cdd163a..612c6f1 100644 --- a/reporte.js +++ b/reporte.js @@ -1,14 +1,14 @@ const fs = require('fs'); const path = require('path'); -const archivo = process.argv[2]; // Ej: node reporte.js data.csv +const archivo = process.argv[2]; // Para correr el proyecto solo lo llamariamos así: node reporte.js data.csv -if (!archivo) { +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); +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); @@ -16,6 +16,7 @@ fs.readFile(ruta, 'utf8', (err, data) => { } 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; @@ -23,23 +24,23 @@ fs.readFile(ruta, 'utf8', (err, data) => { let debitos = 0; for (const linea of lineas) { - const [id, tipo, montoStr] = linea.split(','); + const [id, tipo, montoStr] = linea.split(','); const monto = parseFloat(montoStr); - if (tipo === 'Crédito') { + if (tipo === 'Crédito') { //Sumo todas las transacciones con tipo Crédito balance += monto; creditos++; - } else if (tipo === 'Débito') { + } else if (tipo === 'Débito') { //Sumo todas las transacciones con tipo Débito balance -= monto; debitos++; } - if (monto > mayorMonto) { + 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)}`); From 8cc9aaa936123a42ff3ef192bdc0283746e8d26d Mon Sep 17 00:00:00 2001 From: Msq03 <71024685+Msq03@users.noreply.github.com> Date: Fri, 11 Apr 2025 01:09:29 -0500 Subject: [PATCH 4/4] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 693d55b..32cbc43 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,5 @@ Para instalar las dependencias solo deben ejecutar lo siguiente: npm install 3. Run Project node reporte.js data.csv - -- **Enfoque y Solución:** Lógica implementada y decisiones de diseño. - - **Estructura del Proyecto:** -Agregue 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. +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.