// fichaje.eu — Screen: Documentos (company) + Configuración + Descubrir const ScreenDocumentos = () => (
{COMPANY_DOCS_FOLDERS.map((f, i) => (
{f.name}
{f.count} documentos
))}
Documentos recientes
} placeholder="Buscar documentos…" style={{ width: 240, background: 'var(--slate-50)' }}/> }>Subir documento
{[ { name: 'Manual de bienvenida 2026.pdf', folder: 'Onboarding', date: '11 may', author: 'Helena Prats', size: '2.4 MB', signed: '24/24' }, { name: 'Plantilla — Propuesta comercial.docx', folder: 'Plantillas', date: '08 may', author: 'Joel Vidal', size: '128 KB', signed: '—' }, { name: 'Protocolo de uso de IA generativa.pdf', folder: 'Protocolos', date: '06 may', author: 'Núria Castells',size: '486 KB', signed: '18/24' }, { name: 'Evaluación riesgos PRL 2026.pdf', folder: 'PRL', date: '02 may', author: 'External', size: '1.1 MB', signed: '22/24' }, { name: 'Manual de marca (v3).pdf', folder: 'Plantillas', date: '28 abr', author: 'Berta Folch', size: '12.4 MB', signed: '—' }, { name: 'GDPR — Acuerdo de tratamiento.pdf', folder: 'Compliance & GDPR', date: '15 abr', author: 'Helena Prats', size: '342 KB', signed: '24/24' }, ].map((d, i, arr) => (
{d.name.split('.').pop().toUpperCase()}
{d.name}
{d.size}
{d.folder}
{d.author.split(' ')[0]}
{d.date}
{d.signed !== '—' ? {d.signed} : }
))}
); const ScreenConfig = ({ theme = DEFAULT_THEME, setTheme = () => {} }) => { const sections = [ { i: , t: 'Empresa', d: 'Datos fiscales, sedes, identidad', tone: 'brand' }, { i: , t: 'Horarios y turnos', d: 'Calendarios laborales, fines de semana', tone: 'violet' }, { i: , t: 'Políticas de ausencias', d: 'Vacaciones, asuntos propios, médico', tone: 'success' }, { i: , t: 'Centros y geolocalización', d: 'Oficinas, IPs autorizadas', tone: 'warning' }, { i: , t: 'Equipos y departamentos', d: '5 equipos · 12 puestos', tone: 'pink' }, { i: , t: 'Permisos y roles', d: '4 roles configurados', tone: 'teal' }, { i: , t: 'Notificaciones', d: 'Email, push, recordatorios', tone: 'brand' }, { i: , t: 'Integraciones', d: 'Slack, Google, n8n, Sage', tone: 'violet' }, { i: , t: 'Seguridad', d: 'SSO, 2FA, sesiones, auditoría', tone: 'warning' }, ]; return (
Configuración
{sections.map((s, i) => ( ))}
}/> }/>
iA
Logo de la empresa
PNG o SVG. Mínimo 256×256 px.
}>Subir nuevo Eliminar
Color de marca
Define el tono que se aplica a botones, enlaces, estados activos y acentos del producto.
{Object.entries(THEMES).map(([key, t]) => { const active = theme.brand === key; return ( ); })}
Tono de la barra lateral
Cómo se ve el menú de la izquierda.
{Object.entries(SIDEBAR_TINTS).map(([key, s]) => ( setTheme({ sidebar: key })} label={s.label} preview={}/> ))}
Fondo del contenido
Color detrás de los módulos para destacar las tarjetas blancas.
{Object.entries(CONTENT_BGS).map(([key, c]) => ( setTheme({ content: key })} label={c.label} preview={}/> ))}
); }; const ScreenDescubrir = () => (
Sácale más a fichaje.eu
Conoce las funciones avanzadas, integra con tus herramientas y automatiza procesos de RRHH.
}>Ver todas
{[ { i: , t: 'Automatizaciones', d: 'Crea flujos para onboarding, alertas de horas extra, recordatorios y aprobaciones.', tone: 'brand', new: true }, { i: , t: 'Integraciones', d: 'Conecta con Slack, Google Workspace, n8n, Sage, Holded y más de 40 herramientas.', tone: 'violet' }, { i: , t: 'Informes avanzados', d: 'Cuadros de mando personalizados, exportaciones programadas y análisis por proyecto.', tone: 'success' }, { i: , t: 'Compliance Center', d: 'Centraliza protocolos, firmas y formaciones obligatorias con auditoría completa.', tone: 'warning', new: true }, { i: , t: 'Asistente IA', d: 'Pregunta a tu asistente de RRHH: "¿Quién está fuera la próxima semana?", "¿Cuántas horas trabajó Marc en abril?"', tone: 'pink', new: true }, { i: , t: 'Fichaje móvil', d: 'App nativa iOS y Android con geolocalización, modo offline y reconocimiento facial opcional.', tone: 'teal' }, ].map((f, i) => (
{f.i}
{f.t}
{f.new && Nuevo}
{f.d}
Saber más
))}
); const SwatchOption = ({ active, onClick, label, preview }) => ( ); const SidebarPreview = ({ tint }) => (
); const ContentPreview = ({ bg }) => (
); Object.assign(window, { ScreenDocumentos, ScreenConfig, ScreenDescubrir, SwatchOption });