import { useEffect, useState } from 'react'; import { Link, useParams } from 'react-router'; import { Alert, LoadingBlock, errorMessage } from '../components/Feedback'; import { Icon } from '../components/Icon'; import { inspectionActStatusClass, inspectionActStatusLabel, inspectionActVersionEventLabel, } from '../features/inspections/inspectionActPresentation'; import { InspectionClosurePanel } from '../features/inspections/InspectionClosurePanel'; import { InspectionFindingsPanel } from '../features/inspections/InspectionFindingsPanel'; import { getInspectionAct, getInspectionVisit } from '../lib/api'; import type { InspectionAct, InspectionVisit } from '../lib/api'; import { formatDate } from '../lib/format'; export function InspectionActEditorPage() { const { actId } = useParams(); const [visit, setVisit] = useState(null); const [act, setAct] = useState(null); const [loading, setLoading] = useState(Boolean(actId)); const [error, setError] = useState(''); useEffect(() => { if (!actId) return; setLoading(true); setError(''); getInspectionAct(actId) .then(async (value) => { setAct(value); setVisit(await getInspectionVisit(value.visitId)); }) .catch((requestError) => setError(errorMessage(requestError))) .finally(() => setLoading(false)); }, [actId]); if (!actId) { return
Inspecciones/Acta
OPERACIÓN EXCLUSIVA EN APK

Crear acta de inspección

Las actas sólo pueden generarse durante la visita física desde la aplicación móvil.

Usá la APK con un usuario inspector. El dashboard recibirá el acta, sus hallazgos y firmas cuando la aplicación sincronice.

Volver a inspecciones
; } if (loading) return ; return
Inspecciones/{visit && <>{visit.code}/}{act?.code ?? 'Acta'}
ACTA DE INSPECCIÓN · SÓLO LECTURA

{act?.title ?? 'Acta'}

{act ? `${act.code} · versión ${act.currentVersion}` : 'Consulta del documento sincronizado desde la APK.'}

{act && {inspectionActStatusLabel(act.status)}}
{error && {error}} {visit &&

{visit.code} El contenido constatado, los hallazgos y el cierre se registran exclusivamente desde la APK. Este dashboard permite consultarlos y gestionar el seguimiento posterior.

} {act?.report &&

Informe relacionado: {act.report.code}. {act.report.pdfStatus === 'READY' ? 'El documento PDF está disponible.' : 'El contenido está congelado y el PDF continúa pendiente de composición.'}

} {act?.status === 'CLOSED' && !act.report &&

Informe pendiente de emisión. La solicitud se realiza desde la APK por un inspector asignado a la visita.

} {act?.status === 'CANCELLED' && Cancelada: {act.cancellationReason}} {act &&
CONTENIDO SINCRONIZADO

{act.code}

Actualizado {formatDate(act.updatedAt)}
Fecha y hora{formatDate(act.occurredAt)}
Título{act.title}
Registros{act.assets.length}
Hallazgos{act.findingCount}
DESCRIPCIÓN DE LO ACTUADO

{act.summary}

{act.observations && <>OBSERVACIONES

{act.observations}

}
INVENTARIO DEL ACTA

Referencias congeladas

{act.assets.length}
{act.assets.map((asset) =>
{asset.name}{asset.code} · {asset.typeName}
)}
} {act && } {act && } {act &&
VERSIONES INMUTABLES

Historial exacto del acta

Cada sincronización conserva el contenido y las versiones de los registros referenciados.

{act.versions.length}
{act.versions.map((version) =>
v{version.versionNumber}{inspectionActVersionEventLabel(version.event)}{formatDate(version.createdAt)} · {version.actorUsername ?? 'sistema'}
{JSON.stringify(version.snapshot, null, 2)}
)}
}
; }