Saltar al contenido principal

Estructura Modular del Backend

El backend de Yuruary sigue una arquitectura de Monolito Modular implementada sobre NestJS. Esta estrategia nos permite organizar el código en "Módulos de Dominio" aislados, facilitando el mantenimiento y evitando el acoplamiento espagueti, mientras mantenemos la simplicidad de despliegue de un solo artefacto.

Mapa de Dependencias

El siguiente diagrama ilustra cómo los puntos de entrada (Controladores) orquestan los módulos de dominio, y cómo estos interactúan entre sí bajo las reglas de DDD.

Desglose de Módulos de Dominio (Core)

IamModule (Identity & Access)

  • ¿Qué es?: El guardián de la identidad y la seguridad.
  • ¿Para qué sirve?: Gestiona la autenticación global, los perfiles de usuarios dentro de cada condominio y aplica las políticas de control de acceso basado en roles (RBAC).

PropertyModule

  • ¿Qué es?: El registro de la realidad física del inmueble.
  • ¿Para qué sirve?: Administra la jerarquía de Condominios, Sectores (Torres) y Unidades (Apartamentos).
    Solo Ladrillos

    Este módulo NO maneja dinero ni deudas. Solo define quién vive dónde y cuánto porcentaje (alícuota) representa su propiedad.

AccountingModule

  • ¿Qué es?: El corazón financiero y libro mayor.
  • ¿Para qué sirve?: Define el Plan de Cuenta Contable, mantiene los saldos de los Fondos y registra cada movimiento financiero mediante Asientos Contables inmutables.

BillingModule

  • ¿Qué es?: El motor de generación de deuda.
  • ¿Para qué sirve?: Gestiona los ciclos de facturación (meses), calcula la distribución de gastos comunes basada en las alícuotas del PropertyModule y emite los Recibos de Condominio (Bills). También calcula intereses de mora.

TreasuryModule

  • ¿Qué es?: La gestión del flujo de caja (Cash Flow).
  • ¿Para qué sirve?: Centraliza la recepción de Reportes de Pago de los residentes, descarga Transacciones Bancarias y ofrece la interfaz para la Conciliación que cruza ambos mundos.

Módulo de Infraestructura Crítica

SyncEngineModule

  • ¿Qué es?: El puente bidireccional entre la Oficina y la Nube.
  • ¿Para qué sirve?: Es un worker que corre en segundo plano con tres responsabilidades vitales:
    1. Pull: Lee la cola SQS/Redis para importar pagos reportados desde la web.
    2. Push: Detecta cambios en la BD local y los replica hacia la base de datos de lectura en la nube.
    3. Resolución: Garantiza la integridad de datos utilizando UUIDs para prevenir conflictos de IDs entre ambientes.

Capas de Interfaz (Entry Points)

PublicApiModule

  • ¿Qué es?: La cara visible hacia internet.
  • ¿Para qué sirve?: Expone endpoints REST RESTRICTIVOS para el Portal de Residentes.
    • Lectura: Consulta saldos y avisos.
    • Escritura: Solo permite encolar reportes de pago (Write-Only a SQS).

InternalApiModule

  • ¿Qué es?: El panel de control total.
  • ¿Para qué sirve?: Expone la API completa (REST y WebSockets) para la Desktop App que usa el personal administrativo. Permite gestión de inmuebles, aprobación de conciliaciones y cierre de meses.