import { type CatalogLineField, type LineItem } from './line-items'; import { type ProductResult, type ProductVariant } from './product-search'; export type PriceSource = 'sale' | 'cost' | 'origin'; export type DocumentLinesMode = 'free' | 'from_source'; /** Precio que se escribe en el renglón según el documento. */ export declare function priceFromProduct(product: ProductResult, variant: ProductVariant | undefined, source: PriceSource): number; /** Rellena un renglón con el producto elegido (nombre, SKU, precio, costo de catálogo, existencia). */ export declare function applyProductToLine(line: LineItem, product: ProductResult, variant?: ProductVariant, opts?: { priceSource?: PriceSource; warehouseId?: string; quantity?: number; }): LineItem; /** * Campos que el usuario cambió a mano respecto de lo que puso el catálogo * («dirty» por campo). Sin foto (renglón libre, o cargado de un documento * origen con sus propios precios) todo cuenta como capturado: nada se pisa. */ export declare function lineOverrides(line: LineItem): Set; /** * El producto del renglón cambió en el catálogo (se editó desde la celda): * actualiza SOLO los campos que siguen igual a lo que el catálogo había puesto; * lo que el usuario sobrescribió se respeta y el valor nuevo queda en * `catalog_pending` para ofrecer «aplicar». Nunca toca la cantidad, el tope de * lo pendiente ni el vínculo con el documento origen. Siempre refresca lo que * no se captura en el renglón (precio de catálogo, costo, extensiones, existencia). */ export declare function refreshLineFromProduct(line: LineItem, product: ProductResult, opts?: { priceSource?: PriceSource; warehouseId?: string; }): LineItem; /** «Aplicar» el aviso del catálogo: los valores pendientes entran al renglón. */ export declare function applyCatalogPending(line: LineItem): LineItem; /** * Agrega el producto como renglón. Por defecto, un segundo clic del mismo * producto incrementa la cantidad (como el catálogo de Compras) y respeta `max_quantity`. */ export declare function addProductLine(lines: LineItem[], product: ProductResult, variant?: ProductVariant, opts?: { priceSource?: PriceSource; warehouseId?: string; quantity?: number; mergeSameProduct?: boolean; }): LineItem[]; export type LineGridCommand = 'add' | 'next' | 'delete' | 'none'; /** Enter agrega, Tab avanza, Supr/Backspace en celda vacía borra. No actúa si hay sugerencias abiertas. */ export declare function lineGridKeyCommand(key: string, opts?: { suggestionsOpen?: boolean; cellEmpty?: boolean; mode?: DocumentLinesMode; }): LineGridCommand; //# sourceMappingURL=document-lines.d.ts.map