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
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Node.js dependencies
node_modules/

# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Environment variables
.env

# OS-specific files
.DS_Store
Thumbs.db
73 changes: 18 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,29 @@
# Reto Técnico: Procesamiento de Transacciones Bancarias (CLI)
# Reto Técnico: Procesamiento de Transacciones Bancarias (CLI

## Objetivo:
## Introducción

Desarrolla una aplicación de línea de comandos (CLI) que procese un archivo CSV con transacciones bancarias y genere un reporte que incluya:
Este proyecto es una aplicación de línea de comandos (CLI) que procesa un archivo CSV con transacciones bancarias y genera un reporte con el balance final, la transacción de mayor monto y el conteo de transacciones por tipo.

- **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".
## Instrucciones de Ejecución

- **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
1. Instala las dependencias:
```bash
npm install
```

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

2. Ejecuta la aplicación:
```bash
npm start
```
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)
## Enfoque y Solución

5. **README del Proyecto:**
Incluye un archivo `README.md` con la siguiente estructura:
- Se utiliza `csv-parser` para leer y procesar el archivo CSV.
- Se calculan los valores requeridos en tiempo real mientras se leen las filas del archivo.
- El reporte se muestra en la terminal al finalizar el procesamiento.

- **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.
## Estructura del Proyecto

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.
- `index.js`: Script principal que procesa el archivo CSV y genera el reporte.
- `data.csv`: Archivo de entrada con las transacciones bancarias.
- `package.json`: Archivo de configuración del proyecto y dependencias.
38 changes: 38 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const fs = require('fs');
const path = require('path');
const csv = require('csv-parser');

const filePath = path.join(__dirname, 'data.csv');

let balance = 0;
let maxTransaction = { id: null, monto: 0 };
let transactionCount = { creditCard: 0, debitCard: 0 };

fs.createReadStream(filePath)
.pipe(csv())
.on('data', (row) => {
const { id, tipo, monto } = row;
const amount = parseFloat(monto);

if (tipo === 'Crédito') {
balance += amount;
transactionCount.creditCard++;
} else if (tipo === 'Débito') {
balance -= amount;
transactionCount.debitCard++;
}

if (amount > maxTransaction.monto) {
maxTransaction = { id, monto: amount };
}
})
.on('end', () => {
console.log('Reporte de Transacciones');
console.log('---------------------------------------------');
console.log(`Balance Final: ${balance.toFixed(2)}`);
console.log(`Transacción de Mayor Monto: ID ${maxTransaction.id} - ${maxTransaction.monto.toFixed(2)}`);
console.log(`Conteo de Transacciones: Crédito: ${transactionCount.creditCard} Débito: ${transactionCount.debitCard}`);
})
.on('error', (err) => {
console.error('Error al leer el archivo:', err.message);
});
26 changes: 26 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "interbank-academy-25",
"version": "1.0.0",
"description": "Procesamiento de Transacciones Bancarias (CLI)",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"csv-parser": "^3.0.0"
}
}