295 lines
5.6 KiB
TypeScript
295 lines
5.6 KiB
TypeScript
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;
|
|
}>;
|
|
}
|
|
|
|
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 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;
|
|
}
|