--- id: "US-LLM-011" title: "Ejecutar Trade desde Chat" type: "User Story" status: "Pending" priority: "Alta" epic: "OQI-007" project: "trading-platform" story_points: 5 created_date: "2026-01-25" updated_date: "2026-01-25" --- # US-LLM-011: Ejecutar Trade desde Chat **Épica:** OQI-007 - LLM Strategy Agent **Sprint:** TBD **Story Points:** 5 **Prioridad:** P0 - Alta --- ## Historia de Usuario **Como** usuario Pro o Premium con capacidad de trading real **Quiero** ejecutar trades directamente desde el chat con el asistente AI mediante comandos naturales **Para** operar en los mercados rápidamente sin cambiar de interfaz --- ## Criterios de Aceptación ### AC-1: Interpretar comandos de trading ```gherkin Given soy usuario Pro/Premium And tengo acceso a trading real When digo frases como "Vende 50 acciones de AAPL" o "Compra Bitcoin a $43,000" Then el agente interpreta correctamente: - Acción (compra/venta) - Símbolo del activo - Cantidad - Tipo de orden (mercado/límite) - Precio (si es límite) And valida que la orden sea válida ``` ### AC-2: Mostrar preview de la orden ```gherkin Given el agente interpreta un comando de trading When prepara la orden Then muestra un resumen detallado: - Símbolo y nombre del activo - Acción (BUY/SELL) - Cantidad de unidades - Tipo de orden (market/limit) - Precio unitario estimado - Costo/ingresos totales - Comisiones estimadas - Impacto en el portafolio And NO ejecuta la orden automáticamente ``` ### AC-3: Requerir confirmación explícita ```gherkin Given el agente muestra el preview de la orden When el usuario revisa los detalles Then el agente pide confirmación explícita: - "¿Confirmas esta orden?" o similar - Botones/acciones claras (Confirmar/Cancelar) And SOLO ejecuta si el usuario confirma And permite cancelar en cualquier momento ``` ### AC-4: Validar límites de riesgo ```gherkin Given quiero ejecutar una orden When el agente prepara la orden Then valida: - Saldo disponible suficiente - Límite de exposición por activo - Límite de pérdida diaria - Límite de apalancamiento And si hay violación: - Informa qué límite se excede - Muestra valores actuales vs permitidos - NO permite ejecutar ``` ### AC-5: Ejecutar y retornar feedback ```gherkin Given el usuario confirma la orden When se ejecuta correctamente Then muestra confirmación con: - ID de la orden - Status (filled/pending) - Símbolo y precio ejecutado - Cantidad y costo final - Timestamp exacto - Posición actualizada en el activo And registra en el historial del chat ``` ### AC-6: Manejo de errores ```gherkin Given intento ejecutar una orden When ocurre error (conexión, mercado cerrado, etc.) Then el agente: - Informa el tipo de error - Explica por qué no se ejecutó - Sugiere alternativas (ej: orden pendiente) - NO procesa parcialmente la orden ``` ### AC-7: Restricción por plan ```gherkin Given soy usuario Free o con trading deshabilitado When intento ejecutar una orden Then el agente: - Rechaza la orden - Explica que requiere plan Pro/Premium - Muestra opción de upgrade - NO ejecuta ninguna orden ``` --- ## Flujo de Confirmación ```markdown ## Confirmar Orden 📊 **Acción:** VENTA **Símbolo:** AAPL - Apple Inc. **Cantidad:** 50 acciones **Tipo:** Market Order **Precio actual:** $185.32 **Costo total:** ~$9,266.00 **Comisión:** ~$9.27 **Neto:** ~$9,256.73 **Tu portafolio:** - Posición actual: 100 acciones @ $184.50 - Posición después: 50 acciones --- ⚠️ Esta es una orden REAL de trading ¿Confirmas esta orden? [✅ Confirmar] [❌ Cancelar] ``` --- ## Respuesta Post-Ejecución ```markdown ## Orden Ejecutada ✅ **ID:** ORD-20260125-001234 **Status:** Filled (Completada) **Símbolo:** AAPL **Acción:** VENTA **Cantidad:** 50 acciones **Precio:** $185.31 **Total:** $9,265.50 **Comisión:** $9.27 **Neto:** $9,256.23 **Timestamp:** 15:45:32 ET **Posición Actualizada:** - AAPL: 50 acciones @ $185.31 (promedio) - Valor: $9,265.50 - Variación: +2.5% hoy Registro guardado en tu historial. ``` --- ## Respuesta con Error ```markdown ## Error al Ejecutar ❌ **Razón:** Mercado cerrado (Cierre: 16:00 ET) La orden no pudo ejecutarse porque el mercado de NYSE está cerrado. **Alternativas:** - Crear orden pendiente para la apertura mañana - Intentar en mercados abiertos (premarket a las 04:00 ET) - Esperar a mañana a las 09:30 ET ¿Qué prefieres? [Orden Pendiente] [Otra acción] [Cancelar] ``` --- ## API Endpoint ### POST `/api/llm/execute-trade` **Headers:** ``` Authorization: Bearer {token} Content-Type: application/json ``` **Request Body:** ```json { "sessionId": "chat-session-12345", "interpretation": { "action": "BUY|SELL", "symbol": "AAPL", "quantity": 50, "orderType": "market|limit", "limitPrice": null, "timeInForce": "DAY|GTC" }, "userId": "user-uuid", "confirmedAt": "2026-01-25T15:45:32Z" } ``` **Response (Success):** ```json { "success": true, "order": { "orderId": "ORD-20260125-001234", "status": "filled", "symbol": "AAPL", "action": "SELL", "quantity": 50, "executedPrice": 185.31, "totalValue": 9265.50, "commission": 9.27, "netValue": 9256.23, "executedAt": "2026-01-25T15:45:32Z" }, "message": "Orden ejecutada exitosamente" } ``` **Response (Error):** ```json { "success": false, "error": { "code": "MARKET_CLOSED", "message": "El mercado está cerrado", "details": "NYSE cierra a las 16:00 ET" }, "alternatives": [ { "type": "pending_order", "description": "Crear orden pendiente para apertura" } ] } ``` --- ## Notas Técnicas - **Tool:** `execute_trade` (en el LLM Agent) - **Servicio:** Trading API Backend (puerto 3080) - **Confirmación:** OBLIGATORIA antes de ejecutar - **Validación:** Límites de riesgo, saldo, mercado abierto - **Logging:** Todas las órdenes registradas con timestamp - **Rate limit:** 20 órdenes/minuto por usuario - **Timeout:** 30 segundos para confirmación - **Rollback:** Si falla ejecución, reversión de cambios --- ## Flujo Técnico ```mermaid graph TD A["Usuario: 'Vende 50 AAPL'"] -->|Chat Input| B["LLM Agent"] B -->|NLU| C["Interpretar Comando"] C -->|Validar Sintaxis| D{¿Válido?} D -->|No| E["Error: Comando inválido"] D -->|Sí| F["Preparar Preview"] F -->|GET /api/market/price| G["Obtener precio actual"] G -->|GET /api/portfolio/position| H["Obtener posición actual"] H -->|Calcular| I["Preparar detalles orden"] I -->|Mostrar| J["Preview en chat"] J -->|Usuario revisa| K{¿Confirma?} K -->|Cancela| L["Cancelado"] K -->|Confirma| M["POST /api/llm/execute-trade"] M -->|Validar riesgos| N{¿Límites OK?} N -->|No| O["Error: Límite excedido"] N -->|Sí| P["Ejecutar orden"] P -->|Trading System| Q["Orden procesada"] Q -->|Response| R["Mostrar confirmación"] R -->|Actualizar portafolio| S["Feedback final"] ``` --- ## Criterios de Aceptación Técnica - [ ] Interpretar al menos 10 variantes de comandos - [ ] Validar todos los campos obligatorios - [ ] Conectar con Trading API backend - [ ] Mostrar preview antes de ejecutar - [ ] Requerir confirmación explícita - [ ] Validar límites de riesgo - [ ] Ejecutar orden correctamente - [ ] Mostrar confirmación con detalles - [ ] Registrar en historial - [ ] Manejo robusto de errores - [ ] Tests unitarios (80%+ coverage) - [ ] Tests E2E del flujo completo - [ ] QA aprobado --- ## Dependencias - RF-LLM-005: Herramienta Trading Execution - RF-LLM-006: Interpretación NLU avanzada - ET-LLM-005: Arquitectura Tools - OQI-001: Autenticación y autorización - OQI-003: Paper Trading System - REC-BACKEND-001: Trading API --- ## Definición de Done - [ ] Endpoint `/api/llm/execute-trade` implementado - [ ] LLM Agent puede interpretar comandos - [ ] Preview de orden funcionando - [ ] Confirmación obligatoria - [ ] Validación de límites de riesgo - [ ] Ejecución de orden - [ ] Feedback post-ejecución - [ ] Manejo de errores - [ ] Restricción por plan - [ ] Tests unitarios - [ ] Tests E2E - [ ] QA aprobado - [ ] Documentación actualizada --- *Historia de usuario - Sistema NEXUS* *Trading Platform*