import { useEffect, useState } from 'react'; import { Link } from 'react-router'; import { Alert, EmptyState, LoadingBlock, errorMessage } from '../components/Feedback'; import { useOperationalContext } from '../context/OperationalContext'; import { listActAdministrationQueue } from '../lib/api'; import type { ActAdministrationQueueItem, ActAdministrationState, PageMeta } from '../lib/api'; import { formatDate } from '../lib/format'; const states: Array<{value:'ALL'|ActAdministrationState;label:string}> = [ {value:'ALL',label:'Todas'}, {value:'NEW',label:'Nuevas'}, {value:'WAITING_RESPONSE',label:'Esperando respuesta'}, {value:'DUE_SOON',label:'Próximas a vencer'}, {value:'OVERDUE',label:'Vencidas'}, {value:'RESPONSE_RECEIVED',label:'Respondidas'}, {value:'VERIFICATION_PENDING',label:'A verificar'}, {value:'COMMITMENT_OVERDUE',label:'Compromiso vencido'}, {value:'REGULARIZED',label:'Regularizadas'}, ]; const label=(s:ActAdministrationState)=>states.find(x=>x.value===s)?.label??s; export function ActAdministrationPage(){ const ctx=useOperationalContext(); const [state,setState]=useState<'ALL'|ActAdministrationState>('ALL'); const [items,setItems]=useState([]); const [meta,setMeta]=useState({page:1,pageSize:25,total:0,totalPages:0}); const [counters,setCounters]=useState>>({}); const [loading,setLoading]=useState(true); const [error,setError]=useState(''); useEffect(()=>{setLoading(true);setError('');listActAdministrationQueue({state,areaId:ctx.areaId||undefined,companyId:ctx.companyId||undefined,page:1,pageSize:50}).then(r=>{setItems(r.data);setMeta(r.meta);setCounters(r.counters)}).catch(e=>setError(errorMessage(e))).finally(()=>setLoading(false));},[state,ctx.areaId,ctx.companyId]); return
SEGUIMIENTO ADMINISTRATIVO

Seguimiento de Actas

El plazo y la respuesta de la empresa se gestionan sobre el Acta completa. Los hallazgos quedan dentro de su expediente.

{states.map(s=>)}
{error&&{error}}{loading?:items.length===0?:
{meta.total} acta{meta.total===1?'':'s'}
{items.map(a=>)}
ActaÁrea / empresaHallazgosPlazo empresaRespuestaEstado
{a.actCode}{formatDate(a.occurredAt)}{a.areaName??'—'}{a.companyName??'—'}{a.openFindingCount} abiertos / {a.findingCount}{a.responseDueOn?formatDate(a.responseDueOn):'Sin definir'}{a.responseReceivedOn?formatDate(a.responseReceivedOn):'Pendiente'}{label(a.adminState)}Gestionar
}
; }