Saltar a contenido

Arquitectura de la Solucion GDI

Vista General

GDI esta construido como un sistema distribuido de microservicios, con frontends desacoplados que se comunican con backends especializados a traves de APIs REST. La autenticacion se gestiona via Auth0 (OAuth 2.0 / JWT) y el almacenamiento de archivos utiliza Cloudflare R2 (S3-compatible).

graph TB
    subgraph Frontends
        FE["GDI Frontend<br/>:3003"]
        BO_FE["BackOffice Frontend<br/>:3013"]
    end

    subgraph Backends
        BE["GDI Backend<br/>:8000"]
        BO_BE["BackOffice Backend<br/>:8010"]
        MCP["GDI MCP Server<br/>:8005"]
    end

    subgraph Microservicios
        PDF["PDFComposer<br/>:8002"]
        NOT["Notary<br/>:8001"]
        MAIL["eMailService<br/>:8003"]
        AI["AgenteLANG<br/>:8004"]
    end

    subgraph Almacenamiento
        PG["PostgreSQL 17<br/>+ pgvector"]
        R2["Cloudflare R2"]
    end

    subgraph Autenticacion
        AUTH["Auth0<br/>OAuth 2.0 / JWT"]
    end

    FE -->|REST + JWT| BE
    BO_FE -->|REST + JWT| BO_BE
    FE -->|REST + JWT| AI

    BE --> PDF
    BE --> NOT
    BE --> MAIL
    BE --> PG
    BE --> R2

    BO_BE --> PG

    AI --> BE
    AI --> PG

    MCP -->|Integrado en| BE

    AUTH -.->|Tokens JWT| FE
    AUTH -.->|Tokens JWT| BO_FE

Capa de Frontends

GDI Frontend (:3003)

Aplicacion principal para usuarios del sistema (empleados y funcionarios).

Aspecto Detalle
Framework Next.js 15 (App Router)
UI React 18, TypeScript, Tailwind CSS, shadcn/ui
Autenticacion Auth0 SDK, JWT
Funcionalidades Documentos, Expedientes, Notas, Chat IA

BackOffice Frontend (:3013)

Panel de administracion para configurar el sistema.

Aspecto Detalle
Framework Next.js 15 (App Router)
UI React 18, TypeScript, Tailwind CSS
Autenticacion Auth0 SDK, JWT
Funcionalidades Organigrama, Tipos de Documento/Expediente, Roles, API Keys

Capa de Backends

GDI Backend (:8000)

Backend principal que contiene toda la logica de negocio del sistema.

Aspecto Detalle
Framework FastAPI
ORM SQLAlchemy (async)
Validacion Pydantic v2
Autenticacion Auth0 JWT
Base de datos PostgreSQL 17 + pgvector
Almacenamiento Cloudflare R2 (S3 API)

Responsabilidades: gestion de documentos, expedientes, notas, firma digital (orquestacion), numeracion, permisos, movimientos de expedientes.

BackOffice Backend (:8010)

Backend dedicado a las operaciones de administracion.

Aspecto Detalle
Framework FastAPI
DB Driver psycopg2
Autenticacion Auth0 JWT

Responsabilidades: CRUD de organigrama, tipos de documento/expediente, roles, permisos, API keys.

GDI MCP Server (:8005)

Servidor que implementa el protocolo MCP (Model Context Protocol) para permitir que IAs externas (Claude, ChatGPT, Gemini) interactuen con el sistema.

Aspecto Detalle
Integracion Modulo dentro de GDI Backend (api_gateway/)
Protocolo MCP + OAuth 2.0
Funcionalidades Consulta de documentos, expedientes, notas, usuarios

Capa de Microservicios

Todos los microservicios son stateless (excepto AgenteLANG) y se comunican con los backends via REST con API Keys.

GDI PDFComposer (:8002)

Genera documentos PDF a partir de plantillas HTML.

Aspecto Detalle
Framework FastAPI
Motor PDF Gotenberg (HTML a PDF)
Templates Jinja2

GDI Notary (:8001)

Aplica firma digital PAdES a documentos PDF.

Aspecto Detalle
Framework FastAPI
Firma pyHanko (PAdES)
Manipulacion PDF PyMuPDF

GDI eMailService (:8003)

Envia correos electronicos transaccionales.

Aspecto Detalle
Framework FastAPI
Templates Jinja2
Envio SMTP

GDI AgenteLANG (:8004)

Agente de inteligencia artificial con capacidades RAG (Retrieval-Augmented Generation).

Aspecto Detalle
Framework FastAPI
Orquestacion IA LangGraph
Modelos OpenRouter (multi-proveedor)
Busqueda semantica pgvector
Estado Stateful (mantiene contexto de conversacion)

Funcionalidades: asistencia de redaccion, busqueda semantica en expedientes y documentos, consulta de informacion del sistema.


Capa de Almacenamiento

PostgreSQL 17 + pgvector

Base de datos relacional principal del sistema.

  • Multi-tenant: cada organizacion opera en un schema separado (ej: 100_test, 200_municipio)
  • pgvector: extension para almacenar y consultar embeddings vectoriales, habilitando busqueda semantica en el agente IA
  • Schemas compartidos: configuracion global y datos de sistema

Cloudflare R2

Almacenamiento de objetos S3-compatible para archivos PDF.

  • Documentos generados y firmados
  • Caratulas de expedientes
  • Archivos adjuntos

Capa de Infraestructura

Railway (PaaS)

Todos los servicios se despliegan en Railway con auto-deploy desde GitHub.

  • Cada repositorio es un servicio independiente en Railway
  • Comunicacion interna entre servicios via URLs internas de Railway
  • Variables de entorno gestionadas por servicio

Auth0

Proveedor de identidad y autenticacion.

  • OAuth 2.0 con tokens JWT
  • Gestion de usuarios y roles
  • Single Sign-On (SSO) entre Frontend y BackOffice

Flujos Principales

Flujo Servicios Involucrados
Crear documento + firmar Frontend > Backend > PDFComposer > Notary > R2
Crear expediente + caratula Frontend > Backend > PDFComposer > Notary
Asignar/transferir expediente Frontend > Backend (> PDFComposer > Notary)
Chat IA con tools Frontend > AgenteLANG > Backend
Busqueda semantica (RAG) AgenteLANG > pgvector
MCP (IA externa) Claude/ChatGPT/Gemini > Backend api_gateway/
Notas internas Frontend > Backend
Administracion BackOffice Frontend > BackOffice Backend

Integraciones entre Servicios

Origen Destino Protocolo
Frontend Backend REST + Auth0 JWT
BackOffice Frontend BackOffice Backend REST + Auth0 JWT
Backend PDFComposer REST + API Key
Backend Notary REST + API Key
Backend R2 S3 API
AgenteLANG Backend REST + JWT
MCP Clients Backend api_gateway/ MCP + OAuth 2.0
Backend eMailService REST + API Key

Principios de Arquitectura

  • Frontend solo UI: los frontends no contienen logica de negocio. Toda la logica reside en los backends.
  • Backends como orquestadores: los backends coordinan las llamadas a microservicios y gestionan la persistencia.
  • Microservicios stateless: cada microservicio cumple una funcion especifica y no mantiene estado (excepto AgenteLANG).
  • Multi-tenant por schema: el aislamiento de datos entre organizaciones se logra con schemas separados en PostgreSQL.
  • Comunicacion interna: los servicios se comunican via URLs internas de Railway, sin exposicion publica.
  • Autenticacion centralizada: Auth0 gestiona la identidad. Los backends validan tokens JWT en cada request.