# Sistema de Transcripciones — Arquitectura > Documentación oficial del pipeline transcripciones en Alpha. > Este patrón se hereda a RUMBO. --- ## Filosofía ``` BD (Dexie/SQLite) = Fuente de verdad Markdown = Output generado (nunca se edita manualmente) ``` El markdown es un **artefacto derivado**. Siempre se regenera desde la BD. Si necesitás modificar algo, se actualiza la BD y se regenera el `.md`. --- ## Estructura de Datos ``` ┌─────────────────────────────────────────────────────────────┐ │ DATABASE (Dexie/IndexedDB) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ sessions │ │ ├── id: number ← PK autoincrement │ │ ├── projectId: number ← FK a proyectos │ │ ├── date: string ← Fecha de la sesión │ │ ├── title: string ← Título (ej: "Kickoff") │ │ ├── fileName: string ← Archivo original subido │ │ ├── fileType: string ← docx|vtt|txt|md │ │ ├── fileSize: number ← bytes │ │ ├── rawText: string ← Texto completo parseado │ │ └── processedAt: string ← ISO timestamp │ │ │ │ session_summaries │ │ ├── sessionId: number ← PK = FK → sessions.id │ │ ├── summary: string ← Resumen ejecutivo │ │ ├── objectives: string ← JSON array │ │ ├── tasks: string ← JSON array │ │ ├── commitments: string ← JSON array │ │ ├── decisions: string ← JSON array │ │ ├── keyPoints: string ← JSON array │ │ └── modelUsed: string ← Modelo IA usado │ │ │ │ project_state │ │ ├── projectId: number ← PK │ │ ├── summary: string ← Resumen consolidado │ │ ├── objectives: string ← JSON array (unificado) │ │ ├── tasks: string ← JSON array (consolidado) │ │ ├── commitments: string ← JSON array (consolidado) │ │ └── updatedAt: string ← ISO timestamp │ │ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ OUTPUT (Markdown) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 📄 master-[proyecto].md │ │ │ │ ├── BLOQUE 1 — Consolidado Global │ │ │ ├── Resumen ejecutivo (desde project_state) │ │ │ ├── Objetivos │ │ │ ├── Tareas pendientes (con checkbox) │ │ │ └── Compromisos (con estados) │ │ │ │ │ └── BLOQUE 2 — Detalle por Sesión │ │ ├── 📍 Sesión YYYY-MM-DD — Título │ │ │ ├── Resumen │ │ │ ├── Objetivos │ │ │ ├── Tareas │ │ │ ├── Compromisos │ │ │ └── Transcripción completa │ │ └── ... │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## Flujo Completo ``` ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ SUBIR │ → │ PARSEAR │ → │ GUARDAR │ → │ EXTRAER │ │ .docx │ │ .vtt │ │ EN BD │ │ CON IA │ │ .vtt │ │ .txt │ │ sessions │ │ │ │ .txt │ │ .md │ │ │ │ │ │ .md │ │ │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ ▼ ┌──────────┐ │ GUARDAR │ │ RESULT │ │ EN BD │ │summaries │ └──────────┘ │ ▼ ┌──────────┐ │ ACTUALIZ │ │ project │ │ _state │ └──────────┘ │ ▼ ┌──────────┐ │ GENERAR │ │ .md │ └──────────┘ ``` ### Paso a paso | Paso | Acción | Tabla afectada | |------|--------|----------------| | 1 | Usuario sube archivo(s) | — | | 2 | Parsear a texto plano (mammoth para .docx, regex para .vtt) | — | | 3 | Guardar transcripción cruda en BD | `sessions` (INSERT) | | 4 | Enviar a IA para extracción estructurada | — | | 5 | Guardar resultado de IA en BD | `session_summaries` (INSERT) | | 6 | Recalcular estado consolidado del proyecto | `project_state` (UPSERT) | | 7 | Regenerar documento markdown | — (derivado de BD) | --- ## Por qué dual storage (BD + Markdown) | Problema | Solución con BD | |----------|----------------| | Buscar dentro de transcripciones viejas | `SELECT * FROM sessions WHERE rawText LIKE '%keyword%'` | | Marcar tarea como completada | `UPDATE project_state SET tasks = ...` sin re-procesar nada | | Regenerar Bloque 1 al agregar sesión nueva | Read de BD, no re-procesar sesiones anteriores | | Versiones históricas | Cada sesión es un registro independiente | | Compartir con alguien que no tiene la app | Exportar `.md` — es legible en cualquier editor | | Backup | La BD se puede respaldar; el `.md` es un snapshot legible | ### Por qué el markdown NO es fuente de verdad - **No se edita manualmente.** Si alguien modifica el `.md`, esos cambios se pierden al regenerar. - **Es un snapshot.** Siempre se puede regenerar desde la BD. - **Es portable.** Se puede compartir, subir a GitHub, etc. --- ## Comparación con la implementación anterior | Aspecto | Antes (v1) | Ahora (v2) | |---------|------------|------------| | Storage | Solo markdown en `project_docs` | BD estructurada + markdown generado | | Transcripciones | Solo en memoria | Persistidas en `sessions` | | Búsqueda | Imposible | Query SQL por texto | | Estado consolidado | Recalculado cada vez desde las sesiones | Cacheado en `project_state` | | Editar tarea | Había que re-procesar la sesión | UPDATE directo a `project_state` | | Sesiones individuales | Incrustadas en markdown | Registros independientes | --- ## Consideraciones para RUMBO En RUMBO (Tauri + Turso/libSQL), el schema es idéntico pero cambia el engine: ``` Alpha (browser): Dexie + IndexedDB → Markdown descargable RUMBO (desktop): Turso + libSQL → Markdown exportable + auto-sync ``` Las tablas, tipos y flujo son los mismos. Solo cambia: - `db.sessions.put()` → `INSERT OR REPLACE INTO sessions` - El markdown se escribe a archivo en `~/RUMBO/projects/[id]/master.md` --- *Documentado: 2026-05-28* *Validado en: Alpha* *Destino: RUMBO*