# 02-ANALISIS.md - OQI-005 Payments Advanced Components

## Analisis de Comportamiento Esperado

### StripeElementsWrapper
**Comportamiento:**
- Envuelve la aplicación con Stripe Elements Provider
- Carga el SDK de Stripe.js de forma lazy
- Proporciona configuración de apariencia (stripe, night, flat)
- Expone HOC `withStripeElements` para envolver componentes
- Expone hook `useStripeAvailable` para verificar disponibilidad

**Inputs:**
- `config.publicKey`: Clave pública de Stripe
- `config.locale`: Idioma (en, es, auto)
- `config.appearance`: Tema visual

**Outputs:**
- Provider con contexto de Stripe
- Componentes hijos con acceso a Elements

### InvoicePreview
**Comportamiento:**
- Muestra desglose itemizado de la factura
- Calcula subtotal, descuentos, impuestos, total
- Soporta múltiples tipos de descuento (% o fijo)
- Muestra período de facturación
- Botones de acción configurables

**Inputs:**
- `data`: InvoicePreviewData con items, descuentos, impuestos
- `onConfirm/onCancel`: Callbacks de acción
- `showActions`: Mostrar/ocultar botones

**Outputs:**
- Vista renderizada de factura
- Eventos de confirmación/cancelación

### RefundRequestModal
**Comportamiento:**
- Verifica elegibilidad de reembolso
- Permite seleccionar razón predefinida
- Permite reembolso parcial o total
- Valida monto contra máximo permitido
- Requiere explicación textual

**Inputs:**
- `eligibility`: Datos de elegibilidad
- `transactionId/Amount/Date`: Datos de transacción
- `onSubmit`: Callback con RefundRequestData

**Outputs:**
- Modal interactivo
- RefundRequestData al enviar

### RefundList
**Comportamiento:**
- Lista paginada de reembolsos
- Filtro por estado (pending, processing, completed, failed, cancelled)
- Badge de estado con colores semánticos
- Click para ver detalles
- Navegación de páginas

**Inputs:**
- `refunds`: Array de Refund
- `totalCount/currentPage/pageSize`: Paginación
- `onPageChange/onStatusFilter/onRefundClick`: Callbacks

**Outputs:**
- Lista renderizada con paginación
- Eventos de navegación y filtrado

---

## Analisis de Capas Impactadas

```
┌─────────────────────────────────────────────┐
│                 FRONTEND                     │
├─────────────────────────────────────────────┤
│  components/payments/                        │
│    ├── StripeElementsWrapper.tsx  [NUEVO]   │
│    ├── InvoicePreview.tsx         [NUEVO]   │
│    ├── RefundRequestModal.tsx     [NUEVO]   │
│    ├── RefundList.tsx             [NUEVO]   │
│    └── index.ts                   [MODIFICADO]
├─────────────────────────────────────────────┤
│  Dependencias:                               │
│    @stripe/react-stripe-js                   │
│    @stripe/stripe-js                         │
│    lucide-react                              │
└─────────────────────────────────────────────┘
```

---

## Analisis de Dependencias

### Dependencias Externas
| Paquete | Version | Uso |
|---------|---------|-----|
| @stripe/react-stripe-js | ^2.x | Elements Provider |
| @stripe/stripe-js | ^2.x | Stripe SDK |
| lucide-react | ^0.x | Iconos |
| react | ^18.x | Framework |

### Dependencias Internas
| Componente | Ubicación | Relación |
|------------|-----------|----------|
| WalletCard | components/payments/ | Relacionado |
| TransactionHistory | components/payments/ | Relacionado |
| PaymentMethodForm | components/payments/ | Debe migrar a usar StripeElements |

### Componentes que Dependerán
- `pages/payments/checkout.tsx` - Usará InvoicePreview + StripeElements
- `pages/payments/refunds.tsx` - Usará RefundList + RefundRequestModal
- `pages/settings/billing.tsx` - Usará StripeElements

---

## Analisis de Riesgos

| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|--------------|---------|------------|
| API Key expuesta | Baja | Alto | Usar solo public key en frontend |
| Stripe SDK no carga | Media | Alto | Hook useStripeAvailable para fallback |
| Formato moneda incorrecto | Baja | Medio | Usar Intl.NumberFormat |
| Estado de refund desactualizado | Media | Medio | Polling o websocket |

---

## Analisis de Patrones Existentes

### Patrones Identificados en Codebase
1. **Iconos:** lucide-react para payments, heroicons para education
2. **Colores:** Dark theme (slate-800/900, border-slate-700)
3. **Exports:** default export + named type exports
4. **State:** useState, useMemo, useCallback
5. **Props:** TypeScript interfaces con JSDoc

### Patrones Aplicados
- Seguir lucide-react para consistencia con payments
- Mantener dark theme con slate colors
- Exportar tipos nombrados para uso externo
- Optimización con useMemo/useCallback

---

## Conclusion del Analisis

**Viabilidad:** ALTA
- Componentes bien definidos con responsabilidades claras
- Dependencias disponibles y maduras
- Patrones establecidos en codebase
- Sin breaking changes a componentes existentes

**Complejidad:** MEDIA
- Integración con SDK externo (Stripe)
- Múltiples estados y validaciones
- Tipado TypeScript completo requerido
