diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -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/ diff --git a/README.md b/README.md index 668a6a2..288b0b4 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..606a39a --- /dev/null +++ b/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.10 + + + com.payments.transaction + interbank + 1.0.0-SNAPSHOT + retoibk + Reto Técnico: Procesamiento de Transacciones Bancarias (CLI) + + + 17 + + + + + + org.springframework.boot + spring-boot-starter + + + + + org.apache.commons + commons-csv + 1.8 + + + org.projectlombok + lombok + true + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + diff --git a/src/main/java/com/cli/procesing/interbank/ProcesingTransactionApplication.java b/src/main/java/com/cli/procesing/interbank/ProcesingTransactionApplication.java new file mode 100644 index 0000000..3dc0fab --- /dev/null +++ b/src/main/java/com/cli/procesing/interbank/ProcesingTransactionApplication.java @@ -0,0 +1,39 @@ +package com.cli.procesing.interbank; + +import com.cli.procesing.interbank.controller.TransactionController; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.io.FileNotFoundException; +import java.io.InputStream; + +@SpringBootApplication +public class ProcesingTransactionApplication implements CommandLineRunner { + private final TransactionController controller; + + public ProcesingTransactionApplication(TransactionController controller) { + this.controller = controller; + } + + public static void main(String[] args) { + SpringApplication.run(ProcesingTransactionApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + // Usar el cargador de recursos de Spring Boot para obtener el archivo desde resources + InputStream inputStream = getClass().getClassLoader().getResourceAsStream("data.csv"); + + // Verificar si el archivo fue encontrado + if (inputStream == null) { + throw new FileNotFoundException("El archivo data.csv no se encuentra en el classpath."); + } + + // Llamar al controlador y pasarle el InputStream en lugar de una ruta de archivo + controller.processTransaction(inputStream); + + // Imprimir el reporte + controller.printTransactionReport(); + } +} \ No newline at end of file diff --git a/src/main/java/com/cli/procesing/interbank/controller/TransactionController.java b/src/main/java/com/cli/procesing/interbank/controller/TransactionController.java new file mode 100644 index 0000000..2c95290 --- /dev/null +++ b/src/main/java/com/cli/procesing/interbank/controller/TransactionController.java @@ -0,0 +1,43 @@ +package com.cli.procesing.interbank.controller; + +import com.cli.procesing.interbank.model.Report; +import com.cli.procesing.interbank.model.Transaction; +import com.cli.procesing.interbank.util.CSVReaderUtil; +import org.springframework.stereotype.Controller; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * Clase que controla el flujo de procesamiento de transacciones + */ +@Controller +public class TransactionController { + + private final CSVReaderUtil csvReader; + private final Report report; + + public TransactionController(CSVReaderUtil csvReader, Report report) { + this.csvReader = csvReader; + this.report = report; + } + + /** + * Método para procesar las transacciones + * @param fileCSV + * @throws IOException + */ + public void processTransaction(InputStream fileCSV) throws IOException { + List transaction = csvReader.readArchive(fileCSV); + report.proccessTransaction(transaction); + } + + /** + * Método para imprimir el reporte + */ + public void printTransactionReport() { + report.printReport(); + } +} + diff --git a/src/main/java/com/cli/procesing/interbank/model/Report.java b/src/main/java/com/cli/procesing/interbank/model/Report.java new file mode 100644 index 0000000..57a757f --- /dev/null +++ b/src/main/java/com/cli/procesing/interbank/model/Report.java @@ -0,0 +1,46 @@ +package com.cli.procesing.interbank.model; + +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Clase Reporte que procesa y genera un informe de transacciones. + */ +@Component +public class Report { + private double finalBalance; + private Transaction TransactionHighestAmount; + private int creditCount; + private int DebitCount; + + public void proccessTransaction(List transacciones) { + finalBalance = 0; + TransactionHighestAmount = null; + creditCount = 0; + DebitCount = 0; + + for (Transaction trans : transacciones) { + if (trans.getType().equals("Crédito")) { + finalBalance += trans.getAmount(); + creditCount++; + } else if (trans.getType().equals("Débito")) { + finalBalance -= trans.getAmount(); + DebitCount++; + } + + if (TransactionHighestAmount == null || trans.getAmount() > TransactionHighestAmount.getAmount()) { + TransactionHighestAmount = trans; + } + } + } + + public void printReport() { + System.out.println("Reporte de Transacciones"); + System.out.println("---------------------------------------------"); + System.out.printf("Balance Final: %.2f\n", finalBalance); + System.out.println("Transacción de Mayor Monto: ID " + TransactionHighestAmount.getId() + + " - " + TransactionHighestAmount.getAmount()); + System.out.println("Conteo de Transacciones: Crédito: " + creditCount + " Débito: " + DebitCount); + } +} \ No newline at end of file diff --git a/src/main/java/com/cli/procesing/interbank/model/Transaction.java b/src/main/java/com/cli/procesing/interbank/model/Transaction.java new file mode 100644 index 0000000..0b8f543 --- /dev/null +++ b/src/main/java/com/cli/procesing/interbank/model/Transaction.java @@ -0,0 +1,14 @@ +package com.cli.procesing.interbank.model; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Transaction { + + private int id; + private String type; + private double amount; + +} diff --git a/src/main/java/com/cli/procesing/interbank/util/CSVReaderUtil.java b/src/main/java/com/cli/procesing/interbank/util/CSVReaderUtil.java new file mode 100644 index 0000000..c3bc612 --- /dev/null +++ b/src/main/java/com/cli/procesing/interbank/util/CSVReaderUtil.java @@ -0,0 +1,30 @@ +package com.cli.procesing.interbank.util; + +import com.cli.procesing.interbank.model.Transaction; +import org.apache.commons.csv.*; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.util.*; + +/** + * Clase Utilitaria para lectura de archivos CSV + */ +@Component +public class CSVReaderUtil { + public List readArchive(InputStream inputStream) throws IOException { + List transactions = new ArrayList<>(); + + try (Reader reader = new InputStreamReader(inputStream); + CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader())) { + + for (CSVRecord record : csvParser) { + int id = Integer.parseInt(record.get("id")); + String type = record.get("tipo"); + double amount = Double.parseDouble(record.get("monto")); + transactions.add(new Transaction(id, type, amount)); + } + } + return transactions; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ec944ac --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=retoibk diff --git a/src/main/resources/data.csv b/src/main/resources/data.csv new file mode 100644 index 0000000..11cbd58 --- /dev/null +++ b/src/main/resources/data.csv @@ -0,0 +1,1001 @@ +id,tipo,monto +1,Débito,235.81 +2,Débito,227.59 +3,Crédito,34.28 +4,Crédito,309.36 +5,Crédito,418.59 +6,Crédito,335.24 +7,Débito,449.74 +8,Débito,405.2 +9,Crédito,460.31 +10,Crédito,351.04 +11,Débito,300.37 +12,Débito,38.74 +13,Crédito,152.74 +14,Crédito,328.49 +15,Débito,303.96 +16,Débito,95.62 +17,Crédito,449.23 +18,Débito,385.45 +19,Débito,427.61 +20,Crédito,472.88 +21,Débito,229.3 +22,Débito,219.24 +23,Crédito,464.06 +24,Crédito,494.83 +25,Débito,135.11 +26,Débito,318.03 +27,Crédito,65.23 +28,Débito,320.17 +29,Crédito,376.6 +30,Crédito,285.06 +31,Crédito,432.75 +32,Crédito,14.55 +33,Crédito,497.28 +34,Crédito,135.65 +35,Débito,159.79 +36,Débito,176.31 +37,Crédito,402.01 +38,Crédito,225.8 +39,Crédito,427.3 +40,Débito,465.07 +41,Crédito,394.2 +42,Crédito,72.66 +43,Débito,96.45 +44,Crédito,498.57 +45,Débito,452.72 +46,Crédito,276.58 +47,Débito,280.65 +48,Débito,330.41 +49,Crédito,123.6 +50,Crédito,399.36 +51,Crédito,67.34 +52,Débito,46.46 +53,Débito,214.33 +54,Débito,62.12 +55,Débito,282.6 +56,Crédito,145.74 +57,Débito,109.2 +58,Débito,468.31 +59,Débito,72.06 +60,Débito,378.18 +61,Débito,281.37 +62,Crédito,265.85 +63,Débito,22.36 +64,Crédito,447.02 +65,Crédito,14.79 +66,Crédito,327.16 +67,Débito,96.06 +68,Crédito,371.78 +69,Débito,228.95 +70,Crédito,375.46 +71,Crédito,165.92 +72,Débito,314.09 +73,Débito,398.5 +74,Débito,435.32 +75,Débito,56.07 +76,Crédito,310.06 +77,Débito,415.12 +78,Crédito,21.63 +79,Crédito,171.34 +80,Débito,442.2 +81,Débito,266.64 +82,Crédito,266.56 +83,Crédito,238.65 +84,Crédito,342.32 +85,Débito,160.47 +86,Débito,394.5 +87,Crédito,495.15 +88,Crédito,104.47 +89,Débito,116.25 +90,Crédito,10.53 +91,Crédito,44.05 +92,Crédito,134.58 +93,Débito,356.25 +94,Débito,453.52 +95,Débito,383.66 +96,Crédito,373.6 +97,Débito,442.99 +98,Débito,109.85 +99,Débito,377.81 +100,Débito,102.89 +101,Crédito,222.05 +102,Débito,314.17 +103,Crédito,114.99 +104,Débito,116.5 +105,Crédito,113.86 +106,Débito,109.34 +107,Débito,36.43 +108,Débito,103.18 +109,Crédito,349.3 +110,Débito,47.2 +111,Débito,303.12 +112,Crédito,121.2 +113,Débito,448.31 +114,Crédito,135.01 +115,Crédito,97.73 +116,Crédito,403.18 +117,Crédito,113.94 +118,Crédito,251.69 +119,Crédito,422.23 +120,Débito,119.89 +121,Débito,402.99 +122,Débito,337.96 +123,Crédito,33.7 +124,Crédito,313.76 +125,Crédito,435.31 +126,Crédito,48.59 +127,Débito,209.12 +128,Débito,64.83 +129,Débito,205.22 +130,Crédito,190.15 +131,Crédito,235.53 +132,Débito,476.55 +133,Débito,479.81 +134,Crédito,181.55 +135,Débito,498.32 +136,Crédito,447.87 +137,Débito,109.54 +138,Crédito,250.63 +139,Débito,287.87 +140,Crédito,418.79 +141,Débito,462.3 +142,Crédito,420.03 +143,Crédito,223.15 +144,Crédito,382.76 +145,Crédito,346.25 +146,Crédito,361.09 +147,Crédito,137.36 +148,Débito,497.35 +149,Crédito,219.42 +150,Crédito,177.84 +151,Débito,441.25 +152,Crédito,167.09 +153,Débito,17.91 +154,Crédito,453.34 +155,Crédito,101.65 +156,Crédito,190.35 +157,Crédito,374.89 +158,Débito,182.39 +159,Crédito,253.05 +160,Crédito,93.23 +161,Débito,255.14 +162,Débito,123.96 +163,Débito,374.13 +164,Débito,175.52 +165,Crédito,291.52 +166,Crédito,174.91 +167,Débito,286.22 +168,Débito,187.34 +169,Débito,296.79 +170,Débito,340.89 +171,Crédito,411.18 +172,Crédito,239.62 +173,Débito,40.85 +174,Crédito,279.09 +175,Crédito,332.82 +176,Débito,278.15 +177,Débito,477.03 +178,Débito,252.6 +179,Crédito,495.07 +180,Crédito,147.45 +181,Débito,355.01 +182,Débito,35.09 +183,Débito,152.92 +184,Crédito,236.35 +185,Débito,218.38 +186,Débito,289.58 +187,Débito,367.41 +188,Crédito,493.43 +189,Débito,16.76 +190,Crédito,486.46 +191,Débito,46.02 +192,Crédito,348.82 +193,Crédito,55.65 +194,Débito,49.81 +195,Débito,402.2 +196,Débito,65.71 +197,Débito,426.17 +198,Crédito,470.37 +199,Débito,285.33 +200,Débito,328.47 +201,Débito,117.94 +202,Crédito,272.46 +203,Débito,259.34 +204,Débito,312.28 +205,Crédito,331.71 +206,Crédito,96.83 +207,Crédito,274.71 +208,Débito,447.31 +209,Crédito,312.43 +210,Débito,395.07 +211,Crédito,371.77 +212,Débito,470.25 +213,Crédito,243.76 +214,Crédito,261.14 +215,Débito,288.6 +216,Crédito,382.71 +217,Débito,234.78 +218,Crédito,435.04 +219,Débito,192.98 +220,Débito,284.03 +221,Débito,122.29 +222,Débito,499.69 +223,Débito,436.31 +224,Crédito,239.85 +225,Crédito,12.61 +226,Débito,382.67 +227,Crédito,394.33 +228,Crédito,178.43 +229,Crédito,410.28 +230,Crédito,275.01 +231,Débito,484.45 +232,Crédito,96.67 +233,Crédito,494.9 +234,Débito,183.62 +235,Crédito,468.52 +236,Crédito,475.65 +237,Débito,214.71 +238,Débito,118.85 +239,Crédito,166.53 +240,Débito,187.59 +241,Débito,401.61 +242,Débito,421.33 +243,Crédito,159.55 +244,Débito,475.73 +245,Débito,296.1 +246,Crédito,477.26 +247,Crédito,435.34 +248,Débito,286.24 +249,Crédito,78.01 +250,Débito,115.68 +251,Débito,80.92 +252,Débito,223.39 +253,Crédito,315.81 +254,Débito,76.25 +255,Crédito,318.07 +256,Crédito,161.32 +257,Crédito,232.63 +258,Débito,166.34 +259,Débito,201.28 +260,Crédito,447.54 +261,Crédito,445.13 +262,Crédito,53.49 +263,Crédito,28.7 +264,Débito,269.47 +265,Débito,128.04 +266,Crédito,362.73 +267,Débito,170.46 +268,Débito,132.7 +269,Débito,170.26 +270,Crédito,365.61 +271,Crédito,26.45 +272,Crédito,25.54 +273,Débito,362.94 +274,Crédito,291.97 +275,Débito,495.79 +276,Crédito,232.34 +277,Crédito,29.01 +278,Crédito,471.36 +279,Débito,48.62 +280,Crédito,261.77 +281,Débito,303.26 +282,Débito,406.71 +283,Débito,261.18 +284,Débito,239.23 +285,Crédito,360.7 +286,Débito,45.18 +287,Débito,468.77 +288,Crédito,420.75 +289,Débito,478.59 +290,Crédito,77.67 +291,Crédito,85.5 +292,Débito,221.73 +293,Crédito,281.15 +294,Débito,199.7 +295,Débito,73.49 +296,Crédito,92.49 +297,Crédito,484.07 +298,Crédito,297.52 +299,Crédito,29.15 +300,Débito,357.54 +301,Crédito,266.98 +302,Crédito,465.53 +303,Crédito,363.16 +304,Débito,468.13 +305,Débito,109.15 +306,Crédito,104.19 +307,Crédito,389.94 +308,Débito,162.57 +309,Débito,467.11 +310,Débito,126.08 +311,Crédito,453.17 +312,Débito,409.85 +313,Crédito,435.41 +314,Débito,110.66 +315,Crédito,310.99 +316,Crédito,34.79 +317,Crédito,454.74 +318,Débito,166.88 +319,Crédito,96.95 +320,Crédito,173.02 +321,Crédito,437.09 +322,Débito,434.04 +323,Crédito,264.26 +324,Crédito,346.87 +325,Crédito,137.27 +326,Crédito,478.53 +327,Débito,285.24 +328,Crédito,350.19 +329,Débito,402.83 +330,Débito,299.36 +331,Débito,166.83 +332,Débito,47.28 +333,Crédito,380.48 +334,Crédito,280.57 +335,Débito,461.3 +336,Crédito,332.54 +337,Crédito,485.78 +338,Débito,52.48 +339,Débito,416.27 +340,Débito,120.75 +341,Crédito,369.24 +342,Crédito,291.87 +343,Débito,76.58 +344,Crédito,304.53 +345,Crédito,378.15 +346,Crédito,372.17 +347,Crédito,369.13 +348,Crédito,367.2 +349,Débito,41.15 +350,Débito,353.74 +351,Crédito,101.74 +352,Crédito,206.98 +353,Débito,47.41 +354,Débito,103.68 +355,Crédito,352.07 +356,Crédito,370.44 +357,Débito,406.93 +358,Crédito,78.49 +359,Crédito,432.83 +360,Crédito,364.24 +361,Crédito,240.09 +362,Crédito,231.83 +363,Débito,77.53 +364,Crédito,441.65 +365,Débito,219.95 +366,Débito,306.61 +367,Débito,462.41 +368,Crédito,339.97 +369,Débito,85.49 +370,Débito,69.99 +371,Débito,136.88 +372,Débito,91.16 +373,Débito,139.36 +374,Crédito,343.03 +375,Débito,233.29 +376,Débito,390.47 +377,Crédito,393.15 +378,Crédito,240.15 +379,Débito,309.4 +380,Débito,394.79 +381,Débito,445.72 +382,Débito,29.28 +383,Crédito,399.41 +384,Crédito,280.81 +385,Crédito,47.96 +386,Crédito,23.97 +387,Débito,371.02 +388,Débito,294.66 +389,Débito,363.13 +390,Crédito,291.83 +391,Débito,236.88 +392,Crédito,475.83 +393,Débito,436.63 +394,Débito,62.0 +395,Crédito,238.02 +396,Crédito,53.16 +397,Débito,427.41 +398,Débito,105.11 +399,Débito,11.89 +400,Débito,470.88 +401,Crédito,167.2 +402,Crédito,288.41 +403,Crédito,164.43 +404,Débito,146.47 +405,Débito,396.02 +406,Débito,477.73 +407,Débito,251.31 +408,Crédito,392.6 +409,Débito,249.28 +410,Crédito,213.4 +411,Débito,461.21 +412,Crédito,282.73 +413,Débito,441.15 +414,Crédito,189.54 +415,Débito,166.89 +416,Débito,468.68 +417,Débito,494.69 +418,Crédito,452.67 +419,Crédito,365.21 +420,Débito,94.48 +421,Crédito,337.63 +422,Débito,148.35 +423,Crédito,123.98 +424,Débito,263.71 +425,Crédito,491.53 +426,Crédito,392.74 +427,Crédito,200.75 +428,Débito,174.12 +429,Débito,387.22 +430,Débito,76.63 +431,Débito,230.22 +432,Débito,144.62 +433,Débito,198.29 +434,Crédito,380.96 +435,Crédito,129.62 +436,Débito,271.86 +437,Crédito,398.28 +438,Crédito,14.47 +439,Crédito,253.27 +440,Crédito,30.86 +441,Crédito,424.08 +442,Débito,455.37 +443,Débito,149.06 +444,Crédito,402.27 +445,Crédito,323.03 +446,Débito,285.59 +447,Crédito,91.42 +448,Crédito,358.68 +449,Crédito,170.56 +450,Débito,391.03 +451,Crédito,33.54 +452,Débito,237.34 +453,Crédito,204.54 +454,Crédito,294.05 +455,Crédito,182.51 +456,Crédito,333.28 +457,Crédito,125.8 +458,Débito,243.33 +459,Débito,327.53 +460,Crédito,311.13 +461,Crédito,227.73 +462,Débito,29.62 +463,Crédito,497.43 +464,Crédito,278.4 +465,Crédito,446.0 +466,Débito,127.67 +467,Crédito,213.15 +468,Débito,463.16 +469,Débito,385.6 +470,Débito,472.96 +471,Crédito,200.92 +472,Crédito,270.88 +473,Crédito,381.92 +474,Crédito,495.47 +475,Débito,198.07 +476,Crédito,480.63 +477,Crédito,16.63 +478,Crédito,392.3 +479,Crédito,146.97 +480,Crédito,137.08 +481,Crédito,10.16 +482,Débito,47.82 +483,Débito,405.39 +484,Crédito,281.62 +485,Débito,238.65 +486,Crédito,90.36 +487,Débito,46.73 +488,Crédito,61.58 +489,Débito,364.68 +490,Crédito,348.56 +491,Crédito,45.51 +492,Débito,323.13 +493,Débito,285.18 +494,Débito,196.27 +495,Débito,41.14 +496,Débito,481.48 +497,Débito,325.6 +498,Débito,432.24 +499,Crédito,14.01 +500,Débito,443.01 +501,Crédito,396.95 +502,Débito,201.84 +503,Crédito,108.69 +504,Crédito,284.24 +505,Débito,70.22 +506,Crédito,64.59 +507,Débito,391.92 +508,Crédito,13.74 +509,Débito,81.54 +510,Crédito,107.99 +511,Crédito,265.53 +512,Crédito,153.82 +513,Crédito,17.84 +514,Débito,116.4 +515,Débito,309.69 +516,Débito,302.67 +517,Crédito,382.19 +518,Crédito,346.32 +519,Débito,150.68 +520,Débito,401.13 +521,Débito,70.2 +522,Débito,312.86 +523,Débito,203.0 +524,Crédito,29.42 +525,Crédito,451.05 +526,Débito,159.08 +527,Crédito,438.79 +528,Crédito,20.51 +529,Débito,74.8 +530,Débito,206.55 +531,Débito,455.98 +532,Débito,494.18 +533,Débito,33.77 +534,Crédito,433.85 +535,Crédito,289.2 +536,Débito,56.04 +537,Crédito,73.04 +538,Crédito,266.5 +539,Débito,407.18 +540,Débito,35.92 +541,Débito,193.08 +542,Crédito,498.08 +543,Débito,380.18 +544,Crédito,239.28 +545,Crédito,465.19 +546,Débito,284.02 +547,Débito,30.8 +548,Débito,134.55 +549,Crédito,475.62 +550,Débito,188.2 +551,Débito,121.01 +552,Crédito,317.46 +553,Crédito,78.34 +554,Crédito,456.84 +555,Débito,62.37 +556,Crédito,85.23 +557,Crédito,221.93 +558,Crédito,431.07 +559,Crédito,39.71 +560,Crédito,269.15 +561,Crédito,105.68 +562,Crédito,106.23 +563,Débito,321.05 +564,Crédito,279.26 +565,Crédito,148.35 +566,Débito,91.38 +567,Crédito,193.89 +568,Débito,407.41 +569,Débito,486.14 +570,Crédito,189.96 +571,Crédito,430.13 +572,Crédito,445.85 +573,Débito,406.6 +574,Crédito,400.39 +575,Crédito,78.69 +576,Crédito,305.47 +577,Crédito,349.43 +578,Crédito,245.74 +579,Débito,129.92 +580,Débito,495.51 +581,Crédito,217.02 +582,Crédito,338.43 +583,Débito,58.18 +584,Crédito,316.51 +585,Crédito,378.42 +586,Débito,209.79 +587,Crédito,450.31 +588,Crédito,499.02 +589,Débito,469.37 +590,Crédito,123.87 +591,Débito,147.83 +592,Crédito,487.7 +593,Débito,237.14 +594,Débito,209.15 +595,Débito,148.68 +596,Crédito,242.08 +597,Débito,437.64 +598,Crédito,419.69 +599,Crédito,29.83 +600,Crédito,258.78 +601,Crédito,166.43 +602,Crédito,461.99 +603,Crédito,209.54 +604,Débito,27.13 +605,Crédito,159.26 +606,Débito,375.71 +607,Débito,67.9 +608,Débito,183.27 +609,Débito,358.61 +610,Débito,427.81 +611,Crédito,107.51 +612,Crédito,325.53 +613,Crédito,391.59 +614,Débito,452.9 +615,Débito,269.16 +616,Crédito,235.2 +617,Débito,333.07 +618,Débito,166.43 +619,Débito,166.25 +620,Débito,33.36 +621,Crédito,414.33 +622,Crédito,149.73 +623,Crédito,22.13 +624,Débito,99.26 +625,Crédito,395.86 +626,Débito,246.96 +627,Débito,433.7 +628,Crédito,260.76 +629,Crédito,114.12 +630,Débito,40.27 +631,Crédito,327.09 +632,Crédito,480.39 +633,Débito,52.62 +634,Débito,318.68 +635,Crédito,67.31 +636,Crédito,84.62 +637,Crédito,110.08 +638,Débito,35.55 +639,Débito,332.52 +640,Débito,43.18 +641,Débito,90.23 +642,Crédito,374.98 +643,Crédito,231.36 +644,Crédito,321.4 +645,Crédito,372.74 +646,Crédito,67.29 +647,Crédito,198.15 +648,Crédito,161.79 +649,Crédito,244.61 +650,Crédito,463.45 +651,Débito,31.33 +652,Crédito,136.5 +653,Débito,238.97 +654,Crédito,327.13 +655,Crédito,223.49 +656,Débito,169.94 +657,Crédito,90.06 +658,Débito,99.2 +659,Débito,117.97 +660,Débito,167.6 +661,Débito,184.93 +662,Crédito,141.41 +663,Débito,451.02 +664,Débito,448.33 +665,Débito,428.93 +666,Crédito,410.48 +667,Débito,345.61 +668,Débito,72.12 +669,Crédito,298.93 +670,Débito,364.35 +671,Débito,114.93 +672,Crédito,238.93 +673,Débito,144.77 +674,Crédito,184.45 +675,Crédito,301.15 +676,Débito,99.75 +677,Crédito,320.53 +678,Débito,224.98 +679,Crédito,118.84 +680,Crédito,220.42 +681,Crédito,428.3 +682,Débito,387.11 +683,Crédito,310.15 +684,Débito,273.73 +685,Débito,302.88 +686,Débito,333.93 +687,Crédito,121.13 +688,Débito,361.02 +689,Débito,142.04 +690,Crédito,409.83 +691,Crédito,472.64 +692,Crédito,18.84 +693,Crédito,405.53 +694,Crédito,152.41 +695,Crédito,489.74 +696,Débito,356.14 +697,Débito,307.21 +698,Crédito,117.49 +699,Crédito,266.13 +700,Débito,314.03 +701,Débito,312.03 +702,Crédito,261.95 +703,Débito,304.13 +704,Débito,114.03 +705,Crédito,288.0 +706,Débito,119.38 +707,Crédito,340.97 +708,Crédito,372.31 +709,Crédito,124.49 +710,Débito,317.62 +711,Débito,199.36 +712,Crédito,435.06 +713,Débito,94.1 +714,Crédito,450.06 +715,Crédito,113.7 +716,Débito,318.24 +717,Crédito,161.26 +718,Crédito,73.92 +719,Crédito,300.53 +720,Crédito,375.08 +721,Débito,328.97 +722,Crédito,189.42 +723,Crédito,15.78 +724,Crédito,184.05 +725,Débito,391.69 +726,Crédito,218.76 +727,Crédito,63.31 +728,Crédito,293.77 +729,Débito,47.1 +730,Crédito,289.29 +731,Crédito,373.59 +732,Débito,224.14 +733,Débito,362.44 +734,Débito,10.27 +735,Crédito,353.59 +736,Débito,35.6 +737,Débito,149.28 +738,Crédito,453.56 +739,Débito,346.71 +740,Crédito,320.66 +741,Crédito,188.46 +742,Débito,404.42 +743,Débito,158.52 +744,Crédito,147.89 +745,Crédito,423.79 +746,Débito,23.24 +747,Débito,360.08 +748,Débito,168.67 +749,Débito,269.65 +750,Crédito,219.32 +751,Crédito,447.5 +752,Débito,251.71 +753,Débito,175.3 +754,Crédito,69.58 +755,Débito,31.44 +756,Crédito,86.2 +757,Débito,385.9 +758,Crédito,475.94 +759,Crédito,448.92 +760,Crédito,334.59 +761,Crédito,476.74 +762,Débito,348.73 +763,Débito,488.82 +764,Crédito,107.98 +765,Crédito,260.79 +766,Crédito,231.17 +767,Crédito,294.46 +768,Débito,231.38 +769,Crédito,426.84 +770,Débito,268.88 +771,Crédito,341.16 +772,Crédito,407.47 +773,Crédito,21.64 +774,Débito,411.46 +775,Débito,336.11 +776,Débito,106.2 +777,Crédito,100.26 +778,Débito,130.88 +779,Débito,104.13 +780,Débito,46.95 +781,Crédito,395.33 +782,Débito,25.57 +783,Crédito,166.13 +784,Débito,59.18 +785,Crédito,478.17 +786,Crédito,214.52 +787,Débito,381.91 +788,Crédito,49.94 +789,Débito,173.93 +790,Débito,242.53 +791,Débito,291.75 +792,Débito,78.36 +793,Débito,11.44 +794,Crédito,68.93 +795,Crédito,155.31 +796,Crédito,470.71 +797,Crédito,170.97 +798,Débito,351.31 +799,Crédito,62.0 +800,Crédito,23.37 +801,Crédito,482.73 +802,Crédito,67.19 +803,Débito,258.45 +804,Débito,102.21 +805,Débito,361.42 +806,Débito,217.68 +807,Débito,198.34 +808,Crédito,425.98 +809,Débito,17.21 +810,Débito,352.18 +811,Débito,399.79 +812,Crédito,22.33 +813,Crédito,466.49 +814,Débito,379.72 +815,Débito,258.73 +816,Débito,262.7 +817,Crédito,340.63 +818,Débito,429.7 +819,Débito,250.4 +820,Crédito,374.33 +821,Crédito,282.26 +822,Crédito,419.68 +823,Crédito,95.27 +824,Débito,399.27 +825,Crédito,11.25 +826,Débito,495.92 +827,Débito,378.44 +828,Crédito,320.16 +829,Crédito,104.62 +830,Débito,242.18 +831,Crédito,182.57 +832,Crédito,391.14 +833,Crédito,249.15 +834,Débito,461.35 +835,Débito,470.42 +836,Crédito,137.71 +837,Crédito,499.57 +838,Débito,99.58 +839,Crédito,314.45 +840,Crédito,111.7 +841,Débito,262.46 +842,Débito,128.56 +843,Crédito,311.43 +844,Débito,188.65 +845,Débito,335.08 +846,Débito,109.8 +847,Crédito,13.81 +848,Crédito,479.63 +849,Débito,147.28 +850,Débito,244.02 +851,Débito,369.88 +852,Débito,53.14 +853,Débito,100.96 +854,Crédito,227.93 +855,Débito,329.06 +856,Crédito,412.55 +857,Débito,411.61 +858,Crédito,222.53 +859,Crédito,345.24 +860,Débito,382.9 +861,Crédito,197.57 +862,Crédito,363.31 +863,Crédito,432.57 +864,Crédito,248.74 +865,Crédito,476.58 +866,Crédito,155.07 +867,Débito,49.06 +868,Crédito,492.11 +869,Débito,450.96 +870,Débito,238.83 +871,Débito,318.29 +872,Débito,486.01 +873,Débito,212.08 +874,Crédito,354.51 +875,Débito,112.95 +876,Crédito,234.3 +877,Crédito,218.59 +878,Crédito,376.5 +879,Débito,486.92 +880,Débito,227.56 +881,Crédito,476.58 +882,Débito,124.04 +883,Débito,276.4 +884,Crédito,134.15 +885,Débito,307.53 +886,Crédito,343.77 +887,Débito,284.2 +888,Débito,287.39 +889,Crédito,380.79 +890,Débito,71.17 +891,Crédito,292.68 +892,Crédito,490.37 +893,Débito,75.82 +894,Crédito,217.32 +895,Débito,83.09 +896,Crédito,204.8 +897,Crédito,293.45 +898,Crédito,181.5 +899,Débito,124.75 +900,Crédito,426.46 +901,Débito,96.97 +902,Débito,285.12 +903,Débito,13.52 +904,Débito,83.58 +905,Crédito,233.18 +906,Crédito,434.87 +907,Débito,33.36 +908,Débito,455.25 +909,Crédito,360.6 +910,Crédito,284.42 +911,Débito,370.32 +912,Débito,377.55 +913,Crédito,13.75 +914,Débito,286.65 +915,Débito,214.64 +916,Crédito,154.54 +917,Crédito,460.59 +918,Crédito,104.3 +919,Débito,37.44 +920,Débito,205.04 +921,Crédito,118.63 +922,Débito,155.27 +923,Crédito,248.03 +924,Débito,452.1 +925,Débito,265.6 +926,Débito,411.77 +927,Crédito,86.89 +928,Crédito,20.11 +929,Débito,430.15 +930,Crédito,314.19 +931,Crédito,211.01 +932,Débito,185.35 +933,Débito,198.79 +934,Crédito,92.68 +935,Crédito,307.68 +936,Crédito,29.83 +937,Crédito,104.31 +938,Débito,448.4 +939,Débito,430.78 +940,Débito,370.12 +941,Débito,198.55 +942,Crédito,123.49 +943,Crédito,127.19 +944,Crédito,227.41 +945,Débito,498.97 +946,Débito,351.43 +947,Crédito,281.09 +948,Débito,316.78 +949,Débito,265.66 +950,Débito,355.28 +951,Crédito,237.31 +952,Débito,85.67 +953,Débito,493.27 +954,Crédito,443.36 +955,Crédito,297.22 +956,Débito,348.36 +957,Débito,351.29 +958,Crédito,272.57 +959,Débito,373.88 +960,Crédito,121.2 +961,Débito,279.07 +962,Crédito,31.99 +963,Débito,419.32 +964,Débito,195.69 +965,Débito,237.53 +966,Crédito,353.4 +967,Débito,119.8 +968,Débito,433.69 +969,Crédito,401.92 +970,Débito,219.2 +971,Débito,25.48 +972,Débito,15.4 +973,Débito,285.82 +974,Débito,70.13 +975,Crédito,114.94 +976,Crédito,404.2 +977,Crédito,143.41 +978,Débito,386.36 +979,Débito,285.3 +980,Débito,223.0 +981,Débito,285.11 +982,Crédito,105.5 +983,Débito,104.16 +984,Débito,347.48 +985,Débito,244.72 +986,Crédito,406.83 +987,Débito,401.72 +988,Crédito,460.93 +989,Crédito,283.77 +990,Débito,311.4 +991,Crédito,302.53 +992,Débito,239.65 +993,Crédito,341.12 +994,Crédito,385.06 +995,Crédito,488.61 +996,Crédito,64.59 +997,Débito,318.32 +998,Débito,335.07 +999,Débito,490.94 +1000,Débito,175.07 diff --git a/src/test/java/com/cli/procesing/interbank/ProcesingTransactionApplicationTests.java b/src/test/java/com/cli/procesing/interbank/ProcesingTransactionApplicationTests.java new file mode 100644 index 0000000..990af6c --- /dev/null +++ b/src/test/java/com/cli/procesing/interbank/ProcesingTransactionApplicationTests.java @@ -0,0 +1,13 @@ +package com.cli.procesing.interbank; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = ProcesingTransactionApplicationTests.class) +class ProcesingTransactionApplicationTests { + + @Test + void contextLoads() { + } + +}