# ☁️ AWS INFRASTRUCTURE SPECIFICATION — HAP ECOSYSTEM 3.0
*(World-Class Cloud-Native Architecture, BFF Microservices & Enterprise Database Standards)*

---

## 📌 1. Visión Ejecutiva y Principios de Diseño

El ecosistema **HAP 3.0** está diseñado para operar a escala nacional en México, soportando decenas de miles de transacciones concurrentes con alta disponibilidad, resiliencia a fallos y velocidad extrema.

### Principios Rectores:
1. **Patrón BFF (Backend For Frontend)**: Cada aplicación frontend cuenta con su propia API backend especializada e independiente. No existe una API monolítica central compartida en el código.
2. **Fuente Única de Verdad (Central Data Layer)**: Todas las APIs se conectan a un cluster central de base de datos relacional (Amazon RDS) con réplica de lectura para consultas analíticas.
3. **Desacople Absoluto y Aislamiento de Fallos (*Blast Radius Containment*)**: Un error o caída en el backend de Torre de Control o Franquicias es físicamente incapaz de afectar a los conductores en calle (*HAP Drivers*).
4. **Regla de Oro de No Destrucción (#21)**: La infraestructura actual en producción (`95.111.214.233`) permanece 100% operativa e intacta mientras se despliega la nueva infraestructura en AWS. La transición final se realiza de manera transparente vía DNS (*Zero Downtime Cutover*).

---

## 🏛️ 2. Mapa Global de Arquitectura en AWS

```
                                  [ INTERNET / DISPOSITIVOS MÓVILES ]
                                                  │
                 ┌────────────────────────────────┴────────────────────────────────┐
                 │                                                                 │
          (Tráfico Web SPA / PWA)                                       (Tráfico APIs Backend)
                 │                                                                 │
                 ▼                                                                 ▼
    ┌───────────────────────────┐                                   ┌─────────────────────────────┐
    │     AWS AMPLIFY HOSTING   │                                   │   AWS GLOBAL ACCELERATOR    │
    │  (S3 + CloudFront Edge)   │                                   │ (Anycast IPs Estáticas)     │
    └─────────────┬─────────────┘                                   └──────────────┬──────────────┘
                  │                                                                │
     ┌────────────┼────────────┬────────────┐                                      ▼
     ▼            ▼            ▼            ▼                       ┌─────────────────────────────┐
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐                 │  SHARED APPLICATION LOAD    │
│HAP Users │ │HAP Driver│ │HAP Fleet │ │HAP Tower │                 │       BALANCER (ALB)        │
│   PWA    │ │   PWA    │ │  WebApp  │ │  WebApp  │                 └──────────────┬──────────────┘
└──────────┘ └──────────┘ └──────────┘ └──────────┘                                │ (Host-Based Routing)
                                                    ┌──────────────────────────────┼──────────────────────────────┐
                                                    ▼                              ▼                              ▼                              ▼
                                     ┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐
                                     │     BEANSTALK ENV 1          │ │     BEANSTALK ENV 2          │ │     BEANSTALK ENV 3          │ │     BEANSTALK ENV 4          │
                                     │       HAP Users API          │ │      HAP Drivers API         │ │       HAP Fleet API          │ │     HAP Control Tower API    │
                                     │   (api.users.soyhap.com)     │ │    (api.drivers.hap.mx)      │ │     (api.fleet.hap.mx)       │ │     (api.tower.hap.mx)       │
                                     └──────────────┬───────────────┘ └──────────────┬───────────────┘ └──────────────┬───────────────┘ └──────────────┬───────────────┘
                                                    │                                │                                │                                │
                                                    └────────────────────────────────┴───────┬────────────────────────┴────────────────────────────────┘
                                                                                             │
                                       ┌─────────────────────────────────────────────────────┴─────────────────────────────────────────────────────┐
                                       │                                                                                                           │
                                       ▼                                                                                                           ▼
                        ┌──────────────────────────────┐                                                            ┌──────────────────────────────────────────────┐
                        │   AMAZON ELASTICACHE REDIS   │                                                            │             AMAZON RDS CLUSTER               │
                        │  (Telemetría GPS en Vivo,    │                                                            │    (PostgreSQL + PostGIS o MySQL 8.0)        │
                        │   Radar 0 ms, Rate-Limiting) │                                                            ├──────────────────────┬───────────────────────┤
                        └──────────────────────────────┘                                                            │ PRIMARY (WRITER)     │ READ REPLICA (READER) │
                                                                                                                    │ Transacciones ACID,  │ Dashboards, Reportes, │
                                       ┌─────────────────────────────────────────────────────┐                      │ Órdenes, Pagos       │ Auditoría, Consultas  │
                                       │                   AMAZON S3 BUCKET                  │                      └──────────────────────┴───────────────────────┘
                                       │  (Evidencias Fotográficas & Facturas CSF en PDF)    │
                                       │  * Subida directa vía S3 Presigned URLs             │
                                       │  * Reglas Lifecycle: Archivo a S3 Glacier a 90 días │
                                       └─────────────────────────────────────────────────────┘
```

---

## 📱 3. Los 4 Proyectos Autónomos (BFF Microservices)

Cada uno de los 4 proyectos es una solución completa y aislada que posee su propio repositorio (o carpeta raíz en monorepo), su propio pipeline de CI/CD y sus propias variables de entorno:

| Proyecto | Dominio Frontend (Amplify) | Dominio Backend (Beanstalk) | Propósito & Capacidades Clave |
| :--- | :--- | :--- | :--- |
| **1. HAP Users** | `app.soyhap.com`<br>*(o user.hap.mx)* | `api.users.soyhap.com` | **PWA Clientes**: Catálogo de 3 tamaños de autos (Chico, Mediano, Grande), agendamiento programado, botón HAP Express, integración Stripe Elements, membresías (Días HAP) y facturación CSF. |
| **2. HAP Drivers** | `driver.hap.mx` | `api.drivers.hap.mx` | **PWA Conductores de Campo**: Ultraligera (<150 KB), cámara nativa transparente, compresión client-side en Canvas (1280px, ~150 KB), persistencia offline, HUD de misión unidireccional y pings de telemetría. |
| **3. HAP Fleet** | `fleet.hap.mx` | `api.fleet.hap.mx` | **WebApp Franquiciatarios / Flotillas**: Tablero financiero de territorio, monitoreo en vivo de lavadores asignados a la franquicia, cortes de caja de efectivo, comisiones y altas de personal. |
| **4. HAP Control Tower** | `tower.hap.mx`<br>*(o admin.hap.mx)* | `api.tower.hap.mx` | **Mission Control Matriz Corporativa**: Despacho logístico nacional, radar Leaflet geolocalizado en tiempo real, tablero Kanban reactivo, métricas ejecutivas de negocio y administración global. |

---

## 🌐 4. Red, Conectividad y Edge Acceleration

### 4.1 AWS Global Accelerator
- **Rol**: Puerta de entrada para todo el tráfico de las APIs backend.
- **Beneficio para Movilidad**:
  - Asigna **dos direcciones IP Anycast estáticas globales**.
  - Los teléfonos celulares de los conductores en ruta entran a la red privada de fibra de AWS en el punto de presencia (PoP) más cercano en México (CDMX, Querétaro), evitando la congestión y saltos lentos del internet público.
  - Elimina el problema de resolución lenta y caché de DNS en redes móviles (Telcel, AT&T, Movistar).
  - Maneja automáticamente chequeos de salud continuos y conmutación por error (*Failover*) a nivel de red.

### 4.2 Shared Application Load Balancer (ALB)
- Un único ALB configurado detrás de Global Accelerator que distribuye el tráfico mediante **Host-Based Routing** hacia los Target Groups de cada entorno Beanstalk:
  - `api.users.soyhap.com` $\rightarrow$ Target Group: `tg-hap-users-api`
  - `api.drivers.hap.mx` $\rightarrow$ Target Group: `tg-hap-drivers-api`
  - `api.fleet.hap.mx` $\rightarrow$ Target Group: `tg-hap-fleet-api`
  - `api.tower.hap.mx` $\rightarrow$ Target Group: `tg-hap-tower-api`
- **Configuración Clave del ALB**:
  - *Idle Timeout*: Aumentado a `300 segundos` para soportar conexiones persistentes de Server-Sent Events (SSE) o WebSockets en el radar.
  - *SSL/TLS*: Certificado comodín ACM (*AWS Certificate Manager*) renovado automáticamente para `*.hap.mx` y `*.soyhap.com`.

---

## 💻 5. Capa de Cómputo Backend (AWS Elastic Beanstalk)

Cada backend opera como un entorno independiente de Elastic Beanstalk:
- **Tecnología**: Contenedores Docker o runtime nativo (Node.js con TypeScript / Fastify o PHP 8.2+ con OPcache).
- **Auto-Scaling Group (ASG)**:
  - Configurado con un mínimo de 2 instancias (distribuidas en 2 zonas de disponibilidad `us-east-1a` y `us-east-1b`) para garantizar tolerancia a fallos.
  - Políticas de escalado basadas en consumo de CPU (>70%) o número de peticiones concurrentes.
  - **Escalado Asimétrico**: Durante promociones masivas, `HAP Users API` puede escalar a 10 instancias mientras `HAP Drivers API` se mantiene en 2 instancias, optimizando costos.
- **Ruta de Evolución Futura**: Los contenedores Docker de Beanstalk son 100% compatibles para migrarse a **AWS Fargate (Amazon ECS)** sin reescribir una sola línea de código cuando se requiera despliegue en microsegundos y cero administración de EC2.

---

## 🗄️ 6. Capa de Datos Enterprise (Amazon RDS Cluster)

### 6.1 Configuración de Alta Disponibilidad
- **Motor**: Amazon RDS para **PostgreSQL 16 (con extensión PostGIS)** o **MySQL 8.0**.
- **Topología**:
  - **Instancia Primaria (Writer)**: Instancia dedicada de cómputo para escrituras atómicas, transacciones de Stripe y control de estatus de servicios.
  - **Réplica de Lectura (Reader)**: Instancia dedicada para absorber el 100% de las consultas pesadas de dashboards, reportes mensuales, exportaciones CSV y métricas de Torre de Control y Franquicias.
  - **Multi-AZ Activado**: Réplica síncrona en otra zona física de disponibilidad con conmutación automática en <60 segundos ante fallos de hardware.

### 6.2 Convenciones de Nomenclatura (Regla de Oro #19)
Todo el nuevo esquema de base de datos se rige estrictamente por el estándar internacional en **inglés**:
1. **Tablas**: `snake_case`, en **plural** (`franchises`, `franchise_users`, `happers`, `admin_users`, `customers`, `services`, `service_photos`).
2. **Claves Primarias**: `id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY`.
3. **Claves Foráneas**: `<singular_table_name>_id` con índice obligatorio (`franchise_id`, `happer_id`, `customer_id`, `service_id`).
4. **Timestamps**: Formato `_at` en UTC (`created_at`, `updated_at`, `started_at`, `completed_at`, `last_login_at`). Fechas sin hora en `_date` (`birth_date`).
5. **Booleanos**: Prefijados con `is_`, `has_` o `can_` (`is_active`, `is_default`, `has_damage`).
6. **Finanzas**: Sufijo `_amount` o `_balance` en `DECIMAL(10,2)` (`total_amount`, `cash_balance`).
7. **Estatus**: Mayúsculas semánticas (`PENDING`, `ACCEPTED`, `EN_ROUTE`, `ARRIVED`, `IN_PROGRESS`, `COMPLETED`, `CANCELLED`).

### 6.3 Definición DDL Oficial de Tablas Principales

```sql
-- 1. Franquicias / Territorios Concesionados
CREATE TABLE `franchises` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `code` VARCHAR(50) NOT NULL UNIQUE,
  `name` VARCHAR(150) NOT NULL,
  `legal_name` VARCHAR(200) DEFAULT NULL,
  `tax_id` VARCHAR(20) DEFAULT NULL,
  `city` VARCHAR(100) NOT NULL,
  `state` VARCHAR(100) NOT NULL,
  `commission_rate` DECIMAL(5, 2) NOT NULL DEFAULT 15.00,
  `bank_clabe` VARCHAR(18) DEFAULT NULL,
  `coverage_polygon` JSON DEFAULT NULL,
  `status` ENUM('ACTIVE', 'INACTIVE', 'SUSPENDED') NOT NULL DEFAULT 'ACTIVE',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX `idx_franchises_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Usuarios de Franquicia (WebApp HAP Fleet)
CREATE TABLE `franchise_users` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `franchise_id` BIGINT UNSIGNED NOT NULL,
  `email` VARCHAR(191) NOT NULL UNIQUE,
  `password_hash` VARCHAR(255) NOT NULL,
  `full_name` VARCHAR(150) NOT NULL,
  `phone` VARCHAR(20) DEFAULT NULL,
  `role` ENUM('OWNER', 'FLEET_MANAGER', 'DISPATCHER') NOT NULL DEFAULT 'OWNER',
  `is_active` TINYINT(1) NOT NULL DEFAULT 1,
  `session_token` VARCHAR(64) DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_fusers_franchise` FOREIGN KEY (`franchise_id`) REFERENCES `franchises` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. Happers / Lavadores de Campo (HAP Drivers)
CREATE TABLE `happers` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `franchise_id` BIGINT UNSIGNED NULL,
  `email` VARCHAR(191) NOT NULL UNIQUE,
  `phone` VARCHAR(20) NOT NULL UNIQUE,
  `password_hash` VARCHAR(255) NOT NULL,
  `full_name` VARCHAR(150) NOT NULL,
  `avatar_url` VARCHAR(500) DEFAULT NULL,
  `status` ENUM('ACTIVE', 'INACTIVE', 'SUSPENDED', 'BLOCKED') NOT NULL DEFAULT 'ACTIVE',
  `shift_status` ENUM('OFFLINE', 'AVAILABLE', 'EN_ROUTE', 'WASHING') NOT NULL DEFAULT 'OFFLINE',
  `bank_clabe` VARCHAR(18) DEFAULT NULL,
  `cash_balance` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `session_token` VARCHAR(64) DEFAULT NULL,
  `session_device_info` VARCHAR(255) DEFAULT NULL,
  `session_created_at` DATETIME DEFAULT NULL,
  `fcm_token` TEXT DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_happers_franchise` FOREIGN KEY (`franchise_id`) REFERENCES `franchises` (`id`) ON DELETE SET NULL,
  INDEX `idx_happers_auth` (`email`, `status`),
  INDEX `idx_happers_shift` (`status`, `shift_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. Clientes (HAP Users)
CREATE TABLE `customers` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `email` VARCHAR(191) NOT NULL UNIQUE,
  `phone` VARCHAR(20) NOT NULL UNIQUE,
  `password_hash` VARCHAR(255) NOT NULL,
  `full_name` VARCHAR(150) NOT NULL,
  `stripe_customer_id` VARCHAR(100) DEFAULT NULL,
  `referral_code` VARCHAR(20) NOT NULL UNIQUE,
  `referred_by_id` BIGINT UNSIGNED NULL,
  `referral_credit_balance` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `is_vip` TINYINT(1) NOT NULL DEFAULT 0,
  `status` ENUM('ACTIVE', 'INACTIVE', 'BANNED') NOT NULL DEFAULT 'ACTIVE',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX `idx_customers_auth` (`email`, `phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. Servicios / Órdenes Transaccionales
CREATE TABLE `services` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `service_number` VARCHAR(50) NOT NULL UNIQUE,
  `customer_id` BIGINT UNSIGNED NOT NULL,
  `happer_id` BIGINT UNSIGNED NULL,
  `franchise_id` BIGINT UNSIGNED NULL,
  `vehicle_size` ENUM('CHICO', 'MEDIANO', 'GRANDE') NOT NULL,
  `upholstery_type` ENUM('TELA', 'PIEL') NOT NULL DEFAULT 'TELA',
  `vehicle_details` JSON DEFAULT NULL,
  `service_type` ENUM('EXPRESS', 'SCHEDULED', 'MEMBERSHIP_DAY', 'VIP') NOT NULL,
  `status` ENUM('PENDING', 'ACCEPTED', 'EN_ROUTE', 'ARRIVED', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
  `validation_pin` VARCHAR(4) NOT NULL,
  `address_street` VARCHAR(255) NOT NULL,
  `address_postal_code` VARCHAR(10) NOT NULL,
  `latitude` DECIMAL(10, 8) NOT NULL,
  `longitude` DECIMAL(11, 8) NOT NULL,
  `total_amount` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `happer_payout_amount` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `franchise_fee_amount` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `corporate_fee_amount` DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
  `payment_method` ENUM('STRIPE_CARD', 'CASH', 'MEMBERSHIP_CREDIT') NOT NULL,
  `stripe_payment_intent_id` VARCHAR(100) DEFAULT NULL,
  `scheduled_for` DATETIME DEFAULT NULL,
  `started_at` DATETIME DEFAULT NULL,
  `completed_at` DATETIME DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_srv_customer` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`),
  CONSTRAINT `fk_srv_happer` FOREIGN KEY (`happer_id`) REFERENCES `happers` (`id`),
  CONSTRAINT `fk_srv_franchise` FOREIGN KEY (`franchise_id`) REFERENCES `franchises` (`id`),
  INDEX `idx_srv_happer_status` (`happer_id`, `status`),
  INDEX `idx_srv_status_date` (`status`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 6. Evidencias Fotográficas
CREATE TABLE `service_photos` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `service_id` BIGINT UNSIGNED NOT NULL,
  `happer_id` BIGINT UNSIGNED NOT NULL,
  `slot_type` ENUM(
    'INITIAL_FRONT', 'INITIAL_SIDE_LEFT', 'INITIAL_SIDE_RIGHT', 'INITIAL_REAR',
    'PREVIOUS_DAMAGE',
    'FINAL_FRONT', 'FINAL_SIDE_LEFT', 'FINAL_SIDE_RIGHT', 'FINAL_REAR'
  ) NOT NULL,
  `file_url` VARCHAR(500) NOT NULL,
  `description` VARCHAR(255) DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT `fk_photos_service` FOREIGN KEY (`service_id`) REFERENCES `services` (`id`) ON DELETE CASCADE,
  INDEX `idx_photos_service_slot` (`service_id`, `slot_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```

---

## ⚡ 7. Capa de Telemetría y Caché en Tiempo Real (Amazon ElastiCache Redis)

- **Propósito**: Absorber los pings de GPS de los lavadores en campo sin estresar la base de datos relacional.
- **Estructura de Datos**:
  - `GEOADD happers:locations <longitude> <latitude> <happer_id>`: Guarda la posición geográfica instantánea.
  - `HSET happer:<happer_id>:telemetry battery 85 charging 1 speed 0.0 shift AVAILABLE`: Metadatos del dispositivo móvil.
  - `GEORADIUSBYMEMBER` / `GEOSEARCH`: Localiza a los Happers en un radio de 5 km en <1 milisegundo para el despacho automático de órdenes.
  - **Pub/Sub**: Distribuye el movimiento de los autos hacia Torre de Control y HAP Fleet en tiempo real.

---

## 📦 8. Almacenamiento Multimedia (Amazon S3 + Presigned URLs)

- **Patrón de Carga Directa (Zero-Bandwidth Backend)**:
  1. La app móvil comprime la foto en Canvas a 1280px (~150 KB).
  2. Solicita una firma de subida: `POST /api/v1/photos/presign` a `HAP Drivers API`.
  3. La API responde con una **S3 Presigned URL** firmada con expiración de 5 minutos.
  4. La app móvil sube el archivo directamente al bucket `s3://hap-media-prod/evidence/...` mediante HTTP `PUT`.
  5. **Ventaja**: Ningún byte de imagen pasa por el Load Balancer ni por Beanstalk, protegiendo la memoria y CPU de los servidores.
- **Ciclo de Vida (S3 Lifecycle Rules)**:
  - De 0 a 90 días: **S3 Standard** (acceso instantáneo para auditoría y reclamos de clientes).
  - Después de 90 días: Transición automática a **S3 Glacier Flexible Retrieval** (ahorro del 85% en costos de almacenamiento histórico).

---

## 🛡️ 9. Seguridad, Secretos y Cumplimiento

1. **AWS Secrets Manager**:
   - Todas las credenciales sensibles (claves secretas de Stripe, claves de Firebase FCM, credenciales maestras de base de datos) se almacenan cifradas con **AWS KMS**.
   - Queda estrictamente prohibido colocar contraseñas o tokens hardcodeados en el código.
2. **Cumplimiento PCI-DSS**:
   - Los números de tarjeta bancaria nunca tocan los servidores de HAP; viajan directamente del navegador del cliente a los servidores certificados de Stripe mediante Stripe Elements.
3. **AWS WAF (Web Application Firewall)**:
   - Configurado en el Load Balancer para mitigar ataques DDoS, inyecciones SQL y aplicar *rate-limiting* estricto por IP contra bots abusivos.

---

## 🚀 10. Estrategia de Migración y Transición sin Riesgo (Regla #21)

```mermaid
sequenceDiagram
    autonumber
    participant LEG as Producción Actual (VPS 95.111.214.233)
    participant AWS as Nuevo Entorno AWS (Cloud-Native)
    participant DNS as Route 53 (DNS)
    participant CLI as Clientes y Conductores

    Note over LEG: Operación Normal en Vivo (100% Intacta)
    Note over AWS: Fase 1: Creación de Infraestructura AWS
    Note over AWS: Despliegue de Amplify, Beanstalk, RDS, Redis y S3
    
    Note over AWS: Fase 2: Carga Inicial y Pruebas Staging
    LEG->>AWS: Migración de Catálogos, Histórico de Clientes y Vehículos
    Note over AWS: Pruebas End-to-End con Cuentas de QA en AWS
    
    Note over AWS: Fase 3: Sincronización Final Delta
    LEG->>AWS: Sincronización de Últimas Transacciones
    
    Note over DNS: Fase 4: Corte Limpio de Tráfico (Zero Downtime)
    DNS->>AWS: Apuntar dominios app.soyhap.com y driver.hap.mx a AWS
    CLI->>AWS: Tráfico entra a Global Accelerator y Amplify
    Note over LEG: El servidor viejo se conserva apagado como respaldo frío
```

Esta especificación garantiza que cualquier ingeniero, agente o arquitecto que ingrese al proyecto cuente con la guía definitiva para construir y operar **HAP 3.0** en AWS con los más altos estándares de la industria.
