powershell -ExecutionPolicy Bypass -File run.ps1
Sistema de monitoreo operacional para 7 escáneres portuarios en Colombia.
protactics/
├── frontend/
│ └── index.html ← Dashboard completo (funciona solo sin backend)
├── backend/
│ ├── main.py ← API FastAPI
│ ├── models.py ← Modelos SQLAlchemy
│ ├── database.py ← Conexión BD + seed de puertos
│ ├── parsers/
│ │ ├── __init__.py ← Auto-detector de formato
│ │ ├── standard.py ← Formato A (Miniatura)
│ │ ├── rapiscan.py ← Formato B (Cargo Inspection Report)
│ │ └── tcbuen.py ← Formato C (Estado numérico 100)
│ ├── requirements.txt
│ └── Dockerfile
├── docker-compose.yml
└── README.md
Abrir frontend/index.html en cualquier navegador. Funciona completamente offline.
Los datos se pierden al cerrar el navegador.
Requisitos: Docker Desktop instalado.
# 1. Clonar o descomprimir el proyecto
cd protactics
# 2. Levantar todo (PostgreSQL + API)
docker-compose up --build
# 3. Abrir en el navegador
# API: http://localhost:8000
# Docs API: http://localhost:8000/docs
# Frontend: abrir frontend/index.html (o http://localhost:8000/app)En frontend/index.html, buscar la línea:
const USE_API = false;Cambiar a:
const USE_API = true;- Crear cuenta en https://railway.app
- Nuevo proyecto → "Deploy from GitHub repo"
- Seleccionar la carpeta
backend/ - Railway detecta el
Dockerfileautomáticamente - Agregar servicio PostgreSQL → Railway genera
DATABASE_URL - En Variables de entorno del backend, Railway ya inyecta
DATABASE_URL - Anotar la URL pública del backend (ej:
https://protactics-api.up.railway.app)
- Crear cuenta en https://vercel.com
- Nuevo proyecto → importar desde GitHub
- Seleccionar carpeta
frontend/ - En
frontend/index.htmlcambiar:
const USE_API = true;
const API_URL = 'https://TU-URL-DE-RAILWAY.up.railway.app';- Deploy → Vercel genera URL pública del dashboard
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /puertos |
Lista todos los puertos con stats |
| GET | /meses/{puerto_id} |
Meses con datos para un puerto |
| GET | /data/{puerto_id}/{year}/{mes} |
Dashboard data de un mes |
| POST | /upload/{puerto_id}/{year}/{mes} |
Subir archivo XLS |
| PUT | /disponibilidad/{puerto_id}/{year}/{mes} |
Guardar disponibilidad |
| GET | /disponibilidad/{puerto_id} |
Historial de disponibilidad |
Documentación interactiva: http://localhost:8000/docs
| Formato | Puertos | Identificación | Filtro |
|---|---|---|---|
| Standard | SPR Buenaventura, Barranquilla, Santa Marta, Pto. Antioquia | Columna Miniatura con valor |
Miniatura no-nula |
| Rapiscan | SPR Buenaventura (legacy), Aguadulce | Contiene "Scan Date & Time" | Tabla resumen diaria |
| TCBUEN | TCBUEN | Estado numérico 100/102 | Estado === 100 |
| Variable | Descripción | Default |
|---|---|---|
DATABASE_URL |
URL de PostgreSQL | sqlite:///./protactics.db |
PORT |
Puerto del servidor | 8000 |
| Rango | Color | Estado |
|---|---|---|
| 95% – 100% | 🟢 Verde | Óptima |
| 90% – 94.9% | 🟡 Amarillo | Aceptable |
| < 90% | 🔴 Rojo | Por debajo del umbral |
PROTACTICS · Dashboard Escáner Portuario Colombia · 2026