// diag-data.jsx — The Next Level 360 · Diagnóstico de los 8 Ejes
// Source of truth: 8 ejes, 5 afirmaciones c/u, escala Likert, programas y motor de recomendación.
/* ---------------------------------------------------------------------------
ESCALA LIKERT (acuerdo / desacuerdo · 5 niveles)
El valor numérico (1–5) representa "qué tan presente está hoy ese eje".
Totalmente de acuerdo = el eje está sano / desarrollado.
--------------------------------------------------------------------------- */
const SCALE = [
{ v: 1, short: 'Nada', label: 'Totalmente en desacuerdo' },
{ v: 2, short: 'Poco', label: 'En desacuerdo' },
{ v: 3, short: 'A veces', label: 'Neutral' },
{ v: 4, short: 'Bastante',label: 'De acuerdo' },
{ v: 5, short: 'Total', label: 'Totalmente de acuerdo' },
];
/* ---------------------------------------------------------------------------
LOS 8 EJES + 5 afirmaciones cada uno (40 en total)
Cada afirmación se responde en primera persona; mayor acuerdo = mejor.
--------------------------------------------------------------------------- */
const EJES = [
{
key: 'enfoque', n: '01', name: 'Enfoque', accent: '#E4042C',
tagline: 'De creencias limitantes a afirmaciones que mueven la aguja.',
desc: 'Hacia dónde diriges tu atención y qué historias te cuentas.',
bg: 'enfoque',
q: [
'Tengo claras mis 3 prioridades más importantes en este momento de mi vida.',
'Mis pensamientos diarios trabajan a mi favor, no en mi contra.',
'Reconozco mis creencias limitantes y trabajo activamente para cambiarlas.',
'Dirijo mi atención a lo que mueve la aguja, no a lo urgente trivial.',
'Empiezo el día con una intención clara de lo que quiero lograr.',
],
},
{
key: 'integracion', n: '02', name: 'Integración', accent: '#FF4C2E',
tagline: 'Cuerpo, mente, vínculos y propósito alineados en una sola estrategia.',
desc: 'Qué tan congruentes están las áreas de tu vida entre sí.',
bg: 'integracion',
q: [
'Las áreas de mi vida (salud, relaciones, trabajo, propósito) están alineadas entre sí.',
'Mis acciones cotidianas reflejan a la persona que quiero llegar a ser.',
'No siento que deba sacrificar un área de mi vida para avanzar en otra.',
'Tengo claridad sobre mi propósito y cómo se conecta con mi día a día.',
'Vivo con congruencia: lo que pienso, digo y hago apunta en la misma dirección.',
],
},
{
key: 'energia', n: '03', name: 'Energía', accent: '#E4042C',
tagline: 'Tu rendimiento es lo que tu energía permite.',
desc: 'Sueño, alimentación, movimiento y estado de ánimo.',
q: [
'Duermo lo suficiente y despierto con energía la mayoría de los días.',
'Mi alimentación sostiene mi rendimiento, no lo frena.',
'Hago ejercicio de forma constante.',
'Gestiono bien mi estado de ánimo, incluso en los días difíciles.',
'Me queda energía para lo que de verdad importa al final del día.',
],
},
{
key: 'entorno', n: '04', name: 'Entorno', accent: '#FF4C2E',
tagline: 'Un entorno que te empuje hacia arriba, no que te ancle.',
desc: 'Las personas, el espacio y las ideas que te rodean.',
q: [
'Las personas más cercanas a mí me impulsan hacia arriba.',
'Mi espacio físico de trabajo y descanso juega a favor de mis metas.',
'Consumo contenido (libros, podcasts, gente) que me hace crecer.',
'Sé poner límites con personas o ambientes que me restan.',
'Mi entorno refleja el nivel al que quiero llegar, no el que dejé atrás.',
],
},
{
key: 'prosperidad', n: '05', name: 'Prosperidad', accent: '#E4042C',
tagline: 'Del cortoplacismo a la abundancia.',
desc: 'Tu mentalidad y tu control sobre el dinero.',
q: [
'Tengo claridad sobre mis números: ingresos, gastos y ahorro.',
'Opero desde una mentalidad de abundancia, no de escasez.',
'Tomo decisiones financieras pensando en el largo plazo, no solo en el hoy.',
'Siento que tengo control sobre mi vida financiera.',
'Mi relación con el dinero es sana y libre de ansiedad.',
],
},
{
key: 'productividad', n: '06', name: 'Productividad', accent: '#FF4C2E',
tagline: 'El ejecutivo de alto rendimiento: prioridades y zona de genio.',
desc: 'Cómo conviertes tu tiempo y energía en resultados.',
q: [
'Cada día trabajo en mis tareas más importantes antes que en las urgentes.',
'Sé delegar y no cargo con todo yo solo.',
'Conozco mi "zona de genio" y paso tiempo trabajando en ella.',
'Gestiono mi tiempo por bloques de energía, no por reacción.',
'Termino mis días sintiendo que avancé en lo que importa.',
],
},
{
key: 'perfeccionamiento', n: '07', name: 'Perfeccionamiento', accent: '#E4042C',
tagline: 'Aprendizaje continuo: mentores, hábitos y autosabotaje superado.',
desc: 'Cómo creces de forma deliberada con el tiempo.',
q: [
'Tengo un mentor o referente que me reta a mejorar.',
'Dedico tiempo cada semana a aprender algo nuevo de forma intencional.',
'He superado patrones de autosabotaje que antes me frenaban.',
'Mis hábitos están diseñados a propósito, no heredados por inercia.',
'Mido mi progreso con regularidad y ajusto el rumbo.',
],
},
{
key: 'plenitud', n: '08', name: 'Plenitud', accent: '#FF4C2E',
tagline: 'El balance que multiplica todo lo demás.',
desc: 'Mindfulness, desconexión, juego y tu propia medida de éxito.',
q: [
'Tengo momentos de desconexión digital real en mi semana.',
'Practico alguna forma de mindfulness, meditación o pausa consciente.',
'Hago espacio para hobbies y juego, no solo para producir.',
'Defino el éxito con mi propia medida, no con la de los demás.',
'Me siento en paz y pleno con la vida que estoy construyendo.',
],
},
];
/* ---------------------------------------------------------------------------
ICONOS por eje (line icons 24x24, stroke currentColor) — para floaters
--------------------------------------------------------------------------- */
const EJE_ICONS = {
enfoque: '',
integracion: '',
energia: '',
entorno: '',
prosperidad: '',
productividad: '',
perfeccionamiento: '',
plenitud: '',
};
const PROGRAMS = {
programa360: {
id: 'programa360', weeks: 12, milestoneLabel: 'Mes 1 · primeras métricas',
tag: 'Programa insignia',
title: 'Programa Alto Desempeño 360',
desc: 'El recorrido completo por los 8 ejes. 12 semanas de inmersión guiada por Arturo Ceballos.',
bullets: ['12 sesiones en vivo · 2h c/u', 'Mentoría 1:1 cada 30 días', 'Manual + plantillas + comunidad'],
meta: { next: 'Próxima cohorte', value: '7 jun', price: 'USD 2,400' },
},
tallerProd: {
id: 'tallerProd', weeks: 6, milestoneLabel: 'Semana 2 · nuevos hábitos',
tag: 'Taller intensivo',
title: 'Productividad y Zona de Genio',
desc: '2 días para reordenar prioridades, gestionar tu energía y descubrir tu zona de genio.',
bullets: ['Presencial · CDMX', 'Cupos limitados a 40 personas', 'Materiales + grabación incluida'],
meta: { next: 'Próximo', value: '22 may', price: 'USD 480' },
},
mentoria: {
id: 'mentoria', weeks: 8, milestoneLabel: 'Sesión 4 · punto medio',
tag: 'Mentoría 1:1',
title: '1:1 con Arturo Ceballos',
desc: 'Acompañamiento ejecutivo enfocado en tu eje prioritario. Cupos por aplicación.',
bullets: ['8 sesiones · 90 min c/u', 'Diagnóstico inicial incluido', 'Acceso prioritario a eventos'],
meta: { next: 'Cupos', value: '6 / mes', price: 'USD 1,800' },
},
};
/* ---------------------------------------------------------------------------
MOTOR DE RECOMENDACIÓN
- current[eje] = promedio (1–5) de las 5 afirmaciones
- target[eje] = meta elegida por la persona (1–5)
- prioridad = combina nivel bajo + brecha grande
--------------------------------------------------------------------------- */
function ejeCurrent(answers, key) {
const arr = answers[key] || [];
const vals = arr.filter(v => typeof v === 'number');
if (!vals.length) return 0;
return vals.reduce((a, b) => a + b, 0) / vals.length;
}
function buildScores(answers, targets) {
return EJES.map(e => {
const cur = ejeCurrent(answers, e.key);
const tgt = targets[e.key] ?? Math.min(5, Math.max(cur + 1, 4));
const gap = Math.max(0, tgt - cur);
// prioridad: pondera estar bajo (5-cur) y la brecha hacia la meta
const priority = (5 - cur) * 0.6 + gap * 0.9;
return { ...e, current: cur, target: tgt, gap, priority };
});
}
function recommend(scores) {
const avg = scores.reduce((a, s) => a + s.current, 0) / scores.length;
const weak = scores.filter(s => s.current < 3).length;
const sorted = [...scores].sort((a, b) => b.priority - a.priority);
const top = sorted[0];
const focus = sorted.slice(0, 3);
let program;
let reason;
if (weak >= 3 || avg < 3) {
program = PROGRAMS.programa360;
reason = 'Tu diagnóstico muestra varios ejes por desarrollar. El recorrido completo te da la estructura para subir de nivel de forma integral.';
} else if (top && top.key === 'productividad') {
program = PROGRAMS.tallerProd;
reason = 'Tu mayor oportunidad está en cómo conviertes tiempo y energía en resultados. Este taller ataca justo ese eje.';
} else {
program = PROGRAMS.mentoria;
reason = `Tienes una base sólida. Un acompañamiento 1:1 enfocado en ${top ? top.name : 'tu eje prioritario'} acelera tu siguiente salto.`;
}
return { program, reason, top, focus, avg, weak, estWeeks: estWeeksFromGap(scores) };
}
/* ---------------------------------------------------------------------------
NIVELES CREATIVOS — el rango 1–5 mapea a un nombre de nivel con identidad.
Se usa tanto para "dónde estás hoy" como para "tu siguiente nivel".
--------------------------------------------------------------------------- */
const LEVEL_TIERS = [
{ min: 0, name: 'Punto de Partida', tag: 'Nivel 1', blurb: 'El terreno está listo. Aquí empieza todo.' },
{ min: 1.5, name: 'Explorador', tag: 'Nivel 2', blurb: 'Estás probando, ajustando, descubriendo tu ritmo.' },
{ min: 2.5, name: 'Constructor', tag: 'Nivel 3', blurb: 'Ya tienes cimientos. Toca construir con consistencia.' },
{ min: 3.5, name: 'Estratega', tag: 'Nivel 4', blurb: 'Operas con intención y los resultados se notan.' },
{ min: 4.3, name: 'Imparable', tag: 'Nivel 5', blurb: 'Vives en tu máximo nivel. Ahora se trata de sostenerlo.' },
];
function levelTier(v) {
let t = LEVEL_TIERS[0];
for (const tier of LEVEL_TIERS) if (v >= tier.min) t = tier;
return t;
}
function levelLabel(v) { return levelTier(v).name; }
function levelTag(v) { return levelTier(v).tag; }
/* ---------------------------------------------------------------------------
DURACIÓN DEL PROGRAMA SEGÚN LA BRECHA
A mayor brecha promedio entre "hoy" y "tu siguiente nivel", más semanas.
--------------------------------------------------------------------------- */
function estWeeksFromGap(scores) {
const avgGap = scores.reduce((a, s) => a + s.gap, 0) / scores.length;
// ~6.5 semanas por cada nivel de brecha promedio, acotado 4–16
return Math.max(4, Math.min(16, Math.round(avgGap * 6.5)));
}
/* ---------------------------------------------------------------------------
PROYECCIÓN DE CRECIMIENTO EN EL TIEMPO
Genera una curva (nivel global) desde HOY hasta la META a lo largo de la
duración del programa recomendado, con un hito intermedio.
--------------------------------------------------------------------------- */
const MESES_ES = ['ene','feb','mar','abr','may','jun','jul','ago','sep','oct','nov','dic'];
function fmtDate(d) { return `${d.getDate()} ${MESES_ES[d.getMonth()]}`; }
function buildGrowth(scores, program, weeksOverride) {
const start = scores.reduce((a, s) => a + s.current, 0) / scores.length;
const goal = scores.reduce((a, s) => a + s.target, 0) / scores.length;
const weeks = weeksOverride || program.weeks || 8;
const today = new Date();
const end = new Date(today.getTime() + weeks * 7 * 86400000);
const midWeeks = Math.max(1, Math.round(weeks * 0.42));
const mid = new Date(today.getTime() + midWeeks * 7 * 86400000);
// curva suave (ease-in-out) ascendente con N puntos
const N = 40;
const pts = [];
for (let i = 0; i <= N; i++) {
const t = i / N;
const eased = t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2; // easeInOutQuad
pts.push({ t, v: start + (goal - start) * eased });
}
const midT = 0.42;
const midEase = midT < 0.5 ? 2 * midT * midT : 1 - Math.pow(-2 * midT + 2, 2) / 2;
const midV = start + (goal - start) * midEase;
return {
start, goal, weeks, pts,
startDate: today, endDate: end, midDate: mid,
startLabel: 'Hoy', endLabel: fmtDate(end), midLabel: fmtDate(mid),
milestoneLabel: midWeeks >= 4 ? `Mes ${Math.round(midWeeks/4)}` : `Semana ${midWeeks}`,
milestoneWeeks: midWeeks,
milestoneT: midT, milestoneV: midV,
gain: goal - start,
};
}
Object.assign(window, {
DIAG_SCALE: SCALE,
DIAG_EJES: EJES,
DIAG_PROGRAMS: PROGRAMS,
DIAG_EJE_ICONS: EJE_ICONS,
diagBuildScores: buildScores,
diagRecommend: recommend,
diagLevelLabel: levelLabel,
diagLevelTag: levelTag,
diagLevelTier: levelTier,
diagEstWeeks: estWeeksFromGap,
diagEjeCurrent: ejeCurrent,
diagBuildGrowth: buildGrowth,
diagFmtDate: fmtDate,
});