Tabla de Contenidos

Arquitectura General del Proyecto PAE

Visión macro

PAE utiliza una arquitectura multicapa basada en módulos independientes que comunican a través de contratos claramente definidos. El proyecto sigue patrones de clean architecture con separación de responsabilidades entre presentación, dominio y datos.

Estructura de módulos

PAE (root)
├── Machine (app)               # Aplicación Android de máquina
├── RutaPAE (app)               # Aplicación Android de operador
│
├── MachineDomain               # Lógica de dominio de máquina
├── MachineData                 # Acceso a datos de máquina
│
├── RutaPAEDomain               # Lógica de dominio de ruta
├── RutaPAEData                 # Acceso a datos de ruta
│
├── Contract                    # Contrato P2P compartido
├── Core                        # Utilidades compartidas
├── DirectLink                  # Implementación P2P
│
├── ComputerVision              # Modelos de visión por computadora
├── VectorialDB                 # Motor de base de datos vectorial
└── gradle/                     # Configuración de dependencias

Módulos principales

Módulo Tipo Responsabilidad
Machine Application UI/UX de máquina, orquestación de flujo
MachineDomain Library Lógica de entrega, hardware, sincronización
MachineData Library Persistencia local, entidades, servicios
RutaPAE Application UI/UX de operador, gestión de máquinas
RutaPAEDomain Library Gestión P2P, lógica de sincronización remota
RutaPAEData Library Persistencia local, API de máquinas
Contract Library Modelos P2P, rutas, topics compartidos
DirectLink Library Implementación Wi-Fi Direct / hotspot
VectorialDB Library ORM con índices vectoriales para embeddings
ComputerVision Library Modelos IA para reconocimiento facial
Core Library Interfaces y utilidades de log

Arquitectura por capas

Machine

         ┌─────────────────────────────┐
         │   Capa de Presentación      │
         │   (Machine app)             │
         │   - UI Compose              │
         │   - ViewModels              │
         └──────────────┬──────────────┘
                        │
         ┌──────────────▼──────────────┐
         │   Capa de Dominio           │
         │   (MachineDomain)           │
         │   - StateManager            │
         │   - Estado de entregas      │
         │   - SyncDeliveries          │
         │   - P2PManager              │
         └──────────────┬──────────────┘
                        │
         ┌──────────────▼──────────────┐
         │   Capa de Datos             │
         │   (MachineData)             │
         │   - Delivery                │
         │   - Beneficiary             │
         │   - MachineEnrollmentShift  │
         │   - MinutaMenuDue           │
         │   - OperationalShift        │
         │   - Repository              │
         └─────────────────────────────┘
                        │
                    SQLite DB

RutaPAE

         ┌─────────────────────────────┐
         │   Capa de Presentación      │
         │   (RutaPAE app)             │
         │   - UI Compose              │
         │   - Screens                 │
         │   - Components              │
         └──────────────┬──────────────┘
                        │
         ┌──────────────▼──────────────┐
         │   Capa de Dominio           │
         │   (RutaPAEDomain)           │
         │   - P2PManager              │
         │   - SyncDeliveries          │
         │   - Descubrimiento          │
         └──────────────┬──────────────┘
                        │
         ┌──────────────▼──────────────┐
         │   Capa de Datos             │
         │   (RutaPAEData)             │
         │   - Machine                 │
         │   - Delivery                │
         │   - Services                │
         └─────────────────────────────┘
                        │
                    SQLite DB

Flujo de comunicación entre capas

Machine: Captura de entrega

  1. UI → usuario solicita captura
  2. Data → se resuelve la jornada operativa visible del día con fallback a MachineEnrollmentShift cuando falta MinutaMenuDue para una modalidad válida
  3. Domain → StateManager ejecuta WaitingForWeight
  4. Data → Beneficiary consulta base de datos
  5. Domain → GenerateEmbedding crea vector 512d
  6. Data → Delivery se guarda en base de datos

RutaPAE: Sincronización de entregas

  1. UI → usuario selecciona máquina y solicita sincronización
  2. Domain → P2PManager conecta vía P2P
  3. Domain → syncDeliveriesFromMachine descarga entregas
  4. Data → Delivery se almacena localmente
  5. UI → muestra progreso y resultado

Responsabilidades por capa

Presentación (Machine / RutaPAE)

Dominio (MachineDomain / RutaPAEDomain)

Datos (MachineData / RutaPAEData)

Comunicación inter-módulos

A través de interfaces comunes

A través de emisores (Emitters)

A través de inyección de dependencias

Patrones clave

State Management

Repository Pattern

Observer Pattern

Factory Pattern

Dependencias entre módulos

Machine                RutaPAE
  ├── MachineDomain      ├── RutaPAEDomain
  ├── MachineData        ├── RutaPAEData
  ├── Contract           ├── Contract
  └── Core               └── Core

MachineDomain
  ├── MachineData
  ├── Contract
  ├── DirectLink
  └── Core

RutaPAEDomain
  ├── RutaPAEData
  ├── Contract
  ├── DirectLink
  └── Core

MachineData / RutaPAEData
  ├── VectorialDB
  ├── Contract
  └── Core

DirectLink
  └── Contract

VectorialDB
  └── (sin dependencias PAE)

ComputerVision
  └── (sin dependencias PAE)

Versiones de compilación

Librerías principales

Convenciones de nomenclatura