Saltar a contenido

Visión General de la Arquitectura

El Sistema A3 es una aplicación web monolítica desarrollada con Django, diseñada específicamente para A Terceros Inmobiliaria. Esta página proporciona una visión general de alto nivel de la arquitectura del sistema.

Arquitectura de Alto Nivel

graph TB
    subgraph "Cliente"
        Browser[Navegador Web]
        PWA[PWA / iOS App]
    end

    subgraph "Frontend"
        Static[Static Files / WhiteNoise]
        JS[JavaScript SPA<br/>Window Manager]
        Templates[Django Templates]
    end

    subgraph "Backend - Django 3.2"
        Views[Views / ViewSets]
        API[Django REST Framework]
        Models[Models / ORM]
        Services[Business Logic]
        Signals[Django Signals]
    end

    subgraph "Almacenamiento"
        PostgreSQL[(PostgreSQL 12.3+)]
        S3[AWS S3<br/>Media Files]
    end

    subgraph "Integraciones"
        SAP[SAP HANA API<br/>ASP.NET]
        Push[Web Push<br/>VAPID]
    end

    Browser --> Static
    Browser --> Templates
    Browser --> API
    PWA --> Push

    Templates --> Views
    JS --> API
    API --> Services
    Views --> Services
    Services --> Models
    Services --> SAP

    Models --> PostgreSQL
    Services --> S3
    Signals --> Push

    style Backend fill:#092e20,color:#fff
    style PostgreSQL fill:#336791,color:#fff
    style S3 fill:#FF9900,color:#fff

Patrón Arquitectónico

Monolito Modular

El Sistema A3 utiliza una arquitectura monolítica modular donde:

  • Monolítico: Todo el código está en un solo repositorio y se despliega como una unidad
  • Modular: Organizado en múltiples Django apps, cada una con responsabilidades específicas

Ventajas de este Enfoque

Simplicidad: Un solo codebase, un solo deployment ✅ Desarrollo rápido: No hay overhead de comunicación entre servicios ✅ Transacciones: ACID garantizado entre módulos ✅ Facilidad de testing: Todo el sistema se prueba junto

Capas de la Aplicación

1. Capa de Presentación

Tecnologías: Django Templates + JavaScript (jQuery) + Bootstrap

  • Templates HTML renderizados por Django
  • Sistema de "ventanas" simulando SPA
  • AJAX para interacciones sin recarga
  • Bootstrap para UI responsive

Ubicación: templates/, static/js/, static/css/

2. Capa de API

Tecnologías: Django REST Framework

  • API RESTful para el frontend
  • Serializers para validación de datos
  • ViewSets para operaciones CRUD
  • Autenticación basada en sesiones
  • Swagger/OpenAPI docs con drf-yasg

Ubicación: api/, */serializers.py, */viewsets.py

3. Capa de Lógica de Negocio

Tecnologías: Python + Django

  • Views (función y clase)
  • Servicios de negocio
  • Validaciones complejas
  • Integraciones externas
  • Procesamiento de archivos

Ubicación: */views.py, */utils.py, services/

4. Capa de Datos

Tecnologías: Django ORM + PostgreSQL

  • Modelos Django (ORM)
  • Migraciones automáticas
  • Queries optimizadas
  • Transacciones ACID
  • Relaciones complejas (ManyToMany, ForeignKey)

Ubicación: */models.py

5. Capa de Integración

Tecnologías: Requests + Boto3 + pywebpush

  • Cliente HTTP para SAP API
  • SDK de AWS para S3
  • Web Push para notificaciones
  • APIs externas

Ubicación: services/, */utils.py

Módulos Principales

El sistema está dividido en ~20 apps Django:

graph LR
    A[a3ceros<br/>Core] --> B[users<br/>Usuarios]
    A --> C[inventario<br/>Propiedades]
    A --> D[apartados<br/>Ventas]
    A --> E[clientes<br/>Clientes]
    A --> F[tickets<br/>Tickets/Tareas]
    A --> G[comprobaciones<br/>Gastos]
    A --> H[ch<br/>RRHH]
    A --> I[anexos<br/>Archivos]
    A --> J[dashboard<br/>Analytics]
    A --> K[reportes<br/>Informes]

    style A fill:#092e20,color:#fff

Ver detalles de cada módulo en la sección de Módulos.

Flujo de Datos

Flujo Típico de una Petición

sequenceDiagram
    participant U as Usuario
    participant F as Frontend (JS)
    participant V as View/API
    participant S as Service
    participant M as Model
    participant DB as PostgreSQL
    participant E as SAP API

    U->>F: Acción (click, submit)
    F->>V: HTTP Request (AJAX)
    V->>S: Llamada a servicio
    S->>M: Query ORM
    M->>DB: SQL Query
    DB-->>M: Resultados
    S->>E: API Request (si necesario)
    E-->>S: Respuesta
    S-->>V: Datos procesados
    V-->>F: JSON Response
    F-->>U: UI Update

Ejemplo Concreto: Crear un Cliente

  1. Usuario llena formulario en el navegador
  2. JavaScript valida datos y envía AJAX POST
  3. View/API recibe la petición
  4. Serializer valida los datos
  5. Service procesa la lógica:
  6. Crea el cliente en PostgreSQL
  7. Envía datos a SAP API
  8. Sube archivos adjuntos a S3
  9. Response regresa al frontend
  10. UI se actualiza con el nuevo cliente

Patrones de Diseño Utilizados

Repository Pattern

Separación entre lógica de negocio y acceso a datos:

# services/cliente_service.py
class ClienteService:
    def crear_cliente(self, data):
        # Validación
        # Lógica de negocio
        # Llamadas a API externa
        # Persistencia
        pass

Signal-Observer Pattern

Django Signals para desacoplar eventos:

# Cuando se crea un apartado, notificar
@receiver(post_save, sender=Apartado)
def notificar_apartado_creado(sender, instance, created, **kwargs):
    if created:
        notificar_usuarios(instance)

Factory Pattern

Para creación de objetos complejos (reportes, anexos):

class ReporteFactory:
    @staticmethod
    def crear_reporte(tipo, params):
        if tipo == 'ventas':
            return ReporteVentas(params)
        elif tipo == 'inventario':
            return ReporteInventario(params)

Seguridad

Autenticación y Autorización

  • Autenticación: Django session-based auth
  • Autorización: Django Groups & Permissions
  • 9 Grupos: Beta, Contabilidad, Coordinador, Corporativo, Gerente, Marketing, RC, Sistemas, Tesorería
  • Multi-tenancy: Filtrado por Plaza

Protecciones Implementadas

✅ CSRF Protection (Django middleware) ✅ SQL Injection (ORM parametrizado) ✅ XSS Protection (template escaping) ✅ Clickjacking Protection (X-Frame-Options) ✅ SSL/TLS en producción (Heroku) ✅ Secrets en variables de entorno

Escalabilidad

Estrategias Actuales

  • Horizontal: Múltiples dynos en Heroku
  • Base de Datos: PostgreSQL con índices optimizados
  • Caché: Django cache framework
  • Static Files: WhiteNoise + CDN
  • Media Files: AWS S3 con CloudFront
  • Queries: Prefetch y select_related

Puntos de Mejora Futura

  • Implementar Redis para caché distribuido
  • Separar tareas pesadas a Celery
  • Implementar read replicas de PostgreSQL
  • Migrar a microservicios (si el negocio crece)

Performance

Métricas Actuales (Estimadas)

  • Response Time: ~200-500ms (promedio)
  • Database Queries: 5-20 por request (optimizable)
  • Static Assets: Servidos con compresión gzip/brotli
  • Uptime: 99.9% (Heroku SLA)

Optimizaciones Implementadas

  • WhiteNoise para static files
  • Django Debug Toolbar (solo desarrollo)
  • Select related / Prefetch related
  • Índices en campos frecuentes
  • Compresión de imágenes antes de subir
  • Paginación en listados

Monitoreo y Logs

  • Logs: Heroku logs (stdout/stderr)
  • Errores: Django error reporting
  • Métricas: Heroku metrics
  • APM: (Considerar New Relic o Datadog)

Próximas Secciones

Para entender mejor la arquitectura, continúa con:


Esta arquitectura ha evolucionado con el negocio y continuará adaptándose a las necesidades de A Terceros Inmobiliaria.