BANADESA (CINOP) - Transferencias Monetarias CondicionadasBANADESA (CINOP) - Conditional Cash Transfers
Resumen
Sistema de gestión de pagos de las transferencias monetarias condicionadas de BANADESA (CINOP), donde los datos de cada institución deben mantenerse separados y el proceso de pago involucra hardware físico. Proyecto realizado como consultor para Oncorp.
Mi rol
Backend Developer (consultor). Participé en el frontend y la API REST, en el modelo de aislamiento de datos y en el despliegue de las aplicaciones.
Qué construí
- Aislamiento de datos por institución mediante un esquema separado para cada una (enfoque single tenant) y control de acceso por roles.
- Frontend y API REST con NestJS, conectada a PostgreSQL y a una caché Redis, para el sistema de gestión de pagos.
- Integración de impresoras y lectores de huella al sistema web mediante una API local y el SDK del dispositivo.
- Administración del despliegue en un servidor VPS con contenedores (Docker sobre Linux).
Arquitectura y decisiones técnicas
- Un esquema por institución: separa físicamente los datos de cada una dentro de la base de datos, lo que reduce el riesgo de que una institución vea información de otra frente a un filtrado solo por columna.
- Roles y permisos: el acceso a las acciones del sistema depende del rol del usuario, complementando el aislamiento por esquema.
- API local para el hardware: un navegador no puede hablar directamente con el SDK de una impresora o un lector de huella, por lo que una API local hace de puente entre el sistema web y el dispositivo.
- Caché con Redis: descarga a la base de datos de lecturas repetidas.
- Contenedores en VPS: entornos reproducibles y despliegues consistentes.
Resultados
- Un sistema web que mantiene separada la data de cada institución y restringe las acciones según el rol.
- Conexión del flujo de pagos con el hardware necesario (impresoras y lectores de huella) desde la aplicación web.
- Aplicaciones desplegadas y administradas en un VPS con contenedores.
Stack
NestJS, PostgreSQL, Redis, Docker, Linux, VPS, API REST.
Overview
Payment management system for BANADESA’s conditional cash transfers (CINOP), where each institution’s data must stay separate and the payment process involves physical hardware. Delivered as a consultant for Oncorp.
My role
Backend Developer (consultant). I worked on the frontend and REST API, on the data isolation model and on deploying the applications.
What I built
- Per-institution data isolation through a separate schema for each one (single-tenant approach) and role-based access control.
- Frontend and REST API with NestJS, connected to PostgreSQL and a Redis cache, for the payment management system.
- Printer and fingerprint reader integration into the web system through a local API and the device SDK.
- Management of the deployment on a VPS server using containers (Docker on Linux).
Architecture and technical decisions
- One schema per institution: physically separates each institution’s data inside the database, lowering the risk of one institution seeing another’s information compared to column-level filtering alone.
- Roles and permissions: access to system actions depends on the user’s role, complementing the schema-level isolation.
- Local API for hardware: a browser cannot talk directly to a printer or fingerprint reader SDK, so a local API bridges the web system and the device.
- Redis cache: offloads repeated reads from the database.
- Containers on a VPS: reproducible environments and consistent deployments.
Key achievements
- A web system that keeps each institution’s data separate and restricts actions by role.
- The payment flow connected to the required hardware (printers and fingerprint readers) from the web application.
- Applications deployed and managed on a VPS with containers.
Stack
NestJS, PostgreSQL, Redis, Docker, Linux, VPS, REST API.
Tecnologías utilizadas:Technologies used:
- NestJS
- PostgreSQL
- Redis
- Linux
- Docker
- VPS
- API REST