Saltar al contenido
CRM Postventa documentación

Arquitectura

Vista general

Vista general

Las piezas

PiezaQué esDónde
crm-coreDominio puro: enums, reglas, evaluación de KPI. Sin IO, con testscrates/crm-core
crm-dbRepositorios SQLx sobre PostgreSQLcrates/crm-db
crm-apiAxum + async-graphql, auth, webhooks, tareas de fondocrates/crm-api
MigracionesEsquema, triggers, horas hábiles, funciones de KPIdb/migrations
Contratoschema.graphql — la frontera entre backend y clientespackages/graphql-contract
TokensSistema de diseño compartidopackages/design-tokens
WebReact + Vite + Tailwindapps/web
MóvilExpo + expo-router + NativeWindapps/mobile

Por qué tres crates y no uno

La separación no es ceremonia: cada capa tiene una regla distinta sobre lo que puede hacer.

  • crm-core no puede tocar IO. Eso lo hace testeable sin base de datos, y es donde vive la lógica que hay que poder defender: transiciones de estado, elegibilidad de FCR, evaluación contra meta.
  • crm-db no puede tomar decisiones. Lee y escribe; no interpreta.
  • crm-api es lo único que habla con el exterior.

El flujo de una petición

  Navegador / app
       │  POST /graphql  + Authorization: Bearer …

  Axum ── CORS ── traza ── extractor de sesión


  async-graphql ── guarda de rol (@auth) ── resolver
       │                                        │
       │                                        ▼
       │                                   DataLoader
       ▼                                        │
  crm-core (reglas)                             ▼
       │                                    crm-db
       └────────────────────────────────────────┤

                                          PostgreSQL
                                   (triggers, funciones KPI)

Qué vive dónde, y por qué

En la baseMotivo
Enums de estado, prioridad, canalUn valor inválido debe ser imposible
Horas hábilesLo necesitan triggers, vistas y consultas por igual
TPA, MTTR, FCR, vencimiento de SLASon consecuencia de hechos registrados
Funciones kpi_*Un indicador se calcula en un sitio
Agregados del clienteListar clientes es la consulta más frecuente

Ver ADR-05 Los indicadores se calculan en la base.

Enlaces

Backend · Base de datos · Contrato GraphQL · Aplicación web · Aplicación móvil

Enlazan aquí