- Add InvoiceList, InvoiceDetail, PaymentMethodsList, SubscriptionUpgradeFlow - Update OQI-005 progress 75% -> 85% - Update total_components 58 -> 62 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
907 lines
27 KiB
YAML
907 lines
27 KiB
YAML
# ============================================================================
|
|
# FRONTEND_INVENTORY.yml - Trading Platform Trading Platform
|
|
# ============================================================================
|
|
# Proposito: Inventario consolidado de todos los componentes del frontend
|
|
# Ultima actualizacion: 2025-12-05
|
|
# Version: 1.0.0
|
|
# ============================================================================
|
|
|
|
version: "1.1.0"
|
|
project: "Trading Platform"
|
|
framework: "React 18 + TypeScript + Vite"
|
|
styling: "TailwindCSS + shadcn/ui"
|
|
state_management: "Zustand"
|
|
last_updated: "2026-01-25"
|
|
|
|
# ============================================================================
|
|
# RESUMEN EJECUTIVO
|
|
# ============================================================================
|
|
summary:
|
|
total_features: 8 # auth, dashboard, education, trading, investment, settings, notifications, payments
|
|
total_pages: 18 # +4 (CheckoutSuccess, CheckoutCancel, Pricing, Billing)
|
|
total_components: 62 # +4 InvoiceList, InvoiceDetail, PaymentMethodsList, SubscriptionUpgradeFlow
|
|
total_hooks: 3 # useChatAssistant, useStreamingChat, useMT4WebSocket
|
|
total_stores: 2 # chatStore, paymentStore
|
|
status: "En desarrollo (OQI-005 al 85%)"
|
|
|
|
# ============================================================================
|
|
# ESTRUCTURA DE DIRECTORIOS
|
|
# ============================================================================
|
|
structure:
|
|
root: "apps/frontend/src"
|
|
directories:
|
|
- path: components/
|
|
purpose: "Componentes compartidos (layout)"
|
|
|
|
- path: modules/
|
|
purpose: "Features organizados por dominio"
|
|
|
|
- path: hooks/
|
|
purpose: "Custom hooks compartidos"
|
|
status: "Pendiente"
|
|
|
|
- path: stores/
|
|
purpose: "Zustand stores"
|
|
status: "Pendiente"
|
|
|
|
- path: types/
|
|
purpose: "Tipos TypeScript compartidos"
|
|
status: "Pendiente"
|
|
|
|
- path: lib/
|
|
purpose: "Utilidades y helpers"
|
|
status: "Pendiente"
|
|
|
|
# ============================================================================
|
|
# FEATURES (MODULOS)
|
|
# ============================================================================
|
|
features:
|
|
# --------------------------------------------------------------------------
|
|
# AUTH - Autenticacion
|
|
# --------------------------------------------------------------------------
|
|
- name: auth
|
|
path: modules/auth/
|
|
epic: OQI-001
|
|
status: implemented
|
|
description: "Login, registro, OAuth, 2FA"
|
|
|
|
pages:
|
|
- name: Login.tsx
|
|
route: /login
|
|
description: "Pagina de login"
|
|
rf: RF-AUTH-002
|
|
|
|
- name: Register.tsx
|
|
route: /register
|
|
description: "Pagina de registro"
|
|
rf: RF-AUTH-002
|
|
|
|
- name: ForgotPassword.tsx
|
|
route: /forgot-password
|
|
description: "Solicitar reset de password"
|
|
rf: RF-AUTH-002
|
|
|
|
- name: ResetPassword.tsx
|
|
route: /reset-password
|
|
description: "Completar reset de password"
|
|
rf: RF-AUTH-002
|
|
|
|
- name: VerifyEmail.tsx
|
|
route: /verify-email
|
|
description: "Verificacion de email"
|
|
rf: RF-AUTH-002
|
|
|
|
- name: AuthCallback.tsx
|
|
route: /auth/callback
|
|
description: "Callback de OAuth"
|
|
rf: RF-AUTH-001
|
|
|
|
components:
|
|
- name: SocialLoginButtons.tsx
|
|
purpose: "Botones de login social (Google, Facebook, X, Apple, GitHub)"
|
|
rf: RF-AUTH-001
|
|
|
|
- name: PhoneLoginForm.tsx
|
|
purpose: "Formulario de login por telefono"
|
|
rf: RF-AUTH-002
|
|
|
|
# --------------------------------------------------------------------------
|
|
# DASHBOARD - Panel principal
|
|
# --------------------------------------------------------------------------
|
|
- name: dashboard
|
|
path: modules/dashboard/
|
|
epic: OQI-001
|
|
status: structure_only
|
|
description: "Panel principal del usuario"
|
|
|
|
pages:
|
|
- name: Dashboard.tsx
|
|
route: /dashboard
|
|
description: "Dashboard principal"
|
|
|
|
components_planned:
|
|
- name: PortfolioSummary.tsx
|
|
purpose: "Resumen de portfolio"
|
|
|
|
- name: RecentActivity.tsx
|
|
purpose: "Actividad reciente"
|
|
|
|
- name: QuickActions.tsx
|
|
purpose: "Acciones rapidas"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# EDUCATION - Cursos
|
|
# --------------------------------------------------------------------------
|
|
- name: education
|
|
path: modules/education/
|
|
epic: OQI-002
|
|
status: structure_only
|
|
description: "Catalogo y detalle de cursos"
|
|
|
|
pages:
|
|
- name: Courses.tsx
|
|
route: /courses
|
|
description: "Catalogo de cursos"
|
|
rf: RF-EDU-001
|
|
|
|
- name: CourseDetail.tsx
|
|
route: /courses/:slug
|
|
description: "Detalle de curso"
|
|
rf: RF-EDU-002
|
|
|
|
pages_planned:
|
|
- name: LessonViewer.tsx
|
|
route: /courses/:slug/lessons/:lessonId
|
|
description: "Visor de leccion"
|
|
|
|
- name: QuizPage.tsx
|
|
route: /courses/:slug/quizzes/:quizId
|
|
description: "Pagina de quiz"
|
|
|
|
- name: MyLearning.tsx
|
|
route: /my-learning
|
|
description: "Mis cursos inscritos"
|
|
|
|
components_planned:
|
|
- name: CourseCard.tsx
|
|
purpose: "Tarjeta de curso"
|
|
|
|
- name: LessonList.tsx
|
|
purpose: "Lista de lecciones"
|
|
|
|
- name: VideoPlayer.tsx
|
|
purpose: "Reproductor de video"
|
|
|
|
- name: QuizForm.tsx
|
|
purpose: "Formulario de quiz"
|
|
|
|
- name: ProgressBar.tsx
|
|
purpose: "Barra de progreso"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# TRADING - Trading y charts
|
|
# --------------------------------------------------------------------------
|
|
- name: trading
|
|
path: modules/trading/
|
|
epic: OQI-003
|
|
status: structure_only
|
|
description: "Charts, watchlists, paper trading"
|
|
|
|
pages:
|
|
- name: Trading.tsx
|
|
route: /trading
|
|
description: "Pagina principal de trading"
|
|
rf: RF-TRD-001
|
|
|
|
pages_planned:
|
|
- name: PaperTrading.tsx
|
|
route: /trading/paper
|
|
description: "Paper trading"
|
|
|
|
- name: Signals.tsx
|
|
route: /trading/signals
|
|
description: "Senales ML"
|
|
|
|
components:
|
|
# Core Trading Components
|
|
- name: TradingChart.tsx
|
|
purpose: "Chart con Lightweight Charts"
|
|
rf: RF-TRD-003
|
|
|
|
- name: CandlestickChart.tsx
|
|
purpose: "Chart de velas basico"
|
|
|
|
- name: CandlestickChartWithML.tsx
|
|
purpose: "Chart de velas con overlay ML"
|
|
rf: RF-TRD-003
|
|
|
|
- name: ChartToolbar.tsx
|
|
purpose: "Toolbar de herramientas del chart"
|
|
|
|
- name: OrderForm.tsx
|
|
purpose: "Formulario de ordenes"
|
|
|
|
- name: PositionsList.tsx
|
|
purpose: "Lista de posiciones abiertas"
|
|
|
|
- name: TradesHistory.tsx
|
|
purpose: "Historial de trades"
|
|
|
|
# Watchlist Components
|
|
- name: WatchlistSidebar.tsx
|
|
purpose: "Sidebar de watchlist"
|
|
|
|
- name: WatchlistItem.tsx
|
|
purpose: "Item individual de watchlist"
|
|
|
|
- name: AddSymbolModal.tsx
|
|
purpose: "Modal para agregar simbolo"
|
|
|
|
# Account & Stats
|
|
- name: AccountSummary.tsx
|
|
purpose: "Resumen de cuenta"
|
|
|
|
- name: TradingStatsPanel.tsx
|
|
purpose: "Panel de estadisticas de trading"
|
|
|
|
# Panel Components
|
|
- name: MLSignalsPanel.tsx
|
|
purpose: "Panel de senales ML"
|
|
rf: RF-TRD-003
|
|
|
|
- name: AlertsPanel.tsx
|
|
purpose: "Panel de alertas de precio"
|
|
|
|
- name: OrderBookPanel.tsx
|
|
purpose: "Panel de order book"
|
|
|
|
- name: PaperTradingPanel.tsx
|
|
purpose: "Panel de paper trading"
|
|
|
|
# Utility
|
|
- name: ExportButton.tsx
|
|
purpose: "Boton para exportar datos"
|
|
|
|
# MT4 Gateway Components (OQI-009)
|
|
- name: MT4ConnectionStatus.tsx
|
|
purpose: "Indicador de conexion MT4 con info de cuenta"
|
|
epic: OQI-009
|
|
rf: RF-MT4-001
|
|
created: "2026-01-25"
|
|
|
|
- name: LivePositionCard.tsx
|
|
purpose: "Tarjeta de posicion en vivo con P&L y acciones"
|
|
epic: OQI-009
|
|
rf: RF-MT4-002
|
|
created: "2026-01-25"
|
|
|
|
- name: RiskMonitor.tsx
|
|
purpose: "Dashboard de gestion de riesgo con metricas"
|
|
epic: OQI-009
|
|
rf: RF-MT4-003
|
|
created: "2026-01-25"
|
|
|
|
- name: index.ts
|
|
purpose: "Exports de componentes de trading"
|
|
|
|
- name: QuickOrderPanel.tsx
|
|
purpose: "Panel compacto para ordenes rapidas one-click"
|
|
epic: OQI-009
|
|
rf: RF-MT4-004
|
|
created: "2026-01-25"
|
|
|
|
- name: TradeExecutionHistory.tsx
|
|
purpose: "Historial de trades de sesion con estadisticas"
|
|
epic: OQI-009
|
|
rf: RF-MT4-005
|
|
created: "2026-01-25"
|
|
|
|
- name: TradingMetricsCard.tsx
|
|
purpose: "Metricas diarias de trading y rendimiento"
|
|
epic: OQI-009
|
|
rf: RF-MT4-006
|
|
created: "2026-01-25"
|
|
|
|
hooks:
|
|
- name: useMT4WebSocket.ts
|
|
path: modules/trading/hooks/useMT4WebSocket.ts
|
|
purpose: "Hook para conexion WebSocket MT4 en tiempo real"
|
|
epic: OQI-009
|
|
rf: RF-MT4-007
|
|
created: "2026-01-25"
|
|
exports:
|
|
- useMT4WebSocket
|
|
- MT4AccountInfo (type)
|
|
- MT4Position (type)
|
|
- MT4Order (type)
|
|
|
|
components_planned:
|
|
- name: AMDZoneIndicator.tsx
|
|
purpose: "Indicador de zonas AMD"
|
|
|
|
- name: LiveTradingPanel.tsx
|
|
purpose: "Panel principal de trading en vivo MT4"
|
|
epic: OQI-009
|
|
|
|
# --------------------------------------------------------------------------
|
|
# INVESTMENT - Cuentas de inversion
|
|
# --------------------------------------------------------------------------
|
|
- name: investment
|
|
path: modules/investment/
|
|
epic: OQI-004
|
|
status: structure_only
|
|
description: "Productos, cuentas, rendimiento"
|
|
|
|
pages:
|
|
- name: Investment.tsx
|
|
route: /investment
|
|
description: "Pagina de inversiones"
|
|
rf: RF-INV-001
|
|
|
|
pages_planned:
|
|
- name: Products.tsx
|
|
route: /investment/products
|
|
description: "Catalogo de productos"
|
|
|
|
- name: AccountDetail.tsx
|
|
route: /investment/accounts/:id
|
|
description: "Detalle de cuenta"
|
|
|
|
- name: OpenAccount.tsx
|
|
route: /investment/open-account
|
|
description: "Abrir cuenta nueva"
|
|
|
|
components_planned:
|
|
- name: ProductCard.tsx
|
|
purpose: "Tarjeta de producto (Atlas/Orion/Nova)"
|
|
|
|
- name: AccountSummary.tsx
|
|
purpose: "Resumen de cuenta"
|
|
|
|
- name: PerformanceChart.tsx
|
|
purpose: "Grafico de rendimiento"
|
|
|
|
- name: DepositModal.tsx
|
|
purpose: "Modal de deposito"
|
|
|
|
- name: WithdrawModal.tsx
|
|
purpose: "Modal de retiro"
|
|
|
|
- name: BotSelector.tsx
|
|
purpose: "Selector de bot/agente"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# SETTINGS - Configuracion
|
|
# --------------------------------------------------------------------------
|
|
- name: settings
|
|
path: modules/settings/
|
|
epic: OQI-001
|
|
status: structure_only
|
|
description: "Configuracion de usuario"
|
|
|
|
pages:
|
|
- name: Settings.tsx
|
|
route: /settings
|
|
description: "Pagina de configuracion"
|
|
|
|
pages_planned:
|
|
- name: Profile.tsx
|
|
route: /settings/profile
|
|
description: "Editar perfil"
|
|
|
|
- name: Security.tsx
|
|
route: /settings/security
|
|
description: "Seguridad y 2FA"
|
|
|
|
- name: Notifications.tsx
|
|
route: /settings/notifications
|
|
description: "Preferencias de notificaciones"
|
|
|
|
- name: Billing.tsx
|
|
route: /settings/billing
|
|
description: "Suscripcion y pagos"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# NOTIFICATIONS - Centro de notificaciones
|
|
# --------------------------------------------------------------------------
|
|
- name: notifications
|
|
path: modules/notifications/
|
|
epic: OQI-001
|
|
status: implemented
|
|
description: "Centro de notificaciones con bell, dropdown y pagina completa"
|
|
created: "2026-01-25"
|
|
|
|
pages:
|
|
- name: NotificationsPage.tsx
|
|
route: /notifications
|
|
description: "Pagina completa de notificaciones con filtros"
|
|
rf: RF-AUTH-001
|
|
|
|
components:
|
|
- name: NotificationBell.tsx
|
|
purpose: "Icono de campana con badge de no leidas"
|
|
rf: RF-AUTH-001
|
|
|
|
- name: NotificationDropdown.tsx
|
|
purpose: "Dropdown con ultimas 10 notificaciones"
|
|
rf: RF-AUTH-001
|
|
|
|
- name: NotificationItem.tsx
|
|
purpose: "Item individual de notificacion"
|
|
rf: RF-AUTH-001
|
|
|
|
- name: index.ts
|
|
purpose: "Exports de componentes"
|
|
|
|
store:
|
|
- name: notificationStore.ts
|
|
path: stores/notificationStore.ts
|
|
purpose: "Estado de notificaciones con Zustand"
|
|
state:
|
|
- notifications
|
|
- unreadCount
|
|
- preferences
|
|
- loading
|
|
- error
|
|
actions:
|
|
- fetchNotifications()
|
|
- fetchUnreadCount()
|
|
- markAsRead(id)
|
|
- markAllAsRead()
|
|
- addNotification(notification)
|
|
- initializeWebSocket()
|
|
|
|
service:
|
|
- name: notification.service.ts
|
|
path: services/notification.service.ts
|
|
purpose: "API client para notificaciones"
|
|
methods:
|
|
- getNotifications(params)
|
|
- getUnreadCount()
|
|
- markAsRead(id)
|
|
- markAllAsRead()
|
|
- getPreferences()
|
|
- updatePreferences(data)
|
|
|
|
# --------------------------------------------------------------------------
|
|
# PAYMENTS - Pagos y Stripe
|
|
# --------------------------------------------------------------------------
|
|
- name: payments
|
|
path: modules/payments/
|
|
epic: OQI-005
|
|
status: implemented
|
|
description: "Planes, suscripciones, checkout, wallet"
|
|
created: "2026-01-25"
|
|
|
|
pages:
|
|
- name: Pricing.tsx
|
|
route: /pricing
|
|
description: "Catalogo de planes de suscripcion"
|
|
rf: RF-PAY-001
|
|
|
|
- name: Billing.tsx
|
|
route: /billing, /settings/billing
|
|
description: "Gestion de suscripcion, metodos de pago, facturas y wallet"
|
|
rf: RF-PAY-002
|
|
|
|
- name: CheckoutSuccess.tsx
|
|
route: /payments/success
|
|
description: "Pagina de confirmacion de pago exitoso"
|
|
rf: RF-PAY-003
|
|
|
|
- name: CheckoutCancel.tsx
|
|
route: /payments/cancel
|
|
description: "Pagina de cancelacion de checkout"
|
|
rf: RF-PAY-003
|
|
|
|
components:
|
|
- name: PricingCard.tsx
|
|
path: components/payments/PricingCard.tsx
|
|
purpose: "Tarjeta de plan con features y precio"
|
|
rf: RF-PAY-001
|
|
|
|
- name: SubscriptionCard.tsx
|
|
path: components/payments/SubscriptionCard.tsx
|
|
purpose: "Tarjeta de suscripcion activa"
|
|
rf: RF-PAY-002
|
|
|
|
- name: WalletCard.tsx
|
|
path: components/payments/WalletCard.tsx
|
|
purpose: "Tarjeta de wallet con balance y transacciones"
|
|
rf: RF-PAY-004
|
|
|
|
- name: UsageProgress.tsx
|
|
path: components/payments/UsageProgress.tsx
|
|
purpose: "Barras de progreso de uso de features"
|
|
rf: RF-PAY-002
|
|
|
|
- name: WalletDepositModal.tsx
|
|
path: components/payments/WalletDepositModal.tsx
|
|
purpose: "Modal para depositar fondos al wallet"
|
|
rf: RF-PAY-004
|
|
|
|
- name: WalletWithdrawModal.tsx
|
|
path: components/payments/WalletWithdrawModal.tsx
|
|
purpose: "Modal para retirar fondos del wallet"
|
|
rf: RF-PAY-004
|
|
|
|
- name: index.ts
|
|
path: components/payments/index.ts
|
|
purpose: "Exports de componentes de payments"
|
|
|
|
- name: CouponForm.tsx
|
|
path: components/payments/CouponForm.tsx
|
|
purpose: "Formulario para aplicar codigos de descuento"
|
|
rf: RF-PAY-005
|
|
created: "2026-01-25"
|
|
|
|
- name: PaymentMethodForm.tsx
|
|
path: components/payments/PaymentMethodForm.tsx
|
|
purpose: "Formulario para agregar metodos de pago con validacion de tarjeta"
|
|
rf: RF-PAY-002
|
|
created: "2026-01-25"
|
|
|
|
- name: BillingInfoForm.tsx
|
|
path: components/payments/BillingInfoForm.tsx
|
|
purpose: "Formulario para editar direccion de facturacion e info fiscal"
|
|
rf: RF-PAY-002
|
|
created: "2026-01-25"
|
|
|
|
- name: TransactionHistory.tsx
|
|
path: components/payments/TransactionHistory.tsx
|
|
purpose: "Historial de transacciones de wallet con filtros y paginacion"
|
|
rf: RF-PAY-004
|
|
created: "2026-01-25"
|
|
|
|
store:
|
|
- name: paymentStore.ts
|
|
path: stores/paymentStore.ts
|
|
purpose: "Estado de pagos y suscripciones con Zustand"
|
|
state:
|
|
- currentSubscription
|
|
- paymentMethods
|
|
- invoices
|
|
- usageStats
|
|
- wallet
|
|
- walletTransactions
|
|
- loading states
|
|
actions:
|
|
- fetchCurrentSubscription()
|
|
- fetchPaymentMethods()
|
|
- fetchInvoices()
|
|
- fetchUsageStats()
|
|
- fetchWallet()
|
|
- cancelSubscription()
|
|
- reactivateSubscription()
|
|
- setDefaultPaymentMethod()
|
|
- removePaymentMethod()
|
|
- downloadInvoice()
|
|
- openBillingPortal()
|
|
|
|
service:
|
|
- name: payment.service.ts
|
|
path: services/payment.service.ts
|
|
purpose: "API client para pagos y Stripe"
|
|
methods:
|
|
- getSubscription()
|
|
- getPaymentMethods()
|
|
- getInvoices()
|
|
- createCheckoutSession()
|
|
- cancelSubscription()
|
|
- getWallet()
|
|
- depositToWallet()
|
|
- withdrawFromWallet()
|
|
|
|
# ============================================================================
|
|
# COMPONENTES COMPARTIDOS
|
|
# ============================================================================
|
|
shared_components:
|
|
layout:
|
|
- name: MainLayout.tsx
|
|
path: components/layout/MainLayout.tsx
|
|
purpose: "Layout principal con sidebar"
|
|
|
|
- name: AuthLayout.tsx
|
|
path: components/layout/AuthLayout.tsx
|
|
purpose: "Layout para paginas de auth"
|
|
|
|
planned:
|
|
- name: Navbar.tsx
|
|
purpose: "Barra de navegacion"
|
|
|
|
- name: Sidebar.tsx
|
|
purpose: "Menu lateral"
|
|
|
|
- name: Footer.tsx
|
|
purpose: "Pie de pagina"
|
|
|
|
- name: LoadingSpinner.tsx
|
|
purpose: "Indicador de carga"
|
|
|
|
- name: ErrorBoundary.tsx
|
|
purpose: "Manejo de errores"
|
|
|
|
- name: Modal.tsx
|
|
purpose: "Componente modal base"
|
|
|
|
- name: Toast.tsx
|
|
purpose: "Notificaciones toast"
|
|
|
|
# ============================================================================
|
|
# ROUTING
|
|
# ============================================================================
|
|
routing:
|
|
file: App.tsx
|
|
routes:
|
|
public:
|
|
- path: /login
|
|
component: Login
|
|
- path: /register
|
|
component: Register
|
|
- path: /forgot-password
|
|
component: ForgotPassword
|
|
- path: /reset-password
|
|
component: ResetPassword
|
|
- path: /verify-email
|
|
component: VerifyEmail
|
|
- path: /auth/callback
|
|
component: AuthCallback
|
|
|
|
protected:
|
|
- path: /dashboard
|
|
component: Dashboard
|
|
- path: /courses
|
|
component: Courses
|
|
- path: /courses/:slug
|
|
component: CourseDetail
|
|
- path: /trading
|
|
component: Trading
|
|
- path: /investment
|
|
component: Investment
|
|
- path: /settings
|
|
component: Settings
|
|
- path: /notifications
|
|
component: NotificationsPage
|
|
- path: /settings/notifications
|
|
component: NotificationsPage
|
|
- path: /pricing
|
|
component: Pricing
|
|
- path: /billing
|
|
component: Billing
|
|
- path: /settings/billing
|
|
component: Billing
|
|
- path: /payments/success
|
|
component: CheckoutSuccess
|
|
- path: /payments/cancel
|
|
component: CheckoutCancel
|
|
|
|
# ============================================================================
|
|
# STORES (ZUSTAND)
|
|
# ============================================================================
|
|
stores:
|
|
implemented:
|
|
- name: notificationStore
|
|
path: stores/notificationStore.ts
|
|
purpose: "Estado de notificaciones"
|
|
state:
|
|
- notifications
|
|
- unreadCount
|
|
- preferences
|
|
- loading
|
|
- error
|
|
actions:
|
|
- fetchNotifications()
|
|
- fetchUnreadCount()
|
|
- markAsRead()
|
|
- markAllAsRead()
|
|
- addNotification()
|
|
- initializeWebSocket()
|
|
created: "2026-01-25"
|
|
|
|
- name: chatStore
|
|
path: stores/chatStore.ts
|
|
purpose: "Estado de LLM Copilot chat"
|
|
state:
|
|
- sessions
|
|
- currentSessionId
|
|
- messages
|
|
- loading
|
|
- isOpen
|
|
- error
|
|
actions:
|
|
- createNewSession()
|
|
- loadSessions()
|
|
- loadSession()
|
|
- sendMessage()
|
|
- deleteSession()
|
|
- toggleChat()
|
|
created: "2026-01-25"
|
|
|
|
planned:
|
|
- name: authStore
|
|
purpose: "Estado de autenticacion"
|
|
state:
|
|
- user
|
|
- isAuthenticated
|
|
- accessToken
|
|
actions:
|
|
- login()
|
|
- logout()
|
|
- refreshToken()
|
|
|
|
- name: tradingStore
|
|
purpose: "Estado de trading"
|
|
state:
|
|
- selectedSymbol
|
|
- timeframe
|
|
- watchlists
|
|
- positions
|
|
actions:
|
|
- setSymbol()
|
|
- addToWatchlist()
|
|
- placeOrder()
|
|
|
|
- name: educationStore
|
|
purpose: "Estado de educacion"
|
|
state:
|
|
- enrolledCourses
|
|
- currentLesson
|
|
- progress
|
|
actions:
|
|
- enrollCourse()
|
|
- updateProgress()
|
|
|
|
- name: uiStore
|
|
purpose: "Estado de UI"
|
|
state:
|
|
- theme
|
|
- sidebarOpen
|
|
- notifications
|
|
actions:
|
|
- toggleTheme()
|
|
- toggleSidebar()
|
|
- showNotification()
|
|
|
|
# ============================================================================
|
|
# HOOKS PERSONALIZADOS
|
|
# ============================================================================
|
|
hooks:
|
|
planned:
|
|
- name: useAuth
|
|
purpose: "Hook de autenticacion"
|
|
returns: [user, isLoading, login, logout]
|
|
|
|
- name: useApi
|
|
purpose: "Hook para llamadas API"
|
|
returns: [data, error, isLoading, refetch]
|
|
|
|
- name: useTradingChart
|
|
purpose: "Hook para manejo de charts"
|
|
|
|
- name: useWebSocket
|
|
purpose: "Hook para conexiones WebSocket"
|
|
|
|
- name: useNotification
|
|
purpose: "Hook para notificaciones"
|
|
|
|
# ============================================================================
|
|
# MAPEO A EPICAS
|
|
# ============================================================================
|
|
epic_mapping:
|
|
OQI-001:
|
|
features: [auth, dashboard, settings]
|
|
pages_count: 8
|
|
status: "Parcialmente implementado"
|
|
|
|
OQI-002:
|
|
features: [education]
|
|
pages_count: 6
|
|
components_count: 4
|
|
status: "En Desarrollo (70%)"
|
|
note: "CertificatePreview, CourseReviews, LessonNotes, RecommendedCourses components added"
|
|
|
|
OQI-003:
|
|
features: [trading]
|
|
pages_count: 1
|
|
status: "Estructura creada"
|
|
|
|
OQI-004:
|
|
features: [investment]
|
|
pages_count: 1
|
|
status: "Estructura creada"
|
|
|
|
OQI-005:
|
|
features: [payments]
|
|
pages_count: 4
|
|
components_count: 14
|
|
status: "Implementado (85%)"
|
|
note: "Pricing, Billing, CheckoutSuccess, CheckoutCancel, WalletDepositModal, WalletWithdrawModal, CouponForm, PaymentMethodForm, BillingInfoForm, TransactionHistory, InvoiceList, InvoiceDetail, PaymentMethodsList, SubscriptionUpgradeFlow"
|
|
|
|
OQI-006:
|
|
features: []
|
|
pages_count: 0
|
|
status: "Pendiente"
|
|
note: "Componentes ML en trading"
|
|
|
|
OQI-007:
|
|
features: [assistant]
|
|
pages_count: 1
|
|
components_count: 14
|
|
hooks_count: 2
|
|
utils_count: 1
|
|
status: "En Desarrollo (80%)"
|
|
note: "Complete UI + SignalExecutionPanel, MessageList, ChatHeader, MessageSearch, MarkdownRenderer, useChatAssistant, useStreamingChat, messageFormatters"
|
|
|
|
OQI-008:
|
|
features: []
|
|
pages_count: 0
|
|
status: "Planificado"
|
|
note: "Feature portfolio a crear"
|
|
|
|
OQI-009:
|
|
features: [trading]
|
|
pages_count: 0
|
|
components_count: 9
|
|
hooks_count: 1
|
|
status: "En Desarrollo (75%)"
|
|
note: "MT4ConnectionStatus, LivePositionCard, RiskMonitor, MT4PositionsManager, AdvancedOrderEntry, AccountHealthDashboard, QuickOrderPanel, TradeExecutionHistory, TradingMetricsCard, useMT4WebSocket"
|
|
|
|
# ============================================================================
|
|
# DEPENDENCIAS PRINCIPALES
|
|
# ============================================================================
|
|
dependencies:
|
|
production:
|
|
- react: "^18.x"
|
|
- react-dom: "^18.x"
|
|
- react-router-dom: "^6.x"
|
|
- typescript: "^5.x"
|
|
- zustand: "^4.x"
|
|
- tailwindcss: "^3.x"
|
|
- "@tanstack/react-query": "^5.x"
|
|
- axios: "^1.x"
|
|
- lightweight-charts: "^4.x"
|
|
- lucide-react: "^0.x"
|
|
|
|
development:
|
|
- vite: "^5.x"
|
|
- "@types/react": "^18.x"
|
|
- "@vitejs/plugin-react": "^4.x"
|
|
- autoprefixer: "^10.x"
|
|
- postcss: "^8.x"
|
|
|
|
# ============================================================================
|
|
# ARCHIVOS CLAVE
|
|
# ============================================================================
|
|
key_files:
|
|
- path: apps/frontend/src/main.tsx
|
|
purpose: "Entry point de la aplicacion"
|
|
|
|
- path: apps/frontend/src/App.tsx
|
|
purpose: "Componente raiz con routing"
|
|
|
|
- path: apps/frontend/tailwind.config.js
|
|
purpose: "Configuracion de Tailwind"
|
|
|
|
- path: apps/frontend/vite.config.ts
|
|
purpose: "Configuracion de Vite"
|
|
|
|
- path: apps/frontend/package.json
|
|
purpose: "Dependencias y scripts"
|
|
|
|
# ============================================================================
|
|
# NOTAS Y PENDIENTES
|
|
# ============================================================================
|
|
notes:
|
|
- "Solo auth tiene implementacion real, resto son paginas placeholder"
|
|
- "Falta crear stores Zustand"
|
|
- "Falta crear hooks personalizados"
|
|
- "Falta integracion con API del backend"
|
|
- "Falta componente TradingChart con Lightweight Charts"
|
|
- "Falta feature Copilot (OQI-007)"
|
|
- "Falta feature Portfolio (OQI-008)"
|
|
- "Tests E2E pendientes"
|
|
|
|
# ============================================================================
|
|
# FIN DEL INVENTARIO
|
|
# ============================================================================
|