import type { LineItem } from './line-items'; import type { OptionDisplayData } from '../option-display'; export interface TireSize { width: number; ratio: number; rim: number; /** Forma canónica `205/55R16`. */ normalized: string; } export type ProductQuery = { kind: 'empty'; raw: string; } | { kind: 'barcode'; raw: string; barcode: string; } | { kind: 'tire_size'; raw: string; tire: TireSize; } | { kind: 'text'; raw: string; text: string; }; export declare function parseTireSize(input: string): TireSize | null; export declare function parseProductQuery(raw: string): ProductQuery; export interface StockByWarehouse { warehouse_id: string; warehouse_name?: string; available: number; } export interface ProductVariant { id: string; /** «Rin 16 · 205/55R16 · 91V». */ label: string; sku?: string; barcode?: string; price?: number; /** Costo de catálogo (compras). Opcional; el precio de lista sigue en `price`. */ cost?: number; stock?: StockByWarehouse[]; } export interface ProductResult { id: string; name: string; sku?: string; barcode?: string; /** Clave del proveedor (búsqueda por SKU del proveedor). */ supplier_sku?: string; kind?: 'product' | 'tire' | 'service' | 'bundle'; price?: number; /** Costo de catálogo (compras). */ cost?: number; tax_rate?: number; tire?: TireSize; variants?: ProductVariant[]; stock?: StockByWarehouse[]; /** Paquetes automáticos: ids/nombres que se sugieren junto al producto. */ bundle_items?: Array<{ product_id: string; name: string; quantity: number; }>; /** Unidad de venta del catálogo (pza, juego, kg…). */ unit?: string; /** Campos de extensión del producto (fiscal_data.*) que se copian al renglón. */ extensions?: Record; /** * Presentación declarativa del catálogo (manifest `option_display` del * modelo de producto): la fila del buscador la pinta tal cual — precio, * existencia aportada por inventory con su tono, badges. Ver * `withOptionDisplays`. */ display?: OptionDisplayData | null; } /** Existencia disponible: de la variante o del producto, en un almacén o en total. */ export declare function availableStock(source: { stock?: StockByWarehouse[]; }, warehouseId?: string): number | undefined; /** Producto (+ variante) → renglón listo para . */ export declare function productToLine(p: ProductResult, variant?: ProductVariant, opts?: { warehouseId?: string; quantity?: number; }): LineItem; //# sourceMappingURL=product-search.d.ts.map