export type FlyerImportMatchVia = 'alias' | 'exact' | 'token' | 'none'; export type FlyerReasonDescriptor = { code: string; kind: 'parse' | 'match'; title: string; message: string; severity: 'info' | 'warning' | 'error'; location: string | null; }; export type FlyerImportItem = { flyerItemId: number | null; rawName: string; normalizedName: string; brand: string | null; category: string | null; categoryId: number | null; price: number | null; priceUnit: string | null; comparisonPrice: number | null; comparisonUnit: string | null; weight: string | null; bundleWeight: string | null; isBundle: boolean; bundleItems: string[]; offerText: string | null; isOffer: boolean; offerLimitText: string | null; parseConfidence: number; parseReasons: string[]; parseReasonsDetailed: FlyerReasonDescriptor[]; matchedProductId: number | null; matchedProductName: string | null; matchedVia: FlyerImportMatchVia; matchConfidence: number; matchReasons: string[]; matchReasonsDetailed: FlyerReasonDescriptor[]; }; export type FlyerImportResponse = { sessionId: number | null; retailer: 'willys'; parserVersion: 'v1'; sourceAvailable: boolean; sourceFileName: string | null; sourceMimeType: string | null; sourceFileSize: number | null; items: FlyerImportItem[]; warnings: string[]; };