import type { ApiClient } from '../api-context'; /** Espejo de dynamic.ApprovalRequest (JSON). jsonb llega como string. */ export interface ApprovalRequestDTO { id: string; addon_key: string; model_key: string; record_id: string; action_key: string; constraint_key: string; kind: 'constraint' | 'action' | 'explicit' | 'pin'; label: string; status: 'pending' | 'approved' | 'applied' | 'failed' | 'rejected' | 'expired'; requested_by: string; requested_by_role: string; requested_at: string; expires_at: string | null; roles: string | string[]; reason_required: boolean; payload: string | Record; snapshot: string | Record; violation: string | Record; decided_by: string | null; decided_at: string | null; reason: string; error: string; } export interface ApprovalListQuery { status?: ApprovalRequestDTO['status']; kind?: ApprovalRequestDTO['kind']; model?: string; /** Solo las que yo pedí. */ mine?: boolean; /** Solo las que mis roles pueden decidir (default de la bandeja). */ for_me?: boolean; page?: number; per_page?: number; } /** Categoría visible en la bandeja. El mapeo policy → categoría es extensible por addons. */ export interface ApprovalCategory { key: string; label: string; icon?: string; /** Coincide si devuelve true (p. ej. por action_key, constraint_key o model_key). */ match: (r: ApprovalRequestDTO) => boolean; } /** Los addons registran su categoría al cargar (purchases: «Compras», fiscal_mexico: «Cancelación CFDI»…). */ export declare function registerApprovalCategory(c: ApprovalCategory): () => void; export declare function categorize(r: ApprovalRequestDTO): string; export declare function groupApprovals(items: readonly ApprovalRequestDTO[]): Record; export declare function parseJSONField>(v: string | T | null | undefined): T | null; /** Cliente fino sobre las rutas del kernel; la UI lo usa vía useApi(). */ export declare function approvalsClient(api: ApiClient): { list: (q?: ApprovalListQuery) => Promise<{ items: ApprovalRequestDTO[]; total: number; }>; count: () => Promise; approve: (id: string, reason?: string) => Promise<{ data: any; headers?: any; }>; reject: (id: string, reason: string) => Promise<{ data: any; headers?: any; }>; approveWithPin: (id: string, pin: string, reason: string) => Promise<{ data: any; headers?: any; }>; }; //# sourceMappingURL=approvals.d.ts.map