Hipnoterapia profesional para eliminar bloqueos mentales y alcanzar tus objetivos con foco y confianza.
Soy Alexandra Vidal, hipnoterapeuta certificada en el Método RTT (Terapia de Transformación Rápida), Certified Coach, Firewalking Guide y miembro de la I.A.C.T.
Llevo más de 12 años en un camino profundo de crecimiento personal, transformación emocional y búsqueda de una vida más consciente, plena y coherente. Esa experiencia me llevó a estudiar a fondo la mente subconsciente, nuestras respuestas emocionales y el poder interno que todos tenemos para cambiar.
Hoy acompaño a otras personas a reprogramar sus bloqueos mentales y emocionales, y a reconectarse con una versión más libre, enfocada y auténtica de sí mismos.
Te he preparado una guía muy exclusiva para que aprendas a cambiar tu patrón financiero de forma rápida y sencilla.
La terapia de transformación rápida® (RTT®) esta acreditada por la Asociación Internacional de Consejeros y Terapeutas (IACT), el Instituto Internacional de Terapeutas Complementarios (IICT), la Federación Internacional de Hipnosis (IHF) y la Sociedad Australiana de Hipnoterapeutas Clínicos (ASCH).
Opiniones reales de las personas que han contratado mis servicios de Hipnoterapia
Es importante conocer cómo será tu acompañamiento.
Nos conocemos y me expones el tema que necesitas tratar, si es compatible con las terapias RTT, te explico como funcionan las sesiones para poder agendar una sesión.
Al finalizar la sesión, recibirás una recomendación personalizada sobre si es conveniente continuar con una próxima sesión o si el proceso puede considerarse completo.
Una semana después de la sesión, me pondré en contacto contigo para conocer tus avances. Todos los clientes cuentan con un seguimiento personalizado a través de WhatsApp para acompañar su progreso.
import React, { useState, useEffect, useMemo } from 'react';
import { initializeApp } from 'firebase/app';
import {
getAuth,
signInAnonymously,
signInWithCustomToken,
onAuthStateChanged
} from 'firebase/auth';
import {
getFirestore,
collection,
addDoc,
onSnapshot,
serverTimestamp,
query
} from 'firebase/firestore';
import {
LineChart,
Line,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
ResponsiveContainer,
BarChart,
Bar,
Cell
} from 'recharts';
// Firebase configuration
const firebaseConfig = JSON.parse(__firebase_config);
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
const appId = typeof __app_id !== 'undefined' ? __app_id : 'hipnotrading-audit-v1';
const App = () => {
const [user, setUser] = useState(null);
const [allAudits, setAllAudits] = useState([]);
const [loading, setLoading] = useState(false);
const [message, setMessage] = useState(null);
const [accessCode, setAccessCode] = useState("");
// Filtros de Fecha para Análisis
const [filterStartDate, setFilterStartDate] = useState("");
const [filterEndDate, setFilterEndDate] = useState("");
// Estado para el Modal de Evaluación
const [showModal, setShowModal] = useState(false);
const [modalContent, setModalContent] = useState(null);
const today = new Date().toISOString().split('T')[0];
const initialFormState = {
nombreTrader: '',
fechaAuditoria: today,
horaInicioSesion: '09:00',
energiaMetabolica: 7,
ritualCoherencia: 'No',
revisadoPlan: 'No',
estadoSistemaNervioso: '🟢 Vagal Ventral (Calma Activa)',
indiceCoherenciaIC: 90,
sesgosNeuroCognitivos: [],
marcadoresSomaticos: [],
nivelPresencia: 9,
respetoStopTP: 10,
dejoCorrerPlan: 10,
numEntradasTotales: 0,
pnlDia: 0,
numEntradasPlan: 0,
numEntradasFueraPlan: 0,
numPerdidasHoy: 0,
emocionesPorPerdida: {},
tiposPorPerdida: {},
sensacionCorporalPerdida: '',
estadoSistemaNerviosoFinal: '',
sensacionCorporal: '',
detallesSesion: '',
emocionesDetectadas: [],
objetivoReal: 'Aprender/Proceso',
nivelCoherencia: 5,
pnlEmocional: 'He ganado disciplina',
anclajeIdentidad: 7,
creenciasInstaladas: [],
reescrituraNarrativa: '',
visualizacionesCierre: [],
aprendizajeMentor: '',
protocoloReactivacionVagal: '',
compromisoManana: ''
};
const [formData, setFormData] = useState(initialFormState);
useEffect(() => {
const initAuth = async () => {
try {
if (typeof __initial_auth_token !== 'undefined' && __initial_auth_token) {
await signInWithCustomToken(auth, __initial_auth_token);
} else {
await signInAnonymously(auth);
}
} catch (error) {
console.error("Error de autenticación:", error);
}
};
initAuth();
const unsubscribe = onAuthStateChanged(auth, setUser);
return () => unsubscribe();
}, []);
useEffect(() => {
if (!user) return;
const auditsRef = collection(db, 'artifacts', appId, 'public', 'data', 'weekly_audits');
const q = query(auditsRef);
const unsubscribe = onSnapshot(q, (snapshot) => {
const data = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
const sorted = data.sort((a, b) => (a.createdAt?.seconds || 0) - (b.createdAt?.seconds || 0));
setAllAudits(sorted);
}, (error) => console.error("Error en Firestore:", error));
return () => unsubscribe();
}, [user, appId]);
const uniqueTradersList = useMemo(() => {
const names = allAudits.map(a => a.nombreTrader?.trim()).filter(Boolean);
return Array.from(new Set(names)).sort();
}, [allAudits]);
// Lógica de filtrado centralizada: Nombre + Rango de Fechas
const filteredAudits = useMemo(() => {
let filtered = allAudits;
// 1. Filtro por nombre
const search = formData.nombreTrader.trim().toLowerCase();
if (search) {
filtered = filtered.filter(a => a.nombreTrader?.trim().toLowerCase() === search);
} else {
return []; // Si no hay nombre, no mostramos nada
}
// 2. Filtro por fecha inicio
if (filterStartDate) {
filtered = filtered.filter(a => {
const date = a.fechaAuditoria || a.fechaLocal; // Preferimos fechaAuditoria (YYYY-MM-DD)
return date >= filterStartDate;
});
}
// 3. Filtro por fecha fin
if (filterEndDate) {
filtered = filtered.filter(a => {
const date = a.fechaAuditoria || a.fechaLocal;
return date <= filterEndDate;
});
}
return filtered;
}, [allAudits, formData.nombreTrader, filterStartDate, filterEndDate]);
const chartData = useMemo(() => {
return filteredAudits.map(audit => ({
fecha: audit.fechaAuditoria || audit.fechaLocal,
ic: parseFloat(audit.indiceCoherenciaIC) || 0,
presencia: parseFloat(audit.nivelPresencia) || 0,
energia: parseFloat(audit.energiaMetabolica) || 0
}));
}, [filteredAudits]);
const disciplineFactor = useMemo(() => {
const total = parseInt(formData.numPerdidasHoy) || 0;
if (total === 0) return { percent: 100, color: 'bg-emerald-500', label: '100%', textColor: 'text-emerald-500' };
let cleanCount = 0;
let definedCount = 0;
for (let i = 1; i <= total; i++) {
const type = formData.tiposPorPerdida[i];
if (type) {
definedCount++;
if (type === 'Limpia ✨ (Bajo Plan)') {
cleanCount++;
}
}
}
if (definedCount === 0) return { percent: 0, color: 'bg-slate-400', label: '0%', textColor: 'text-slate-400' };
const percentage = Math.round((cleanCount / total) * 100);
let color = 'bg-amber-500';
let textColor = 'text-amber-500';
if (percentage >= 80) { color = 'bg-emerald-500'; textColor = 'text-emerald-500'; }
if (percentage < 50) { color = 'bg-rose-600'; textColor = 'text-rose-600'; }
return { percent: percentage, color, label: `${percentage}%`, textColor };
}, [formData.numPerdidasHoy, formData.tiposPorPerdida]);
const correlationChartData = useMemo(() => {
return [
{ name: 'IC Inicial', value: parseInt(formData.indiceCoherenciaIC) || 0, color: '#6366f1' },
{ name: 'Disciplina Final', value: disciplineFactor.percent, color: disciplineFactor.percent < 50 ? '#e11d48' : '#10b981' }
];
}, [formData.indiceCoherenciaIC, disciplineFactor]);
const heatmapData = useMemo(() => {
const grid = {};
const hours = [8, 9, 10, 11, 12, 13, 14, 15, 16];
const days = [1, 2, 3, 4, 5];
days.forEach(d => {
hours.forEach(h => {
grid[`${d}-${h}`] = {
totalIC: 0,
totalPnL: 0,
count: 0,
avgIC: 0,
avgPnL: 0
};
});
});
filteredAudits.forEach(audit => {
let dateObj;
if (audit.timestampSesion && audit.timestampSesion.seconds) {
dateObj = new Date(audit.timestampSesion.seconds * 1000);
} else if (audit.createdAt && typeof audit.createdAt.seconds === 'number') {
dateObj = new Date(audit.createdAt.seconds * 1000);
} else if (audit.fechaAuditoria) {
const parts = audit.fechaAuditoria.split('-');
const hourParts = (audit.horaInicioSesion || "10:00").split(':');
if (parts.length === 3) {
dateObj = new Date(parts[0], parts[1] - 1, parts[2], parseInt(hourParts[0]), parseInt(hourParts[1]));
}
}
if (!dateObj || isNaN(dateObj.getTime())) return;
const day = dateObj.getDay();
const hour = dateObj.getHours();
if (day >= 1 && day <= 5 && hour >= 8 && hour <= 16) {
const key = `${day}-${hour}`;
if (grid[key]) {
grid[key].totalIC += parseFloat(audit.indiceCoherenciaIC || 0);
grid[key].totalPnL += parseFloat(audit.pnlDia || 0);
grid[key].count += 1;
}
}
});
Object.keys(grid).forEach(key => {
if (grid[key].count > 0) {
grid[key].avgIC = Math.round(grid[key].totalIC / grid[key].count);
grid[key].avgPnL = parseFloat((grid[key].totalPnL / grid[key].count).toFixed(2));
}
});
return grid;
}, [filteredAudits]);
const getHeatmapColor = (cell) => {
if (cell.count === 0) return 'bg-[#E0E0E0]';
const { avgIC, avgPnL } = cell;
if (avgIC < 50 || avgPnL < 0) return 'bg-[#F44336]';
if (avgIC >= 50 && avgIC < 65) return 'bg-[#FFC107]';
if (avgIC >= 65 && avgPnL >= 0) return 'bg-[#4CAF50]';
return 'bg-[#4CAF50]';
};
const handleInputChange = (e) => {
const { name, value, type, checked } = e.target;
if (type === 'checkbox') {
const list = formData[name] || [];
setFormData(prev => ({
...prev,
[name]: checked ? [...list, value] : list.filter(i => i !== value)
}));
} else {
setFormData(prev => ({ ...prev, [name]: value }));
}
};
const handleEmocionPerdida = (index, emocion) => {
setFormData(prev => ({
...prev,
emocionesPorPerdida: { ...prev.emocionesPorPerdida, [index]: emocion }
}));
};
const handleTipoPerdida = (index, tipo) => {
setFormData(prev => ({
...prev,
tiposPorPerdida: { ...prev.tiposPorPerdida, [index]: tipo }
}));
};
const evaluatePreMarket = () => {
const ic = parseInt(formData.indiceCoherenciaIC);
const sn = formData.estadoSistemaNervioso;
const presencia = parseInt(formData.nivelPresencia);
const plan = formData.revisadoPlan;
let content = { title: '', text: '', colorClass: '', buttonClass: '' };
if (ic < 60 || sn.includes('Dorsal') || presencia < 4 || plan === 'No') {
content = {
title: '🛑 SISTEMA NO APTO',
text: plan === 'No'
? 'Falta de disciplina operativa: NO has revisado tu plan de trading. Sin mapa, no hay trading. Revisa el plan y vuelve a validar.'
: 'Tu coherencia o presencia es crítica. En este estado, tu córtex prefrontal está desactivado y operarás bajo el miedo, la disociación o la parálisis. PROHIBIDO OPERAR. Realiza una sesión de hipnosis de emergencia.',
colorClass: 'bg-rose-600',
buttonClass: 'bg-rose-700 hover:bg-rose-800'
};
} else if (ic >= 70 && sn.includes('Vagal Ventral') && presencia >= 9 && plan === 'Sí') {
content = {
title: '✅ SISTEMA OPTIMIZADO',
text: 'Estás en estado de flujo, tu coherencia es alta y tu foco es total. Tu biología está preparada para ejecutar el plan sin interferencias emocionales. ¡Buen trading!',
colorClass: 'bg-emerald-500',
buttonClass: 'bg-emerald-700 hover:bg-emerald-800'
};
} else {
content = {
title: '⚠️ PRECAUCIÓN',
text: 'Tu sistema muestra signos de alerta, urgencia o falta de foco. Estás en la frontera del secuestro emocional. Opera con lotaje reducido o realiza 2 minutos de coherencia cardíaca antes del primer trade.',
colorClass: 'bg-amber-500',
buttonClass: 'bg-amber-600 hover:bg-amber-700'
};
}
setModalContent(content);
setShowModal(true);
};
const saveAudit = async (e) => {
e.preventDefault();
if (!formData.nombreTrader.trim()) {
setMessage({ type: 'error', text: 'El nombre del trader es obligatorio.' });
return;
}
setLoading(true);
try {
const auditsRef = collection(db, 'artifacts', appId, 'public', 'data', 'weekly_audits');
const fechaFormateada = new Date(formData.fechaAuditoria).toLocaleDateString();
const [año, mes, dia] = formData.fechaAuditoria.split('-');
const [horas, minutos] = formData.horaInicioSesion.split(':');
const timestampCompleto = new Date(año, mes - 1, dia, horas, minutos);
await addDoc(auditsRef, {
...formData,
nombreTrader: formData.nombreTrader.trim(),
createdAt: serverTimestamp(),
timestampSesion: timestampCompleto,
fechaLocal: fechaFormateada
});
setMessage({ type: 'success', text: 'Registro neurobiológico guardado correctamente.' });
setFormData({ ...initialFormState, nombreTrader: formData.nombreTrader });
setTimeout(() => setMessage(null), 4000);
} catch (error) {
setMessage({ type: 'error', text: 'Error al guardar datos.' });
} finally {
setLoading(false);
}
};
const SectionTitle = ({ number, title }) => (
{number}
{title}
);
return (
Auditoría Neuro-Biología Trading
HIPNOTRADING - Supervisión de Coherencia y Sistema Nervioso
Evolución Neuro-Técnica
{chartData.length < 1 ? (
Sin registros en este periodo
) : (
)}
Historial Detallado de Auditorías
Registros completos para análisis de progresión subconsciente
Fecha
Hora Inicio
IC Inicial
Energía
Presencia
Plan Rev.
PnL Diaro
Eficiencia Plan
Identidad
SN Final
{filteredAudits.length > 0 ? (
filteredAudits.slice().reverse().map((audit) => {
const totalE = parseInt(audit.numEntradasTotales) || 0;
const planE = parseInt(audit.numEntradasPlan) || 0;
const eficiencia = totalE > 0 ? Math.round((planE / totalE) * 100) : 0;
return (
{audit.fechaAuditoria || audit.fechaLocal}
{audit.horaInicioSesion || "-"}
= 70 ? 'bg-emerald-100 text-emerald-700' : 'bg-rose-100 text-rose-700'}`}>
{audit.indiceCoherenciaIC}%
{audit.energiaMetabolica}/10
{audit.nivelPresencia}/10
{audit.revisadoPlan === 'Sí' ? SÍ : NO}
= 0 ? 'text-emerald-600' : 'text-rose-600'}`}>
{audit.pnlDia}
{eficiencia}%
{audit.anclajeIdentidad}/10
{audit.estadoSistemaNerviosoFinal || '-'}
);
})
) : (
No hay registros que coincidan con los filtros seleccionados
)}
Historial de Reprogramación y Cierre (Punto 4)
Monitoreo de anclajes de identidad y protocolos vagales
Fecha
Anclaje Identidad
Protocolo Vagal
Creencias Instaladas
Cierres Realizados
Narrativa / Compromiso
{filteredAudits.length > 0 ? (
filteredAudits.slice().reverse().map((audit) => (
{audit.fechaAuditoria || audit.fechaLocal}
= 8 ? 'bg-emerald-500 text-white' : 'bg-amber-500 text-white'}`}>
{audit.anclajeIdentidad}
/10
{audit.protocoloReactivacionVagal || 'No registrado'}
{audit.creenciasInstaladas && audit.creenciasInstaladas.length > 0 ? (
audit.creenciasInstaladas.map((c, idx) => (
{c}
))
) : Sin creencias}
{audit.visualizacionesCierre ? audit.visualizacionesCierre.length : 0}
/3 Pasos
"{audit.reescrituraNarrativa || 'Sin narrativa...'}"
🎯 {audit.compromisoManana || 'Sin compromiso'}
))
) : (
Sin datos de reprogramación en este periodo
)}
{/* MAPA DE CALOR: RENDIMIENTO TEMPORAL */}
📊 Mapa de Calor: Rendimiento Temporal
Identifica en qué momentos tu sistema nervioso está más regulado
{ (filterStartDate || filterEndDate) && (
Filtro Activo
)}
{['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes'].map(d => (
{d}
))}
{[8, 9, 10, 11, 12, 13, 14, 15, 16].map(hour => (
{`${hour.toString().padStart(2, '0')}:00`}
{[1, 2, 3, 4, 5].map(day => {
const key = `${day}-${hour}`;
const cell = heatmapData[key] || { count: 0, avgIC: 0, avgPnL: 0 };
const bgColor = getHeatmapColor(cell);
return (
{cell.count > 0 && (
{cell.avgIC}% IC
${cell.avgPnL}
)}
{['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'][day]} - {hour}:00
Promedio IC:
= 65 ? 'text-emerald-400' : 'text-rose-400'}>{cell.avgIC}%
Promedio PnL:
= 0 ? 'text-emerald-400' : 'text-rose-400'}>${cell.avgPnL}
Sesiones registradas:
{cell.count}
);
})}
))}
Óptimo: IC ≥65% + PnL ≥ 0
Alerta: IC 50-64%
Crítico: IC <50% o PnL negativo
Sin datos
{showModal && modalContent && (
{modalContent.title}
{modalContent.text}
)}
);
};
export default App;