RIPS Manager — Documentación Completa
Desarrollado por U-SITE SAS BIC
Repositorio: https://github.com/U-SITE-SAS-BIC/rips_manager
Sistema web para generar y enviar JSON de RIPS (Registro Individual de Prestación de Servicios de Salud) según la Resolución 2275 de 2023 del Ministerio de Salud y Protección Social de Colombia.
1. Arquitectura
Stack Tecnológico
| Componente |
Tecnología |
Versión |
| Backend |
FastAPI |
0.115.6 |
| Servidor ASGI |
Uvicorn |
0.34.0 |
| Templates |
Jinja2 |
3.1.5 |
| CSS |
Tailwind CSS |
CDN |
| Editor SQL |
CodeMirror |
5.65.16 CDN |
| BD de la app |
SQLite |
— |
| BD de datos |
Firebird |
vía fdb >= 2.0.0 |
| Autenticación |
python-jose (JWT) + bcrypt |
3.3.0 / 4.2.1 |
| Cliente HTTP |
httpx |
0.28.1 |
| Multipart |
python-multipart |
0.0.20 |
| Archivos async |
aiofiles |
24.1.0 |
2. Endpoints (20 totales)
Autenticación — app/routes/auth.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/auth/login |
Página de inicio de sesión |
Pública |
| POST |
/auth/login |
Procesa login, setea cookie HttpOnly con JWT |
Pública |
| GET |
/auth/register |
Página de registro |
Pública |
| POST |
/auth/register |
Crea usuario (username, email, password) |
Pública |
| GET |
/auth/logout |
Elimina cookie, redirige a login |
Pública |
| POST |
/auth/api/login |
Login API, devuelve {"access_token": "...", "token_type": "bearer"} |
Pública |
Dashboard — app/routes/dashboard.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/dashboard |
Estadísticas: total envíos exitosos/errores, últimos 10 registros |
Requerida |
Configuración — app/routes/config.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/config |
Página de configuración (Firebird, API, prestador) |
Requerida |
| POST |
/config/save |
Guarda configuración (11 claves) |
Requerida |
Consultas SQL — app/routes/queries.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/queries |
Página con 3 pestañas: Probador / Constructor / Editor |
Requerida |
| POST |
/queries/run-sql |
Ejecuta SQL raw contra Firebird (max 200 filas) |
Requerida |
| POST |
/queries/test |
Prueba consulta guardada (max 20 filas) |
Requerida |
| POST |
/queries/esquema |
Devuelve esquema completo: tablas + columnas + tipos |
Requerida |
| POST |
/queries/tablas |
Lista nombres de tablas |
Requerida |
| POST |
/queries/create |
Crea nueva consulta |
Requerida |
| POST |
/queries/update/{id} |
Actualiza consulta |
Requerida |
| POST |
/queries/delete/{id} |
Elimina consulta |
Requerida |
Terceros — app/routes/terceros.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/terceros |
Página de envío de terceros |
Requerida |
| POST |
/terceros/test-connection |
Prueba conexión Firebird |
Requerida |
| POST |
/terceros/preview |
Vista previa del JSON de terceros |
Requerida |
| POST |
/terceros/send |
Genera y envía JSON de terceros a la API |
Requerida |
Transacción RIPS — app/routes/transaccion.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/transaccion |
Página de envío de transacción RIPS |
Requerida |
| POST |
/transaccion/preview |
Vista previa del JSON de transacción |
Requerida |
| POST |
/transaccion/send |
Genera y envía JSON de transacción a la API |
Requerida |
Automatización — app/routes/automation.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/automation |
Página de automatización (2 pasos) |
Requerida |
| POST |
/automation/run |
Paso 1 (terceros) + Paso 2 (transacción) por rango de fechas |
Requerida |
Logs — app/routes/logs.py
| Método |
Ruta |
Descripción |
Auth |
| GET |
/logs |
Historial de envíos con filtros (tipo, status, factura) |
Requerida |
Root
| Método |
Ruta |
Descripción |
Auth |
| GET |
/ |
Redirige a /dashboard |
Pública |
3. Modelo de Base de Datos
SQLite (rips_manager.db)
Tabla users
| Columna |
Tipo |
Descripción |
| id |
INTEGER PK AUTOINCREMENT |
ID único |
| username |
TEXT UNIQUE NOT NULL |
Nombre de usuario |
| email |
TEXT UNIQUE NOT NULL |
Correo electrónico |
| password_hash |
TEXT NOT NULL |
Hash bcrypt |
| created_at |
TEXT DEFAULT datetime('now') |
Fecha de creación |
Tabla config
| Columna |
Tipo |
Descripción |
| id |
INTEGER PK AUTOINCREMENT |
ID único |
| key |
TEXT UNIQUE NOT NULL |
Clave de configuración |
| value |
TEXT |
Valor |
Claves predefinidas:
| Clave |
Default |
Descripción |
firebird_host |
localhost |
Host Firebird |
firebird_port |
3050 |
Puerto Firebird |
firebird_database |
— |
Ruta BD Firebird |
firebird_user |
SYSDBA |
Usuario Firebird |
firebird_password |
masterkey |
Contraseña Firebird |
api_url |
— |
URL de la API destino |
api_method |
POST |
Método HTTP (POST/PUT) |
api_key |
— |
API Key (Bearer token) |
api_timeout |
30 |
Timeout en segundos |
num_documento_obligado |
— |
NIT del prestador |
cod_prestador |
— |
Código del prestador |
Tabla queries
| Columna |
Tipo |
Descripción |
| id |
INTEGER PK AUTOINCREMENT |
ID único |
| name |
TEXT NOT NULL |
Nombre descriptivo |
| query_type |
TEXT NOT NULL |
terceros o transaccion |
| query_text |
TEXT NOT NULL |
SQL con parámetros :param |
| description |
TEXT |
Descripción |
| created_at |
TEXT DEFAULT datetime('now') |
Fecha de creación |
Consultas por defecto (3):
Terceros - Datos del paciente — Busca paciente por :doc_num
Procedimientos por factura — Busca servicios por :factura, :fecha_ini, :fecha_fin
Procedimientos por fecha — JOIN servicios + pacientes por rango de fechas
Tabla envios
| Columna |
Tipo |
Descripción |
| id |
INTEGER PK AUTOINCREMENT |
ID único |
| user_id |
INTEGER FK → users(id) |
Usuario que envió |
| tipo |
TEXT NOT NULL |
terceros o transaccion |
| factura |
TEXT |
Número de factura |
| fecha_inicio |
TEXT |
Inicio del rango |
| fecha_fin |
TEXT |
Fin del rango |
| pacientes_count |
INTEGER DEFAULT 0 |
Cantidad de pacientes |
| servicios_count |
INTEGER DEFAULT 0 |
Cantidad de servicios |
| status |
TEXT NOT NULL DEFAULT 'pendiente' |
success o error |
| json_enviado |
TEXT |
JSON completo enviado |
| respuesta_api |
TEXT |
Respuesta de la API |
| codigo_cuv |
TEXT |
Código CUV (si aplica) |
| created_at |
TEXT DEFAULT datetime('now') |
Fecha del envío |
4. Autenticación
Flujo Login
Middleware (main.py:48-68)
- Rutas públicas:
/auth/login, /auth/register, /auth/api/login, /static/*
- Lee token de:
Cookie: token → Authorization: Bearer
- Si inválido y
/api/ → 401 JSON; si HTML → redirect /auth/login
JWT
- Algoritmo: HS256
- Clave:
rips-manager-secret-key-change-in-production
- Payload:
{user_id, username} (sin expiración)
5. Estructuras JSON
JSON Terceros (17 campos)
JSON Procedimiento (20 campos P01-P20)
JSON Transacción
6. Flujo de Datos
Terceros
Transacción
Automatización
7. Parámetros en Consultas SQL
| Parámetro |
Ejemplo |
Descripción |
:doc_num |
WHERE doc = :doc_num |
Filtrar por documento |
:factura |
WHERE factura = :factura |
Filtrar por factura |
:fecha_ini |
WHERE fecha >= :fecha_ini |
Fecha inicio |
:fecha_fin |
WHERE fecha <= :fecha_fin |
Fecha fin |
8. Estructura del Proyecto
9. Cómo Ejecutar
Windows
O doble clic en run.bat (inicia minimizado).
macOS / Linux
Acceder
- Local:
http://localhost:8080
- Red:
http://<IP_LOCAL>:8080
10. Primer Uso
- Abrir
http://localhost:8080/auth/register
- Crear usuario y contraseña
- Iniciar sesión
- Ir a Configuración → configurar Firebird, API, datos del prestador
- Ir a Consultas SQL → ajustar/queries a nombres reales de tablas
- Usar el Probador para probar consultas
- Usar Terceros, Transacción RIPS o Automatización
11. Créditos
© 2026 U-SITE SAS BIC — Todos los derechos reservados.
- Web: https://u-site.app/
- Sistema: RIPS Manager v1.0
- Propósito: Generación y envío de RIPS según Res. 2275/2023
- Campos cubiertos: Procedimientos (20 campos P01-P20 del Anexo Técnico 1)