import apiClient from './client'; // Report Types export interface ValuationSummary { totalItems: number; totalCost: number; totalPrice: number; potentialMargin: number; potentialMarginPercent: number; } export interface ValuationByCategory { category: string; itemCount: number; totalCost: number; totalPrice: number; margin: number; } export interface ValuationItem { id: string; name: string; category: string; quantity: number; cost: number; price: number; totalCost: number; totalPrice: number; margin: number; } export interface ValuationReport { summary: ValuationSummary; byCategory: ValuationByCategory[]; items: ValuationItem[]; } export interface MovementsSummary { period: { start: string; end: string }; totalMovements: number; netChange: number; itemsIncreased: number; itemsDecreased: number; } export interface MovementRecord { id: string; date: string; itemId: string; itemName: string; type: string; change: number; quantityBefore: number; quantityAfter: number; reason?: string; } export interface MovementsByItem { itemId: string; itemName: string; netChange: number; movementCount: number; } export interface MovementsReport { summary: MovementsSummary; movements: MovementRecord[]; byItem: MovementsByItem[]; total: number; page: number; limit: number; hasMore: boolean; } export interface CategorySummary { totalCategories: number; totalItems: number; totalValue: number; } export interface CategoryDetail { name: string; itemCount: number; percentOfTotal: number; totalValue: number; lowStockCount: number; averagePrice: number; topItems: { name: string; quantity: number }[]; } export interface CategoriesReport { summary: CategorySummary; categories: CategoryDetail[]; } export interface LowStockSummary { totalAlerts: number; criticalCount: number; warningCount: number; totalValueAtRisk: number; } export interface LowStockItem { id: string; name: string; category: string; quantity: number; minStock: number; shortage: number; estimatedReorderCost: number; lastMovementDate?: string; priority: 'critical' | 'warning' | 'watch'; } export interface LowStockReport { summary: LowStockSummary; items: LowStockItem[]; } export interface MovementsQueryParams { startDate?: string; endDate?: string; page?: number; limit?: number; } export const reportsService = { /** * Get valuation report */ getValuationReport: async (storeId: string): Promise => { const response = await apiClient.get( `/stores/${storeId}/reports/valuation`, ); return response.data; }, /** * Get movements report */ getMovementsReport: async ( storeId: string, params?: MovementsQueryParams, ): Promise => { const response = await apiClient.get( `/stores/${storeId}/reports/movements`, { params }, ); return response.data; }, /** * Get categories report */ getCategoriesReport: async (storeId: string): Promise => { const response = await apiClient.get( `/stores/${storeId}/reports/categories`, ); return response.data; }, /** * Get low stock report */ getLowStockReport: async (storeId: string): Promise => { const response = await apiClient.get( `/stores/${storeId}/reports/low-stock`, ); return response.data; }, };