import type { CrossDocumentsTemplateConfig } from '../template/MasterDocumentTemplate.types'; import type { AvailableSourceDocument, CrossedSourceDocument } from '../MasterDocument.types'; import type { CrossingFetch } from './crossingFetch'; interface UseCrossDocumentsOptions { config: CrossDocumentsTemplateConfig | undefined; documentId: string | undefined; docState: string; /** Salida HTTP (enruta por `adapter.genericFetch`). Ver {@link createCrossingFetch}. */ crossingFetch: CrossingFetch; /** * ¿El usuario tiene el permiso (`requiresPermission`)? El kit no resuelve RBAC; * el consumidor inyecta este booleano. Si se omite, se asume `true`. */ canCross?: boolean; /** Notifica al consumidor tras un cross/uncross exitoso (para invalidar detail/totals/FactBox). */ onCrossingChanged?: () => void; } export interface CrossDocumentsState { available: AvailableSourceDocument[]; crossed: CrossedSourceDocument[]; selectedIds: string[]; /** `Σ(ECDs.net) − Σ(DCDs.net)` de la selección actual. */ subtotal: number; /** Subtotal consolidado de los documentos ya cruzados. */ crossedSubtotal: number; loading: boolean; busy: boolean; /** Editable = estado en `crossOn` Y permiso concedido. */ editable: boolean; error: string | undefined; } export interface CrossDocumentsActions { toggleSelect: (id: string, selected: boolean) => void; cross: () => Promise; uncross: (sourceDocumentId: string) => Promise; refresh: () => void; clearError: () => void; } /** * Motor de cruce WHOLE-DOCUMENT (Épica 105-5). Devuelve `null` cuando * `config` está ausente o deshabilitado. Mantiene la misma forma que * {@link useCrossing} (per-línea) pero con el modelo documento-entero: * selección todo-o-nada, signo +/−, subtotal `Σ(ECD)−Σ(DCD)`, cruzar/desvincular. */ export declare function useCrossDocuments(options: UseCrossDocumentsOptions): { state: CrossDocumentsState; actions: CrossDocumentsActions; } | null; export {}; //# sourceMappingURL=useCrossDocuments.d.ts.map