Update DOCUMENTACION.md with complete project documentation

This commit is contained in:
Lizandro Guarnizo
2026-06-18 11:36:20 -05:00
parent 1e4b895913
commit 65ff7995e8
+308 -205
View File
@@ -1,161 +1,232 @@
# RIPS Manager — Documentación Técnica # RIPS Manager — Documentación Completa
Sistema web para generar y enviar JSON de RIPS (Res. 2275/2023) a una API, conectándose a una base de datos Firebird. **Desarrollado por [U-SITE SAS BIC](https://u-site.app/)**
**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.
--- ---
## Arquitectura ## 1. Arquitectura
``` ```
┌─────────────┐ ┌──────────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Navegador │────▶│ FastAPI (8080) │────▶│ Firebird BD │ Navegador
(Tailwind) │◀────│ + Jinja2 │◀────│ (datos) │ Tailwind + CM
└─────────────┘ └──────────────────┘ └──────────────┘ └────────┬───────────┘
│ HTTP
┌────────▼───────────┐
┌──────────────┐ │ FastAPI (8080) │
SQLite + Jinja2
(app.db) + Auth Middleware
└─────────────┘ └───────┬────┬──────┘
│ │
┌──────────┘ │ └──────────┐
┌──────────────┐ ▼ ▼ ▼
│ API externa │ ┌──────────┐ ┌──────────┐ ┌──────────────┐
(envío RIPS) │ Firebird │ SQLite API externa
└──────────────┘ │ (datos) │ │ (app.db) │ │ (receptor) │
└──────────┘ └──────────┘ └──────────────┘
``` ```
## Stack técnico ### Stack Tecnológico
| Componente | Tecnología | | Componente | Tecnología | Versión |
|---|---| |---|---|---|
| Backend | Python 3.9+ / FastAPI | | Backend | FastAPI | 0.115.6 |
| Frontend | Jinja2 + Tailwind CSS (CDN) + FontAwesome | | Servidor ASGI | Uvicorn | 0.34.0 |
| Base de datos app | SQLite (usuarios, config, logs, queries) | | Templates | Jinja2 | 3.1.5 |
| Base de datos datos | Firebird (vía `fdb`) | | CSS | Tailwind CSS | CDN |
| Autenticación | JWT + bcrypt + HttpOnly cookies | | Editor SQL | CodeMirror | 5.65.16 CDN |
| Cliente HTTP | httpx (async) | | BD de la app | SQLite | — |
| Servidor | uvicorn | | 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 |
--- ---
## Endpoints (20 totales) ## 2. Endpoints (20 totales)
### Autenticación (6 endpoints) ### Autenticación — `app/routes/auth.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/auth/login` | Página de inicio de sesión | Pública | | GET | `/auth/login` | Página de inicio de sesión | Pública |
| POST | `/auth/login` | Procesa login, devuelve cookie JWT | Pública | | POST | `/auth/login` | Procesa login, setea cookie HttpOnly con JWT | Pública |
| GET | `/auth/register` | Página de registro | Pública | | GET | `/auth/register` | Página de registro | Pública |
| POST | `/auth/register` | Registra nuevo usuario | Pública | | POST | `/auth/register` | Crea usuario (username, email, password) | Pública |
| GET | `/auth/logout` | Cierra sesión (elimina cookie) | Pública | | GET | `/auth/logout` | Elimina cookie, redirige a login | Pública |
| POST | `/auth/api/login` | Login vía API (devuelve token JSON) | Pública | | POST | `/auth/api/login` | Login API, devuelve `{"access_token": "...", "token_type": "bearer"}` | Pública |
### Dashboard (1 endpoint) ### Dashboard — `app/routes/dashboard.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/dashboard` | Estadísticas de envíos, últimos registros | Requerida | | GET | `/dashboard` | Estadísticas: total envíos exitosos/errores, últimos 10 registros | Requerida |
### Configuración (2 endpoints) ### Configuración — `app/routes/config.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/config` | Página de configuración (Firebird + API + prestador) | Requerida | | GET | `/config` | Página de configuración (Firebird, API, prestador) | Requerida |
| POST | `/config/save` | Guarda toda la configuración | Requerida | | POST | `/config/save` | Guarda configuración (11 claves) | Requerida |
### Consultas SQL (3 endpoints) ### Consultas SQL — `app/routes/queries.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/queries` | Página de gestión de consultas SQL | Requerida | | GET | `/queries` | Página con 3 pestañas: Probador / Constructor / Editor | Requerida |
| POST | `/queries/create` | Crea nueva consulta SQL | Requerida | | POST | `/queries/run-sql` | Ejecuta SQL raw contra Firebird (max 200 filas) | Requerida |
| POST | `/queries/delete/{id}` | Elimina consulta SQL | Requerida | | POST | `/queries/test` | Prueba consulta guardada (max 20 filas) | Requerida |
| POST | `/queries/update/{id}` | Actualiza consulta SQL | 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 (3 endpoints) ### Terceros — `app/routes/terceros.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/terceros` | Página de envío de terceros | Requerida | | GET | `/terceros` | Página de envío de terceros | Requerida |
| POST | `/terceros/test-connection` | Prueba conexión Firebird | Requerida | | POST | `/terceros/test-connection` | Prueba conexión Firebird | Requerida |
| POST | `/terceros/preview` | Vista previa del JSON de terceros | 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 | | POST | `/terceros/send` | Genera y envía JSON de terceros a la API | Requerida |
### Transacción RIPS (3 endpoints) ### Transacción RIPS — `app/routes/transaccion.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/transaccion` | Página de envío de transacción RIPS | Requerida | | 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/preview` | Vista previa del JSON de transacción | Requerida |
| POST | `/transaccion/send` | Genera y envía JSON de transacción a la API | Requerida | | POST | `/transaccion/send` | Genera y envía JSON de transacción a la API | Requerida |
### Automatización (2 endpoints) ### Automatización — `app/routes/automation.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/automation` | Página de automatización 2 pasos | Requerida | | GET | `/automation` | Página de automatización (2 pasos) | Requerida |
| POST | `/automation/run` | Ejecuta Paso 1 (terceros) + Paso 2 (transacción) | Requerida | | POST | `/automation/run` | Paso 1 (terceros) + Paso 2 (transacción) por rango de fechas | Requerida |
### Logs (1 endpoint) ### Logs — `app/routes/logs.py`
| Método | Ruta | Descripción | Autenticación | | Método | Ruta | Descripción | Auth |
|---|---|---|---| |---|---|---|---|
| GET | `/logs` | Historial de envíos con filtros | Requerida | | 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 |
--- ---
## Flujo de autenticación ## 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):
1. `Terceros - Datos del paciente` — Busca paciente por `:doc_num`
2. `Procedimientos por factura` — Busca servicios por `:factura`, `:fecha_ini`, `:fecha_fin`
3. `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
``` ```
Navegador Servidor Navegador Servidor
│ │ │ │
│── GET /auth/login ──────▶│ │── POST /auth/login ──────▶│ (username + password)
◀──── HTML login page ─────│ │── verifica bcrypt
│ │ │ │── genera JWT HS256
│── POST /auth/login ───────▶│ (username + password)
│ │── verifica credenciales
│ │── genera JWT
│◀── 302 /dashboard ────────│ (Set-Cookie: token=JWT; HttpOnly) │◀── 302 /dashboard ────────│ (Set-Cookie: token=JWT; HttpOnly)
│ │ │ │
│── GET /dashboard ────────▶│ (Cookie: token=JWT) │── GET /dashboard ────────▶│ (Cookie: token=JWT)
│ │── middleware verifica JWT │ │── middleware decodifica JWT
│ │── setea request.state.user │ │── request.state.user = payload
│◀──── HTML dashboard ──────│ │◀──── HTML dashboard ──────│
``` ```
- **Cookie HttpOnly**: no accesible desde JavaScript (seguridad XSS) ### Middleware (`main.py:48-68`)
- **JWT expira en 12 horas** - Rutas públicas: `/auth/login`, `/auth/register`, `/auth/api/login`, `/static/*`
- **Bearer token** también soportado para llamadas API (`Authorization: Bearer <token>`) - 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)
--- ---
## Flujo de envío de RIPS ## 5. Estructuras JSON
### Manual (página Terceros + Transacción) ### JSON Terceros (17 campos)
```
1. Configurar conexión Firebird y API (una vez)
2. Definir consultas SQL en "Consultas SQL"
3. Ir a "Terceros" → seleccionar consulta → "Vista Previa" → "Enviar a API"
4. Ir a "Transacción RIPS" → seleccionar consulta + fechas → "Enviar a API"
```
### Automatizado (página Automatización)
```
1. Seleccionar consulta de terceros (Paso 1)
2. Seleccionar consulta de transacción (Paso 2)
3. Definir rango de fechas
4. "Ejecutar Automatización Completa"
└── Paso 1: Envía todos los terceros del período
└── Paso 2: Envía todas las transacciones del período
```
### Estructura de los JSON generados
#### JSON Terceros
```json ```json
{ {
"tipoDocumentoIdentificacion": "CC", "tipoDocumentoIdentificacion": "CC",
@@ -167,18 +238,44 @@ Navegador Servidor
"fechaNacimiento": "1954-01-19", "fechaNacimiento": "1954-01-19",
"codSexo": "F", "codSexo": "F",
"codEntidadAdministradora": "EPS010", "codEntidadAdministradora": "EPS010",
"tipoUsuario": "12", "tipoUsuario": "01",
"codPaisResidencia": "170", "codPaisResidencia": "170",
"codMunicipioResidencia": "54001", "codMunicipioResidencia": "54001",
"codZonaTerritorialResidencia": "02", "codZonaTerritorialResidencia": "01",
"incapacidad": "NO", "incapacidad": "NO",
"codPaisOrigen": "170", "codPaisOrigen": "170",
"direccionResidencia": "CRA 5 #10-20", "direccionResidencia": "CRA 5 #10-20",
"codZonaResidencia": "02" "codZonaResidencia": "01"
} }
``` ```
#### JSON Transacción RIPS ### JSON Procedimiento (20 campos P01-P20)
```json
{
"consecutivo": 1,
"codProcedimiento": "903841",
"fechaInicioAtencion": "2026-06-11 00:00",
"codDiagnosticoPrincipal": "R790",
"codDiagnosticoRelacionado": null,
"finalidadTecnologiaSalud": "23",
"viaIngresoServicioSalud": "02",
"modalidadGrupoServicioTecSal": "01",
"grupoServicios": "02",
"codServicio": 706,
"codPrestador": "540010152002",
"tipoDocumentoIdentificacion": "CC",
"numDocumentoIdentificacion": "27898369",
"vrServicio": 8000,
"valorPagoModerador": 0,
"conceptoRecaudo": "05",
"numAutorizacion": null,
"idMIPRES": null,
"codComplicacion": null,
"numFEVPagoModerador": null
}
```
### JSON Transacción
```json ```json
{ {
"numDocumentoIdObligado": "900278729", "numDocumentoIdObligado": "900278729",
@@ -199,28 +296,9 @@ Navegador Servidor
"consecutivo": 1, "consecutivo": 1,
"codPaisOrigen": "170", "codPaisOrigen": "170",
"servicios": { "servicios": {
"procedimientos": [{ "procedimientos": [
"consecutivo": 1, { /* procedimiento */ }
"codProcedimiento": "903841", ]
"fechaInicioAtencion": "2026-06-11 00:00",
"codDiagnosticoPrincipal": "R790",
"codDiagnosticoRelacionado": null,
"finalidadTecnologiaSalud": "23",
"viaIngresoServicioSalud": "02",
"modalidadGrupoServicioTecSal": "01",
"grupoServicios": "02",
"codServicio": 706,
"codPrestador": "540010152002",
"tipoDocumentoIdentificacion": "CC",
"numDocumentoIdentificacion": "27898369",
"vrServicio": 8000,
"valorPagoModerador": 0,
"conceptoRecaudo": "05",
"numAutorizacion": null,
"idMIPRES": null,
"codComplicacion": null,
"numFEVPagoModerador": null
}]
} }
}] }]
} }
@@ -228,120 +306,145 @@ Navegador Servidor
--- ---
## Base de datos SQLite (app) ## 6. Flujo de Datos
### Tabla `users` ### Terceros
| Columna | Tipo | Descripción | ```
|---|---|---| 1. Config → leer firebird_host, api_url, etc.
| id | INTEGER PK | Auto-incrementable | 2. Firebird → conectar + ejecutar query → filas
| username | TEXT UNIQUE | Nombre de usuario | 3. Mapear fila → JSON (generar_terceros)
| email | TEXT UNIQUE | Correo electrónico | 4. httpx → POST/PUT {api_url}/terceros
| password_hash | TEXT | Hash bcrypt de la contraseña | 5. Guardar en envios (JSON + respuesta)
| created_at | TEXT | Fecha de creación | ```
### Tabla `config` ### Transacción
| Columna | Tipo | Descripción | ```
|---|---|---| 1. Config → leer Firebird + API
| id | INTEGER PK | Auto-incrementable | 2. Firebird → ejecutar query → filas
| key | TEXT UNIQUE | Clave de configuración | 3. Agrupar por (factura, paciente)
| value | TEXT | Valor | 4. Cada grupo → JSON (generar_transaccion)
5. Cada grupo → httpx → {api_url}/transaccion
6. Cada envío → log en envios
```
Claves predefinidas: ### Automatización
- `firebird_host`, `firebird_port`, `firebird_database`, `firebird_user`, `firebird_password` ```
- `api_url`, `api_method`, `api_key`, `api_timeout` Paso 1: Terceros
- `num_documento_obligado`, `cod_prestador` - Query tipo 'terceros' por rango de fechas
- Deduplicar por documento
- Enviar cada uno
### Tabla `queries` Paso 2: Transacción
| Columna | Tipo | Descripción | - Query tipo 'transaccion' por mismo rango
|---|---|---| - Agrupar por factura
| id | INTEGER PK | Auto-incrementable | - Enviar cada grupo agrupado
| name | TEXT | Nombre descriptivo | ```
| query_type | TEXT | `terceros` o `transaccion` |
| query_text | TEXT | Sentencia SQL con parámetros |
| description | TEXT | Descripción |
| created_at | TEXT | Fecha de creación |
### Tabla `envios`
| Columna | Tipo | Descripción |
|---|---|---|
| id | INTEGER PK | Auto-incrementable |
| user_id | INTEGER FK | Usuario que realizó el envío |
| tipo | TEXT | `terceros` o `transaccion` |
| factura | TEXT | Número de factura |
| fecha_inicio / fecha_fin | TEXT | Rango de fechas del envío |
| pacientes_count / servicios_count | INTEGER | Cantidades |
| status | TEXT | `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 | Fecha del envío |
--- ---
## Parámetros en consultas SQL ## 7. Parámetros en Consultas SQL
Las consultas pueden usar estos parámetros que el sistema reemplaza automáticamente: | Parámetro | Ejemplo | Descripción |
| Parámetro | Ejemplo | Uso |
|---|---|---| |---|---|---|
| `:doc_num` | `WHERE doc = :doc_num` | Filtrar por documento de paciente | | `:doc_num` | `WHERE doc = :doc_num` | Filtrar por documento |
| `:factura` | `WHERE fact = :factura` | Filtrar por número de factura | | `:factura` | `WHERE factura = :factura` | Filtrar por factura |
| `:fecha_ini` | `WHERE fecha >= :fecha_ini` | Fecha inicio del rango | | `:fecha_ini` | `WHERE fecha >= :fecha_ini` | Fecha inicio |
| `:fecha_fin` | `WHERE fecha <= :fecha_fin` | Fecha fin del rango | | `:fecha_fin` | `WHERE fecha <= :fecha_fin` | Fecha fin |
--- ---
## Estructura del proyecto ## 8. Estructura del Proyecto
``` ```
rips_manager/ rips_manager/
├── main.py # Entry point, middleware, rutas ├── main.py # Entry point, middleware, rutas
├── requirements.txt # Dependencias Python ├── requirements.txt # 9 dependencias
├── rips_manager.db # SQLite (autogenerado) ├── rips_manager.db # SQLite (autogenerado)
├── DOCUMENTACION.md # Este archivo ├── README.md # Documentación de usuario
├── README.md # Documentación de RIPS ├── DOCUMENTACION.md # Documentación técnica
├── ejemplo_terceros.json # JSON de ejemplo terceros ├── ejemplo_terceros.json # JSON ejemplo
├── ejemplo_transaccion_rips.json # JSON de ejemplo transacción ├── ejemplo_transaccion_rips.json # JSON ejemplo
├── arrancar.sh # Inicio macOS/Linux
├── run.bat # Inicio Windows (minimizado)
├── run.ps1 # Inicio Windows PowerShell
├── run.vbs # Inicio Windows (sin ventana)
├── stop.bat # Detener servidor
├── app/ ├── app/
│ ├── __init__.py │ ├── __init__.py
│ ├── auth.py # JWT, bcrypt, get_current_user │ ├── auth.py # JWT, bcrypt, get_current_user
│ ├── database.py # SQLite init y conexión │ ├── database.py # SQLite init y conexión
│ ├── models.py # Pydantic models │ ├── models.py # Pydantic models
│ ├── routes/ │ ├── routes/
│ │ ├── auth.py # Login, register, logout │ │ ├── __init__.py
│ │ ├── dashboard.py # gina principal con stats │ │ ├── auth.py # Login, register, logout
│ │ ├── config.py # Configuración Firebird + API │ │ ├── dashboard.py # Estadísticas
│ │ ├── queries.py # CRUD de consultas SQL │ │ ├── config.py # Configuración
│ │ ├── terceros.py # Generar y enviar JSON terceros │ │ ├── queries.py # CRUD + Probador + Constructor
│ │ ├── transaccion.py # Generar y enviar JSON transacción │ │ ├── terceros.py # Envío terceros
│ │ ├── automation.py # Paso 1 + Paso 2 automático │ │ ├── transaccion.py # Envío transacción
│ │ ── logs.py # Historial de envíos │ │ ── automation.py # Automatización 2 pasos
│ │ └── logs.py # Historial
│ ├── services/ │ ├── services/
│ │ ├── firebird_service.py # Conexión y consultas Firebird │ │ ├── __init__.py
│ │ ├── json_generator.py # Construcción de JSON RIPS │ │ ├── firebird_service.py # Conexión y consultas Firebird
│ │ ── api_client.py # Envío HTTP a API externa │ │ ── json_generator.py # Construcción de JSON RIPS
│ └── templates/ # 10 plantillas Jinja2 + Tailwind │ └── api_client.py # Envío HTTP
│ └── templates/
│ ├── base.html # Layout (sidebar, Tailwind, CodeMirror, FontAwesome)
│ ├── login.html
│ ├── register.html
│ ├── dashboard.html
│ ├── config.html
│ ├── queries.html # Probador / Constructor / Editor
│ ├── terceros.html
│ ├── transaccion.html
│ ├── automation.html
│ └── logs.html
``` ```
--- ---
## Cómo ejecutar ## 9. Cómo Ejecutar
### Windows
```powershell
git clone https://github.com/U-SITE-SAS-BIC/rips_manager.git
cd rips_manager
powershell -ExecutionPolicy Bypass -File run.ps1
```
O doble clic en `run.bat` (inicia minimizado).
### macOS / Linux
```bash ```bash
cd /Users/lizandro/Documents/proyectos/rips_manager git clone https://github.com/U-SITE-SAS-BIC/rips_manager.git
pip3 install -r requirements.txt cd rips_manager
python3 main.py chmod +x arrancar.sh
./arrancar.sh
``` ```
Abrir en el navegador: **http://localhost:8080** ### Acceder
- Local: `http://localhost:8080`
- Red: `http://<IP_LOCAL>:8080`
--- ---
## Secuencia para primer uso ## 10. Primer Uso
1. Abrir http://localhost:8080/auth/register 1. Abrir `http://localhost:8080/auth/register`
2. Crear usuario y contraseña 2. Crear usuario y contraseña
3. Iniciar sesión 3. Iniciar sesión
4. Ir a **Configuración** → configurar Firebird, API, datos del prestador 4. Ir a **Configuración** → configurar Firebird, API, datos del prestador
5. Ir a **Consultas SQL** → ajustar las queries a los nombres reales de tablas 5. Ir a **Consultas SQL** → ajustar/queries a nombres reales de tablas
6. Usar **Terceros**, **Transacción RIPS** o **Automatización** 6. Usar el **Probador** para probar consultas
7. 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/](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)