Preparado por: Geovanny Gabriel Arguello Costta
- Introducción
- Descripción General del Sistema
- Arquitectura y Componentes del Sistema
- 3.1 API Gateway
- 3.2 MS-Transaction
- 3.3 MS-Anti-Fraud
- 3.4 MS-Error-Report
- 3.5 MS-Transaction-Query
- Requisitos Funcionales
- Requisitos No Funcionales
- Modelo de Datos
- Casos de Uso
- Pruebas Realizadas
- Documentación
- Criterios de Aceptación y Pruebas
- Conclusiones y Reflexiones Finales
- Reflexión Personal y Compromiso
- Instrucciones de Uso
Este documento representa un análisis exhaustivo y detallado del proyecto desarrollado para el Yape Code Challenge. Su propósito principal es describir la solución implementada para el sistema de transacciones financieras, destacando los aspectos técnicos, arquitectónicos y funcionales clave.
El desafío consistió en crear un sistema robusto y escalable capaz de manejar transacciones financieras, asegurando su validación y actualización de estado a través de un conjunto de microservicios interconectados. La solución aborda no solo las necesidades inmediatas del procesamiento y validación de transacciones sino también contempla aspectos críticos como la seguridad, el rendimiento, la escalabilidad y la gestión de errores.
Este análisis se enriquece con detalles técnicos profundos, descripciones de arquitectura, y una perspectiva de ingeniería sistemática, proporcionando una guía integral para la comprensión y evaluación del sistema desarrollado. El documento está destinado a las partes interesadas del proyecto, facilitando así una comprensión clara y completa de la solución implementada en el Yape Code Challenge.
Volver a la tabla de contenidos.
El sistema desarrollado para el Yape Code Challenge es una solución para la gestión de transacciones financieras, diseñada para ejecutar y validar operaciones financieras en un entorno de alta concurrencia y demanda. Este ecosistema integra un API Gateway, varios microservicios independientes y una infraestructura de mensajería basada en Kafka, asegurando un flujo continuo, seguro y eficiente de datos.
- Cumplir con el Yape Code Challenge
- Eficiencia en la Validación de Transacciones: Garantizar una validación rápida y precisa, cumpliendo con las políticas de control de fraude y manejo de errores.
- Transparencia y Trazabilidad en el Proceso de Transacciones: Ofrecer actualizaciones en tiempo real del estado de las transacciones, asegurando transparencia y trazabilidad a lo largo de todo el proceso.
- Rendimiento Óptimo y Escalabilidad: Mantener un rendimiento óptimo bajo condiciones de alta demanda y concurrencia, con capacidad para escalar según sea necesario.
- Seguridad y Manejo de Errores Avanzado: Asegurar la integridad de los datos y una respuesta robusta a los errores, mediante una gestión de errores efectiva y mecanismos de seguridad sólidos.
- Arquitectura Basada en Microservicios: Cada microservicio, tiene responsabilidades claramente definidas. Esta estructura promueve la escalabilidad, el mantenimiento sencillo y una rápida iteración de desarrollo.
- Procesamiento y Validación de Transacciones: El núcleo del sistema es su capacidad para procesar y validar transacciones financieras. Utilizando reglas de negocio implementadas en el microservicio anti-fraude, cada transacción es evaluada y clasificada como
pendiente,aprobadaorechazada. Las transacciones que excedan un valor específico son automáticamente rechazadas. - Comunicación Asíncrona a Través de Kafka: Kafka actúa como un sistema de mensajería central, facilitando la comunicación asincrónica y robusta entre los microservicios. Esto mejora la desacoplación y la resiliencia del sistema.
- Alta Disponibilidad y Escalabilidad Horizontal: Diseñado para soportar un alto volumen de transacciones y aumentos en la demanda para garantizar una alta disponibilidad, pensado en que pueda escalar horizontalmente para manejar aumentos en la demanda y el crecimiento del sistema.
- Persistencia de Datos con PostgreSQL y MongoDB: Se utiliza PostgreSQL para la persistencia de transacciones y sus estados, mientras que MongoDB gestiona la información relacionada con los errores. Ambas bases de datos ofrecen robustez, integridad y capacidad para consultas complejas.
- Interfaz de Usuario y Documentación: A través de un API Gateway, el sistema ofrece una interfaz clara y documentada para la creación y consulta de transacciones, mejorando la experiencia de los clientes.
El proyecto se ha organizado en un monorepo, facilitando la gestión, el desarrollo y la integración de los distintos componentes del sistema.
El uso del monorepo permite un enfoque cohesivo para el manejo de múltiples servicios y librerías relacionadas. La estructura general del repositorio es la siguiente:
- Directorio Raíz: Contiene configuraciones comunes y documentación para todo el proyecto.
- Subdirectorios de Servicios y Librerías: Cada microservicio y librería tiene su propio subdirectorio, manteniendo su código fuente, configuraciones y dependencias de forma aislada.
.
├── README.md
├── common
├── docker-compose.yml
├── documents
├── gateway
├── ms-anti-fraud
├── ms-error-report
├── ms-transaction
└── ms-transaction-querySe han seguido prácticas de desarrollo consistentes y profesionales a lo largo del proyecto, asegurando la calidad y la mantenibilidad del código.
- Adopción de Conventional Commits: Se ha adoptado el estándar de Conventional Commits para los mensajes de commit en el repositorio. Este enfoque estandariza los mensajes de commit, facilita la generación de changelogs y mejora la legibilidad del historial de cambios.
- Ejemplo de Commit: Un mensaje de commit típico siguiendo este estándar puede verse así:
feat(gateway): Añadir autenticación por token para la API de transacciones.
La adopción de Conventional Commits es una de las muchas prácticas de desarrollo que subrayan mi compromiso con la calidad y la eficiencia en el proceso de desarrollo de software.
Volver a la tabla de contenidos.
- Descripción: El
API Gatewayactúa como el punto de entrada principal para todas las solicitudes externas. Está construido con JavaScript (JS) vanilla y Express, proporcionando una interfaz para la interacción con los distintos componentes del sistema. - Autenticación y Seguridad: Implementa un sistema de autenticación que emite tokens de corta duración, basados únicamente en un email (Por fines prácticos). Estos tokens, con una duración de 2 minutos, son esenciales para realizar transacciones.
- Creación de Transacciones: Permite la creación de transacciones financieras de forma asincrónica. Las validaciones de esquema se realizan para asegurar la integridad de los datos recibidos antes de procesarlos.
- Integración con Kafka: Publica las transacciones en el topic
transaction-requestde Kafka, desde donde los microservicios relevantes pueden procesarlas más adelánte. - Recuperación de Transacciones: Expone un endpoint para recuperar transacciones, utilizando un enfoque basado en criterios flexibles y retornando datos estructurados para fácil navegación y análisis.
- Documentación Swagger: Ofrece documentación completa y accesible a través de Swagger, facilitando la comprensión y utilización de los endpoints disponibles.
- Descripción: El microservicio
MS-Transaction, desarrollado con NestJS y TypeScript, es fundamental para el manejo de las transacciones financieras dentro del sistema. - Conexión con la Base de Datos: Se conecta directamente a la base de datos
transaction_statusen PostgreSQL, gestionando la persistencia de las transacciones y sus estados. - Gestión de Transacciones: Este microservicio se encarga de procesar las solicitudes de transacciones que llegan a través del topic
transaction-requesten Kafka. Cada transacción se registra inicialmente con un estadopendiente. - Integración con Kafka: Después de registrar una transacción, el microservicio publica un mensaje en el topic
verify-transactionpara su validación por el microservicioMS-Anti-Fraud. - Manejo de Errores: En caso de errores durante el proceso de registro, la información relevante se envía al topic
transaction-error, que es gestionado por el microservicioMS-Error-Report. - Actualización de Estados de Transacción: También consume mensajes del topic
transaction-status, permitiendo actualizar el estado de las transacciones aaprobado,rechazadooerrorsegún las validaciones realizadas porMS-Anti-Fraudo los reintentos gestionados porMS-Error-Report.
- Descripción:
MS-Anti-Fraudes un microservicio clave, implementado en TypeScript con Express. Su función principal es la validación de las transacciones para detectar y prevenir posibles fraudes. - Proceso de Validación: Este microservicio examina cada transacción, aplicando criterios específicos para determinar si es potencialmente fraudulenta. La regla es la restricción de transacciones con un valor superior a un límite preestablecido segun el reto.
- Comunicación con Kafka: Una vez que una transacción es validada,
MS-Anti-Fraudpublica el resultado en el topictransaction-statusde Kafka. Esto incluye la actualización del estado de la transacción aaprobadoorechazado. - Manejo de Errores: En caso de errores durante la validación,
MS-Anti-Fraudenvía información detallada sobre el error al topictransaction-errorpara su posterior procesamiento porMS-Error-Report. - Interacción con Otros Microservicios: Trabaja en estrecha colaboración con
MS-Transactionpara actualizar el estado de las transacciones y conMS-Error-Reportpara gestionar situaciones de error.
- Descripción:
MS-Error-Report, desarrollado en JavaScript con Express, es crucial para el manejo y registro de errores dentro del sistema. Se conecta a la base de datostransactions-errorsen MongoDB, optimizada para el registro de información relacionada con errores. - Funcionalidad de Registro de Errores: Este microservicio recibe información de errores a través del topic
transaction-erroren Kafka. Cada error se asocia con datos relevantes de la transacción, ya sea registrada o no en la base de datos, y se categoriza según su tipo y origen. - Gestión de Reintentos de Transacciones:
MS-Error-Reportgestiona los reintentos de transacciones fallidas. Si una transacción ha sido registrada en la base de datos pero falla en etapas posteriores, el sistema intenta procesarla nuevamente hasta tres veces con intervalos de tiempo incrementales. - Integración con Bull y Redis: Para manejar los reintentos de forma eficiente, utiliza Bull y Redis. Esta combinación permite programar y ejecutar tareas de reintento con la precisión temporal requerida.
- Comunicación de Estado Final de Transacción: Si una transacción falla después de los reintentos,
MS-Error-Reportpublica un mensaje en el topictransaction-statuscon un estado deerror, indicando que la transacción no pudo completarse satisfactoriamente.
- Descripción:
MS-Transaction-Queryes un microservicio diseñado para manejar específicamente las consultas de transacciones. Escrito en JavaScript con Express, este servicio se conecta a la misma base de datos PostgreSQLtransaction_statusqueMS-Transaction. - Separación de Responsabilidades: La creación de
MS-Transaction-Queryobedece a la decisión de separar las funcionalidades de consulta y actualización/creación de transacciones. Esta separación es estratégica para optimizar el rendimiento en escenarios de alta concurrencia. - Especialización en Consultas: Este microservicio se centra únicamente en la recuperación y presentación de datos de transacciones, mejorando la eficiencia y la velocidad de respuesta en las operaciones de lectura.
- Validación de Esquemas de Consulta: Utiliza esquemas de validación detallados para asegurar que las solicitudes de consulta cumplan con los criterios esperados, garantizando así la integridad y relevancia de los datos recuperados.
- Uso de HATEOAS para Navegación de Recursos: Implementa el principio HATEOAS (Hypermedia as the Engine of Application State) para proporcionar una interfaz de usuario más rica y dinámica, permitiendo una fácil navegación entre los recursos relacionados.
- Comunicación con el API Gateway: La única vía de comunicación de
MS-Transaction-Queryes con elAPI Gateway, utilizando un broker de mensajería para recibir solicitudes de datos y enviar respuestas.
Además de las funcionalidades específicas de cada microservicio, se desarrollaron librerías especializadas para estandarizar y optimizar la comunicación dentro del sistema:
-
Librería de Conexión a Kafka: Se implementó una librería personalizada para normalizar y simplificar cómo los diferentes servicios se conectan y comunican a través de Kafka, garantizando una integración coherente y eficiente.
-
Broker Asíncrono con Axios: Para la comunicación entre el
API Gatewayy el microservicioMS-Transaction-Query, se desarrolló un broker asíncrono utilizando Axios. Este broker facilita la gestión de solicitudes y respuestas entre estos componentes, mejorando la eficiencia y la fiabilidad de las operaciones del sistema.
Volver a la tabla de contenidos.
Los requisitos funcionales describen las capacidades y acciones específicas que el sistema debe ser capaz de realizar para cumplir con sus objetivos. Estos requisitos se derivan de la comprensión detallada de las necesidades del proyecto, las expectativas de los usuarios y mis ganas de llamar la atención al equipo de reclutamiento de Yape.
- El sistema debe permitir la creación de transacciones financieras, asegurando un identificador único y un estado inicial de "pendiente".
- Cada transacción creada es procesada por
MS-Transactiony luego validada porMS-Anti-Fraud.
- Las transacciones deben ser validadas según reglas de negocio específicas, incluyendo la restricción de transacciones por encima de un valor determinado.
MS-Transactiondebe actualizar el estado de la transacción aaprobadoorechazadobasándose en la validación realizada porMS-Anti-Fraud.
- El sistema debe gestionar eficazmente los errores en las transacciones, clasificándolos y registrándolos a través de
MS-Error-Report. - Debe existir un mecanismo de reintentos para las transacciones fallidas, gestionado por
MS-Error-Report.
- Los usuarios deben poder consultar el estado actual y los detalles de cualquier transacción a través de
MS-Transaction-Query. - Las consultas deben ser eficientes y proporcionar información precisa y actualizada.
- El
API Gatewaydebe manejar la autenticación y autorización, emitiendo tokens de seguridad para acceso a las funcionalidades del sistema. - Debe garantizarse la seguridad en la transferencia y almacenamiento de datos.
- El sistema debe emplear
Kafkapara la comunicación asíncrona entre microservicios, asegurando una gestión efectiva de eventos y reduciendo el acoplamiento entre componentes.
- El sistema debe proporcionar documentación clara y accesible, incluyendo una especificación Swagger a través del
API Gateway. - Debe facilitarse un conjunto de pruebas de Postman para demostrar y validar las funcionalidades del sistema.
Volver a la tabla de contenidos.
Los requisitos no funcionales son cruciales para garantizar la calidad, eficiencia y fiabilidad del sistema. Estos requisitos abarcan aspectos que no están directamente relacionados con las funciones específicas del sistema, sino más bien con sus atributos de calidad.
- El sistema debe ser capaz de manejar un volumen alto de transacciones, soportando alta concurrencia de transacciones sin degradación significativa en la respuesta o el procesamiento.
- Debe diseñarse para permitir un escalado horizontal, facilitando el manejo de picos de demanda y crecimiento futuro.
- Se requiere una alta disponibilidad, utilizando estrategias como redundancia y recuperación ante desastres.
- El sistema debe ser resistente, capaz de recuperarse rápidamente de fallos y continuar operando eficazmente.
- Los datos deben ser almacenados y transmitidos de manera segura.
- Deben implementarse medidas robustas de autenticación y autorización para acceder a las funciones del sistema.
- El código fuente y la arquitectura deben seguir las mejores prácticas de ingeniería de software, asegurando que el sistema sea fácil de mantener y extender.
- Debe facilitarse la actualización y adición de nuevas características o componentes sin afectar significativamente la operación del sistema.
- El sistema debe incluir capacidades de monitoreo en tiempo real y registro detallado de actividades para facilitar el diagnóstico y la resolución rápida de problemas.
- Los registros y métricas del sistema deben ser claros, consistentes y fácilmente accesibles para el análisis.
- La documentación del sistema debe ser completa, actualizada y fácil de entender, incluyendo guías de usuario, especificaciones técnicas y documentación de API.
- La interfaz de usuario, especialmente a través del API Gateway, debe ser intuitiva y fácil de usar, asegurando una experiencia positiva para los reclutadores de Yape.
Volver a la tabla de contenidos.
El sistema utiliza dos bases de datos principales, PostgreSQL y MongoDB, cada una con esquemas específicos que respaldan diferentes aspectos del procesamiento y registro de transacciones y errores.
El modelo de datos en PostgreSQL se centra en la gestión de transacciones y tipos de transferencia.
id(UUID): Identificador único para cada transacción.accountExternalIdDebit(UUID): Referencia a la cuenta de débito.accountExternalIdCredit(UUID): Referencia a la cuenta de crédito.correlationId(UUID): Identificador de correlación para eventos y seguimiento.transferTypeId(Number): Clave foránea que enlaza conTransferType.value(Decimal): Monto de la transacción.status(Enum): Estado de la transacción, valores posiblespending,approved,rejected,error.createdAt(CreateDateColumn): Fecha y hora de creación.updatedAt(UpdateDateColumn): Fecha y hora de la última actualización.
id(PrimaryGeneratedColumn): Identificador único y secuencial para cada tipo de transferencia.name(String): Nombre del tipo de transferencia.transactions(OneToMany): Relación conTransaction.
El modelo de datos en MongoDB está diseñado para el registro y seguimiento de errores.
errorType(String): Tipo de error.reportedBy(String): Microservicio o componente que reporta el error.transactionId(String): Identificador de la transacción asociada, si aplica.correlationId(String): Identificador de correlación para eventos y seguimiento.attempts(Number): Número de intentos de procesamiento de la transacción.error: Detalles específicos del error.name(String): Nombre del error.message(String): Mensaje descriptivo del error.stack(Object): Pila de llamadas del error.
unrecordedTransaction: Datos de la transacción no registrada.accountExternalIdDebit(String): Referencia a la cuenta de débito.accountExternalIdCredit(String): Referencia a la cuenta de crédito.transferTypeId(Number): Identificador del tipo de transferencia.value(Number): Monto de la transacción.
- Especialización de Bases de Datos: PostgreSQL se utiliza para gestionar datos transaccionales con alta integridad, mientras que MongoDB maneja eficientemente los registros de errores y datos no estructurados.
- Normalización y Relaciones: En PostgreSQL, se mantiene la normalización y se establecen relaciones claras para garantizar la integridad de los datos.
- Flexibilidad y Documentación de Datos: MongoDB ofrece flexibilidad para almacenar y recuperar registros de errores con estructuras variadas.
Volver a la tabla de contenidos.
Los casos de uso son escenarios que describen las interacciones típicas entre los usuarios/clientes y el sistema, proporcionando una comprensión clara de cómo se espera que el sistema funcione en situaciones de la vida real.
- Actor Principal: Usuario o sistema externo.
- Precondiciones: Autenticación exitosa a través del
API Gateway. - Flujo Principal:
- El usuario envía una solicitud de obtención de token al
API Gateway. - El
API Gatewaygenera un token de autenticación. - El usuario envía una solicitud de creación de transacción al
API Gatewaycon el token. - El
API Gatewayvalida la solicitud y se envía al microservicioMS-Transactiona través de Kafka. MS-Transactionregistra la transacción en la base de datos con un estadopendiente.MS-Transactionpublica un evento en el topicverify-transactionpara su validación por MS-Anti-Fraud.
- El usuario envía una solicitud de obtención de token al
- Actor Principal:
MS-Anti-Fraud. - Precondiciones: Recibo de una nueva transacción para validación.
- Flujo Principal:
MS-Anti-Fraudrecibe el evento de la nueva transacción.- Se ejecutan reglas de negocio para validar la transacción.
MS-Anti-Fraudpublica el resultado de la validación en el topictransaction-status.
- Actor Principal:
MS-Transaction. - Precondiciones: Recibo del resultado de validación de
MS-Anti-Fraud. - Flujo Principal:
MS-Transactionrecibe el mensaje con el resultado de la validación.- Actualiza el estado de la transacción en la base de datos a
aprobadoorechazado.
- Actor Principal: Usuario o sistema externo.
- Precondiciones: La transacción ha sido creada y tiene un identificador único.
- Flujo Principal:
- El usuario realiza una solicitud de estado de transacción al
API Gateway. - El
API Gatewayenvía la solicitud aMS-Transaction-Query. MS-Transaction-Queryrecupera y devuelve el estado y detalles de la transacción.
- El usuario realiza una solicitud de estado de transacción al
- Actor Principal:
MS-Error-Report. - Precondiciones: Ocurrencia de un error durante el procesamiento de una transacción.
- Flujo Principal:
MS-Error-Reportrecibe información de error desdeMS-TransactionoMS-Anti-Fraud.- Registra el error y determina si es necesario un reintento.
- En caso de reintento, programa la tarea correspondiente y, tras el intervalo de tiempo, reintenta el procesamiento.
Volver a la tabla de contenidos.
En este proyecto, se han implementado varios tipos de pruebas para garantizar que el sistema cumple con los requisitos y funciona como se espera.
- Objetivo: Verificar la capacidad del sistema para manejar un volumen alto de transacciones sin degradación del rendimiento.
- Metodología: Utilización de JMeter para simular un entorno de alto tráfico, generando múltiples solicitudes de transacción para evaluar el rendimiento del sistema bajo carga.
- Resultados Esperados: El sistema debe ser capaz de procesar todas las transacciones de manera eficiente, manteniendo tiempos de respuesta rápidos y sin errores significativos.
- Objetivo: Confirmar que el sistema es resistente a amenazas de seguridad comunes y protege adecuadamente los datos sensibles.
- Metodología: Implementación de pruebas para validar la autenticación, autorización y manejo seguro de la información.
- Resultados Esperados: El sistema debe demostrar su capacidad para proteger contra accesos no autorizados y garantizar la confidencialidad e integridad de los datos.
- Objetivo: Comprobar que cada función del sistema opera según lo especificado en los requisitos.
- Metodología: Ejecución de pruebas unitarias y funcionales para cada microservicio y componente, asegurando que cumplen con su comportamiento esperado.
- Resultados Esperados: Cada componente y microservicio debe funcionar de acuerdo con su especificación, realizando las operaciones requeridas y respondiendo adecuadamente a los diferentes escenarios.
Volver a la tabla de contenidos.
Esta sección describe los recursos de documentación disponibles y las herramientas de prueba proporcionadas.
- Descripción: El
API Gatewayofrece una documentación completa a través de Swagger. Esta documentación proporciona una visión detallada de todos los endpoints disponibles, sus parámetros, formatos de solicitud y respuesta, y otros detalles relevantes. - Accesibilidad: La documentación Swagger está accesible públicamente a través de la URL
/v1/api-docs.
- Descripción: Se ha preparado un colección Postman para demostrar y validar las funcionalidades del sistema.
- Enfoque: La documentación se ha elaborado con un enfoque en la claridad, la precisión técnica y la facilidad de uso.
Volver a la tabla de contenidos.
Estos criterios sirven como una guía para la evaluación y validación de cada componente del sistema.
-
CA1: Funcionalidad Completa: Todas las características y funciones del sistema deben operar según lo especificado en los requisitos funcionales. Esto incluye la correcta ejecución de transacciones, la validación eficiente de las mismas y el manejo adecuado de errores y reintentos.
-
CA2: Cumplimiento de Requisitos No Funcionales: El sistema debe cumplir con los requisitos no funcionales establecidos, incluyendo rendimiento, escalabilidad, seguridad, mantenibilidad y usabilidad.
-
CA3: Integración y Fluidez de Procesos: Los distintos microservicios y componentes del sistema deben integrarse y funcionar juntos de manera fluida y sin errores.
Volver a la tabla de contenidos.
Este proyecto ha sido un ejercicio exhaustivo en el diseño e implementación de un sistema de procesamiento de transacciones eficiente y seguro. A través de la adopción de una arquitectura basada en microservicios, el sistema logra un equilibrio entre rendimiento, escalabilidad y mantenibilidad.
- La importancia de una planificación y diseño arquitectónico cuidadosos.
- La eficacia de una estrategia de pruebas exhaustiva y planificada.
- La necesidad de adaptabilidad y flexibilidad en el desarrollo de software.
- Exploración de tecnologías emergentes para optimización adicional como cacheo.
- Ampliación de la suite de pruebas para cubrir más escenarios y casos de uso.
- CronJobs para mejorar la recuperación de transacciones que no logran ser procesadas.
- Análisis automatizado del registro de errores para tomar decisiones informadas.
Volver a la tabla de contenidos.
Antes de concluir este documento, es importante dedicar un espacio para una reflexión personal sobre el proceso y la metodología adoptados en el desarrollo de este proyecto.
El desarrollo de este proyecto ha sido una labor de gran compromiso y pasión, reflejando un enfoque meticuloso en la calidad y las buenas prácticas. Cada decisión tomada, cada línea de código escrita, y cada estructura de datos implementada, ha estado imbuida con un espíritu de excelencia y atención al detalle. La elección de utilizar una variedad de lenguajes de programación, frameworks como NestJS, y sistemas de bases de datos distintos ha sido deliberada y estratégica, con el objetivo de demostrar flexibilidad técnica y una comprensión profunda de diversas herramientas y paradigmas de desarrollo.
El uso de JWT para la autenticación, junto con un sistema robusto de recuperación de transacciones utilizando Bull y Redis, no solo muestra una habilidad para integrar tecnologías complementarias sino también un enfoque proactivo para la resiliencia y seguridad del sistema. Estas elecciones, junto con la implementación de prácticas avanzadas como Conventional Commits y el diseño cuidadoso de un monorepo, están diseñadas para resaltar una competencia de nivel Jedi en ingeniería de software.
Este proyecto no es solo la solución a un reto; es una carta de presentación, una demostración palpable de amor por la ingeniería y una muestra de la dedicación que puedo aportar a Yape. Cada elemento ha sido construido con la visión de no solo cumplir con los requisitos, sino de exceder las expectativas, estableciendo un estándar de lo que soy capaz de entregar.
Al considerar este trabajo, uno puede ver claramente la combinación de pasión, precisión y profundidad técnica que caracteriza mi enfoque del desarrollo de software y la solución de problemas complejos, se pretende no solo demostrar una habilidad técnica refinada sino también transmitir el nivel de compromiso y pasión por el desarrollo de soluciones de software que sean robustas, escalables y, sobre todo, construidas con un propósito claro y una dedicación que va más allá de las expectativas.
Gracias por llegar hasta aquí.
Made with love by giothcode

