// vita-services2.jsx — Nutrición, Psicología, Diagnóstico
// ════ 2. NUTRICIÓN ═════════════════════════════════════════════
const NUTRIOLOGOS = [
{ nombre: 'Dra. Marcela Ruiz', esp: 'Nutrición clínica · Cardiometabólica', match: 'Experta en hipertensión y corazón', rating: 4.9, modalidad: 'Virtual y presencial', tag: 'Mejor para ti' },
{ nombre: 'Dr. Andrés Patiño', esp: 'Nutrición deportiva', match: 'Enfocado en energía y hábitos', rating: 4.7, modalidad: 'Virtual', tag: null },
];
function NutricionService({ t, persona, profile, asis, nutricion, loading, onGenerate, onBack, onSchedule }) {
const accent = persona.accent;
const [tab, setTab] = React.useState('plan'); // plan | nutriologo
React.useEffect(() => { if (!nutricion && !loading) onGenerate(); }, []);
return (
{[['plan', 'Mi plan'], ['nutriologo', 'Mi nutriólogo']].map(([k, l]) => (
))}
{tab === 'plan' && (
(loading || !nutricion) ? (
Vita está armando tu plan
según tu historia clínica…
) : (
{Icon.food({ s: 18, c: accent })}Tu enfoque
{nutricion.enfoque}
Tus metas
{nutricion.objetivos.map((o, i) => (
{i + 1}
{o}
))}
Un día de ejemplo
{nutricion.comidas.map((c, i) => (
{Icon.food({ s: 20, c: accent })}
{c.momento}
{c.idea}
{c.nota &&
{c.nota}
}
))}
Reduce poco a poco
{nutricion.evitar.map((e, i) => (
{e}
))}
)
)}
{tab === 'nutriologo' && (
De nuestra red, este es quien mejor se ajusta a tu historia clínica:
{NUTRIOLOGOS.map((n, i) => (
{n.nombre.split(' ')[1].charAt(0)}
{n.nombre}
{n.esp}
{Icon.star({ s: 13, c: '#E6A93C', fill: '#E6A93C' })}{n.rating}· {n.modalidad}
{n.tag &&
{n.tag}}
{Icon.sparkle({ s: 14, c: accent })}{n.match}
{i === 0 &&
}
))}
)}
);
}
// ════ 3. PSICOLOGÍA ════════════════════════════════════════════
const MOODS = [
{ k: 5, label: 'Muy bien', color: '#3E8F5A', face: 'M8.5 14a4.5 4.5 0 0 0 7 0' },
{ k: 4, label: 'Bien', color: '#73C58E', face: 'M9 14a4 4 0 0 0 6 0' },
{ k: 3, label: 'Normal', color: '#E6A93C', face: 'M9 14.5h6' },
{ k: 2, label: 'Bajón', color: '#E08A4F', face: 'M9 15a4 4 0 0 1 6 0' },
{ k: 1, label: 'Mal', color: '#D9534F', face: 'M8.5 15.5a4.5 4.5 0 0 1 7 0' },
];
const SINTOMAS_SEG = ['Dormí bien', 'Tuve ansiedad', 'Me sentí motivado', 'Tomé mi medicación', 'Hice ejercicio'];
function PsicologiaService({ t, persona, onBack, onSchedule }) {
const accent = persona.accent;
const seed = [{ d: 'Lun', k: 3 }, { d: 'Mar', k: 2 }, { d: 'Mié', k: 4 }, { d: 'Jue', k: 3 }, { d: 'Vie', k: 4 }, { d: 'Sáb', k: 5 }];
const [log, setLog] = React.useState(seed);
const [todayMood, setTodayMood] = React.useState(null);
const [sintomas, setSintomas] = React.useState({});
const [saved, setSaved] = React.useState(false);
const moodOf = (k) => MOODS.find(m => m.k === k);
const guardar = () => {
if (todayMood == null) return;
setLog(l => [...l, { d: 'Hoy', k: todayMood }]);
setSaved(true);
};
return (
{/* treatment status */}
{Icon.brain({ s: 23, c: accent })}
En tratamiento con Dr. Suárez
Próxima sesión: jueves 4:00 p.m.
{/* mood check-in */}
¿Cómo te sientes hoy?
{MOODS.slice().reverse().map(m => (
))}
{/* symptoms checklist */}
{todayMood != null && (
Seguimiento de hoy
Lo que tu psicólogo pidió revisar
{SINTOMAS_SEG.map(s => {
const on = sintomas[s];
return (
);
})}
{!saved ? (
) : (
Listo, lo registré. Si veo varios días bajitos, le aviso a tu psicólogo. No estás solo. 💚
)}
)}
{/* mood history */}
Tu semana
{log.map((e, i) => {
const m = moodOf(e.k);
return (
);
})}
);
}
// ════ 4. DIAGNÓSTICO ═══════════════════════════════════════════
const COMPLEMENTARIOS = [
{ nombre: 'Perfil lipídico', motivo: 'Por tu hipertensión y riesgo cardiaco', tipo: 'laboratorio' },
{ nombre: 'Glucosa en ayunas', motivo: 'Control metabólico', tipo: 'laboratorio' },
{ nombre: 'Electrocardiograma', motivo: 'Antecedente familiar de infarto', tipo: 'examen' },
];
const DROGUERIAS = [
{ nombre: 'Cruz Verde · Laureles', dist: '450 m', dir: 'Cra 70 #C2-30', abierto: true, eps: true },
{ nombre: 'Farmatodo · Av. Nutibara', dist: '1.2 km', dir: 'Cl 33 #74-10', abierto: true, eps: true },
{ nombre: 'Droguería La Rebaja', dist: '1.8 km', dir: 'Cra 80 #45-12', abierto: false, eps: false },
];
function DiagnosticoService({ t, persona, profile, onBack, onSchedule }) {
const accent = persona.accent;
const [tab, setTab] = React.useState('estudios'); // estudios | droguerias
const [picked, setPicked] = React.useState({});
const [agendado, setAgendado] = React.useState(false);
const nPicked = Object.values(picked).filter(Boolean).length;
return (
{[['estudios', 'Estudios y labs'], ['droguerias', 'Droguerías']].map(([k, l]) => (
))}
{tab === 'estudios' && (
Plan complementario sugerido
Vita los recomienda según tu historia. Tócalos para agendar.
{COMPLEMENTARIOS.map((c, i) => {
const on = picked[c.nombre];
return (
);
})}
{nPicked > 0 && !agendado && (
)}
{agendado && (
{Icon.check({ s: 20, c: t.green, w: 3 })}Listo. Gestioné {nPicked} {nPicked > 1 ? 'estudios' : 'estudio'} con {profile.eps || 'tu EPS'}. Te aviso fecha, hora y lugar.
)}
)}
{tab === 'droguerias' && (
Dónde reclamar tus medicamentos
Aliadas y autorizadas por {profile.eps || 'tu EPS'}, cerca de ti.
{/* stylized map */}
{Icon.pin({ s: 12, c: t.green, fill: t.green })} Tú estás aquí · Laureles
{DROGUERIAS.map((d, i) => (
{Icon.pin({ s: 20, c: d.eps ? accent : t.muted, fill: 'none' })}
{d.nombre}
{d.dir} · {d.dist}
{d.abierto ? 'Abierto' : 'Cerrado'}
{d.eps && Cubre tu EPS}
))}
)}
);
}
function SecTitle({ t, children, style }) {
return
{children}
;
}
Object.assign(window, { NutricionService, PsicologiaService, DiagnosticoService, SecTitle });