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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/mvnw text eol=lf
*.cmd text eol=crlf
33 changes: 33 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
114 changes: 50 additions & 64 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,52 @@
# Reto Técnico: Procesamiento de Transacciones Bancarias (CLI)
# 📌 Procesamiento de Transacciones - Interbank

## 📖 Introducción
Este proyecto tiene como objetivo procesar transacciones bancarias a partir de un archivo CSV, generando un reporte con los datos procesados. Se implementó en **Java con Spring Boot** y utiliza **Apache Commons CSV** para la lectura del archivo.

## 🚀 Instrucciones de Ejecución
### 📦 Instalación de Dependencias
Asegúrate de tener instalado **Java 17** o superior y **Maven**. Luego, instala las dependencias ejecutando:

```sh
mvn clean install
```

### ▶️ Ejecución de la Aplicación
Para ejecutar el proyecto, utiliza el siguiente comando:

```sh
mvn spring-boot:run
```

La aplicación buscará el archivo `data.csv` en el classpath y procesará sus transacciones.

## 💡 Enfoque y Solución
### 🔹 Lógica Implementada
1. **Lectura del archivo CSV:** Se utiliza `CSVReaderUtil` para convertir los registros en objetos `Transaction`.
2. **Procesamiento de transacciones:** `TransactionController` gestiona las operaciones llamando al servicio de reportes.
3. **Generación de Reporte:** Se imprime en consola un resumen de las transacciones procesadas.

### 🛠️ Decisiones de Diseño
- **Spring Boot:** Se usó para facilitar la inyección de dependencias y la ejecución de la aplicación.
- **Apache Commons CSV:** Para leer archivos CSV de manera eficiente.

## 📂 Estructura del Proyecto
```
procesing-interbank/
│── src/
│ ├── main/java/com/cli/procesing/interbank/
│ │ ├── ProcesingTransactionApplication.java # Punto de entrada
│ │ ├── controller/TransactionController.java # Controlador principal
│ │ ├── model/Transaction.java # Modelo de transacción
│ │ ├── util/CSVReaderUtil.java # Utilidad para leer CSV
│ ├── test/java/com/cli/procesing/interbank/
│ │ ├── ProcesingTransactionApplicationTest.java # Pruebas unitarias
│── data.csv # Archivo de ejemplo para pruebas
│── pom.xml # Archivo de configuración de Maven
```

## 📝 Notas Adicionales
- Para cambiar la ubicación del archivo CSV, modifícalo en `resources/` o ajusta el `classpath`.
- Se pueden agregar validaciones adicionales en `CSVReaderUtil` para evitar errores en el parsing.

## 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.
Loading