import { useForm } from '@inertiajs/react'; export type TraceabilityPlan = { hash: string; code_matches: boolean; backup_ready: boolean; applied: boolean; reversed: boolean; history: { id: string; action: string; actor_user_id: number; occurred_at: string; reason: string | null; }[]; plan: { target: { database: string; port: number }; rows: { key: string; reference: string; association: string; role: string; source_reference: string | null; source_quote: string | null; supports: string; traceability: string; existing_validation: string | null; effect: string; }[]; updates: { id: string; reference: string; current: { source_reference: string | null; evidence_reference: string | null; }; values: { source_reference: string; evidence_reference: string }; source_quote: string; effect: string; }[]; pending: { reference: string; reason: string }[]; }; }; export default function TerritorialTraceabilityPlan({ preview, }: { preview: TraceabilityPlan; }) { const form = useForm({ hash: preview.hash, operation: 'traceability', reverse: false, reason: '', confirm_reverse: false, }); return (

V2 — aplicar rastreabilidade territorial

Destino: {preview.plan.target.database}: {preview.plan.target.port}. Fontes oficiais identificadas são aceites; não se repete validação da proveniência. Estados existentes são preservados.

{preview.plan.rows.length} associações/fontes;{' '} {preview.plan.updates.length} atualizações de referências. Nenhuma nova implantação ou relação por proximidade.

Backup/restauro/reversão:{' '} {preview.backup_ready ? 'verificados (validade 24 horas)' : 'pendentes ou expirados'}{' '} · Código:{' '} {preview.code_matches ? 'corresponde ao plano' : 'plano deve ser atualizado'}{' '} · Aplicação:{' '} {preview.applied ? 'aplicada' : preview.reversed ? 'revertida; novo plano necessário' : 'não aplicada'}

Histórico de aplicação e reversão {preview.history.map((event) => (

{event.occurred_at} · {event.action} · conta{' '} {event.actor_user_id} · Motivo:{' '} {event.reason ?? 'não registado no evento original'}

))}
{ e.preventDefault(); form.transform(() => ({ hash: preview.hash, operation: 'traceability', reverse: preview.applied, reason: form.data.reason, confirm_reverse: form.data.confirm_reverse, })); form.post('/management/relationship-repair', { preserveScroll: true, }); }} > {preview.applied && (
Reversão — restitui as referências anteriores