Arquitectura
Última actualización: agosto 2026
RQE es una aplicación web con backend Postgres, aislamiento estricto por organización mediante Row Level Security (RLS) y un motor de scoring determinista y versionado. Esta página describe los componentes principales y cómo fluyen los datos.
Vista general
┌────────────────────┐ ┌──────────────────┐
│ Frontend (React) │◄────┤ Edge Functions │
│ Vite + TypeScript │ │ (auth, webhooks)│
└─────────┬──────────┘ └────────┬─────────┘
│ │
▼ ▼
┌───────────────────────────────────┐
│ Postgres + RLS (multi-tenant)│
│ Clientes · Deals · Productos │
│ Vendedores · Comisiones · Logs │
└───────────────┬───────────────────┘
│
▼
┌───────────────────────┐
│ Motor de scoring │
│ (versión N, snapshot)│
└───────────────────────┘
Componentes
| Componente | Tecnología | Responsabilidad |
|---|---|---|
| Frontend | React 18, Vite 5, TypeScript 5, Tailwind | UI del producto, cliente de la API pública. |
| Backend de datos | Postgres administrado | Almacenamiento, RLS, RPCs, triggers. |
| Edge Functions | Deno/TypeScript | Endpoints de la API pública, webhooks salientes, integraciones. |
| Motor de scoring | SQL + funciones deterministas | Calcula Revenue Score y Next Best Action con versión trazable. |
| Motor de comisiones | SQL + RPCs con snapshot | Recalcula comisiones por período con lock por (org, período). |
Aislamiento multi-tenant
Toda tabla tenant-scoped tiene una columna org_id obligatoria y policies de RLS que restringen el acceso a miembros de esa organización. El aislamiento no depende de la aplicación; incluso una consulta SQL directa con credenciales de usuario cumple RLS.
- Las RPCs sensibles validan pertenencia de organización antes de fijar el contexto.
- Los triggers
trg_10_assert_org_readybloquean escrituras si la organización no está en estadoready. - Los roles se almacenan en una tabla separada
user_roles, nunca en el perfil, para evitar escalamiento de privilegios.
Determinismo y versionado
El motor de scoring es determinista: mismos inputs producen el mismo Revenue Score. Cada cambio en la fórmula se registra con versión; las oportunidades guardan la versión con la que fueron scoreadas.
El motor de comisiones toma un snapshot de las reglas al momento del recálculo, lo que permite reproducir cualquier payout histórico.
Superficie pública
- API REST pública (ver API).
- Webhooks salientes por evento de dominio.
- SDK oficial generado desde el contrato OpenAPI.
Observabilidad y auditoría
- Logs estructurados en RPCs sensibles.
- Historial de cambios de propiedad y de reglas.
- Trazabilidad por request ID en errores de API.