const { useState, useMemo, useEffect } = React; window.AdminSubsidios = function({ globalUsers = [], settings = {}, refreshData }) { const [subsidies, setSubsidies] = useState([]); const [showModal, setShowModal] = useState(false); const [userId, setUserId] = useState(''); const [startDate, setStartDate] = useState(window.getNICDate()); const [endDate, setEndDate] = useState(window.getNICDate()); const [diagnosis, setDiagnosis] = useState(''); const [ticketNum, setTicketNum] = useState(''); const [carenciaAction, setCarenciaAction] = useState('vacaciones'); // 'vacaciones', 'con_goce', 'sin_goce' const [isSaving, setIsSaving] = useState(false); const loadSubsidies = async () => { const res = await window.apiCall('get_subsidies', {}); if (res && res.success) setSubsidies(res.subsidies || []); }; useEffect(() => { loadSubsidies(); }, []); const totalDays = useMemo(() => { return window.getDaysDiff(startDate, endDate); }, [startDate, endDate]); const carenciaDays = Math.min(3, totalDays); const inssCoveredDays = Math.max(0, totalDays - 3); const handleSaveSubsidy = async (e) => { e.preventDefault(); if (!userId) return alert("Selecciona un colaborador."); setIsSaving(true); const res = await window.apiCall('save_subsidy', { user_id: userId, start_date: startDate, end_date: endDate, total_days: totalDays, diagnosis: diagnosis || 'Reposo Médico INSS', carencia_action: carenciaAction, inss_ticket_num: ticketNum }); setIsSaving(false); if (res && res.success) { setShowModal(false); setDiagnosis(''); setTicketNum(''); loadSubsidies(); if (refreshData) await refreshData(); } else { alert("Error al registrar subsidio: " + (res?.error || "")); } }; return (
{/* CABECERA */}

Control de Subsidios Médicos (INSS / MINSA)

Gestión de Carencia (Días 1-3) • Cobertura INSS (Día 4 en adelante) • Protección Salarial

{/* TABLA DE HISTORIAL DE SUBSIDIOS */}
{subsidies.length === 0 ? ( ) : ( subsidies.map(s => ( )) )}
Colaborador Período de Reposo Días Totales Tratamiento Legal Diagnóstico / No. Boleta Acción
No hay registros de subsidios activos ni históricos.
{s.user_name} {window.formatDateToNIC(s.start_date)} al {window.formatDateToNIC(s.end_date)} {s.total_days} d
• Carencia (1-3 d): {s.carencia_days} d ({s.carencia_action.toUpperCase()}) {s.inss_covered_days > 0 ? ( • INSS Cubre: {s.inss_covered_days} d (Subsidio Económico) ) : ( • Sin cobertura INSS (≤ 3 días) )}
{s.diagnosis} {s.inss_ticket_num && Boleta: {s.inss_ticket_num}}
{/* MODAL REGISTRAR SUBSIDIO */} {showModal && (
setShowModal(false)}>
e.stopPropagation()}>

Registrar Orden de Subsidio / Reposo

Normativa de Seguridad Social de Nicaragua

setStartDate(e.target.value)} className="w-full p-3 bg-slate-50 border rounded-xl font-bold text-xs" required />
setEndDate(e.target.value)} className="w-full p-3 bg-slate-50 border rounded-xl font-bold text-xs" required />
{/* TARJETA DINÁMICA DE REGLA INSS */}
Duración Total: {totalDays} día(s) Carencia: {carenciaDays} d | INSS: {inssCoveredDays} d

{totalDays <= 3 ? ( "Reposo menor o igual a 3 días: El INSS no emite pago de subsidio por período de carencia." ) : ( `Los primeros 3 días son de carencia. A partir del 4.º día (${inssCoveredDays} días), el colaborador cobra el 60% de subsidio económico directamente en el INSS.` )}

setDiagnosis(e.target.value)} placeholder="Ej. Faringitis, Lumbalgia..." className="w-full p-3 bg-slate-50 border rounded-xl font-bold text-xs" />
setTicketNum(e.target.value)} placeholder="Ej. SUB-84920" className="w-full p-3 bg-slate-50 border rounded-xl font-bold text-xs" />
)}
); };