/* global React */
const { useState: useStateGap, useEffect: useEffectGap, useRef: useRefGap } = React;
const QUESTIONS = [
{
id: 'continuidad',
category: 'Continuidad Operativa',
icon: 'shield',
color: '#FB881D',
question: '¿Cuánto tiempo puede operar su empresa si sus servidores principales se caen hoy?',
options: [
{ label: 'Más de 24 horas con plan probado (BCP/DRP activo)', score: 0 },
{ label: 'Entre 4 y 24 horas, tenemos backups pero sin pruebas recientes', score: 1 },
{ label: 'Menos de 4 horas, dependemos de TI para improvisar', score: 2 },
{ label: 'No lo sabemos / nunca lo medimos', score: 3 },
],
},
{
id: 'darkweb',
category: 'Exposición Externa',
icon: 'eye',
color: '#EC008C',
question: '¿Tienen visibilidad de si sus credenciales corporativas están filtradas en la Dark Web?',
options: [
{ label: 'Sí, monitoreo continuo con alertas automatizadas', score: 0 },
{ label: 'Hicimos un análisis puntual hace más de 6 meses', score: 1 },
{ label: 'No, pero confiamos en la seguridad de nuestros proveedores', score: 2 },
{ label: 'No tenemos forma de saberlo', score: 3 },
],
},
{
id: 'segmentacion',
category: 'Arquitectura',
icon: 'cpu',
color: '#3551E7',
question: '¿Su red está segmentada o un atacante podría moverse lateralmente?',
options: [
{ label: 'Segmentación zero-trust con microsegmentación validada', score: 0 },
{ label: 'VLANs y firewalls perimetrales, sin auditoría reciente', score: 1 },
{ label: 'Red plana o segmentación parcial heredada', score: 2 },
{ label: 'No sé cómo está la arquitectura', score: 3 },
],
},
{
id: 'phishing',
category: 'Factor Humano',
icon: 'users',
color: '#A335E7',
question: '¿Realizan simulacros de phishing y capacitación en seguridad para empleados?',
options: [
{ label: 'Simulacros mensuales con métricas y entrenamiento dirigido', score: 0 },
{ label: 'Entre 1 y 2 veces al año, sin seguimiento sistemático', score: 1 },
{ label: 'Solo onboarding inicial cuando alguien ingresa', score: 2 },
{ label: 'Nunca lo hicimos', score: 3 },
],
},
{
id: 'cumplimiento',
category: 'Cumplimiento Regional',
icon: 'globe',
color: '#35E7C7',
question: '¿Cumplen con la Ley 25.326 de Protección de Datos Personales (Argentina) y normativas regionales?',
options: [
{ label: 'Sí, certificados ISO 27001 y registro AAIP vigente', score: 0 },
{ label: 'Cumplimiento parcial documentado, sin certificación', score: 1 },
{ label: 'Sabemos que aplica pero no formalizamos los controles', score: 2 },
{ label: 'No conocemos los requisitos legales aplicables', score: 3 },
],
},
{
id: 'incidentes',
category: 'Detección y Respuesta',
icon: 'alert',
color: '#EC4D2A',
question: '¿Cuánto tardan en detectar y contener un incidente de seguridad?',
options: [
{ label: 'SOC 24x7 con MTTD < 15 min y runbooks probados', score: 0 },
{ label: 'Tenemos SIEM pero la respuesta es manual y horaria', score: 1 },
{ label: 'Solo nos enteramos cuando algo deja de funcionar', score: 2 },
{ label: 'Nunca tuvimos un incidente / no sabríamos detectarlo', score: 3 },
],
},
{
id: 'pentest',
category: 'Validación Ofensiva',
icon: 'zap',
color: '#35E747',
question: '¿Cuándo fue su último Ethical Hacking o test de penetración?',
options: [
{ label: 'Hace menos de 6 meses, con re-test de remediaciones', score: 0 },
{ label: 'Entre 6 y 18 meses atrás', score: 1 },
{ label: 'Hace más de 2 años o solo escaneos automáticos', score: 2 },
{ label: 'Nunca contratamos un pentest profesional', score: 3 },
],
},
];
const GapAnalysis = () => {
const { Eyebrow, Btn, Icon, GlassCard, Light } = window;
const [stage, setStage] = useStateGap('intro'); // intro | quiz | gate | result
const [step, setStep] = useStateGap(0);
const [answers, setAnswers] = useStateGap({});
const [form, setForm] = useStateGap({ nombre: '', empresa: '', email: '' });
const [submitting, setSubmitting] = useStateGap(false);
const [errorMsg, setErrorMsg] = useStateGap('');
const total = QUESTIONS.length;
const progress = stage === 'intro' ? 0 : stage === 'result' || stage === 'gate' ? 100 : Math.round((step / total) * 100);
const select = (qId, score) => {
const next = { ...answers, [qId]: score };
setAnswers(next);
setTimeout(() => {
if (step + 1 < total) setStep(step + 1);
else setStage('gate');
}, 220);
};
const scores = Object.values(answers);
const totalScore = scores.reduce((a, b) => a + b, 0);
const maxScore = total * 3;
const exposurePct = Math.round((totalScore / maxScore) * 100);
const criticalPoints = scores.filter(s => s >= 2).length;
const submit = async (e) => {
e.preventDefault();
if (!form.nombre || !form.empresa || !form.email) return;
setSubmitting(true);
setErrorMsg('');
try {
const { ok, data } = await window.brotekFetch('/api/procesar_envio.php', {
body: {
...form,
answers,
exposurePct,
criticalPoints,
totalQuestions: total,
submittedAt: new Date().toISOString(),
source: 'gap-analysis-home',
website: '',
},
});
if (!ok) {
const msg = (data && data.message) ? data.message : 'No pudimos enviar el informe. Intentá nuevamente en unos minutos.';
setErrorMsg(msg);
setSubmitting(false);
return;
}
setSubmitting(false);
setStage('result');
} catch (err) {
setErrorMsg('Error de red. Verificá tu conexión e intentá de nuevo.');
setSubmitting(false);
}
};
const current = QUESTIONS[step];
return (
Identifique en 5 minutos los puntos ciegos de su arquitectura que están poniendo en riesgo su operación en Argentina y la región.
Evaluación basada en NIST CSF 2.0 y la Comunicación A 7724 del BCRA. Sus respuestas son confidenciales.
Su exposición global es del {exposurePct}% según el modelo NIST CSF 2.0 + BCRA A 7724. Para acceder al informe detallado con plan de remediación priorizado, necesitamos sus datos:
Un consultor senior de Brotek revisará su diagnóstico y se contactará en menos de 24hs hábiles para coordinar la sesión de presentación.
Diagnóstico de Brechas y Continuidad Operativa
7 preguntas. Resultado inmediato.
{current.question}
Hemos detectado {criticalPoints} {criticalPoints === 1 ? 'punto crítico' : 'puntos críticos'} que comprometen su continuidad operativa en este momento.
Informe enviado a {form.email}