# Tasks: Asistente de Chat Integrado (n8n)

**Feature**: `011-asistente-chat-n8n`
**Plan**: `plan.md`
**Spec**: `spec.md`
**Total de tareas**: 42 (+ 10 verificación)
**Estado implementación**: ✅ Completado (2026-07-06)

> Formato: `- [x] TXXX [P?] [USX] Descripción — archivo exacto`

---

## FASE 0 — Infraestructura backend (proxy n8n)

- [x] T001 [P] [US2] Añadir sección `n8n` con `chat_webhook_url` y `chat_timeout` — `config/services.php`
- [x] T002 [P] [US2] Documentar variables `ENEON_N8N_CHAT_WEBHOOK_URL` y `ENEON_N8N_CHAT_TIMEOUT` — `.env`
- [x] T003 [P] [US2] Crear DTO readonly `SendChatMessageDto` — `app/DTOs/N8n/SendChatMessageDto.php`
- [x] T004 [P] [US2] Crear FormRequest con validación estricta — `app/Http/Requests/SendChatMessageRequest.php`
- [x] T005 [US2] Implementar `N8nChatService::sendMessage()` — `app/Services/N8n/N8nChatService.php`
- [x] T006 [US2] Crear controlador delgado — `app/Http/Controllers/ChatAssistantController.php`
- [x] T007 [US2] Registrar ruta `POST /api/v1/chat/messages` — `routes/web.php`
- [x] T008 [P] [US2] Tests unitarios — `tests/Unit/Services/N8nChatServiceTest.php`
- [x] T009 [P] [US2] Tests feature — `tests/Feature/ChatAssistantProxyTest.php`

---

## FASE 1 — Contratos TypeScript y estado global (US2, US5)

- [x] T010 [P] [US5] Interfaces TypeScript — `resources/js/types/chatAssistant.ts`
- [x] T011 [US5] `sessionId` con `crypto.randomUUID()` — `resources/js/Hooks/useChatAssistant.ts`
- [x] T012 [US5] `startNewConversation()` — `resources/js/Hooks/useChatAssistant.ts`
- [x] T013 [P] [US2] `sendMessage()` vía proxy — `resources/js/Hooks/useChatAssistant.ts`
- [x] T014 [US2] Parseo de respuesta success/error — `resources/js/Hooks/useChatAssistant.ts`
- [x] T015 [US2] `isSending`, `retryLastMessage()` — `resources/js/Hooks/useChatAssistant.ts`
- [x] T016 [US2] `ChatAssistantProvider` — `resources/js/Contexts/ChatAssistantContext.tsx`

---

## FASE 2 — Componentes de mensajería (US2)

- [x] T017 [P] [US2] `ChatInput` — `resources/js/Components/ChatAssistant/ChatInput.tsx`
- [x] T018 [P] [US2] `ChatMessageBubble` — `resources/js/Components/ChatAssistant/ChatMessageBubble.tsx`
- [x] T019 [US2] `ChatMessageList` — `resources/js/Components/ChatAssistant/ChatMessageList.tsx`
- [x] T020 [P] [US2] `ChatMessageTable` — `resources/js/Components/ChatAssistant/ChatMessageTable.tsx`
- [x] T021 [P] [US2] `ChatMessageCard` — `resources/js/Components/ChatAssistant/ChatMessageCard.tsx`
- [x] T022 [US2] Render condicional text/table/card — `resources/js/Components/ChatAssistant/ChatMessageBubble.tsx`

---

## FASE 3 — Acceso global al asistente (US1)

- [x] T023 [P] [US1] `useIsDesktopViewport` — `resources/js/Hooks/useIsDesktopViewport.ts`
- [x] T024 [US1] `ChatAssistantToggle` — `resources/js/Components/ChatAssistant/ChatAssistantToggle.tsx`
- [x] T025 [US1] `ChatAssistantShell` — `resources/js/Components/ChatAssistant/ChatAssistantShell.tsx`
- [x] T026 [US1] Integración en `app.tsx` — `resources/js/app.tsx`
- [x] T027 [US1] `toggleOpen()` / `close()` — `resources/js/Hooks/useChatAssistant.ts`

---

## FASE 4 — Panel lateral incrustado (US3)

- [x] T028 [P] [US3] Estilos CSS — `resources/js/Components/ChatAssistant/ChatAssistant.module.css`
- [x] T029 [US3] `ChatAssistantPanel` — `resources/js/Components/ChatAssistant/ChatAssistantPanel.tsx`
- [x] T030 [US3] `ChatAssistantHeader` — `resources/js/Components/ChatAssistant/ChatAssistantHeader.tsx`
- [x] T031 [US3] Clase `layoutWithChat` — `resources/js/Layouts/index.tsx`
- [x] T032 [US3] `margin-right: 25vw` — `resources/js/Layouts/Layout.module.css`

---

## FASE 5 — Modo flotante y fallback (US4)

- [x] T033 [P] [US4] `ChatAssistantFloatingPanel` — `resources/js/Components/ChatAssistant/ChatAssistantFloatingPanel.tsx`
- [x] T034 [US4] Selector incrustado/flotante — `resources/js/Components/ChatAssistant/ChatAssistantHeader.tsx`
- [x] T035 [US4] Fallback automático 992–1279px — `resources/js/Hooks/useChatAssistant.ts`
- [x] T036 [US4] Shell con modo efectivo — `resources/js/Components/ChatAssistant/ChatAssistantShell.tsx`

---

## FASE 6 — Accesibilidad, responsive y pulido (US1, US3)

- [x] T037 [P] [US1] Ocultar en `<992px` — `resources/js/Components/ChatAssistant/ChatAssistantShell.tsx`
- [x] T038 [US1] Gestión de foco — `resources/js/Components/ChatAssistant/ChatAssistantShell.tsx`
- [x] T039 [US3] ARIA dialog en paneles — `ChatAssistantPanel.tsx` / `ChatAssistantFloatingPanel.tsx`
- [x] T040 [US1] Contraste y foco visible — `ChatAssistant.module.css`

---

## FASE 7 — Verificación

- [x] T041 [US2] Tests automatizados — 9 tests passing
- [ ] V01–V10 Checklist manual en navegador (pendiente QA manual)
