Commit Graph

110 Commits

Author SHA1 Message Date
ricardo 2073d936e2 Epics table: barra de progreso (% HUs completadas) + removida columna Asignado
- epicProgress computed: agrupa HUs por _epicCode, calcula % completadas
- getEpicProgress(epic): resuelve progreso para cada épica
- Barra visual con colores: verde=100%, azul=>0%, gris=0%
2026-05-29 22:38:52 -05:00
ricardo 3035351e6f Sistema de códigos jerárquicos 2-niveles + asignación determinista post-IA
- hierarchy.ts: Spike (S) agregado, buildHierarchyPath genera [E01-F04] (2 niveles)
  Legacy [E05-F04-U01] preservado (regex opcional 3er segmento)
- hierarchy-generator.ts (nuevo): analyzeExisting() computa contadores por épica+tipo
  assignEpicCodes() asigna E{max+1} secuencial
  assignItemCodes() asigna {epic}-{tipo}{n+1} a cada HU dentro de su épica
- project-analyzer.ts: post-procesa épicas y HUs con generador de códigos
  saveEpicDrafts usa epicCode en metadata y título con [E01]
- prompts-db.ts: prompt FASE 2 instruye a la IA a no generar códigos
- workitems.ts: EnrichedEpic._epicCode, EnrichedUserStory._epicCode/_itemCode
- DashboardView: muestra códigos en drafts y tabla de épicas
2026-05-29 18:13:17 -05:00
ricardo 9cf12b482f Análisis IA en dos fases: épicas primero, luego HUs vinculadas con epic_development
- project-analyzer.ts: dividido en analyzeProjectEpics() y analyzeProjectHUs()
  Fase 1: genera solo épicas con linkedHuTitles
  Fase 2: genera HUs dentro de épicas con epicName
- saveEpicDrafts / saveHUDrafts separados para cada tipo
- DashboardView: dos botones '1. Generar Épicas' y '2. Generar HUs'
- pushDraft épica: al crear en KAPPA, actualiza metadata de HUs vinculadas con epicDevelopment
- pushDraft HU: envía epic_development + payload completo (feature, sprint, asignado_a, etc.)
- project_gap prompt: instrucciones separadas para FASE 1 (épicas) y FASE 2 (HUs)
2026-05-29 17:33:47 -05:00
ricardo a4245017f8 DashboardView: tabla de épicas, columna descripción con modal, auto-delete drafts, notificación inline
- Epics reemplazados de cards a tabla con columnas: código, rol, título, descripción (modal), HUs, estado
- HUs tabla: nueva columna Desc con icono ojo que abre modal con descripción completa
- enrichHU ahora incluye description en el objeto
- pushDraft: al recibir 200 OK elimina el draft de Dexie y refresca
- Notificación inline (esquina inferior derecha) reemplaza toast global que no funcionaba en Tauri
- Eliminado useToast / ToastNotification (no funcional en Tauri)
2026-05-29 15:28:59 -05:00
ricardo 9909f16229 Sistema de prompts dinámicos: prompts editables desde Settings + tabla Dexie + fallback a defaults
- prompts-db.ts: CRUD de prompts con 5 tipos (transcription, project_gap, session, qa, chat)
- db.ts: schema v9 con tabla prompts (&key)
- App.vue: initPrompts() al arrancar la app
- Servicios AI modificados: usan getPrompt(key) con fallback a default hardcodeado
- AiProjectChat.vue: prompt con {{variables}} reemplazadas por datos reales
- SettingsView: editor de prompts con textarea + guardar/restaurar
2026-05-29 14:41:40 -05:00
ricardo b45caee583 ProjectListView + DashboardView: mostrar ID del proyecto (#305) junto al nombre
- pushDraft: épica usa JSON con client_taker + status=false
- ToastNotification: sistema de notificaciones toast global
- useToast: composable singleton para mostrar/descartar toasts
2026-05-29 12:01:11 -05:00
ricardo 19c6fb3153 DashboardView: columna SP + fix priority/story_points perdidos en enrichHU
- enrichHU ahora incluye status, priority y story_points en el return
- Nueva columna SP (story points) entre Título y Estado en tabla HUs
- Filtro prioridad acepta valores numéricos (1/2/3)
2026-05-29 08:41:37 -05:00
ricardo c8228b315d Fix: mapeo employee_id→user_id + status_name de KAPPA + filtro asignado solo desarrolladores asignados
- KappaUserStory: status_name, status/priority aceptan number
- parseAssignedUser: separa employee_id (asignado_a) de user_id (assigned_to)
  employee_id se guarda negativo en Turso para distinguirlo
- enrichHU: usa status_name de KAPPA directo, fallback a resolveStatusName
- DashboardView: resolveEmployeeToUser() busca employee→user via employees store
- assignedName: muestra nombre real desde employee→user, fallback asignado_a_names
- Filtros: placeholder Estado/Prioridad/Asignado en vez de Todos
- assignedUsers: filtro solo muestra desarrolladores asignados a HUs del proyecto
2026-05-29 03:15:33 -05:00
ricardo dc210ebd36 DashboardView: mapeo de prioridad numérica (1/2/3) de KAPPA a etiquetas legibles 2026-05-29 02:54:21 -05:00
ricardo 2f8d79a624 DashboardView: asignación real desde KAPPA + status_name desde lookup + columna asignado como texto
- KappaUserStory ampliado con assigned_to, asignado_a, assigned_name
- EnrichedUserStory ahora tiene _assignedUserId, _assignedName, _statusName
- parseAssignedUser() extrae user ID desde múltiples formatos de KAPPA
- syncHUsToTurso persiste assigned_to en BD local
- DashboardView: columna Asignado muestra nombre real desde KAPPA (texto, no Select)
- statuses-db.ts: lookup de estados con seed en Dexie + resolveStatusName()
  seguro para booleanos/números (String() antes de trim)
- tauri-db.ts: fallback Dexie para get/save user_stories (funciona en bun dev)
- db.ts: nueva tabla user_stories en Dexie (version 8)
- Filtros de tabla alineados a la derecha (justify-end)
2026-05-29 02:52:27 -05:00
ricardo 416784b2fd AiProjectChat: contexto de equipo + SP/sprint para que la IA asigne HUs
- buildContext() ahora incluye team members del proyecto
  (nombres, roles, célula) desde storage per-project
- HUs incluyen story_points (sp) y sprint para que la IA
  pueda balancear cargas de trabajo
- Épicas incluyen assigned_name y story_points
- System prompt instruye a la IA a:
  · Usar el equipo para asignar HUs
  · Detectar sobrecarga por sprint
  · Sugerir recursos transversales cuando aplique
  · Alertar sobre riesgo de cronograma
2026-05-29 02:20:32 -05:00
ricardo a1a0e595a4 Fix: team members no se persistían ni cargaban al inicio
- Bug: App.vue llama fetchProjects() antes de que ProjectListView
  monte, el watch de projects.length nunca se disparaba
- Fix: watch con immediate:true + dependencia dual (projects +
  users), guard teamInitialized para ejecutar una sola vez
- Garantiza que loadAllTeams corra cuando AMBOS datos estén listos
2026-05-29 02:15:05 -05:00
ricardo 42498f98c8 UsersView: jerarquía de roles en células (PM → BA → TL → Dev → QA → Asistente)
- Roles ordenados por jerarquía: PM, BA, TL, Dev, QA, Asistente
- Selector de rol al añadir miembro a una célula
- Badges con color por rol (morado, azul, ámbar, verde, rosa, celeste)
- Miembros ordenados por jerarquía dentro de cada célula
- Botón de eliminar miembro visible solo al hover (interfaz más limpia)
2026-05-29 02:05:59 -05:00
ricardo f4902409c3 ProjectListView: mejorar visibilidad gestor de equipo + buscador en dialog
- Sección "Equipo" con label visible y botón "Gestionar equipo" en la card
- Team dialog ahora incluye buscador (filtro por nombre, email, rol, célula)
- Lista filtrada en vivo + contador de seleccionados
- Avatar show hasta 5 miembros (+N badge)
2026-05-29 02:02:31 -05:00
ricardo 9962aec84b ProjectListView: modal descripción completa + gestor de equipo por proyecto
- Descripción clickeable abre Dialog con texto completo
- Avatares de miembros del equipo en cada card (tooltip + max 4 + +N)
- Gestor de equipo: selección curada de miembros por proyecto
- Persistencia local vía storage (L1/L2/L3)
- i18n es/en con 7 keys nuevas
2026-05-29 02:00:45 -05:00
ricardo 37aedf9e58 fix: restaurar filtros + paginacion en UsersView
- filtros por rol y proyecto restaurados (Select dropdowns)
- paginacion con navegacion numerica (‹ 1 2 ... N ›)
- columna Célula en tabla de usuarios
- contador de asignaciones en header
2026-05-29 01:52:41 -05:00
ricardo 388fa09f3e cells: modulo de celulas + miembros + reemplazo de roles en UsersView
- db.ts v7: tablas cells + cell_members con compound key
- cells-db.ts: CRUD celulas, miembros, getAllCellsWithCounts
- UsersView: rediseñado con cards de celulas en vez de roles
- UsersView: crear/editar/eliminar celulas (normal/transversal)
- UsersView: añadir/remover miembros por celula
- UsersView: tabla de usuarios muestra celulas a las que pertenece
2026-05-29 01:30:50 -05:00
ricardo 63770685da unified storage: safeInvoke fallback a Dexie cuando no hay Tauri
- tauri-db.ts: fallbackInvoke() para hu_drafts y users via Dexie
- storage-router.ts: deteccion de entorno Tauri vs browser
- storage-adapter.ts: capa unificada (preparada para futuros dominios)
- build: en bun dev todo funciona sin Tauri
2026-05-29 00:37:28 -05:00
ricardo fff84c552c users: tabla + sync detalle + lookups para roles/companies
- db.ts v6: tablas users + lookups con schema
- users-db.ts: CRUD users + lookups
- user-sync.ts: fetch /api/users/{id}/ con concurrencia 5
- kappa-api.ts: +getUserDetail(id)
- users store: +syncDetails() con progreso + mapeo roleId→name
- UsersView: boton 'Sincronizar roles' con progreso
- UserRecord: username, isStaff, phone, position, lastActive, createdAt
2026-05-29 00:14:30 -05:00
ricardo 4e90f6f7b2 users: AG Grid reemplazado por tabla nativa paginada + QA indicators
- UsersView: tabla nativa con busqueda, paginacion (15/page), iniciales
- UsersView: eliminada dependencia ag-grid (mantenida en bundle por otros modulos)
- DashboardView: QA metrics con desglose auto/parcial/manual
- DashboardView: seccion expandible con planes QA detallados
- qa-analyzer: fix field name automatizable
- ToDo: K-09 eliminada
2026-05-28 23:49:41 -05:00
ricardo 8667cddc46 QA plans al sugerir HU + cancel analisis + datepicker shadcn
- project-analyzer: saveAsDrafts genera QA plan por cada HU sugerida
- DashboardView: cancelAnalysis con AbortController + mensaje limpio
- HuDrafts: DatePicker con Calendar + Popover (shadcn-vue)
- HuDrafts: formulario dinámico segun tipo (Epic vs HU/Feature/etc)
- components/ui: Popover + Calendar creados
- qa_plans: tabla separada (cubre drafts + user_stories existentes)
2026-05-28 23:25:00 -05:00
ricardo dd9f76be6f fix: orden dashboard + i18n HuDrafts + tipo Epic
- DashboardView: borradores antes de épicas, HuDrafts antes de tabla HUs
- DashboardView: skeletons eliminados
- DashboardView: fix duplicate const project (causaba ReferenceError)
- HuDrafts: i18n para tipos (Epic, Feature, Task, HU, Bug)
- HuDrafts: tipo Epic (E) agregado al selector
- i18n: +hierarchy section con labels en es/en
2026-05-28 15:30:38 -05:00
ricardo 292b9844c6 qa-analyzer: plan QA por HU generado por IA + indicadores
- services/qa-analyzer.ts: genera plan QA (tests, automatizable/manual, pasos)
- db.ts v5: tabla qa_plans
- DashboardView: push HU/épica auto-genera QA plan
- DashboardView: stats card QA con conteo de planes
- DashboardView: boton QA por draft + visualización de planes
- project-analyzer: saveAsDrafts actualizado con metadata para épicas
2026-05-28 14:53:11 -05:00
ricardo 13683ec2c4 project-analyzer: propone épicas + vincula HUs
- AnalysisEpic: name, description, linkedHuTitles, estimated dates
- saveAsDrafts: guarda épicas como drafts tipo 'E' con metadata JSON
- HuDraftRecord: +metadata field (JSON string)
- DashboardView: push épica busca HUs vinculadas con kappaId
- DashboardView: push HU guarda kappaId del response, no elimina draft
- UI: badge tipo (Epica/HU), HUs vinculadas visibles, estado Enviada con ID
2026-05-28 14:38:39 -05:00
ricardo 63804a2cb6 hu_drafts en Dexie + push individual a KAPPA + project-analyzer
- db.ts v4: tabla hu_drafts (id, projectId, title, description, syncStatus)
- hu-drafts-db.ts: CRUD Dexie para drafts
- project-analyzer.ts: saveAsDrafts() guarda en BD local, no crea en KAPPA
- DashboardView: borradores desde Dexie con boton Enviar individual
- pushDraft: endpoint /api/userstorys/create/ con payload exacto
- pushDraft: elimina draft solo si KAPPA responde ok
2026-05-28 14:35:02 -05:00
ricardo eb4fae78b3 project-analyzer: analisis completo con contexto global + dedup
- services/project-analyzer.ts: analiza sesiones + resumenes + HUs existentes
- generateMissingHUs: proposicion inteligente sin duplicados
- createMissingHUs: crea en KAPPA solo las que no existen (comparacion por titulo)
- AiProjectChat: sin limite de HUs en contexto JSON compacto
- DashboardView: card 'Generar HUs faltantes' con resultado
- ai.ts: stripThinkTags() para eliminar bloques de razonamiento
2026-05-28 14:19:13 -05:00
ricardo e950eb1285 strip tags de respuestas IA (DeepSeek reasoning) 2026-05-28 14:08:07 -05:00
ricardo 8cec93b90a dedup sesiones + calendario desde BD + scroll por fecha
- analyzeAsSession: detecta duplicados por UTC timestamp antes de guardar
- TranscriptionsView: sessionDatesList reemplaza sessionOffsets
- session dates se leen directo de tabla sessions (no desde markdown)
- scrollToSession busca por fecha en markdown con regex escapada
- calendario usa BD como fuente de verdad
2026-05-28 14:02:35 -05:00
ricardo 837a264e81 timezone: parseo UTC Teams + conversion Colombia + doc RUMBO
- services/timezone.ts: parseTeamsUTC(), toColombiaTime(), isTeamsFile()
- TranscriptionsView: fecha prioriza UTC del filename sobre AI/hoy
- TranscriptionsView: muestra conversion UTC → Colombia en resultados
- rumbo/timezone.md: documentacion arquitectura horaria para RUMBO
2026-05-28 13:51:16 -05:00
ricardo 066047f3d1 dual storage: sesiones en BD + markdown como output
- db.ts: v3 con tablas sessions, session_summaries, project_state
- transcriptions-db.ts: CRUD para sesiones, summaries, project state
- project-doc.ts: generateMasterDoc() desde BD (no desde datos en memoria)
- session-analyzer.ts: +sessionDate en prompt y extraction
- TranscriptionsView: flujo parse -> guardar BD -> IA -> project_state -> MD
- docs/arquitectura_transcripciones.md: documentacion oficial del patron
2026-05-28 13:38:19 -05:00
ricardo b974788a16 fix: parseo JSON robusto, UI upload full-width, selector en header, multiple files
- session-analyzer.ts: extractJSON() con 4 estrategias de parseo + log raw
- TranscriptionsView: selector proyecto movido al header, upload card full-width
- TranscriptionsView: soporte multi-file con cola, banner de progreso
- TranscriptionsView: download .md con revokeObjectURL diferido
- TranscriptionsView: upload deshabilitado sin proyecto seleccionado
- session-analyzer + project-doc exportados como servicios independientes
- i18n: keys titleView, statusParsing/Analyzing/Generating, filesLoaded
- i18n: fix key title duplicado (title -> titleLabel)
2026-05-28 13:20:23 -05:00
ricardo 7d299554bf K-10 pipeline transcripciones + settings IA + cache-aside + session doc
Nuevos modulos:
- services/ai.ts: cliente IA provider-agnostico (OpenRouter, MiniMax)
- services/db.ts: Dexie core con tabla settings + project_docs
- services/storage.ts: Cache-Aside + Write-Through (L1 Map → L2 Dexie → L3 localStorage)
- services/parse-transcription.ts: parser .docx/.vtt/.txt/.md
- services/session-analyzer.ts: extraccion IA de sesiones (resumen, tareas, decisiones)
- services/project-doc.ts: documento maestro MD (Bloque 1 resumen + Bloque 2 sesiones)
- stores/settings.ts: proveedores IA, modelos, API keys separadas por provider
- stores/transcriptions.ts: pipeline upload → analyze → create HU en KAPPA
- views/SettingsView.vue: configuracion IA (OpenRouter, MiniMax, OpenCode bridge)
- views/TranscriptionsView.vue: subida multiple + analisis sesion + visor MD + calendario
- components/AiProjectChat.vue: chat contextual por proyecto con selector de modelo

Cambios en existentes:
- stores/auth.ts, kappa-api.ts, upload-hu.ts: migrados a storage service (Dexie + localStorage)
- stores/projects.ts, workitems.ts: kappa_last_project via storage
- DashboardView.vue: descripcion reemplazada por AiProjectChat
- NewDashboardView.vue: tabs transcriptions + settings + navigate-settings events
- NavMain.vue: items Transcripciones + Configuracion
- SiteHeader.vue: labels tabs + language via storage
- LoginView.vue: remember_email via storage
- i18n: +80 keys español/ingles
- vite.config.ts: proxy CORS para MiniMax
- package.json: +mammoth.js
2026-05-28 12:42:30 -05:00
ricardo 96ed01d922 cambiar push individual por bulk upload via Excel a KAPPA + xlsx package + servicio upload-hu.ts 2026-05-27 23:29:38 -05:00
ricardo fd7a171a72 agregar componente HuDrafts: borradores UUID + tabla + push a KAPPA + integracion en dashboard 2026-05-27 23:21:03 -05:00
ricardo 53c6d4325c agregar tabla hu_drafts con UUID como PK + CRUD Rust + puente frontend 2026-05-27 23:19:12 -05:00
ricardo 278d2bf075 agregar sprint, has_impairment, tabla impairments + sync pendings KAPPA 2026-05-27 23:03:14 -05:00
ricardo 5cc7cf309e docs: prompt para generacion de criterios de aceptacion con IA 2026-05-27 22:51:58 -05:00
ricardo 0339aa23f6 criterios aceptacion: parsear Quill HTML a lista JSON + tooltip en dashboard 2026-05-27 22:51:30 -05:00
ricardo 0a240ea146 projects: await syncToTurso + toStr() + log errores, quitar catch silencioso 2026-05-27 22:14:02 -05:00
ricardo aff4468d5c agregar ALTER TABLE migration en Rust para columnas nuevas en BD existentes 2026-05-27 22:10:17 -05:00
ricardo 3f875016d1 agregar padding lateral a dashboard (px-4 lg:px-6) 2026-05-27 22:07:05 -05:00
ricardo efae6f2a07 eliminar badge de status que mostraba 'True' 2026-05-27 22:04:46 -05:00
ricardo 345db033d3 completar campos hierarchy en Rust: structs + queries + inserts 2026-05-27 22:02:49 -05:00
ricardo cf770a6a44 hierarchy: parsear nomenclatura [E05-F04-U02], badges de tipo en dashboard, clean title 2026-05-27 21:59:37 -05:00
ricardo 9ae2af3ea2 proyectos: status true/false ahora muestra Activo/Inactivo via i18n 2026-05-27 21:44:41 -05:00
ricardo 66b3e24fec agregar IDs jerarquicos a componentes + regla #6 en AGENTS.md 2026-05-27 20:51:24 -05:00
ricardo 1e3ed6ac02 agregar regla de observabilidad: loguear [Alpha] + accion + datos + errores en toda funcion 2026-05-27 20:42:55 -05:00
ricardo 98d6d608a6 crear README.md con estructura, stack, tablas y reglas del proyecto 2026-05-27 20:41:54 -05:00
ricardo 1d057cdcae actualizar AGENTS.md con reglas i18n, tipos KAPPA mixtos y stack actualizado 2026-05-27 20:40:45 -05:00
ricardo f39faf61a2 forzar conversion de tipos KAPPA a string antes de guardar en Turso 2026-05-27 20:34:57 -05:00