Files
Generadordeguiones/database/migrations/05_analisis_extendido.sql
Hanzo_dev 2fc4168301 feat: análisis extendido (10 campos nuevos) + generador de guiones con GPT-4o
Análisis extendido:
- Nuevos campos: apertura_exacta, cierre_exacto, tecnica_retencion, momento_pico_seg
- Copywriting: nivel_consciencia (Schwartz), objecion_principal, avatar_descripcion
- Replicabilidad: ingredientes_clave, replicabilidad, ratio_emocion_logica
- analizador.js: prompt extendido con metodología Schwartz + retención
- validador.js: schema Zod actualizado con 6 nuevos enums
- Migración SQL 05: ALTER TABLE + nuevos ENUMs + índices

Generador de guiones:
- generador.js: lib GPT-4o con temperatura 0.7 y contexto de patrones
- server.js: endpoints POST /api/generar, GET /api/generados, GET /api/generados/:id
- backend/api/generar.js + api/generar.js + api/generados.js: Vercel handlers
- Migración SQL 06: tabla guiones_generados con score_estimado, variantes, notas
- GenerateView.vue: formulario completo + preview del guion con copy al portapapeles
- SideNavBar: nueva entrada "Generar" con ícono auto_fix_high
- Router: ruta /generate → GenerateView
- api.js: api.generar() + api.generados.listar/obtener()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:52:25 -05:00

68 lines
3.6 KiB
SQL

-- ============================================================
-- MIGRACIÓN 05 — Análisis Extendido
-- Nuevos campos de retención, copywriting y replicabilidad
-- Ejecutar en Supabase SQL Editor
-- ============================================================
-- ── Nuevos ENUMS ─────────────────────────────────────────────
create type tecnica_retencion_enum as enum (
'open_loop', 'cliffhanger', 'curiosity_gap', 'countdown', 'pregunta_abierta', 'ninguna'
);
create type ratio_emocion_enum as enum ('emocional', 'logico', 'equilibrado');
create type nivel_consciencia_enum as enum (
'inconsciente', 'problema_consciente', 'solucion_consciente',
'producto_consciente', 'mas_consciente'
);
create type replicabilidad_enum as enum ('alta', 'media', 'baja');
-- ── Bloque Storytelling Extendido ────────────────────────────
alter table guiones
add column if not exists apertura_exacta text,
add column if not exists cierre_exacto text,
add column if not exists tecnica_retencion tecnica_retencion_enum,
add column if not exists momento_pico_seg integer check (momento_pico_seg >= 0);
-- ── Bloque Neuropublicidad Extendido ─────────────────────────
alter table guiones
add column if not exists ratio_emocion_logica ratio_emocion_enum;
-- ── Bloque Copywriting / Avatar ──────────────────────────────
alter table guiones
add column if not exists nivel_consciencia nivel_consciencia_enum,
add column if not exists objecion_principal text,
add column if not exists avatar_descripcion text,
add column if not exists ingredientes_clave text[],
add column if not exists replicabilidad replicabilidad_enum;
-- ── Índices útiles para la generación de guiones ─────────────
-- Filtrar rápido por replicabilidad alta (para el generador)
create index if not exists idx_guiones_replicabilidad
on guiones(replicabilidad)
where procesado_ok = true;
-- Filtrar por nivel de consciencia (segmentación de copywriting)
create index if not exists idx_guiones_nivel_consciencia
on guiones(nivel_consciencia)
where procesado_ok = true;
-- ── Comentarios de columna ────────────────────────────────────
comment on column guiones.apertura_exacta is 'Primeras ~15 palabras exactas del video según la transcripción';
comment on column guiones.cierre_exacto is 'Últimas ~10 palabras exactas del video según la transcripción';
comment on column guiones.tecnica_retencion is 'Técnica principal que hace al espectador quedarse hasta el final';
comment on column guiones.momento_pico_seg is 'Segundo estimado del mayor pico emocional o de tensión del video';
comment on column guiones.ratio_emocion_logica is 'Balance entre apelaciones emocionales y argumentos lógicos';
comment on column guiones.nivel_consciencia is 'Nivel de consciencia del avatar según escala Eugene Schwartz';
comment on column guiones.objecion_principal is 'Objeción del espectador que el video anticipa o desmonta';
comment on column guiones.avatar_descripcion is 'Perfil de la persona a quien está dirigido el video';
comment on column guiones.ingredientes_clave is 'Elementos que no pueden faltar al replicar este guion';
comment on column guiones.replicabilidad is 'Qué tan fácil es replicar este patrón en otro contexto';