// ─────────────────────────────────────────────────────────────
// views.jsx — UI views for the diagnóstico
// Inicio · Encuesta · Resultados · Gracias
// ─────────────────────────────────────────────────────────────
const { useState, useEffect, useRef, useMemo } = React;
// ═════════ MINI RADAR (SVG, used in inicio preview) ═════════
function MiniRadar({ values, labels, color = "#009aba" }) {
const cx = 240, cy = 190, r = 130;
const n = values.length;
const angle = (i) => -Math.PI/2 + i * (2*Math.PI/n);
const ringPts = (v) => Array.from({length:n}, (_,i) => {
const a = angle(i); const rr = (v/4)*r;
return `${cx + Math.cos(a)*rr},${cy + Math.sin(a)*rr}`;
}).join(' ');
const valPts = values.map((v,i) => {
const a = angle(i); const rr = (v/4)*r;
return `${cx + Math.cos(a)*rr},${cy + Math.sin(a)*rr}`;
}).join(' ');
return (
{[1,2,3,4].map(v => (
))}
{labels.map((_,i) => {
const a = angle(i);
return ;
})}
{values.map((v,i) => {
const a = angle(i); const rr = (v/4)*r;
return ;
})}
{labels.map((lbl,i) => {
const a = angle(i); const rr = r + 22;
const x = cx + Math.cos(a)*rr, y = cy + Math.sin(a)*rr;
const anchor = Math.abs(Math.cos(a)) < 0.2 ? 'middle' : Math.cos(a) > 0 ? 'start' : 'end';
return {lbl} ;
})}
);
}
window.MiniRadar = MiniRadar;
// ═════════ INICIO ═════════
function Inicio({ onStart }) {
const previewValues = [3.2, 2.6, 2.1, 2.4, 1.8, 2.9];
const previewLabels = AREAS.map(a => a.corto);
return (
DIAGNÓSTICO · 36 AFIRMACIONES · 6 EJES
Madurez en
Talento Humano.
Un instrumento diseñado para que equipos directivos entiendan en qué nivel está la gestión de personas en su empresa y dónde priorizar los próximos 90 días.
Iniciar diagnóstico
8 minutos · Sin registro inicial
Vista previa del informe
Tu mapa de madurez por área
{previewLabels.map((l,i) => (
{l}
{previewValues[i].toFixed(1)}/4.0
))}
{/* MÉTODO */}
01
Responde con honestidad
36 afirmaciones agrupadas en 6 ejes. Te toma 8 minutos. Califica cada una según cómo está la empresa hoy, no como te gustaría que fuera.
02
Recibe tu informe en PDF
Un análisis narrativo por cada área, tu nivel global de madurez y un set de acciones priorizadas para los próximos 90 días.
03
Conversa, si tiene sentido
Si quieres profundizar en alguno de los resultados, conversemos. Te acompañamos a convertir el diagnóstico en un plan real.
{/* ÁREAS EVALUADAS */}
Ejes que vamos a medir
Las 6 áreas que definen la madurez de la gestión humana.
{AREAS.map((a, i) => (
EJE {String(i+1).padStart(2,'0')} · 6 afirmaciones
{a.nombre}
{a.descripcion}
))}
¿Listo para empezar?
Descubre en qué nivel está tu gestión humana hoy.
Iniciar diagnóstico
8 minutos · 36 afirmaciones · Sin registro inicial
);
}
window.Inicio = Inicio;
// ═════════ ENCUESTA ═════════
function Encuesta({ areaIdx, respuestas, onAnswer, onNext, onPrev }) {
const area = AREAS[areaIdx];
const totalAreas = AREAS.length;
const [showAlert, setShowAlert] = useState(false);
// count answered in this area
const answeredInArea = Array.from({length:6}).filter((_,i) => respuestas[`${areaIdx}_${i}`]).length;
const allAnswered = answeredInArea === 6;
function handleNext() {
if (!allAnswered) { setShowAlert(true); return; }
setShowAlert(false);
onNext();
}
function handleAnswer(qIdx, value) {
setShowAlert(false);
onAnswer(`${areaIdx}_${qIdx}`, value);
}
const isLast = areaIdx === totalAreas - 1;
return (
EJE {String(areaIdx+1).padStart(2,'0')} DE {String(totalAreas).padStart(2,'0')}
{area.nombre}
{area.descripcion}
Progreso del eje
{answeredInArea}/6
{/* Scale legend */}
Califica cada afirmación según el estado real de tu empresa hoy
{OPCIONES.map(op => (
{op.codigo}
{op.texto}
))}
{/* Afirmaciones */}
{area.afirmaciones.map((af, i) => {
const key = `${areaIdx}_${i}`;
const selected = respuestas[key];
return (
{String(areaIdx*6 + i + 1).padStart(2,'0')}
{af}
);
})}
{areaIdx > 0
?
Eje anterior
:
}
{isLast ? 'Ver mis resultados' : 'Siguiente eje'}
{showAlert && (
Por favor responde las {6 - answeredInArea} afirmaciones restantes antes de continuar.
)}
);
}
window.Encuesta = Encuesta;
// ═════════ RESULTADOS ═════════
// Chart.js radar rendered into a canvas via ref
function ResultRadar({ values, labels }) {
const canvasRef = useRef(null);
const chartRef = useRef(null);
useEffect(() => {
if (!canvasRef.current) return;
if (chartRef.current) chartRef.current.destroy();
chartRef.current = new Chart(canvasRef.current, {
type: 'radar',
data: {
labels,
datasets: [{
label: 'Tu empresa',
data: values,
backgroundColor: 'rgba(0,154,186,0.18)',
borderColor: '#009aba',
borderWidth: 2.5,
pointBackgroundColor: '#009aba',
pointBorderColor: '#0c3c5b',
pointBorderWidth: 1.5,
pointRadius: 5,
pointHoverRadius: 7,
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
animation: { duration: 900, easing: 'easeOutCubic' },
scales: {
r: {
min: 0, max: 4,
ticks: { stepSize: 1, display: false, backdropColor: 'transparent' },
pointLabels: {
font: { size: 12, family: 'Be Vietnam Pro', weight: '500' },
color: 'rgba(255,255,255,0.85)',
padding: 8,
},
grid: { color: 'rgba(255,255,255,0.08)' },
angleLines: { color: 'rgba(255,255,255,0.08)' },
}
},
plugins: { legend: { display: false }, tooltip: { enabled: false } }
}
});
return () => chartRef.current && chartRef.current.destroy();
}, [JSON.stringify(values), JSON.stringify(labels)]);
return ;
}
function Resultados({ resultados, onSubmit, leadFormError, isSubmitting }) {
const nivelGlobal = resultados.global;
const nivelData = NIVELES[nivelGlobal - 1];
const radarValues = AREAS.map((_, i) => resultados[i+1].promedio);
const radarLabels = AREAS.map(a => a.corto);
const [form, setForm] = useState({ nombre: '', empresa: '', cargo: '', email: '' });
function handleSubmit(e) {
e.preventDefault();
onSubmit(form);
}
// Ordered areas by score asc for prioritized recs (where to focus)
const ordered = AREAS.map((a, i) => ({ ...a, ...resultados[i+1] }))
.sort((a,b) => a.promedio - b.promedio);
const focoArea = ordered[0]; // lowest
return (
{/* HERO RESULT */}
Tu nivel global de madurez
{nivelData.nombre}.
{nivelData.mensaje}
Puntaje global
{resultados.globalProm.toFixed(2)} / 4.00
Foco prioritario
{focoArea.corto}
{/* AREAS RESULTS LIST */}
Resultados por eje
Cómo se distribuye la madurez en cada área.
{AREAS.map((a, i) => {
const r = resultados[i+1];
const nivel = NIVELES[r.nivel - 1];
const fillPct = (r.promedio / 4) * 100;
return (
{a.nombre}
EJE {String(i+1).padStart(2,'0')}
{r.promedio.toFixed(2)}/4
{nivel.nombre}
);
})}
{/* LOCKED PREVIEW + LEAD FORM */}
Próximo paso
Tu informe completo te está esperando.
Acabas de ver el resumen. El informe completo en PDF incluye el análisis detallado de cada uno de los 6 ejes con acciones priorizadas para empezar a actuar la próxima semana.
Diagnóstico narrativo personalizado para cada eje, escrito por consultoras de Alfa Psicología.
4 acciones priorizadas por área, accionables en los próximos 90 días.
Mapa visual de madurez con tu posición en cada eje.
Plan de foco prioritario basado en tus resultados.
);
}
window.Resultados = Resultados;
// ═════════ GRACIAS ═════════
function Gracias({ onRedownload, lead }) {
const waUrl = `https://wa.me/573013290047?text=Hola+Diana%2C+acabo+de+descargar+el+diagn%C3%B3stico+de+madurez+en+talento+humano+de+Alfa+Psicolog%C3%ADa+y+me+gustar%C3%ADa+conversar+sobre+los+resultados+de+mi+empresa.`;
return (
Tu informe está listo, {lead?.nombre?.split(' ')[0] || ''}.
Si la descarga no comenzó automáticamente, haz clic en el botón. Te lo enviamos también al correo que registraste para que lo tengas a la mano.
HABLEMOS
¿Quieres profundizar en tus resultados?
Soy Diana Carolina Villegas, directora comercial de Alfa Psicología. Si los resultados resonaron con lo que estás viviendo, agendemos una conversación. Sin venta dura: Escuchamos tu contexto y te decimos honestamente por dónde te conviene empezar.
WHATSAPP / MÓVIL
+57 301 329 0047
LÍNEA NACIONAL
01 8000 423 803
CORREO
hablemos@alfapsicologia.com
SITIO WEB
www.alfapsicologia.com
);
}
window.Gracias = Gracias;