import { Head, useForm } from '@inertiajs/react'; import ProfileNavigation from '@/components/profile-navigation'; import { button, control, Pagination, type Paginated, } from '@/pages/management/shared'; type Event = { id: string; action: string; actor_user_id: number | null; entity_type: string; source_system: string; occurred_at: string; }; export default function Audit({ records, filters, }: { records: Paginated; filters: Record; }) { const form = useForm({ actor_id: filters.actor_id ?? '', action: filters.action ?? '', record_id: filters.record_id ?? '', from: filters.from ?? '', until: filters.until ?? '', }); const search = new URLSearchParams( Object.entries(form.data).filter(([, value]) => value !== ''), ); search.set('format', 'json'); return (

Auditoria de acessos e decisões

Consulta somente de leitura. A exportação contém metadados; não inclui credenciais, documentos nem snapshots privados decifrados. Cada exportação apresenta o limite aplicado.

{ e.preventDefault(); form.get('/perfis/auditoria'); }} > {( [ 'actor_id', 'action', 'record_id', 'from', 'until', ] as const ).map((field) => ( ))}
{Object.values(form.errors).map((error) => (

{error}

))} Exportar metadados JSON, até 1.000 eventos
{records.data.map((e) => ( ))}
Data UTC Conta Ação Recurso Origem
{e.occurred_at} {e.actor_user_id} {e.action} {e.entity_type} {e.source_system}
{!records.data.length && (

Nenhum evento corresponde aos filtros.

)}
); }