export interface OrderData { Nome_Cliente: string; Data_Pedido: string; Valor_Pedido: number; ID_Produto: string; Descricao_Produto: string; Quantidade: number; Valor_Unitario: number; Recebido_Em?: string; ID_Pedido?: string; Fone_Cliente?: string; cliente_nome_fantasia?: string; id_vendedor?: string; nome_vendedor?: string; marketplace?: string; canal_venda?: string; numero_ecommerce?: string; } export interface StockData { produto_id: string; nome: string; saldo: number; delta_estoque: number; updated_at?: string; } export interface DateRange { start: Date; end: Date; } export type AuthRole = 'super_admin' | 'user'; export interface AuthUser { id: number | null; name: string; email: string; role: AuthRole; } export interface ManagedUser { id: number; name: string; email: string; isActive: boolean; createdAt: string; updatedAt: string; } export interface CreateUserResult { user: ManagedUser; temporaryPassword?: string; } export interface DashboardAnalytics { totalRevenue: number; totalOrders: number; orderLineCount?: number; averageOrderValue: number; salesByProduct: Array<{ name: string; id: string; value: number; }>; revenueByProduct: Array<{ name: string; id: string; value: number; }>; revenueBySeller?: Array<{ name: string; id: string; value: number; }>; ordersBySeller?: Array<{ name: string; id: string; value: number; }>; sellerRevenueByDate?: Array<{ name: string; id: string; date: string; value: number; orders?: number; }>; sellerRevenueByHour?: Array<{ name: string; id: string; hour: number; value: number; orders?: number; }>; } export interface ProductAnalyticsItem { id: string; name: string; quantitySold: number; revenue: number; orderLineCount: number; lastPrice: number; stock: number; firstSaleDate: string | null; lastSaleDate: string | null; } export interface ProductDetailsAnalytics { range: { start: string | null; end: string | null; }; productInfo: { id: string; name: string; price: number; }; chartData: Array<{ date: string; value: number; }>; totalSold: number; totalRevenue: number; } export interface ClientAnalyticsItem { customerKey: string; clientToken: string; name: string; phone: string; quantityPurchased: number; totalSpent: number; orderCount: number; lastPurchaseDate: string; } export interface ClientMetadataFilters { marketplace: string; canal_venda: string; seller: string; } export interface ClientSellerFilterOption { value: string; id: string; name: string; } export interface ClientFilterOptions { marketplaces: string[]; salesChannels: string[]; sellers: ClientSellerFilterOption[]; } export interface ClientPurchasePatternAnalytics { purchaseWeekdays: Array<{ label: string; value: number; }>; purchaseHours: Array<{ label: string; value: number; }>; } export interface RfmClient { customerKey: string; clientToken: string; name: string; phone: string; monetary: number; frequency: number; quantityPurchased: number; lastPurchaseDate: string; recencyDays: number; recencyScore: 1 | 2 | 3; frequencyScore: 1 | 2 | 3; monetaryScore: 1 | 2 | 3; valueScore: 1 | 2 | 3; rfmScore: string; segmentKey: string; segmentLabel: string; } export interface RfmSegment { key: string; label: string; count: number; totalRevenue: number; averageRevenue: number; } export interface RfmAnalytics { range: { start: string | null; end: string | null; }; clients: RfmClient[]; segments: RfmSegment[]; matrix: { recencyScores: number[]; valueScores: number[]; }; } export interface GroupedClientOrder { date: string; orderId: string; orderTotal: number; items: OrderData[]; } export interface ClientDetailsAnalytics { range: { start: string | null; end: string | null; }; clientToken: string; chartData: Array<{ date: string; value: number; }>; purchaseWeekdays?: Array<{ label: string; value: number; }>; purchaseHours?: Array<{ label: string; value: number; }>; groupedOrders: GroupedClientOrder[]; allTimeOrderCount: number; clientName: string; clientPhone: string; hasClient: boolean; periodAverageTicket: number; periodOrderCount: number; periodSpent: number; periodItems: number; } export type CampaignStatus = 'pending' | 'processing' | 'sent' | 'failed' | 'skipped'; export interface CampaignQueueItem { id: number; base_product_name: string; produto_id: string; nome: string; saldo: number; delta_estoque: number; status: CampaignStatus; attempts: number; last_error?: string | null; created_at: string; updated_at: string; sent_at?: string | null; } export interface CampaignGroup { key: string; baseProductName: string; status: CampaignStatus; totalDelta: number; rowCount: number; attempts: number; lastError?: string | null; createdAt: string; updatedAt: string; sentAt?: string | null; items: CampaignQueueItem[]; } export interface CampaignQueueSummary { threshold: number; maxAttempts: number; groups: CampaignGroup[]; rows: CampaignQueueItem[]; } export interface CampaignProductPreview { baseProduct: string; total_delta: number; sizes: Array<{ id: string; nome: string; delta: number; saldo: number; }>; } export interface CampaignPreview { threshold: number; readyProducts: CampaignProductPreview[]; belowThresholdProducts: CampaignProductPreview[]; productsText: string; customerCount: number; customersPreview: Array<{ nome: string; fone: string; total_gasto?: string; total_comprado?: string; }>; } export interface CampaignProcessSummary { claimed: number; sentGroups: number; skippedGroups: number; failedGroups: number; pendingBelowThresholdGroups: number; }