# Visión general del Get Smart SDK

Esta página proporciona una visión general de alto nivel de la biblioteca `redsys-tpv-business-lib`, explicando su propósito, diseño arquitectónico y el cambio técnico de los sistemas legados hacia un enfoque moderno nativo en Kotlin.

La `redsys-tpv-business-lib` es un Android SDK diseñado para actuar como una capa de abstracción segura entre tu aplicación y el Get Smart SDK Payment Service. Permite integrar funcionalidades de pago de forma rápida y segura sin gestionar la compleja lógica de negocio subyacente ni los protocolos de comunicación.

Esta biblioteca sustituye a la legada `redsysTpvAndroidLib` (`paysyslib.jar`). Proporciona acceso a todas las funcionalidades principales de Getnet, incluyendo:

* **Procesamiento de pagos**: Gestión de pagos estándar.
* **Preautorizaciones**: Gestión de la creación, confirmación y cancelación de preautorizaciones.
* **Gestión de operaciones**: Acceso al historial de transacciones, gestión de sesiones y totales.
* **Devoluciones**: Procesamiento de devoluciones.
* **Configuración**: Gestión de ajustes y claves.

## Arquitectura

La arquitectura de la solución consta de cuatro actores principales que interactúan para procesar pagos y gestionar el TPV:

1. **App**: Su aplicación Android desarrollada por el integrador.
2. **redsys-tpv-business-lib**: El SDK proporcionado por Getnet. Se conecta de forma segura con el Get Smart SDK Payment Service instalado en el dispositivo.
3. **Get Smart SDK Payment Service**: Un servicio Android de segundo plano que se ejecuta en el dispositivo. Implementa la lógica de negocio, gestiona los protocolos de comunicación con el host y maneja las operaciones de bajo nivel.
4. **Host**: El back-office en la nube de Getnet que procesa pagos, configuraciones, registros y otra lógica del TPV.

### Flujo de datos

La arquitectura garantiza una clara separación de responsabilidades. Su aplicación interactúa con el SDK, que a su vez se comunica con el Payment Service local. El Payment Service se encarga de la ejecución real y de la comunicación con el Host remoto.

## Filosofía de diseño

La `redsys-tpv-business-lib` adopta los estándares modernos de desarrollo de Android para facilitar la integración en las arquitecturas de aplicaciones actuales (como MVVM o Clean Architecture).

### Kotlin-First y Coroutines

La biblioteca está desarrollada al 100% en Kotlin. Aprovecha las **Kotlin Coroutines** para gestionar tareas asíncronas de manera eficiente.

* **Suspend Functions**: Todas las funciones de interfaz de la biblioteca se definen como `suspend`. Esto garantiza que las operaciones, que implican comunicación de red con el host, no bloqueen el hilo principal.
* **Context Management**: Todas las ejecuciones cambian automáticamente a `Dispatchers.IO` para asegurar el contexto de hilo adecuado para las operaciones de red y disco.

### Patrón Repository y Clean Architecture

La biblioteca sigue el **Repository Pattern** y los **principios SOLID**, organizando la funcionalidad en distintas interfaces (Repositorios) basadas en su dominio específico (p. ej., `PaymentRepository`, `InitializationRepository`).

Este diseño ofrece varias ventajas clave:

* **Desacoplamiento**: Abstrae tu aplicación de la capa de datos y de los detalles específicos de la implementación.
* **Inyección de dependencias**: La biblioteca está diseñada para funcionar sin problemas con marcos de inyección de dependencias como **Dagger Hilt**. Puedes configurar los repositorios como singletons.
* **Testabilidad**: El diseño basado en interfaces permite sustituir las implementaciones reales por repositorios simulados (mocks) durante las pruebas. Esto te permite probar la lógica de tu aplicación de forma independiente del hardware o servicio de Getnet.

### Comparación con la biblioteca legada

A diferencia de la legada `paysyslib.jar`, que requería una gestión más manual de la lógica y los callbacks, la nueva biblioteca proporciona un enfoque estructurado, de tipo seguro (type-safe) y reactivo para la integración.

| Característica | Legada (paysyslib.jar) | Nueva (redsys-tpv-business-lib) |
| :---- | :---- | :---- |
| **Lenguaje** | Java | Kotlin |
| **Concurrencia** | Callbacks/Hilos | Coroutines (funciones `suspend`) |
| **Arquitectura** | Monolítica | Repository Pattern / Clean Architecture |
| **Integración** | Instanciación manual | Lista para Inyección de Dependencias (Hilt) |