Sunat Exchange

Sunat Exchange

Dockerized Flask app for tracking SUNAT exchange rates with PostgreSQL history, cron sync, Nginx and Chart.js.

Documentation

SUNAT Exchange

Aplicación web para consultar, guardar y visualizar el tipo de cambio publicado por SUNAT.

El proyecto obtiene el tipo de cambio diario, almacena un historial en PostgreSQL y muestra los datos en una interfaz simple con un gráfico interactivo. Está preparado para ejecutarse con Docker Compose usando Nginx como punto de entrada, Flask/Gunicorn como backend, PostgreSQL como base de datos y un servicio cron para sincronización automática.

Características principales

  • Consulta del tipo de cambio actual desde SUNAT.
  • Historial persistente en PostgreSQL.
  • Bootstrap histórico de los últimos meses cuando la base está vacía.
  • Sincronización diaria automática mediante cron.
  • API JSON para consultar el dato actual y el historial.
  • Gráfico interactivo con filtros por semana, mes y total.
  • Backups y restauración de base de datos desde Makefile.
  • Stack contenerizado con Docker Compose.
  • Tests automatizados con pytest y GitHub Actions.

Stack técnico

  • Python 3.13
  • Flask
  • PostgreSQL
  • Chart.js
  • Gunicorn
  • Nginx
  • Cron
  • Docker Compose
  • Pytest
  • GitHub Actions

Arquitectura

Host
  |
  v
Nginx
  |
  v
Flask / Gunicorn
  |
  v
PostgreSQL

Cron
  |
  v
PostgreSQL

Nginx es el único servicio expuesto al host. La aplicación Flask, la base de datos y el contenedor cron trabajan dentro de una red interna de Docker.

Endpoints principales

GET /

Página web con el tipo de cambio, historial y gráfico.

GET /api/v1/data

Consulta el tipo de cambio actual, lo guarda y devuelve una respuesta JSON.

GET /api/v1/history

Devuelve el historial guardado en la base de datos.

Ejecución local con Docker

cp .env.example .env
make build
make up

Luego abrir:

http://127.0.0.1:8000
Comandos útiles
make deploy
make logs
make down
make test
make db-back
make db-restore BACKUP=backups/sunat_exchange_YYYYMMDD_HHMMSS.sql