Versión: 1.0 | Fecha: Enero 2025 | Autor: Tech Lead
Crear un Backend for Frontend (BFF) en .NET 8.0 que actúe como proxy inteligente entre Flutter y los servicios existentes de MPAY, permitiendo:
- Reutilizar 100% de la lógica existente (back-office + api-laravel)
- Cero modificaciones a los sistemas actuales
- Optimizar respuestas para consumo móvil
- Retrocompatibilidad total con el flujo web (Next.js sigue funcionando igual)
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ ONBOARDING │ │ ONBOARDING │ │
│ │ (Next.js) │ │ (Flutter) │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ │ Directo │ │
│ │ ▼ │
│ │ ┌─────────────────────┐ │
│ │ │ BFF GATEWAY │ ← NUEVO (.NET 8.0) │
│ │ │ Puerto: 5000 │ │
│ │ │ │ │
│ │ │ • Proxy inteligente│ │
│ │ │ • Stateless │ │
│ │ │ • Agregación │ │
│ │ │ • Transformación │ │
│ │ └──────────┬──────────┘ │
│ │ │ │
│ │ │ HTTP Client │
│ │ ▼ │
│ │ ┌───────────────────────────────────────┐ │
│ └────▶│ BACK-OFFICE (Laravel) │◀── Sin cambios │
│ │ Puerto: 80 │ │
│ └───────────────────┬───────────────────┘ │
│ │ │
│ ┌─────────▼─────────┐ │
│ │ API-LARAVEL │◀── Sin cambios │
│ │ Puerto: 8051 │ │
│ └───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
- Proxy Transparente: BFF consume endpoints existentes de MPAY
- Zero Changes: No se modifica back-office ni api-laravel
- Stateless: Sin Redis ni estado externo - usa token de MPAY
- Agregación: Un endpoint BFF puede combinar múltiples llamadas
- Cache Simple: Solo IMemoryCache para datos estáticos (opcional)
mpay/
├── api-laravel/ # Sin cambios
├── back-office/ # Sin cambios
├── onboarding/ # Sin cambios (Next.js)
├── database-laravel/ # Sin cambios
├── documents-ocr/ # Sin cambios
│
└── bff-onboarding/ # [NUEVO] BFF Gateway .NET 8.0
├── src/
│ └── BFF.Onboarding.API/
│ ├── Controllers/ # Auth, Flow, Config, Calculator
│ ├── Services/ # MPayProxy
│ ├── Models/ # DTOs Request/Response
│ └── Middleware/ # Auth, Logging
├── tests/
├── Dockerfile
└── kubernetes/
| BFF Endpoint | Método | MPAY Endpoint | Notas |
|---|---|---|---|
/api/v1/auth/document |
POST | GET /api/v1/customers/by-document |
Verificar si existe |
/api/v1/auth/register |
POST | POST /api/v1/equifax/customers |
Crear cliente |
/api/v1/auth/send-otp |
POST | POST /api/v1/equifax/customers/validate-phone |
Enviar código |
/api/v1/auth/verify-otp |
POST | POST /api/v1/equifax/customers/verify-phone |
Verificar código |
| BFF Endpoint | Método | MPAY Endpoint | Notas |
|---|---|---|---|
/api/v1/flow/status |
GET | GET /customer-equifax-step + GET /profile |
Agregación |
/api/v1/flow/consent |
POST | POST /api/v1/equifax/save-signature |
Proxy |
/api/v1/flow/personal-info |
POST | POST /api/v1/equifax/save-personal-information |
Proxy |
/api/v1/flow/work-info |
POST | POST /api/v1/equifax/save-work-information |
Proxy |
/api/v1/flow/documents |
POST | POST /api/v1/equifax/save-documents |
Multipart |
/api/v1/flow/references |
POST | POST /api/v1/equifax/save-references |
Proxy |
/api/v1/flow/evaluate |
POST | POST /api/v1/equifax/process-approval |
Async |
/api/v1/flow/evaluation-result |
GET | GET /api/v1/equifax/customer-equifax-step |
Polling |
/api/v1/flow/appeal |
POST | POST /api/v1/equifax/save-appeal |
Multipart |
| BFF Endpoint | Método | MPAY Endpoint | Notas |
|---|---|---|---|
/api/v1/calculator/amortization |
GET | GET /api/v1/equifax/amortization |
Proxy directo |
/api/v1/config/periods |
GET | GET /api/v1/equifax/periods-active |
IMemoryCache 10min |
/api/v1/config/countries |
GET | Local | Hardcoded SV/HN |
GET /api/v1/flow/status (BFF)
│
├──▶ GET /api/v1/equifax/customer-equifax-step (MPAY)
├──▶ GET /api/v1/equifax/profile (MPAY)
└──▶ GET /api/v1/equifax/periods-active (MPAY) [condicional]
⬇️ Combina en una sola respuesta optimizada para Flutter
| MPAY Response | BFF Response |
|---|---|
| Múltiples campos anidados | Estructura plana para Flutter |
| Campos en snake_case | Campos en camelCase |
| Sin progreso | Con progressPercentage calculado |
| Estados como strings | Estados con códigos numéricos |
| Dato | Estrategia |
|---|---|
| Configuración países | Hardcoded en código |
| Períodos disponibles | IMemoryCache 10 min (opcional) |
| Todo lo demás | Sin cache - proxy directo |
Nota: El BFF es stateless. La autenticación usa el token de MPAY que se propaga en cada request.
| Servicio | Uso | Estado |
|---|---|---|
| Back-Office (Laravel) | Toda la lógica de Equifax | ✅ Sin cambios |
| API-Laravel | Validación de clientes | ✅ Sin cambios |
| MySQL | BD existente | ✅ Sin acceso directo |
| Componente | Descripción |
|---|---|
| BFF .NET 8.0 | Servicio gateway |
| IMemoryCache | Cache in-memory nativo de .NET (opcional) |
<PackageReference Include="Microsoft.Extensions.Http" />
<PackageReference Include="Polly.Extensions.Http" /> <!-- Retry policies -->
<PackageReference Include="Swashbuckle.AspNetCore" /> <!-- Swagger -->Sin Redis ni dependencias externas de estado.
Duración: 2 días
Tareas:
- Crear proyecto .NET 8.0 con estructura básica
- Configurar HTTP Clients con Polly (retry/timeout)
- Implementar MPayProxyService
- Crear AuthController (4 endpoints)
- Dockerfile y Kubernetes manifests
Entregables:
/api/v1/auth/document/api/v1/auth/register/api/v1/auth/send-otp/api/v1/auth/verify-otp
Duración: 3 días
Tareas:
- Implementar FlowController (9 endpoints)
- Agregación en
/flow/status - Manejo de multipart para documentos y apelación
- Lógica de polling para evaluación
Entregables:
/api/v1/flow/status(agregación)/api/v1/flow/consent/api/v1/flow/personal-info/api/v1/flow/work-info/api/v1/flow/documents/api/v1/flow/references/api/v1/flow/evaluate/api/v1/flow/evaluation-result/api/v1/flow/appeal
Duración: 1 día
Tareas:
- ConfigController (períodos hardcoded, países)
- CalculatorController (proxy a amortización)
- Cache opcional con IMemoryCache
Entregables:
/api/v1/calculator/amortization/api/v1/config/periods/api/v1/config/countries
Duración: 2 días
Tareas:
- Tests unitarios e integración
- Documentación Swagger/OpenAPI
- Postman collection
- README y guía de deploy
Entregables:
- Suite de tests (>80% coverage)
- Swagger UI
- Postman collection
- Documentación
Semana 1:
├── Día 1-2: Scaffold + Auth Module
├── Día 3-4: Flow Module
└── Día 5: Flow Module (completar)
Semana 2:
├── Día 1: Utilidades + Config
├── Día 2-3: Testing + Documentación
└── Día 4-5: QA + Deploy staging
Total: 8-10 días laborales (con automatización AI)
| Componente | Manual | Con AI | Ahorro |
|---|---|---|---|
| Scaffold proyecto | 4h | 1h | 75% |
| Módulo Auth (4 endpoints) | 8h | 2h | 75% |
| Módulo Flow (9 endpoints) | 16h | 4h | 75% |
| Utilidades + Config | 4h | 1h | 75% |
| Testing + Docs | 8h | 2h | 75% |
| TOTAL | 40h | 10h | 75% |
| Riesgo | Prob. | Impacto | Mitigación |
|---|---|---|---|
| Latencia adicional (hop extra) | Media | Bajo | Conexiones persistentes, sin cache innecesario |
| Cambios en endpoints MPAY | Baja | Alto | Tests de contrato, alertas |
| Token propagation issues | Media | Alto | Middleware robusto, logging |
| Timeout en evaluación crediticia | Media | Medio | Polling con retry, UI de espera |
- Zero MPAY Changes - No se toca código existente
- Stateless - Sin Redis, sin estado externo
- Simple - Solo proxy + transformación
- Testeable - Fácil de probar en aislamiento
- Time to Market - ~2 semanas de implementación
- Bajo Riesgo - Sistema actual no se afecta
- Rollback Fácil - Solo quitar BFF si hay problemas
- Retrocompatibilidad - Web sigue funcionando igual
| Métrica | Objetivo |
|---|---|
| Latencia adicional BFF | < 50ms |
| Disponibilidad | 99.9% |
| Cobertura de tests | > 80% |
| Tiempo implementación | < 2 semanas |
- 15 endpoints implementados
- Tests unitarios (coverage > 80%)
- Tests de integración pasando
- Swagger documentado
- Postman collection
- Dockerfile funcional
- Kubernetes manifests
- Monitoreo activo
- Alertas configuradas
- Runbook documentado
- Aprobación del plan
- Crear
bff-onboarding/en monorepo - Scaffold con Claude Code
- Implementación por fases
- QA en staging
- Deploy a producción
| Documento | Ubicación |
|---|---|
| Arquitectura Equifax | docs/EQUIFAX_ARCHITECTURE.md |
| Arquitectura MPAY | docs/ARCHITECTURE.md |
| Rutas actuales | back-office/routes/api/v1/equifax.php |
| Servicios frontend | onboarding/src/services/steps.service.ts |
Elaborado por: Tech Lead | Fecha: Enero 2025