feat(analysis): agregar campo conclusion_estrategica al análisis

Nuevo campo de síntesis de ~15 líneas que integra todos los datos del
análisis (narrativa, Cialdini, neuromarketing, copywriting, métricas) en
un veredicto estratégico accionable. Incluye migración 08 para Supabase
y visualización en AnalysisDetailView antes del patrón ganador.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 19:14:07 -05:00
parent 5eaa95abf7
commit 48978d1752
4 changed files with 21 additions and 1 deletions

View File

@ -99,7 +99,8 @@ Devuelve EXACTAMENTE este JSON con los valores que correspondan:
"hashtags_sugeridos": ["<hashtag1>", "<hashtag2>", "<hashtag3>", "<hashtag4>", "<hashtag5>", "<hashtag6>", "<hashtag7>"], "hashtags_sugeridos": ["<hashtag1>", "<hashtag2>", "<hashtag3>", "<hashtag4>", "<hashtag5>", "<hashtag6>", "<hashtag7>"],
"score_virabilidad": <número entero del 1 al 100>, "score_virabilidad": <número entero del 1 al 100>,
"resumen_patron": "<párrafo de 3-4 oraciones describiendo el patrón ganador de este video: qué hace, por qué funciona psicológicamente y cómo se puede replicar>" "resumen_patron": "<párrafo de 3-4 oraciones describiendo el patrón ganador de este video: qué hace, por qué funciona psicológicamente y cómo se puede replicar>",
"conclusion_estrategica": "<síntesis estratégica extensa de aproximadamente 15 líneas que integra TODOS los datos del análisis. Estructura la respuesta así: (1) Veredicto general sobre la efectividad del video y su score de viralidad. (2) Análisis de la estructura narrativa elegida y por qué encaja con el nicho y el avatar objetivo. (3) Qué principios de Cialdini se activaron y cómo interactúan entre sí para generar persuasión. (4) Cómo los elementos de neuromarketing (atención visual, pacing, carga cognitiva, lenguaje sensorial) amplifican el mensaje. (5) Análisis del trigger emocional dominante y el arco emocional: cómo conducen al espectador hacia el CTA. (6) Evaluación del nivel de consciencia del avatar y si la promesa explícita está bien calibrada para ese nivel. (7) Insight estratégico principal: qué hace este video mejor que el promedio de su nicho y por qué es difícil de replicar sin entender su mecánica interna. (8) Veredicto final de replicabilidad y qué elementos son absolutamente críticos conservar en una versión derivada.>"
}` }`
const completion = await openai.chat.completions.create({ const completion = await openai.chat.completions.create({

View File

@ -166,6 +166,7 @@ export const AnalisisSchema = z.object({
// Métricas // Métricas
score_virabilidad: flexInt(1, 100), score_virabilidad: flexInt(1, 100),
resumen_patron: z.string().min(10).max(1500), resumen_patron: z.string().min(10).max(1500),
conclusion_estrategica: z.string().min(10).max(4000),
}) })
/** /**

View File

@ -0,0 +1,9 @@
-- ============================================================
-- MIGRACIÓN 08 — Conclusión Estratégica
-- Ejecutar en Supabase SQL Editor después de la migración 07
-- ============================================================
alter table guiones
add column if not exists conclusion_estrategica text;
comment on column guiones.conclusion_estrategica is 'Síntesis estratégica generada por GPT-4o que integra todos los datos del análisis (narrativa, Cialdini, neuromarketing, copywriting, métricas) en un veredicto accionable sobre por qué funciona el video y cómo replicarlo';

View File

@ -195,6 +195,15 @@
<!-- Columna derecha (contenido) --> <!-- Columna derecha (contenido) -->
<div class="xl:col-span-8 flex flex-col gap-5"> <div class="xl:col-span-8 flex flex-col gap-5">
<!-- Conclusión Estratégica -->
<div v-if="guion.conclusion_estrategica" class="bg-surface rounded-xl border border-border shadow-sm p-6">
<p class="text-[10px] font-semibold text-ink-2 uppercase tracking-wider mb-3 flex items-center gap-1.5">
<span class="material-symbols-outlined text-[16px] text-ink-3">summarize</span>
Conclusión Estratégica
</p>
<p class="text-sm text-ink leading-relaxed">{{ guion.conclusion_estrategica }}</p>
</div>
<!-- Patrón Ganador --> <!-- Patrón Ganador -->
<div class="bg-surface rounded-xl border border-accent-border shadow-sm p-6 bg-accent-subtle/30"> <div class="bg-surface rounded-xl border border-accent-border shadow-sm p-6 bg-accent-subtle/30">
<p class="text-[10px] font-semibold text-accent uppercase tracking-wider mb-3">Síntesis del Patrón Ganador</p> <p class="text-[10px] font-semibold text-accent uppercase tracking-wider mb-3">Síntesis del Patrón Ganador</p>