// vita-collect.jsx — end-of-triage collection: documents + health plan (EPS) + pending items
const EPS_LIST = ['Sura', 'Nueva EPS', 'Sanitas', 'Salud Total', 'Compensar', 'Famisanar', 'Coosalud', 'Otra'];
const PREPAGADA_LIST = ['Colsanitas', 'Sura', 'MedPlus', 'Coomeva', 'Plan complementario', 'Ninguna'];
const DOC_REQUESTS = [
{ key: 'historia', label: 'Última historia clínica', hint: 'Tu resumen médico más reciente' },
{ key: 'examenes', label: 'Exámenes recientes', hint: 'Laboratorios, imágenes, resultados' },
{ key: 'visita', label: 'Última visita al médico', hint: 'Epicrisis, orden o recomendaciones' },
{ key: 'formula', label: 'Fórmulas y medicamentos', hint: 'Lo que te recetaron' },
];
const UPLOAD_METHODS = [
{ m: 'PDF', icon: 'doc' }, { m: 'Foto', icon: 'camera' }, { m: 'Escanear', icon: 'scan' },
];
const PENDING_TYPES = [
{ tipo: 'cita', label: 'Cita médica', icon: 'calendar' },
{ tipo: 'examen', label: 'Examen', icon: 'scan' },
{ tipo: 'laboratorio', label: 'Laboratorio', icon: 'lab' },
{ tipo: 'medicamento', label: 'Medicamento', icon: 'pill' },
];
function CollectScreen({ t, persona, profile, onComplete }) {
const accent = persona.accent;
const [uploaded, setUploaded] = React.useState({}); // key -> method
const [pickerFor, setPickerFor] = React.useState(null);
const [eps, setEps] = React.useState(profile.eps || '');
const [prepagada, setPrepagada] = React.useState(profile.prepagada || '');
const [pendings, setPendings] = React.useState([]);
const [addType, setAddType] = React.useState(null);
const [addText, setAddText] = React.useState('');
const docs = Object.entries(uploaded).map(([k, m]) => {
const d = DOC_REQUESTS.find(x => x.key === k);
return (d ? d.label : k) + ' (' + m + ')';
});
const addPending = () => {
if (!addText.trim()) return;
const meta = PENDING_TYPES.find(p => p.tipo === addType);
setPendings(ps => [...ps, { id: 'sg' + Date.now(), tipo: addType, titulo: addText.trim(), detalle: meta.label + ' por gestionar', estado: 'pendiente' }]);
setAddText(''); setAddType(null);
};
return (
{/* Vita intro */}
Ahora yo me encargo
Súbeme lo que tengas a la mano — PDF, foto o escaneado. Yo lo guardo, lo organizo y le hago seguimiento a cada cosa por vos.
{/* Documents */}
Sube tus documentos
{DOC_REQUESTS.map(d => {
const done = uploaded[d.key];
return (
);
})}
{/* Health plan */}
Tu seguro de salud
EPS
Medicina prepagada o plan
{/* Pending items */}
¿Te dejaron pendientes?
Citas por pedir, exámenes, laboratorios o medicamentos. Yo me encargo de que se cumplan.
{PENDING_TYPES.map(p => (
))}
{addType && (
setAddText(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') addPending(); }}
placeholder={'Ej. ' + (addType === 'cita' ? 'Control con cardiólogo' : addType === 'examen' ? 'Ecografía abdominal' : addType === 'laboratorio' ? 'Perfil lipídico' : 'Losartán 50mg')}
style={{ flex: 1, padding: '12px 14px', borderRadius: 13, border: `1.5px solid ${t.stroke}`, background: t.dark ? 'rgba(255,255,255,0.05)' : '#fff', color: t.text, fontSize: 14.5, fontFamily: 'Hanken Grotesk, sans-serif', outline: 'none' }} />
)}
{pendings.length > 0 && (
{pendings.map(p => {
const meta = PENDING_TYPES.find(x => x.tipo === p.tipo);
return (
{Icon[meta.icon]({ s: 17, c: accent })}
{p.titulo}
);
})}
)}
{/* upload method picker */}
{pickerFor && (
setPickerFor(null)} style={{ position: 'absolute', inset: 0, zIndex: 30, background: 'rgba(3,10,24,0.55)', backdropFilter: 'blur(4px)', display: 'flex', alignItems: 'flex-end', animation: 'vitaFade .2s both' }}>
e.stopPropagation()} style={{ width: '100%', borderRadius: '24px 24px 0 0', background: t.dark ? t.bg1 : '#fff', border: `1px solid ${t.stroke}`, padding: '14px 20px 36px', animation: 'vitaSheet .3s cubic-bezier(.2,.8,.2,1) both' }}>
¿Cómo quieres subirlo?
{UPLOAD_METHODS.map(u => (
))}
)}
{/* CTA */}
onComplete({ docs, eps, prepagada, pendings })}>
{Icon.sparkle({ s: 17, c: t.onAccent })} Generar mi análisis (ASIS)
);
}
function CollectTitle({ t, icon, accent, children }) {
return (
{Icon[icon]({ s: 15, c: accent })}
{children}
);
}
function ChipRow({ items, value, onPick, t, accent }) {
return (
{items.map(it => {
const on = value === it;
return (
);
})}
);
}
Object.assign(window, { CollectScreen });