import * as zod from 'zod'; import { z } from 'zod'; declare const timestampSchema: z.ZodObject<{ createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { createdAt: Date; updatedAt: Date; }, { createdAt: Date; updatedAt: Date; }>; declare const paginationQuerySchema: z.ZodObject<{ page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; }, { page?: number | undefined; limit?: number | undefined; }>; declare const paginationResponseSchema: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; declare const errorResponseSchema: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; /** Standard body for HTTP 402 — clients branch on `code === 'INSUFFICIENT_TOKENS'`. */ declare const insufficientTokensErrorSchema: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; declare const successResponseSchema: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; type TimestampFields = z.infer; type PaginationQuery = z.infer; type PaginationResponse = z.infer; type ErrorResponse = z.infer; type InsufficientTokensError = z.infer; type SuccessResponse = z.infer; declare const saleTransactionTypeEnum: z.ZodEnum<["sale", "refund"]>; declare const agentLanguageEnum: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; declare const paymentMethodEnum: z.ZodEnum<["cash", "transfer", "credit", "momo", "opay", "online_paystack"]>; declare const paymentSplitSchema: z.ZodObject<{ method: z.ZodEnum<["cash", "transfer", "credit", "momo", "opay", "online_paystack"]>; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>; declare const paymentSplitsSchema: z.ZodArray; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">; declare const inputMethodEnum: z.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; declare const subscriptionTierEnum: z.ZodEnum<["free", "standard", "pro"]>; declare const shopStatusEnum: z.ZodEnum<["active", "suspended", "churned"]>; declare const movementTypeEnum: z.ZodEnum<["sale", "restock", "adjustment", "return"]>; declare const deviceRoleEnum: z.ZodEnum<["owner", "assistant"]>; declare const shopOwnerSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }>; declare const shopSchema: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; declare const shopListItemSchema: z.ZodObject<{ id: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; businessType: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "churned"]>; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>; declare const registerOwnerAndShopSchema: z.ZodObject<{ ownerName: z.ZodString; phone: z.ZodString; pin: z.ZodString; otpCode: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodDefault>; country: z.ZodDefault; currency: z.ZodDefault; timezone: z.ZodDefault; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; deviceId: z.ZodString; deviceName: z.ZodOptional; osVersion: z.ZodOptional; appVersion: z.ZodOptional; installerCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; deviceId: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; deviceId: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; timezone?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }>; declare const addShopSchema: z.ZodObject<{ shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodDefault>; country: z.ZodDefault; currency: z.ZodDefault; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }, { shopName: string; agentName: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }>; declare const updateShopSchema: z.ZodObject<{ ownerName: z.ZodOptional; shopName: z.ZodOptional; agentName: z.ZodOptional; agentLanguage: z.ZodOptional>; agentPersonality: z.ZodOptional>; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; storefrontSlug: z.ZodOptional>; storefrontEnabled: z.ZodOptional; paystackSubaccountCode: z.ZodOptional>; storefrontDirectTransferEnabled: z.ZodOptional; storefrontPaymentInstructions: z.ZodOptional>; }, "strip", z.ZodTypeAny, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }>; declare const shopProductSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; nameVariants: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; costPrice: z.ZodNullable; sellingPrice: z.ZodNullable; targetMarginPct: z.ZodNullable; autoReorderEnabled: z.ZodBoolean; autoReorderMaxAmount: z.ZodNullable; preferredSupplierId: z.ZodNullable; reorderThreshold: z.ZodNullable; barcode: z.ZodNullable; iconPhotoUrl: z.ZodNullable; gridPosition: z.ZodNullable; gridColor: z.ZodNullable; isActive: z.ZodBoolean; visibleOnline: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; declare const createProductSchema: z.ZodObject<{ name: z.ZodString; nameVariants: z.ZodOptional; category: z.ZodOptional; unit: z.ZodOptional; currentStock: z.ZodDefault; costPrice: z.ZodOptional; sellingPrice: z.ZodOptional; targetMarginPct: z.ZodOptional; autoReorderEnabled: z.ZodOptional; autoReorderMaxAmount: z.ZodOptional; preferredSupplierId: z.ZodOptional; reorderThreshold: z.ZodOptional; barcode: z.ZodOptional; gridPosition: z.ZodOptional; gridColor: z.ZodOptional; }, "strip", z.ZodTypeAny, { name: string; currentStock: number; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }, { name: string; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }>; declare const updateProductSchema: z.ZodObject<{ name: z.ZodOptional; nameVariants: z.ZodOptional>; category: z.ZodOptional>; unit: z.ZodOptional>; currentStock: z.ZodOptional>; costPrice: z.ZodOptional>; sellingPrice: z.ZodOptional>; targetMarginPct: z.ZodOptional>; autoReorderEnabled: z.ZodOptional>; autoReorderMaxAmount: z.ZodOptional>; preferredSupplierId: z.ZodOptional>; reorderThreshold: z.ZodOptional>; barcode: z.ZodOptional>; gridPosition: z.ZodOptional>; gridColor: z.ZodOptional>; } & { iconPhotoUrl: z.ZodOptional; visibleOnline: z.ZodOptional; }, "strip", z.ZodTypeAny, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }>; declare const shopSaleSchema: z.ZodObject<{ id: z.ZodString; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodNumber; totalAmount: z.ZodNumber; paymentMethod: z.ZodEnum<["cash", "transfer", "credit", "momo", "opay", "online_paystack"]>; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: z.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: z.ZodString; transcription: z.ZodNullable; confidenceScore: z.ZodNullable; approved: z.ZodBoolean; receiptPrinted: z.ZodBoolean; recordedAt: z.ZodDate; customerId: z.ZodNullable; callSessionId: z.ZodNullable; onlineOrderId: z.ZodNullable; transactionType: z.ZodDefault>; originalSaleId: z.ZodNullable; staffProfileId: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>; declare const shopCustomerSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; declare const createCustomerSchema: z.ZodObject<{ name: z.ZodString; phone: z.ZodOptional; }, "strip", z.ZodTypeAny, { name: string; phone?: string | undefined; }, { name: string; phone?: string | undefined; }>; declare const updateCustomerSchema: z.ZodObject<{ name: z.ZodOptional; phone: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone?: string | undefined; name?: string | undefined; }, { phone?: string | undefined; name?: string | undefined; }>; declare const creditHistoryEventTypeEnum: z.ZodEnum<["credit_sale", "repayment"]>; declare const creditHistoryEventSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<["credit_sale", "repayment"]>; amount: z.ZodNumber; occurredAt: z.ZodDate; paymentMethod: z.ZodNullable; note: z.ZodNullable; saleId: z.ZodNullable; productId: z.ZodNullable; }, "strip", z.ZodTypeAny, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }>; declare const createCreditPaymentSchema: z.ZodObject<{ amount: z.ZodNumber; paymentMethod: z.ZodOptional; note: z.ZodOptional; }, "strip", z.ZodTypeAny, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }>; declare const debtReminderChannelEnum: z.ZodEnum<["whatsapp", "sms"]>; declare const sendCustomerReminderSchema: z.ZodObject<{ channel: z.ZodEnum<["whatsapp", "sms"]>; }, "strip", z.ZodTypeAny, { channel: "whatsapp" | "sms"; }, { channel: "whatsapp" | "sms"; }>; declare const sendCustomerReminderResponseSchema: z.ZodObject<{ message: z.ZodString; channel: z.ZodEnum<["whatsapp", "sms"]>; }, "strip", z.ZodTypeAny, { message: string; channel: "whatsapp" | "sms"; }, { message: string; channel: "whatsapp" | "sms"; }>; declare const reEngageCustomerSchema: z.ZodObject<{ /** Skip at_risk tag check when owner explicitly approves. */ ownerOverride: z.ZodOptional; }, "strip", z.ZodTypeAny, { ownerOverride?: boolean | undefined; }, { ownerOverride?: boolean | undefined; }>; declare const reEngageCustomerResponseSchema: z.ZodObject<{ message: z.ZodString; messageId: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; messageId?: string | undefined; }, { message: string; messageId?: string | undefined; }>; declare const createSaleSchema: z.ZodEffects; paymentMethod: z.ZodDefault>; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>; inputMethod: z.ZodDefault>; customerId: z.ZodOptional; staffProfileId: z.ZodOptional; recordedAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>; declare const stockMovementSchema: z.ZodObject<{ id: z.ZodString; productId: z.ZodString; movementType: z.ZodEnum<["sale", "restock", "adjustment", "return"]>; quantity: z.ZodNumber; balanceAfter: z.ZodNumber; source: z.ZodNullable; notes: z.ZodNullable; callSessionId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }>; declare const storefrontOrderStatusFilterEnum: z.ZodEnum<["all", "awaiting_payment", "awaiting_approval", "paid", "reserved", "ready", "collected", "cancelled"]>; declare const storefrontOrderSchema: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodString; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; itemCount: z.ZodNumber; itemsPreview: z.ZodArray; trackingUrl: z.ZodString; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }>; /** @deprecated Use storefrontOrderSchema */ declare const storefrontManualOrderSchema: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodString; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; itemCount: z.ZodNumber; itemsPreview: z.ZodArray; trackingUrl: z.ZodString; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }>; declare const updateStorefrontOrderStatusBodySchema: z.ZodObject<{ action: z.ZodEnum<["approve", "ready", "collected", "cancel"]>; }, "strip", z.ZodTypeAny, { action: "ready" | "collected" | "approve" | "cancel"; }, { action: "ready" | "collected" | "approve" | "cancel"; }>; declare const updateStorefrontOrderStatusResponseSchema: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }>; declare const dailyReportSchema: z.ZodObject<{ id: z.ZodString; reportDate: z.ZodDate; totalSales: z.ZodNumber; totalTransactions: z.ZodNumber; salesByMethod: z.ZodObject<{ litepos: z.ZodNumber; litepos_barcode: z.ZodNumber; voice_ptt: z.ZodNumber; voice_kiosk: z.ZodNumber; voice_whatsapp: z.ZodNumber; voice_call: z.ZodNumber; telephony: z.ZodNumber; vision: z.ZodNumber; }, "strip", z.ZodTypeAny, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }>; salesByPayment: z.ZodObject<{ cash: z.ZodNumber; transfer: z.ZodNumber; credit: z.ZodNumber; momo: z.ZodNumber; opay: z.ZodNumber; }, "strip", z.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: z.ZodArray, "many">; lowStockItems: z.ZodArray, "many">; callSummary: z.ZodNullable>; tokensUsed: z.ZodNullable; sentViaWhatsapp: z.ZodBoolean; generatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>; type ShopOwner = z.infer; type Shop = z.infer; type ShopListItem = z.infer; type RegisterOwnerAndShopInput = z.infer; type AddShopInput = z.infer; type UpdateShopInput = z.infer; type ShopProduct = z.infer; type CreateProductInput = z.infer; type UpdateProductInput = z.infer; type ShopSale = z.infer; type ShopCustomer = z.infer; type CreateCustomerInput = z.infer; type UpdateCustomerInput = z.infer; type CreditHistoryEvent = z.infer; type CreateCreditPaymentInput = z.infer; type DebtReminderChannel = z.infer; type SendCustomerReminderInput = z.infer; type PaymentSplit = z.infer; type CreateSaleInput = z.infer; type StockMovement = z.infer; type StorefrontOrder = z.infer; type StorefrontManualOrder = StorefrontOrder; type UpdateStorefrontOrderStatusInput = z.infer; type DailyReport = z.infer; /** Payload shape for `changes[].data` when `table` is `sales` (mobile Sale.toJson). */ declare const syncSaleDataSchema: z.ZodObject<{ productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodNumber; totalAmount: z.ZodNumber; paymentMethod: z.ZodString; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>; inputMethod: z.ZodString; recordedBy: z.ZodOptional; recordedAt: z.ZodOptional>; transcription: z.ZodOptional>; confidenceScore: z.ZodOptional>; approved: z.ZodOptional; receiptPrinted: z.ZodOptional; customerId: z.ZodOptional>; staffProfileId: z.ZodOptional; transactionType: z.ZodOptional>; originalSaleId: z.ZodOptional; }, "strip", z.ZodTypeAny, { productId: string; inputMethod: string; paymentMethod: string; quantity: number; unitPrice: number; totalAmount: number; staffProfileId?: string | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedBy?: string | undefined; transcription?: string | null | undefined; confidenceScore?: number | null | undefined; approved?: boolean | undefined; receiptPrinted?: boolean | undefined; recordedAt?: string | number | undefined; customerId?: string | null | undefined; transactionType?: "sale" | "refund" | undefined; originalSaleId?: string | undefined; }, { productId: string; inputMethod: string; paymentMethod: string; quantity: number; unitPrice: number; totalAmount: number; staffProfileId?: string | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedBy?: string | undefined; transcription?: string | null | undefined; confidenceScore?: number | null | undefined; approved?: boolean | undefined; receiptPrinted?: boolean | undefined; recordedAt?: string | number | undefined; customerId?: string | null | undefined; transactionType?: "sale" | "refund" | undefined; originalSaleId?: string | undefined; }>; declare const syncChangeSchema: z.ZodObject<{ table: z.ZodEnum<["products", "sales", "customers", "stock_movements", "reservations"]>; id: z.ZodString; action: z.ZodEnum<["insert", "update", "delete"]>; data: z.ZodRecord; timestamp: z.ZodNumber; deviceId: z.ZodString; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }>; declare const syncPushRequestSchema: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodOptional; changes: z.ZodArray; id: z.ZodString; action: z.ZodEnum<["insert", "update", "delete"]>; data: z.ZodRecord; timestamp: z.ZodNumber; deviceId: z.ZodString; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }>, "many">; lastSyncTimestamp: z.ZodOptional; }, "strip", z.ZodTypeAny, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }>; declare const syncPushResponseSchema: z.ZodObject<{ accepted: z.ZodArray; conflicts: z.ZodArray; resolution: z.ZodEnum<["server_wins", "device_wins", "merged"]>; }, "strip", z.ZodTypeAny, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }>, "many">; serverTimestamp: z.ZodNumber; newGenerationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }>; declare const syncPullTablesEnum: z.ZodEnum<["products", "sales", "customers", "stock_movements", "insights", "trade_facts", "reservations"]>; type SyncPullTable = z.infer; declare const syncPullQuerySchema: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodOptional; lastSyncTimestamp: z.ZodOptional; /** If set, only pull these tables. If omitted, pull all. */ tables: z.ZodOptional, "many">>; }, "strip", z.ZodTypeAny, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }>; declare const syncPullResponseSchema: z.ZodObject<{ changes: z.ZodArray; data: z.ZodRecord; timestamp: z.ZodNumber; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }>, "many">; hasMore: z.ZodBoolean; serverTimestamp: z.ZodNumber; /** When hasMore is true, client should call pull again with lastSyncTimestamp = this value to get the next page. */ nextLastSyncTimestamp: z.ZodOptional; }, "strip", z.ZodTypeAny, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }>; type SyncSaleData = z.infer; type SyncChange = z.infer; type SyncPushRequest = z.infer; type SyncPushResponse = z.infer; type SyncPullQuery = z.infer; type SyncPullResponse = z.infer; declare const whatsappMessageTypeEnum: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; declare const interactiveActionSchema: z.ZodObject<{ type: z.ZodEnum<["button", "list"]>; buttons: z.ZodOptional, "many">>; sections: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; title: string; description?: string | undefined; }, { id: string; title: string; description?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }>, "many">>; }, "strip", z.ZodTypeAny, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }>; declare const sendWhatsappSchema: z.ZodObject<{ messageType: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: z.ZodString; content: z.ZodOptional; interactive: z.ZodOptional; buttons: z.ZodOptional, "many">>; sections: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; title: string; description?: string | undefined; }, { id: string; title: string; description?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }>, "many">>; }, "strip", z.ZodTypeAny, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }>>; mediaUrl: z.ZodOptional; metadata: z.ZodOptional>; /** WhatsApp template (pre-approved). When set, use ContentSid + ContentVariables instead of content. */ templateName: z.ZodOptional; templateParams: z.ZodOptional>; }, "strip", z.ZodTypeAny, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }>; /** Mobile-friendly: body with only { text } — recipient defaults to shop paired WhatsApp */ declare const sendWhatsappSimpleSchema: z.ZodObject<{ text: z.ZodString; }, "strip", z.ZodTypeAny, { text: string; }, { text: string; }>; declare const sendWhatsappBodySchema: z.ZodUnion<[z.ZodObject<{ messageType: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: z.ZodString; content: z.ZodOptional; interactive: z.ZodOptional; buttons: z.ZodOptional, "many">>; sections: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; title: string; description?: string | undefined; }, { id: string; title: string; description?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }>, "many">>; }, "strip", z.ZodTypeAny, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }>>; mediaUrl: z.ZodOptional; metadata: z.ZodOptional>; /** WhatsApp template (pre-approved). When set, use ContentSid + ContentVariables instead of content. */ templateName: z.ZodOptional; templateParams: z.ZodOptional>; }, "strip", z.ZodTypeAny, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }>, z.ZodObject<{ text: z.ZodString; }, "strip", z.ZodTypeAny, { text: string; }, { text: string; }>]>; declare const whatsappPairSchema: z.ZodObject<{ phone: z.ZodString; verificationCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone: string; verificationCode?: string | undefined; }, { phone: string; verificationCode?: string | undefined; }>; declare const whatsappMessageSchema: z.ZodObject<{ id: z.ZodString; direction: z.ZodEnum<["inbound", "outbound"]>; messageType: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: z.ZodString; content: z.ZodString; status: z.ZodEnum<["queued", "sent", "delivered", "failed"]>; metadata: z.ZodNullable>; sentAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }>; /** Canonical JSON body (WAPI.js-style). Twilio sends From/Body/MessageSid and omits unix timestamp — we normalize via preprocess. */ declare const incomingWhatsappSchema: z.ZodEffects; message: z.ZodOptional; timestamp: z.ZodOptional; messageId: z.ZodOptional; type: z.ZodOptional; mediaUrl: z.ZodOptional; }, "strip", z.ZodTypeAny, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }>, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, unknown>, { timestamp: number; from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; mediaUrl?: string | undefined; }, unknown>; /** Provider delivery status callback (Gap 1). messageId = our id; externalId = provider SID (e.g. Twilio) for lookups. */ declare const deliveryStatusWebhookSchema: z.ZodEffects; externalId: z.ZodOptional; status: z.ZodEnum<["sent", "delivered", "failed", "read"]>; }, "strip", z.ZodTypeAny, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>; type WhatsappMessageType = z.infer; type InteractiveAction = z.infer; type SendWhatsappInput = z.infer; type WhatsappPairInput = z.infer; type WhatsappMessage = z.infer; type IncomingWhatsapp = z.infer; declare const restoreBackupResponseSchema: z.ZodObject<{ url: z.ZodString; identity: z.ZodObject<{ agentName: z.ZodString; personality: z.ZodRecord; }, "strip", z.ZodTypeAny, { agentName: string; personality: Record; }, { agentName: string; personality: Record; }>; checksum: z.ZodString; }, "strip", z.ZodTypeAny, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }>; declare const restoreBackupRequestSchema: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodString; backupId: z.ZodOptional; }, "strip", z.ZodTypeAny, { deviceId: string; shopId: string; backupId?: string | undefined; }, { deviceId: string; shopId: string; backupId?: string | undefined; }>; type RestoreBackupResponse = z.infer; type RestoreBackupRequest = z.infer; declare const subscriptionSchema: z.ZodObject<{ id: z.ZodString; tier: z.ZodEnum<["free", "standard", "pro"]>; status: z.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: z.ZodNumber; currency: z.ZodString; paymentMethod: z.ZodNullable; currentPeriodStart: z.ZodDate; currentPeriodEnd: z.ZodDate; cancelledAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>; declare const createSubscriptionSchema: z.ZodObject<{ tier: z.ZodEnum<["free", "standard", "pro"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; paymentMethod: z.ZodOptional>; paymentRef: z.ZodOptional; }, "strip", z.ZodTypeAny, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }>; declare const paymentSchema: z.ZodObject<{ id: z.ZodString; amount: z.ZodNumber; currency: z.ZodString; provider: z.ZodString; providerRef: z.ZodNullable; status: z.ZodEnum<["pending", "success", "failed"]>; paidAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }>; declare const verifyPaymentSchema: z.ZodObject<{ provider: z.ZodEnum<["paystack"]>; transactionRef: z.ZodString; }, "strip", z.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; type Subscription = z.infer; type CreateSubscriptionInput = z.infer; type Payment = z.infer; type VerifyPaymentInput = z.infer; declare const installerSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; city: z.ZodString; market: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "inactive"]>; rating: z.ZodNumber; totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; declare const registerInstallerSchema: z.ZodObject<{ name: z.ZodString; phone: z.ZodString; password: z.ZodString; email: z.ZodOptional; city: z.ZodString; market: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }>; declare const onboardingSchema: z.ZodObject<{ id: z.ZodString; installerId: z.ZodString; shopPhone: z.ZodString; shopId: z.ZodNullable; setupCompleted: z.ZodBoolean; tierConverted: z.ZodNullable; convertedAt: z.ZodNullable; commissionPaid: z.ZodNumber; satisfactionScore: z.ZodNullable; followUpDay3: z.ZodBoolean; followUpDay7: z.ZodBoolean; followUpDay14: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>; declare const logOnboardingSchema: z.ZodObject<{ shopPhone: z.ZodString; setupCompleted: z.ZodDefault; }, "strip", z.ZodTypeAny, { shopPhone: string; setupCompleted: boolean; }, { shopPhone: string; setupCompleted?: boolean | undefined; }>; declare const logFollowUpSchema: z.ZodObject<{ onboardingId: z.ZodString; day: z.ZodEnum<["3", "7", "14"]>; satisfactionScore: z.ZodOptional; }, "strip", z.ZodTypeAny, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }>; type Installer = z.infer; type RegisterInstallerInput = z.infer; type Onboarding = z.infer; type LogOnboardingInput = z.infer; type LogFollowUpInput = z.infer; declare const tokenTransactionTypeEnum: z.ZodEnum<["purchase", "consumption", "grant", "bonus", "refund"]>; declare const tokenFeatureEnum: z.ZodEnum<["voice_command", "cloud_analytics", "voice_call", "proactive_call", "dashboard_access"]>; declare const walletSchema: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; balance: z.ZodNumber; lifetimeEarned: z.ZodNumber; lifetimeSpent: z.ZodNumber; lastGrantAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>; declare const tokenTransactionSchema: z.ZodObject<{ id: z.ZodString; walletId: z.ZodString; type: z.ZodEnum<["purchase", "consumption", "grant", "bonus", "refund"]>; amount: z.ZodNumber; feature: z.ZodNullable>; description: z.ZodNullable; referenceId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>; declare const tokenBundleSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; price: z.ZodNumber; currency: z.ZodString; tokenAmount: z.ZodNumber; bonusTokens: z.ZodNumber; isActive: z.ZodBoolean; }, "strip", z.ZodTypeAny, { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }, { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }>; declare const purchaseTokensSchema: z.ZodObject<{ bundleId: z.ZodString; paymentRef: z.ZodOptional; paymentMethod: z.ZodLiteral<"paystack">; }, "strip", z.ZodTypeAny, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }>; declare const verifyTokenPaymentSchema: z.ZodObject<{ provider: z.ZodLiteral<"paystack">; transactionRef: z.ZodString; }, "strip", z.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; type Wallet = z.infer; type TokenTransaction = z.infer; type TokenBundle = z.infer; type PurchaseTokensInput = z.infer; type VerifyTokenPaymentInput = z.infer; declare const callDirectionEnum: z.ZodEnum<["inbound", "outbound"]>; declare const callTriggerReasonEnum: z.ZodEnum<["critical_stock", "large_sale", "anomaly", "daily_summary"]>; declare const callGatewayEnum: z.ZodEnum<["africas_talking", "webrtc_voip"]>; declare const callSessionSchema: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; direction: z.ZodEnum<["inbound", "outbound"]>; callerPhone: z.ZodString; startedAt: z.ZodDate; endedAt: z.ZodNullable; durationSeconds: z.ZodNullable; triggerReason: z.ZodNullable>; transcriptSummary: z.ZodNullable; actionsTaken: z.ZodNullable; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; amount?: number | undefined; product?: string | undefined; }, { type: string; amount?: number | undefined; product?: string | undefined; }>, "many">>; callCost: z.ZodNullable; ownerSatisfaction: z.ZodNullable>; gateway: z.ZodEnum<["africas_talking", "webrtc_voip"]>; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }>; declare const initiateCallSchema: z.ZodObject<{ targetPhone: z.ZodString; triggerReason: z.ZodEnum<["critical_stock", "large_sale", "anomaly", "daily_summary"]>; shopContext: z.ZodOptional>; alertMessage: z.ZodOptional; }, "strip", z.ZodTypeAny, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }>; declare const callStatusSchema: z.ZodObject<{ sessionId: z.ZodString; callSessionId: z.ZodOptional; isActive: z.ZodBoolean; direction: z.ZodEnum<["inbound", "outbound"]>; callerNumber: z.ZodString; destinationNumber: z.ZodString; durationInSeconds: z.ZodNumber; currencyCode: z.ZodOptional; amount: z.ZodOptional; status: z.ZodEnum<["ringing", "in_progress", "completed", "failed", "busy", "no_answer"]>; }, "strip", z.ZodTypeAny, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }>; declare const callLogQuerySchema: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; direction: z.ZodOptional>; page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }, { page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }>; type CallSession = z.infer; type InitiateCallInput = z.infer; type CallStatus = z.infer; type CallLogQuery = z.infer; declare const invoiceLineItemSchema: z.ZodObject<{ productName: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; totalAmount: z.ZodOptional; barcode: z.ZodOptional; /** Matched ShopProduct id when OCR name matches. */ productId: z.ZodOptional; /** Per-item confidence 0–1 for manual verification (Gap 9). */ confidence: z.ZodOptional; }, "strip", z.ZodTypeAny, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }>; declare const analyzeInvoiceResponseSchema: z.ZodObject<{ items: z.ZodArray; totalAmount: z.ZodOptional; barcode: z.ZodOptional; /** Matched ShopProduct id when OCR name matches. */ productId: z.ZodOptional; /** Per-item confidence 0–1 for manual verification (Gap 9). */ confidence: z.ZodOptional; }, "strip", z.ZodTypeAny, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }>, "many">; supplierName: z.ZodOptional; totalAmount: z.ZodOptional; confidence: z.ZodOptional; }, "strip", z.ZodTypeAny, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }>; declare const confirmRestockSchema: z.ZodObject<{ items: z.ZodArray; productName: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }>, "many">; supplierName: z.ZodOptional; totalAmount: z.ZodOptional; }, "strip", z.ZodTypeAny, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }>; type InvoiceLineItem = z.infer; type AnalyzeInvoiceResponse = z.infer; type ConfirmRestockInput = z.infer; /** * Cloud-generated insights synced to device (strategy P3: Insight sync). * Example: "Your margin on biscuits dropped 8% this week. Consider switching to Supplier B." */ declare const insightTypeEnum: z.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; declare const insightEngagementTypeEnum: z.ZodEnum<["acted_on", "dismissed", "ignored"]>; declare const shopInsightSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; title: z.ZodString; body: z.ZodString; payload: z.ZodNullable>; readAt: z.ZodNullable; engagementType: z.ZodNullable>; engagedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>; type ShopInsight = z.infer; declare const shopkeeperDeviceContract: { register: { summary: "Register new owner, shop, and device"; method: "POST"; body: z.ZodObject<{ ownerName: z.ZodString; phone: z.ZodString; pin: z.ZodString; otpCode: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodDefault>; country: z.ZodDefault; currency: z.ZodDefault; timezone: z.ZodDefault; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; deviceId: z.ZodString; deviceName: z.ZodOptional; osVersion: z.ZodOptional; appVersion: z.ZodOptional; installerCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; deviceId: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; deviceId: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; timezone?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }>; path: "/shopkeeper/device/register"; responses: { 201: z.ZodObject<{ owner: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }>; shop: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shops: z.ZodArray; status: z.ZodEnum<["active", "suspended", "churned"]>; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; ownerToken: z.ZodString; shopToken: z.ZodString; refreshToken: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; shopToken: string; refreshToken: string; expiresIn: number; }, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; shopToken: string; refreshToken: string; expiresIn: number; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; login: { summary: "Authenticate owner with phone + PIN"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; pin: z.ZodString; deviceId: z.ZodString; deviceName: z.ZodOptional; role: z.ZodDefault>; osVersion: z.ZodOptional; appVersion: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone: string; pin: string; deviceId: string; role: "owner" | "assistant"; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; }, { phone: string; pin: string; deviceId: string; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; role?: "owner" | "assistant" | undefined; }>; path: "/shopkeeper/device/login"; responses: { 200: z.ZodObject<{ owner: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }>; shops: z.ZodArray; status: z.ZodEnum<["active", "suspended", "churned"]>; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; ownerToken: z.ZodString; refreshToken: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; refreshToken: string; expiresIn: number; }, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; refreshToken: string; expiresIn: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; selectShop: { summary: "Select active shop and get shop-scoped token"; method: "POST"; body: z.ZodObject<{ shopId: z.ZodString; }, "strip", z.ZodTypeAny, { shopId: string; }, { shopId: string; }>; path: "/shopkeeper/device/select-shop"; responses: { 200: z.ZodObject<{ shop: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shopToken: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; addShop: { summary: "Add a new shop to owner account"; method: "POST"; body: z.ZodObject<{ shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodDefault>; country: z.ZodDefault; currency: z.ZodDefault; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }, { shopName: string; agentName: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }>; path: "/shopkeeper/device/shops"; responses: { 201: z.ZodObject<{ shop: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shopToken: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listShops: { summary: "List all shops for authenticated owner"; method: "GET"; path: "/shopkeeper/device/shops"; responses: { 200: z.ZodObject<{ shops: z.ZodArray; status: z.ZodEnum<["active", "suspended", "churned"]>; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; }, "strip", z.ZodTypeAny, { shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; }, { shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; refresh: { summary: "Refresh owner access token"; method: "POST"; body: z.ZodObject<{ refreshToken: z.ZodString; }, "strip", z.ZodTypeAny, { refreshToken: string; }, { refreshToken: string; }>; path: "/shopkeeper/device/refresh"; responses: { 200: z.ZodObject<{ ownerToken: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { ownerToken: string; expiresIn: number; }, { ownerToken: string; expiresIn: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateDevice: { summary: "Update device metadata"; method: "PATCH"; body: z.ZodObject<{ appVersion: z.ZodOptional; fcmToken: z.ZodOptional; osVersion: z.ZodOptional; }, "strip", z.ZodTypeAny, { osVersion?: string | undefined; appVersion?: string | undefined; fcmToken?: string | undefined; }, { osVersion?: string | undefined; appVersion?: string | undefined; fcmToken?: string | undefined; }>; path: "/shopkeeper/device"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendOtp: { summary: "Send OTP to phone number"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; }, "strip", z.ZodTypeAny, { phone: string; }, { phone: string; }>; path: "/shopkeeper/device/send-otp"; responses: { 200: z.ZodObject<{ message: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { message: string; expiresIn: number; }, { message: string; expiresIn: number; }>; 429: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyOtp: { summary: "Verify OTP code"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; code: z.ZodString; }, "strip", z.ZodTypeAny, { code: string; phone: string; }, { code: string; phone: string; }>; path: "/shopkeeper/device/verify-otp"; responses: { 200: z.ZodObject<{ verified: z.ZodBoolean; }, "strip", z.ZodTypeAny, { verified: boolean; }, { verified: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; resetPin: { summary: "Reset owner PIN using OTP"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; otpCode: z.ZodString; newPin: z.ZodString; }, "strip", z.ZodTypeAny, { phone: string; otpCode: string; newPin: string; }, { phone: string; otpCode: string; newPin: string; }>; path: "/shopkeeper/device/reset-pin"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; registerStaffProfile: { summary: "Register a named staff profile on the authenticated device"; method: "POST"; body: z.ZodObject<{ displayName: z.ZodString; }, "strip", z.ZodTypeAny, { displayName: string; }, { displayName: string; }>; path: "/shopkeeper/device/staff/register"; responses: { 201: z.ZodObject<{ id: z.ZodString; displayName: z.ZodString; isActive: z.ZodBoolean; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; displayName: string; isActive: boolean; }, { id: string; createdAt: Date; displayName: string; isActive: boolean; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStaffProfiles: { summary: "List staff profiles for the authenticated device"; method: "GET"; path: "/shopkeeper/device/staff"; responses: { 200: z.ZodObject<{ profiles: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { profiles: { id: string; createdAt: Date; displayName: string; }[]; }, { profiles: { id: string; createdAt: Date; displayName: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperContract: { getShop: { summary: "Get current shop details"; method: "GET"; path: "/shopkeeper/shop"; responses: { 200: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateShop: { summary: "Update shop details"; method: "PATCH"; body: z.ZodObject<{ ownerName: z.ZodOptional; shopName: z.ZodOptional; agentName: z.ZodOptional; agentLanguage: z.ZodOptional>; agentPersonality: z.ZodOptional>; businessType: z.ZodOptional; location: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; storefrontSlug: z.ZodOptional>; storefrontEnabled: z.ZodOptional; paystackSubaccountCode: z.ZodOptional>; storefrontDirectTransferEnabled: z.ZodOptional; storefrontPaymentInstructions: z.ZodOptional>; }, "strip", z.ZodTypeAny, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }>; path: "/shopkeeper/shop"; responses: { 200: z.ZodObject<{ id: z.ZodString; ownerId: z.ZodString; shopName: z.ZodString; agentName: z.ZodString; agentLanguage: z.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: z.ZodBoolean; country: z.ZodString; currency: z.ZodString; timezone: z.ZodString; businessType: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: z.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: z.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: z.ZodNullable; lastActiveAt: z.ZodNullable; storefrontSlug: z.ZodNullable; storefrontEnabled: z.ZodBoolean; paystackSubaccountCode: z.ZodNullable; storefrontDirectTransferEnabled: z.ZodBoolean; storefrontPaymentInstructions: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listProducts: { query: z.ZodObject<{ active: z.ZodOptional; category: z.ZodOptional; search: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; search?: string | undefined; active?: boolean | undefined; category?: string | undefined; }, { search?: string | undefined; active?: boolean | undefined; category?: string | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "List shop products"; method: "GET"; path: "/shopkeeper/products"; responses: { 200: z.ZodObject<{ products: z.ZodArray; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; costPrice: z.ZodNullable; sellingPrice: z.ZodNullable; targetMarginPct: z.ZodNullable; autoReorderEnabled: z.ZodBoolean; autoReorderMaxAmount: z.ZodNullable; preferredSupplierId: z.ZodNullable; reorderThreshold: z.ZodNullable; barcode: z.ZodNullable; iconPhotoUrl: z.ZodNullable; gridPosition: z.ZodNullable; gridColor: z.ZodNullable; isActive: z.ZodBoolean; visibleOnline: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { products: { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }[]; pagination: { page: number; limit: number; total: number; totalPages: number; }; }, { products: { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }[]; pagination: { page: number; limit: number; total: number; totalPages: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getProduct: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get product by ID"; method: "GET"; path: "/shopkeeper/products/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; name: z.ZodString; nameVariants: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; costPrice: z.ZodNullable; sellingPrice: z.ZodNullable; targetMarginPct: z.ZodNullable; autoReorderEnabled: z.ZodBoolean; autoReorderMaxAmount: z.ZodNullable; preferredSupplierId: z.ZodNullable; reorderThreshold: z.ZodNullable; barcode: z.ZodNullable; iconPhotoUrl: z.ZodNullable; gridPosition: z.ZodNullable; gridColor: z.ZodNullable; isActive: z.ZodBoolean; visibleOnline: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createProduct: { summary: "Create a new product"; method: "POST"; body: z.ZodObject<{ name: z.ZodString; nameVariants: z.ZodOptional; category: z.ZodOptional; unit: z.ZodOptional; currentStock: z.ZodDefault; costPrice: z.ZodOptional; sellingPrice: z.ZodOptional; targetMarginPct: z.ZodOptional; autoReorderEnabled: z.ZodOptional; autoReorderMaxAmount: z.ZodOptional; preferredSupplierId: z.ZodOptional; reorderThreshold: z.ZodOptional; barcode: z.ZodOptional; gridPosition: z.ZodOptional; gridColor: z.ZodOptional; }, "strip", z.ZodTypeAny, { name: string; currentStock: number; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }, { name: string; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }>; path: "/shopkeeper/products"; responses: { 201: z.ZodObject<{ id: z.ZodString; name: z.ZodString; nameVariants: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; costPrice: z.ZodNullable; sellingPrice: z.ZodNullable; targetMarginPct: z.ZodNullable; autoReorderEnabled: z.ZodBoolean; autoReorderMaxAmount: z.ZodNullable; preferredSupplierId: z.ZodNullable; reorderThreshold: z.ZodNullable; barcode: z.ZodNullable; iconPhotoUrl: z.ZodNullable; gridPosition: z.ZodNullable; gridColor: z.ZodNullable; isActive: z.ZodBoolean; visibleOnline: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateProduct: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update a product"; method: "PATCH"; body: z.ZodObject<{ name: z.ZodOptional; nameVariants: z.ZodOptional>; category: z.ZodOptional>; unit: z.ZodOptional>; currentStock: z.ZodOptional>; costPrice: z.ZodOptional>; sellingPrice: z.ZodOptional>; targetMarginPct: z.ZodOptional>; autoReorderEnabled: z.ZodOptional>; autoReorderMaxAmount: z.ZodOptional>; preferredSupplierId: z.ZodOptional>; reorderThreshold: z.ZodOptional>; barcode: z.ZodOptional>; gridPosition: z.ZodOptional>; gridColor: z.ZodOptional>; } & { iconPhotoUrl: z.ZodOptional; visibleOnline: z.ZodOptional; }, "strip", z.ZodTypeAny, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }>; path: "/shopkeeper/products/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; name: z.ZodString; nameVariants: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; costPrice: z.ZodNullable; sellingPrice: z.ZodNullable; targetMarginPct: z.ZodNullable; autoReorderEnabled: z.ZodBoolean; autoReorderMaxAmount: z.ZodNullable; preferredSupplierId: z.ZodNullable; reorderThreshold: z.ZodNullable; barcode: z.ZodNullable; iconPhotoUrl: z.ZodNullable; gridPosition: z.ZodNullable; gridColor: z.ZodNullable; isActive: z.ZodBoolean; visibleOnline: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deleteProduct: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Delete a product (soft delete)"; method: "DELETE"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/products/:id"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; uploadProductIcon: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Upload product icon photo"; method: "POST"; contentType: "multipart/form-data"; body: z.ZodObject<{ file: z.ZodAny; }, "strip", z.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/shopkeeper/products/:id/icon"; responses: { 200: z.ZodObject<{ iconUrl: z.ZodString; }, "strip", z.ZodTypeAny, { iconUrl: string; }, { iconUrl: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSales: { query: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; productId: z.ZodOptional; inputMethod: z.ZodOptional; paymentMethod: z.ZodOptional; staffProfileId: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; inputMethod?: string | undefined; paymentMethod?: string | undefined; staffProfileId?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; inputMethod?: string | undefined; paymentMethod?: string | undefined; staffProfileId?: string | undefined; }>; summary: "List sales with filters"; method: "GET"; path: "/shopkeeper/sales"; responses: { 200: z.ZodObject<{ sales: z.ZodArray; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: z.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: z.ZodString; transcription: z.ZodNullable; confidenceScore: z.ZodNullable; approved: z.ZodBoolean; receiptPrinted: z.ZodBoolean; recordedAt: z.ZodDate; customerId: z.ZodNullable; callSessionId: z.ZodNullable; onlineOrderId: z.ZodNullable; transactionType: z.ZodDefault>; originalSaleId: z.ZodNullable; staffProfileId: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; summary: z.ZodObject<{ totalRevenue: z.ZodNumber; totalTransactions: z.ZodNumber; }, "strip", z.ZodTypeAny, { totalRevenue: number; totalTransactions: number; }, { totalRevenue: number; totalTransactions: number; }>; }, "strip", z.ZodTypeAny, { summary: { totalRevenue: number; totalTransactions: number; }; pagination: { page: number; limit: number; total: number; totalPages: number; }; sales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }[]; }, { summary: { totalRevenue: number; totalTransactions: number; }; pagination: { page: number; limit: number; total: number; totalPages: number; }; sales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSale: { summary: "Record a manual sale and update stock"; method: "POST"; body: z.ZodEffects; paymentMethod: z.ZodDefault>; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>; inputMethod: z.ZodDefault>; customerId: z.ZodOptional; staffProfileId: z.ZodOptional; recordedAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>; path: "/shopkeeper/sales"; responses: { 201: z.ZodObject<{ id: z.ZodString; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodNumber; totalAmount: z.ZodNumber; paymentMethod: z.ZodEnum<["cash", "transfer", "credit", "momo", "opay", "online_paystack"]>; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: z.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: z.ZodString; transcription: z.ZodNullable; confidenceScore: z.ZodNullable; approved: z.ZodBoolean; receiptPrinted: z.ZodBoolean; recordedAt: z.ZodDate; customerId: z.ZodNullable; callSessionId: z.ZodNullable; onlineOrderId: z.ZodNullable; transactionType: z.ZodDefault>; originalSaleId: z.ZodNullable; staffProfileId: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listCustomers: { query: z.ZodObject<{ search: z.ZodOptional; hasCredit: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; search?: string | undefined; hasCredit?: boolean | undefined; }, { search?: string | undefined; page?: number | undefined; limit?: number | undefined; hasCredit?: boolean | undefined; }>; summary: "List shop customers"; method: "GET"; path: "/shopkeeper/customers"; responses: { 200: z.ZodObject<{ customers: z.ZodArray; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; customers: { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; customers: { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createCustomer: { summary: "Create a new customer"; method: "POST"; body: z.ZodObject<{ name: z.ZodString; phone: z.ZodOptional; }, "strip", z.ZodTypeAny, { name: string; phone?: string | undefined; }, { name: string; phone?: string | undefined; }>; path: "/shopkeeper/customers"; responses: { 201: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomer: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get customer by ID"; method: "GET"; path: "/shopkeeper/customers/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateCustomer: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update customer name or phone"; method: "PATCH"; body: z.ZodObject<{ name: z.ZodOptional; phone: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone?: string | undefined; name?: string | undefined; }, { phone?: string | undefined; name?: string | undefined; }>; path: "/shopkeeper/customers/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomerCreditHistory: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; query: z.ZodObject<{ page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; }, { page?: number | undefined; limit?: number | undefined; }>; summary: "List credit sales and repayments for a customer"; method: "GET"; path: "/shopkeeper/customers/:id/credit-history"; responses: { 200: z.ZodObject<{ events: z.ZodArray; amount: z.ZodNumber; occurredAt: z.ZodDate; paymentMethod: z.ZodNullable; note: z.ZodNullable; saleId: z.ZodNullable; productId: z.ZodNullable; }, "strip", z.ZodTypeAny, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; events: { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; events: { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createCreditPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Record a credit repayment and decrement balance"; method: "POST"; body: z.ZodObject<{ amount: z.ZodNumber; paymentMethod: z.ZodOptional; note: z.ZodOptional; }, "strip", z.ZodTypeAny, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }>; path: "/shopkeeper/customers/:id/credit-payments"; responses: { 200: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; creditBalance: z.ZodNumber; totalSpent: z.ZodNumber; lastVisitAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendCustomerReminder: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Send debt reminder to customer via WhatsApp or SMS"; method: "POST"; body: z.ZodObject<{ channel: z.ZodEnum<["whatsapp", "sms"]>; }, "strip", z.ZodTypeAny, { channel: "whatsapp" | "sms"; }, { channel: "whatsapp" | "sms"; }>; path: "/shopkeeper/customers/:id/send-reminder"; responses: { 200: z.ZodObject<{ message: z.ZodString; channel: z.ZodEnum<["whatsapp", "sms"]>; }, "strip", z.ZodTypeAny, { message: string; channel: "whatsapp" | "sms"; }, { message: string; channel: "whatsapp" | "sms"; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; reEngageCustomer: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Send owner-approved WhatsApp re-engagement to at-risk customer"; method: "POST"; body: z.ZodObject<{ ownerOverride: z.ZodOptional; }, "strip", z.ZodTypeAny, { ownerOverride?: boolean | undefined; }, { ownerOverride?: boolean | undefined; }>; path: "/shopkeeper/customers/:id/re-engage"; responses: { 200: z.ZodObject<{ message: z.ZodString; messageId: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; messageId?: string | undefined; }, { message: string; messageId?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStockMovements: { query: z.ZodObject<{ productId: z.ZodOptional; type: z.ZodOptional; from: z.ZodOptional; to: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; type?: string | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; }, { type?: string | undefined; page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; }>; summary: "List stock movements"; method: "GET"; path: "/shopkeeper/stock-movements"; responses: { 200: z.ZodObject<{ movements: z.ZodArray; quantity: z.ZodNumber; balanceAfter: z.ZodNumber; source: z.ZodNullable; notes: z.ZodNullable; callSessionId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; movements: { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; movements: { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStorefrontOrders: { query: z.ZodObject<{ status: z.ZodDefault>; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { status: "all" | "awaiting_payment" | "awaiting_approval" | "paid" | "reserved" | "ready" | "collected" | "cancelled"; limit: number; }, { status?: "all" | "awaiting_payment" | "awaiting_approval" | "paid" | "reserved" | "ready" | "collected" | "cancelled" | undefined; limit?: number | undefined; }>; summary: "List storefront online orders with status filters"; method: "GET"; path: "/shopkeeper/storefront/orders"; responses: { 200: z.ZodObject<{ orders: z.ZodArray; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodString; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; itemCount: z.ZodNumber; itemsPreview: z.ZodArray; trackingUrl: z.ZodString; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }>, "many">; }, "strip", z.ZodTypeAny, { orders: { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }[]; }, { orders: { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateStorefrontOrderStatus: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Advance storefront order status (approve, ready, collected, cancel)"; method: "PATCH"; body: z.ZodObject<{ action: z.ZodEnum<["approve", "ready", "collected", "cancel"]>; }, "strip", z.ZodTypeAny, { action: "ready" | "collected" | "approve" | "cancel"; }, { action: "ready" | "collected" | "approve" | "cancel"; }>; path: "/shopkeeper/storefront/orders/:id/status"; responses: { 200: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveStorefrontManualPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve storefront manual transfer order and record sale"; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/storefront/orders/:id/approve-manual-payment"; responses: { 200: z.ZodObject<{ id: z.ZodString; status: z.ZodString; }, "strip", z.ZodTypeAny, { status: string; id: string; }, { status: string; id: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperSyncContract: { pushChanges: { summary: "Device pushes local changes to server"; method: "POST"; body: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodOptional; changes: z.ZodArray; id: z.ZodString; action: z.ZodEnum<["insert", "update", "delete"]>; data: z.ZodRecord; timestamp: z.ZodNumber; deviceId: z.ZodString; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }>, "many">; lastSyncTimestamp: z.ZodOptional; }, "strip", z.ZodTypeAny, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }>; path: "/shopkeeper/sync/push"; responses: { 200: z.ZodObject<{ accepted: z.ZodArray; conflicts: z.ZodArray; resolution: z.ZodEnum<["server_wins", "device_wins", "merged"]>; }, "strip", z.ZodTypeAny, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }>, "many">; serverTimestamp: z.ZodNumber; newGenerationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; pullChanges: { query: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodOptional; lastSyncTimestamp: z.ZodOptional; tables: z.ZodOptional, "many">>; }, "strip", z.ZodTypeAny, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }>; summary: "Device pulls server changes since timestamp"; method: "GET"; path: "/shopkeeper/sync/pull"; responses: { 200: z.ZodObject<{ changes: z.ZodArray; data: z.ZodRecord; timestamp: z.ZodNumber; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }>, "many">; hasMore: z.ZodBoolean; serverTimestamp: z.ZodNumber; nextLastSyncTimestamp: z.ZodOptional; }, "strip", z.ZodTypeAny, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSyncStatus: { query: z.ZodObject<{ shopId: z.ZodString; deviceId: z.ZodString; }, "strip", z.ZodTypeAny, { deviceId: string; shopId: string; }, { deviceId: string; shopId: string; }>; summary: "Check last sync timestamp and pending count"; method: "GET"; path: "/shopkeeper/sync/status"; responses: { 200: z.ZodObject<{ lastSyncTimestamp: z.ZodNullable; pendingCount: z.ZodNumber; generationId: z.ZodNumber; }, "strip", z.ZodTypeAny, { generationId: number; lastSyncTimestamp: number | null; pendingCount: number; }, { generationId: number; lastSyncTimestamp: number | null; pendingCount: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listConflicts: { query: z.ZodObject<{ resolved: z.ZodOptional>; limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { limit?: number | undefined; resolved?: "true" | "false" | undefined; }, { limit?: number | undefined; resolved?: "true" | "false" | undefined; }>; summary: "List sync conflicts for the shop (unresolved or all)"; method: "GET"; path: "/shopkeeper/sync/conflicts"; responses: { 200: z.ZodObject<{ conflicts: z.ZodArray; resolution: z.ZodString; deviceId: z.ZodNullable; resolvedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }, { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }>, "many">; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; conflicts: { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }[]; }, { total: number; conflicts: { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; resolveConflict: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark a sync conflict as resolved (keep_local or use_cloud)"; method: "PATCH"; body: z.ZodObject<{ resolution: z.ZodEnum<["keep_local", "use_cloud"]>; }, "strip", z.ZodTypeAny, { resolution: "keep_local" | "use_cloud"; }, { resolution: "keep_local" | "use_cloud"; }>; path: "/shopkeeper/sync/conflicts/:id"; responses: { 200: z.ZodObject<{ ok: z.ZodLiteral; }, "strip", z.ZodTypeAny, { ok: true; }, { ok: true; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperBackupContract: { uploadBackup: { summary: "Upload encrypted SQLite backup to R2"; method: "POST"; contentType: "multipart/form-data"; body: z.ZodObject<{ file: z.ZodAny; }, "strip", z.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/shopkeeper/backup/upload"; responses: { 200: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; sizeBytes: z.ZodNumber; checksum: z.ZodString; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getLatestBackup: { query: z.ZodObject<{ shopId: z.ZodString; }, "strip", z.ZodTypeAny, { shopId: string; }, { shopId: string; }>; summary: "Get latest backup metadata"; method: "GET"; path: "/shopkeeper/backup/latest"; responses: { 200: z.ZodNullable>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; downloadBackup: { query: z.ZodObject<{ shopId: z.ZodString; backupId: z.ZodOptional; }, "strip", z.ZodTypeAny, { shopId: string; backupId?: string | undefined; }, { shopId: string; backupId?: string | undefined; }>; summary: "Download encrypted backup for restore"; method: "GET"; path: "/shopkeeper/backup/download"; responses: { 200: z.ZodObject<{ url: z.ZodString; identity: z.ZodObject<{ agentName: z.ZodString; personality: z.ZodRecord; }, "strip", z.ZodTypeAny, { agentName: string; personality: Record; }, { agentName: string; personality: Record; }>; checksum: z.ZodString; }, "strip", z.ZodTypeAny, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listBackups: { query: z.ZodObject<{ shopId: z.ZodString; } & { limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { shopId: string; limit?: number | undefined; }, { shopId: string; limit?: number | undefined; }>; summary: "List all backups with dates"; method: "GET"; path: "/shopkeeper/backup/list"; responses: { 200: z.ZodObject<{ backups: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { backups: { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }[]; }, { backups: { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; requestBackup: { summary: "Create server-side backup (export shop data and upload to storage)"; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/backup/request"; responses: { 200: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; sizeBytes: z.ZodNumber; checksum: z.ZodString; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperWhatsappContract: { pairWhatsapp: { summary: "Link owner WhatsApp number"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; verificationCode: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone: string; verificationCode?: string | undefined; }, { phone: string; verificationCode?: string | undefined; }>; path: "/shopkeeper/whatsapp/pair"; responses: { 200: z.ZodObject<{ paired: z.ZodBoolean; message: z.ZodOptional; }, "strip", z.ZodTypeAny, { paired: boolean; message?: string | undefined; }, { paired: boolean; message?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; unpairWhatsapp: { summary: "Unlink WhatsApp"; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/whatsapp/unpair"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendMessage: { summary: "Queue outbound message"; method: "POST"; body: z.ZodUnion<[z.ZodObject<{ messageType: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: z.ZodString; content: z.ZodOptional; interactive: z.ZodOptional; buttons: z.ZodOptional, "many">>; sections: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; title: string; description?: string | undefined; }, { id: string; title: string; description?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }>, "many">>; }, "strip", z.ZodTypeAny, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }>>; mediaUrl: z.ZodOptional; metadata: z.ZodOptional>; templateName: z.ZodOptional; templateParams: z.ZodOptional>; }, "strip", z.ZodTypeAny, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }>, z.ZodObject<{ text: z.ZodString; }, "strip", z.ZodTypeAny, { text: string; }, { text: string; }>]>; path: "/shopkeeper/whatsapp/send"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listMessages: { query: z.ZodObject<{ messageType: z.ZodOptional; direction: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; messageType?: string | undefined; direction?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; messageType?: string | undefined; direction?: string | undefined; }>; summary: "Get message history"; method: "GET"; path: "/shopkeeper/whatsapp/messages"; responses: { 200: z.ZodObject<{ messages: z.ZodArray; messageType: z.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: z.ZodString; content: z.ZodString; status: z.ZodEnum<["queued", "sent", "delivered", "failed"]>; metadata: z.ZodNullable>; sentAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; messages: { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; messages: { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; incomingWebhook: { summary: "WAPI.js incoming webhook"; method: "POST"; body: z.ZodEffects; message: z.ZodOptional; timestamp: z.ZodOptional; messageId: z.ZodOptional; type: z.ZodOptional; mediaUrl: z.ZodOptional; }, "strip", z.ZodTypeAny, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }>, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, unknown>, { timestamp: number; from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; mediaUrl?: string | undefined; }, unknown>; path: "/shopkeeper/whatsapp/webhook"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deliveryStatusWebhook: { summary: "Provider delivery status callback"; method: "POST"; body: z.ZodEffects; externalId: z.ZodOptional; status: z.ZodEnum<["sent", "delivered", "failed", "read"]>; }, "strip", z.ZodTypeAny, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>; path: "/shopkeeper/whatsapp/webhook/status"; responses: { 200: z.ZodObject<{ updated: z.ZodBoolean; }, "strip", z.ZodTypeAny, { updated: boolean; }, { updated: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateAutoReply: { summary: "Configure auto-reply settings"; method: "PATCH"; body: z.ZodObject<{ enabled: z.ZodOptional; afterHoursMessage: z.ZodOptional; }, "strip", z.ZodTypeAny, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }>; path: "/shopkeeper/whatsapp/auto-reply"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateAutoReplyPost: { summary: "Configure auto-reply settings (POST for mobile compatibility)"; method: "POST"; body: z.ZodObject<{ enabled: z.ZodOptional; afterHoursMessage: z.ZodOptional; }, "strip", z.ZodTypeAny, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }>; path: "/shopkeeper/whatsapp/auto-reply"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperBillingContract: { getSubscription: { summary: "Get current subscription"; method: "GET"; path: "/shopkeeper/subscription"; responses: { 200: z.ZodNullable; status: z.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: z.ZodNumber; currency: z.ZodString; paymentMethod: z.ZodNullable; currentPeriodStart: z.ZodDate; currentPeriodEnd: z.ZodDate; cancelledAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSubscription: { summary: "Subscribe to a plan"; method: "POST"; body: z.ZodObject<{ tier: z.ZodEnum<["free", "standard", "pro"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; paymentMethod: z.ZodOptional>; paymentRef: z.ZodOptional; }, "strip", z.ZodTypeAny, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }>; path: "/shopkeeper/subscription"; responses: { 201: z.ZodObject<{ subscription: z.ZodObject<{ id: z.ZodString; tier: z.ZodEnum<["free", "standard", "pro"]>; status: z.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: z.ZodNumber; currency: z.ZodString; paymentMethod: z.ZodNullable; currentPeriodStart: z.ZodDate; currentPeriodEnd: z.ZodDate; cancelledAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>; paymentUrl: z.ZodOptional; }, "strip", z.ZodTypeAny, { subscription: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }; paymentUrl?: string | undefined; }, { subscription: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }; paymentUrl?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; cancelSubscription: { summary: "Cancel subscription"; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/subscription/cancel"; responses: { 200: z.ZodObject<{ id: z.ZodString; tier: z.ZodEnum<["free", "standard", "pro"]>; status: z.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: z.ZodNumber; currency: z.ZodString; paymentMethod: z.ZodNullable; currentPeriodStart: z.ZodDate; currentPeriodEnd: z.ZodDate; cancelledAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyPayment: { summary: "Verify mobile money payment"; method: "POST"; body: z.ZodObject<{ provider: z.ZodEnum<["paystack"]>; transactionRef: z.ZodString; }, "strip", z.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; path: "/shopkeeper/subscription/verify-payment"; responses: { 200: z.ZodObject<{ verified: z.ZodBoolean; subscription: z.ZodOptional; status: z.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: z.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: z.ZodNumber; currency: z.ZodString; paymentMethod: z.ZodNullable; currentPeriodStart: z.ZodDate; currentPeriodEnd: z.ZodDate; cancelledAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>>; }, "strip", z.ZodTypeAny, { verified: boolean; subscription?: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; } | undefined; }, { verified: boolean; subscription?: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; } | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listPayments: { query: z.ZodObject<{ limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { limit?: number | undefined; }, { limit?: number | undefined; }>; summary: "Payment history"; method: "GET"; path: "/shopkeeper/subscription/payments"; responses: { 200: z.ZodObject<{ payments: z.ZodArray; status: z.ZodEnum<["pending", "success", "failed"]>; paidAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }>, "many">; }, "strip", z.ZodTypeAny, { payments: { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }[]; }, { payments: { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; paystackWebhook: { summary: "Paystack payment webhook"; method: "POST"; body: z.ZodRecord; path: "/shopkeeper/billing/webhook/paystack"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; }; }; }; declare const shopkeeperReportsContract: { getDailyReport: { query: z.ZodObject<{ date: z.ZodDate; }, "strip", z.ZodTypeAny, { date: Date; }, { date: Date; }>; summary: "Get report for specific date"; method: "GET"; path: "/shopkeeper/reports/daily"; responses: { 200: z.ZodNullable; salesByPayment: z.ZodObject<{ cash: z.ZodNumber; transfer: z.ZodNumber; credit: z.ZodNumber; momo: z.ZodNumber; opay: z.ZodNumber; }, "strip", z.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: z.ZodArray, "many">; lowStockItems: z.ZodArray, "many">; callSummary: z.ZodNullable>; tokensUsed: z.ZodNullable; sentViaWhatsapp: z.ZodBoolean; generatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReportRange: { query: z.ZodObject<{ from: z.ZodDate; to: z.ZodDate; }, "strip", z.ZodTypeAny, { from: Date; to: Date; }, { from: Date; to: Date; }>; summary: "Get report data for date range"; method: "GET"; path: "/shopkeeper/reports/range"; responses: { 200: z.ZodObject<{ reports: z.ZodArray; salesByPayment: z.ZodObject<{ cash: z.ZodNumber; transfer: z.ZodNumber; credit: z.ZodNumber; momo: z.ZodNumber; opay: z.ZodNumber; }, "strip", z.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: z.ZodArray, "many">; lowStockItems: z.ZodArray, "many">; callSummary: z.ZodNullable>; tokensUsed: z.ZodNullable; sentViaWhatsapp: z.ZodBoolean; generatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>, "many">; summary: z.ZodObject<{ totalSales: z.ZodNumber; totalTransactions: z.ZodNumber; }, "strip", z.ZodTypeAny, { totalTransactions: number; totalSales: number; }, { totalTransactions: number; totalSales: number; }>; }, "strip", z.ZodTypeAny, { summary: { totalTransactions: number; totalSales: number; }; reports: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }[]; }, { summary: { totalTransactions: number; totalSales: number; }; reports: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; downloadPdf: { query: z.ZodObject<{ from: z.ZodDate; to: z.ZodDate; }, "strip", z.ZodTypeAny, { from: Date; to: Date; }, { from: Date; to: Date; }>; summary: "Generate and download PDF report"; method: "GET"; path: "/shopkeeper/reports/pdf"; responses: { 200: z.ZodAny; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; triggerDailyReport: { summary: "Manually trigger daily report generation"; method: "POST"; body: z.ZodObject<{ date: z.ZodOptional; }, "strip", z.ZodTypeAny, { date?: Date | undefined; }, { date?: Date | undefined; }>; path: "/shopkeeper/reports/trigger"; responses: { 200: z.ZodObject<{ report: z.ZodObject<{ id: z.ZodString; reportDate: z.ZodDate; totalSales: z.ZodNumber; totalTransactions: z.ZodNumber; salesByMethod: z.ZodObject<{ litepos: z.ZodNumber; litepos_barcode: z.ZodNumber; voice_ptt: z.ZodNumber; voice_kiosk: z.ZodNumber; voice_whatsapp: z.ZodNumber; voice_call: z.ZodNumber; telephony: z.ZodNumber; vision: z.ZodNumber; }, "strip", z.ZodTypeAny, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }>; salesByPayment: z.ZodObject<{ cash: z.ZodNumber; transfer: z.ZodNumber; credit: z.ZodNumber; momo: z.ZodNumber; opay: z.ZodNumber; }, "strip", z.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: z.ZodArray, "many">; lowStockItems: z.ZodArray, "many">; callSummary: z.ZodNullable>; tokensUsed: z.ZodNullable; sentViaWhatsapp: z.ZodBoolean; generatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>; }, "strip", z.ZodTypeAny, { report: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }; }, { report: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendDailyReport: { query: z.ZodObject<{ date: z.ZodDate; }, "strip", z.ZodTypeAny, { date: Date; }, { date: Date; }>; summary: "Generate daily report and send to owner WhatsApp"; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/reports/daily/send"; responses: { 200: z.ZodObject<{ message: z.ZodString; }, "strip", z.ZodTypeAny, { message: string; }, { message: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getFinancialStatement: { query: z.ZodObject<{ months: z.ZodDefault; format: z.ZodDefault>; }, "strip", z.ZodTypeAny, { months: number; format: "pdf" | "csv" | "json"; }, { months?: number | undefined; format?: "pdf" | "csv" | "json" | undefined; }>; summary: "P&L-style aggregates from daily reports for banks / lenders"; method: "GET"; path: "/shopkeeper/reports/financial-statement"; responses: { 200: z.ZodObject<{ format: z.ZodEnum<["pdf", "csv", "json"]>; pdfBase64: z.ZodOptional; csv: z.ZodOptional; json: z.ZodOptional>; filename: z.ZodOptional; }, "strip", z.ZodTypeAny, { format: "pdf" | "csv" | "json"; csv?: string | undefined; json?: Record | undefined; pdfBase64?: string | undefined; filename?: string | undefined; }, { format: "pdf" | "csv" | "json"; csv?: string | undefined; json?: Record | undefined; pdfBase64?: string | undefined; filename?: string | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperInstallerContract: { registerInstaller: { summary: "Register new installer"; method: "POST"; body: z.ZodObject<{ name: z.ZodString; phone: z.ZodString; password: z.ZodString; email: z.ZodOptional; city: z.ZodString; market: z.ZodOptional; }, "strip", z.ZodTypeAny, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }>; path: "/shopkeeper/installers/register"; responses: { 201: z.ZodObject<{ installer: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; city: z.ZodString; market: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "inactive"]>; rating: z.ZodNumber; totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; token: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; loginInstaller: { summary: "Installer auth"; method: "POST"; body: z.ZodObject<{ phone: z.ZodString; password: z.ZodString; }, "strip", z.ZodTypeAny, { phone: string; password: string; }, { phone: string; password: string; }>; path: "/shopkeeper/installers/login"; responses: { 200: z.ZodObject<{ installer: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; city: z.ZodString; market: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "inactive"]>; rating: z.ZodNumber; totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; token: z.ZodString; expiresIn: z.ZodNumber; }, "strip", z.ZodTypeAny, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getInstallerProfile: { summary: "Get own profile + stats"; method: "GET"; path: "/shopkeeper/installers/me"; responses: { 200: z.ZodObject<{ installer: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodString; email: z.ZodNullable; city: z.ZodString; market: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "inactive"]>; rating: z.ZodNumber; totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; stats: z.ZodObject<{ totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; pendingFollowUps: z.ZodNumber; }, "strip", z.ZodTypeAny, { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }, { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }>; }, "strip", z.ZodTypeAny, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; stats: { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }; }, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; stats: { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listOnboardings: { query: z.ZodObject<{ status: z.ZodOptional; limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { status?: string | undefined; limit?: number | undefined; }, { status?: string | undefined; limit?: number | undefined; }>; summary: "List installer onboardings"; method: "GET"; path: "/shopkeeper/installers/onboardings"; responses: { 200: z.ZodObject<{ onboardings: z.ZodArray; setupCompleted: z.ZodBoolean; tierConverted: z.ZodNullable; convertedAt: z.ZodNullable; commissionPaid: z.ZodNumber; satisfactionScore: z.ZodNullable; followUpDay3: z.ZodBoolean; followUpDay7: z.ZodBoolean; followUpDay14: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>, "many">; }, "strip", z.ZodTypeAny, { onboardings: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }[]; }, { onboardings: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; logOnboarding: { summary: "Log a new shop onboarding"; method: "POST"; body: z.ZodObject<{ shopPhone: z.ZodString; setupCompleted: z.ZodDefault; }, "strip", z.ZodTypeAny, { shopPhone: string; setupCompleted: boolean; }, { shopPhone: string; setupCompleted?: boolean | undefined; }>; path: "/shopkeeper/installers/onboardings"; responses: { 201: z.ZodObject<{ onboarding: z.ZodObject<{ id: z.ZodString; installerId: z.ZodString; shopPhone: z.ZodString; shopId: z.ZodNullable; setupCompleted: z.ZodBoolean; tierConverted: z.ZodNullable; convertedAt: z.ZodNullable; commissionPaid: z.ZodNumber; satisfactionScore: z.ZodNullable; followUpDay3: z.ZodBoolean; followUpDay7: z.ZodBoolean; followUpDay14: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>; }, "strip", z.ZodTypeAny, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; logFollowUp: { summary: "Log a follow-up visit"; method: "POST"; body: z.ZodObject<{ onboardingId: z.ZodString; day: z.ZodEnum<["3", "7", "14"]>; satisfactionScore: z.ZodOptional; }, "strip", z.ZodTypeAny, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }>; path: "/shopkeeper/installers/follow-up"; responses: { 200: z.ZodObject<{ onboarding: z.ZodObject<{ id: z.ZodString; installerId: z.ZodString; shopPhone: z.ZodString; shopId: z.ZodNullable; setupCompleted: z.ZodBoolean; tierConverted: z.ZodNullable; convertedAt: z.ZodNullable; commissionPaid: z.ZodNumber; satisfactionScore: z.ZodNullable; followUpDay3: z.ZodBoolean; followUpDay7: z.ZodBoolean; followUpDay14: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>; }, "strip", z.ZodTypeAny, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getLeaderboard: { query: z.ZodObject<{ period: z.ZodOptional>; limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { limit?: number | undefined; period?: "week" | "month" | undefined; }, { limit?: number | undefined; period?: "week" | "month" | undefined; }>; summary: "Installer rankings"; method: "GET"; path: "/shopkeeper/installers/leaderboard"; responses: { 200: z.ZodObject<{ leaderboard: z.ZodArray; city: z.ZodString; market: z.ZodNullable; status: z.ZodEnum<["active", "suspended", "inactive"]>; rating: z.ZodNumber; totalOnboardings: z.ZodNumber; totalEarnings: z.ZodNumber; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; onboardings: z.ZodNumber; earnings: z.ZodNumber; }, "strip", z.ZodTypeAny, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }>, "many">; }, "strip", z.ZodTypeAny, { leaderboard: { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }[]; }, { leaderboard: { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getEarnings: { query: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; }, "strip", z.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; }>; summary: "Commission history"; method: "GET"; path: "/shopkeeper/installers/earnings"; responses: { 200: z.ZodObject<{ total: z.ZodNumber; byOnboarding: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { total: number; byOnboarding: { amount: number; paidAt: Date; shopPhone: string; onboardingId: string; }[]; }, { total: number; byOnboarding: { amount: number; paidAt: Date; shopPhone: string; onboardingId: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperBarcodesContract: { lookupBarcode: { pathParams: z.ZodObject<{ barcode: z.ZodString; }, "strip", z.ZodTypeAny, { barcode: string; }, { barcode: string; }>; summary: "Lookup product by barcode"; method: "GET"; path: "/shopkeeper/barcodes/:barcode"; responses: { 200: z.ZodNullable; category: z.ZodNullable; imageUrl: z.ZodNullable; }, "strip", z.ZodTypeAny, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }>>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; submitBarcode: { summary: "Submit new barcode→product mapping"; method: "POST"; body: z.ZodObject<{ barcode: z.ZodString; name: z.ZodString; brand: z.ZodOptional; category: z.ZodOptional; }, "strip", z.ZodTypeAny, { name: string; barcode: string; brand?: string | undefined; category?: string | undefined; }, { name: string; barcode: string; brand?: string | undefined; category?: string | undefined; }>; path: "/shopkeeper/barcodes"; responses: { 201: z.ZodObject<{ id: z.ZodString; barcode: z.ZodString; name: z.ZodString; brand: z.ZodNullable; category: z.ZodNullable; imageUrl: z.ZodNullable; }, "strip", z.ZodTypeAny, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperWalletContract: { getWallet: { summary: "Get wallet balance and recent activity"; method: "GET"; path: "/shopkeeper/wallet"; responses: { 200: z.ZodObject<{ wallet: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; balance: z.ZodNumber; lifetimeEarned: z.ZodNumber; lifetimeSpent: z.ZodNumber; lastGrantAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>; recentTransactions: z.ZodArray; amount: z.ZodNumber; feature: z.ZodNullable>; description: z.ZodNullable; referenceId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; recentTransactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; recentTransactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; purchaseTokens: { summary: "Purchase a token bundle (initiates Paystack payment; wallet credited on success)"; method: "POST"; body: z.ZodObject<{ bundleId: z.ZodString; paymentRef: z.ZodOptional; paymentMethod: z.ZodLiteral<"paystack">; }, "strip", z.ZodTypeAny, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }>; path: "/shopkeeper/wallet/purchase"; responses: { 200: z.ZodObject<{ wallet: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; balance: z.ZodNumber; lifetimeEarned: z.ZodNumber; lifetimeSpent: z.ZodNumber; lastGrantAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>; transaction: z.ZodOptional; amount: z.ZodNumber; feature: z.ZodNullable>; description: z.ZodNullable; referenceId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>>; paymentUrl: z.ZodOptional; referenceId: z.ZodOptional; }, "strip", z.ZodTypeAny, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; paymentUrl?: string | undefined; referenceId?: string | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; paymentUrl?: string | undefined; referenceId?: string | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listBundles: { summary: "List available token bundles"; method: "GET"; path: "/shopkeeper/wallet/bundles"; responses: { 200: z.ZodObject<{ bundles: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { bundles: { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }[]; }, { bundles: { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }[]; }>; }; }; listTransactions: { query: z.ZodObject<{ type: z.ZodOptional; feature: z.ZodOptional; from: z.ZodOptional; to: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; type?: string | undefined; from?: Date | undefined; to?: Date | undefined; feature?: string | undefined; }, { type?: string | undefined; page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; feature?: string | undefined; }>; summary: "List token transaction history"; method: "GET"; path: "/shopkeeper/wallet/transactions"; responses: { 200: z.ZodObject<{ transactions: z.ZodArray; amount: z.ZodNumber; feature: z.ZodNullable>; description: z.ZodNullable; referenceId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; transactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; transactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyTokenPayment: { summary: "Verify Paystack payment for token purchase"; method: "POST"; body: z.ZodObject<{ provider: z.ZodLiteral<"paystack">; transactionRef: z.ZodString; }, "strip", z.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; path: "/shopkeeper/wallet/verify-payment"; responses: { 200: z.ZodObject<{ verified: z.ZodBoolean; wallet: z.ZodOptional; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>>; transaction: z.ZodOptional; amount: z.ZodNumber; feature: z.ZodNullable>; description: z.ZodNullable; referenceId: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>>; }, "strip", z.ZodTypeAny, { verified: boolean; wallet?: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; } | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }, { verified: boolean; wallet?: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; } | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; tokenPaymentWebhook: { summary: "Legacy webhook endpoint (not used)"; method: "POST"; body: z.ZodObject<{ event: z.ZodString; data: z.ZodRecord; }, "strip", z.ZodTypeAny, { data: Record; event: string; }, { data: Record; event: string; }>; path: "/shopkeeper/wallet/webhook/flutterwave"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; tokenPaymentWebhookPaystack: { summary: "Paystack payment webhook for token purchases (verify x-paystack-signature with raw body)"; method: "POST"; body: z.ZodObject<{ event: z.ZodOptional; data: z.ZodOptional; status: z.ZodOptional; }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ reference: z.ZodOptional; status: z.ZodOptional; }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ reference: z.ZodOptional; status: z.ZodOptional; }, z.ZodTypeAny, "passthrough">>>; }, "strip", z.ZodTypeAny, { data?: z.objectOutputType<{ reference: z.ZodOptional; status: z.ZodOptional; }, z.ZodTypeAny, "passthrough"> | undefined; event?: string | undefined; }, { data?: z.objectInputType<{ reference: z.ZodOptional; status: z.ZodOptional; }, z.ZodTypeAny, "passthrough"> | undefined; event?: string | undefined; }>; path: "/shopkeeper/wallet/webhook/paystack"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; /** * Shop analytics API. Path segment "analytics" reflects the resource/domain; * the UI that consumes this is the "dashboard". */ declare const shopkeeperAnalyticsContract: { getLiveView: { query: z.ZodObject<{ since: z.ZodOptional; }, "strip", z.ZodTypeAny, { since?: Date | undefined; }, { since?: Date | undefined; }>; summary: "Real-time transaction feed and stock levels"; method: "GET"; path: "/shopkeeper/analytics/live"; responses: { 200: z.ZodObject<{ recentSales: z.ZodArray; paymentSplits: z.ZodOptional; amount: z.ZodNumber; }, "strip", z.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: z.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: z.ZodString; transcription: z.ZodNullable; confidenceScore: z.ZodNullable; approved: z.ZodBoolean; receiptPrinted: z.ZodBoolean; recordedAt: z.ZodDate; customerId: z.ZodNullable; callSessionId: z.ZodNullable; onlineOrderId: z.ZodNullable; transactionType: z.ZodDefault>; originalSaleId: z.ZodNullable; staffProfileId: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>, "many">; revenueToday: z.ZodNumber; transactionsToday: z.ZodNumber; lowStockItems: z.ZodArray; }, "strip", z.ZodTypeAny, { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }, { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }>, "many">; lastSyncAt: z.ZodNullable; }, "strip", z.ZodTypeAny, { lastSyncAt: Date | null; lowStockItems: { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }[]; recentSales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }[]; revenueToday: number; transactionsToday: number; }, { lastSyncAt: Date | null; lowStockItems: { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }[]; recentSales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }[]; revenueToday: number; transactionsToday: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getAnalytics: { query: z.ZodObject<{ period: z.ZodDefault>; from: z.ZodOptional; to: z.ZodOptional; }, "strip", z.ZodTypeAny, { period: "day" | "week" | "month" | "quarter" | "year"; from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; period?: "day" | "week" | "month" | "quarter" | "year" | undefined; }>; summary: "Sales trends, product performance, payment breakdowns"; method: "GET"; path: "/shopkeeper/analytics/trends"; responses: { 200: z.ZodObject<{ salesTrend: z.ZodArray, "many">; productPerformance: z.ZodArray; velocity: z.ZodNumber; }, "strip", z.ZodTypeAny, { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }, { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }>, "many">; paymentBreakdown: z.ZodRecord; inputMethodBreakdown: z.ZodRecord; peakHours: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { salesTrend: { date: string; transactions: number; revenue: number; }[]; productPerformance: { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }[]; paymentBreakdown: Record; inputMethodBreakdown: Record; peakHours: { transactions: number; revenue: number; hour: number; }[]; }, { salesTrend: { date: string; transactions: number; revenue: number; }[]; productPerformance: { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }[]; paymentBreakdown: Record; inputMethodBreakdown: Record; peakHours: { transactions: number; revenue: number; hour: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getEmployeeView: { query: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; }, "strip", z.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; }>; summary: "Employee transactions and cash reconciliation"; method: "GET"; path: "/shopkeeper/analytics/employees"; responses: { 200: z.ZodObject<{ employees: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { employees: { name: string; totalRevenue: number; totalTransactions: number; cashCollected: number; expectedCash: number; discrepancy: number; }[]; }, { employees: { name: string; totalRevenue: number; totalTransactions: number; cashCollected: number; expectedCash: number; discrepancy: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMultiShopComparison: { query: z.ZodObject<{ period: z.ZodDefault>; }, "strip", z.ZodTypeAny, { period: "day" | "week" | "month"; }, { period?: "day" | "week" | "month" | undefined; }>; summary: "Side-by-side shop comparison for multi-shop owners"; method: "GET"; path: "/shopkeeper/analytics/multi-shop"; responses: { 200: z.ZodObject<{ shops: z.ZodArray; activeEmployees: z.ZodNumber; lowStockCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }>, "many">; }, "strip", z.ZodTypeAny, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }[]; }, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMultiShopSummary: { query: z.ZodObject<{ period: z.ZodDefault>; }, "strip", z.ZodTypeAny, { period: "day" | "week" | "month"; }, { period?: "day" | "week" | "month" | undefined; }>; summary: "Aggregate KPIs and per-shop health for multi-shop command center"; method: "GET"; path: "/shopkeeper/analytics/multi-shop/summary"; responses: { 200: z.ZodObject<{ aggregate: z.ZodObject<{ shopCount: z.ZodNumber; totalRevenue: z.ZodNumber; totalTransactions: z.ZodNumber; totalLowStockSkus: z.ZodNumber; avgRevenuePerShop: z.ZodNumber; }, "strip", z.ZodTypeAny, { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }, { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }>; shops: z.ZodArray; activeEmployees: z.ZodNumber; lowStockCount: z.ZodNumber; vsAverage: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }>, "many">; }, "strip", z.ZodTypeAny, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }[]; aggregate: { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }; }, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }[]; aggregate: { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createShareLink: { summary: "Generate tokenized read-only link for accountant/lender"; method: "POST"; body: z.ZodObject<{ permissions: z.ZodArray, "many">; expiresInDays: z.ZodDefault; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { permissions: ("read_analytics" | "read_reports" | "read_transactions" | "bank_share")[]; expiresInDays: number; label?: string | undefined; }, { permissions: ("read_analytics" | "read_reports" | "read_transactions" | "bank_share")[]; expiresInDays?: number | undefined; label?: string | undefined; }>; path: "/shopkeeper/analytics/share"; responses: { 201: z.ZodObject<{ shareToken: z.ZodString; shareUrl: z.ZodString; expiresAt: z.ZodDate; }, "strip", z.ZodTypeAny, { shareToken: string; shareUrl: string; expiresAt: Date; }, { shareToken: string; shareUrl: string; expiresAt: Date; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSharedView: { pathParams: z.ZodObject<{ token: z.ZodString; }, "strip", z.ZodTypeAny, { token: string; }, { token: string; }>; query: z.ZodObject<{ period: z.ZodDefault>; }, "strip", z.ZodTypeAny, { period: "week" | "month" | "quarter"; }, { period?: "week" | "month" | "quarter" | undefined; }>; summary: "Public read-only view via shared link"; method: "GET"; path: "/shopkeeper/analytics/shared/:token"; responses: { 200: z.ZodObject<{ shopName: z.ZodString; analytics: z.ZodObject<{ salesTrend: z.ZodArray, "many">; totalRevenue: z.ZodNumber; totalTransactions: z.ZodNumber; }, "strip", z.ZodTypeAny, { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }, { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }>; financialStatement: z.ZodOptional>; generatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { shopName: string; generatedAt: Date; analytics: { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }; financialStatement?: Record | undefined; }, { shopName: string; generatedAt: Date; analytics: { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }; financialStatement?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSalesForecast: { query: z.ZodObject<{ productId: z.ZodOptional; }, "strip", z.ZodTypeAny, { productId?: string | undefined; }, { productId?: string | undefined; }>; summary: "Next 7 days demand forecast per product"; method: "GET"; path: "/shopkeeper/analytics/forecast"; responses: { 200: z.ZodObject<{ forecast: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { forecast: { productId: string; productName: string; avgDailyQty: number; forecastNext7Days: number; }[]; }, { forecast: { productId: string; productName: string; avgDailyQty: number; forecastNext7Days: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomerSegmentation: { summary: "Customer segments by recency, frequency, monetary"; method: "GET"; path: "/shopkeeper/analytics/segmentation"; responses: { 200: z.ZodObject<{ segments: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }, { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }>, "many">; }, "strip", z.ZodTypeAny, { segments: { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }[]; }, { segments: { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSeasonality: { query: z.ZodObject<{ days: z.ZodDefault; }, "strip", z.ZodTypeAny, { days: number; }, { days?: number | undefined; }>; summary: "Sales patterns by day of week and hour"; method: "GET"; path: "/shopkeeper/analytics/seasonality"; responses: { 200: z.ZodObject<{ byDayOfWeek: z.ZodArray, "many">; byHour: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { byDayOfWeek: { transactions: number; revenue: number; day: number; dayName: string; }[]; byHour: { transactions: number; revenue: number; hour: number; }[]; }, { byDayOfWeek: { transactions: number; revenue: number; day: number; dayName: string; }[]; byHour: { transactions: number; revenue: number; hour: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMarketBenchmark: { query: z.ZodObject<{ normalizedName: z.ZodString; market: z.ZodString; city: z.ZodString; }, "strip", z.ZodTypeAny, { market: string; city: string; normalizedName: string; }, { market: string; city: string; normalizedName: string; }>; summary: "Median / IQR selling price for a product label in a market (privacy-safe aggregate)"; method: "GET"; path: "/shopkeeper/analytics/market-benchmark"; responses: { 200: z.ZodNullable; p75: z.ZodNullable; sampleSize: z.ZodNumber; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { market: string; city: string; updatedAt: Date; normalizedName: string; medianPrice: number; p25: number | null; p75: number | null; sampleSize: number; }, { market: string; city: string; updatedAt: Date; normalizedName: string; medianPrice: number; p25: number | null; p75: number | null; sampleSize: number; }>>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; getLenderPackage: { query: z.ZodObject<{ /** Explicit owner consent required before score is returned. */ lenderOptIn: z.ZodOptional>; }, "strip", z.ZodTypeAny, { lenderOptIn?: "true" | undefined; }, { lenderOptIn?: "true" | undefined; }>; summary: "MFI handoff package — owner-only with explicit opt-in"; method: "GET"; path: "/shopkeeper/analytics/lender-package"; responses: { 200: z.ZodObject<{ scoreSummary: z.ZodObject<{ score: z.ZodNumber; band: z.ZodEnum<["excellent", "good", "fair", "limited"]>; components: z.ZodObject<{ revenueConsistency: z.ZodNumber; paymentMethodDiversification: z.ZodNumber; creditRepaymentRate: z.ZodNumber; growthTrend: z.ZodNumber; }, "strip", z.ZodTypeAny, { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }, { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }>; }, "strip", z.ZodTypeAny, { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }, { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }>; financialStatement: z.ZodRecord; computedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { financialStatement: Record; scoreSummary: { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }; computedAt: Date; }, { financialStatement: Record; scoreSummary: { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }; computedAt: Date; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: z.ZodObject<{ message: z.ZodString; details: z.ZodOptional>; } & { code: z.ZodOptional>; daysRemaining: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; code?: "lending_not_eligible" | undefined; details?: Record | undefined; daysRemaining?: number | undefined; }, { message: string; code?: "lending_not_eligible" | undefined; details?: Record | undefined; daysRemaining?: number | undefined; }>; }; }; getMarginOptimization: { summary: "Products with low margin or selling below cost"; method: "GET"; path: "/shopkeeper/analytics/margin"; responses: { 200: z.ZodObject<{ products: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { products: { costPrice: number; sellingPrice: number; productId: string; productName: string; currentMarginPercent: number; suggestion: string; }[]; }, { products: { costPrice: number; sellingPrice: number; productId: string; productName: string; currentMarginPercent: number; suggestion: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperTelephonyContract: { incomingWebhook: { summary: "Africa's Talking incoming call handler"; method: "POST"; body: z.ZodObject<{ sessionId: z.ZodString; callerNumber: z.ZodString; destinationNumber: z.ZodString; direction: z.ZodString; isActive: z.ZodBoolean; dtmfDigits: z.ZodOptional; /** When present (Africa's Talking recording callback), we run STT → intent → TTS → Play. */ recordingUrl: z.ZodOptional; recording_url: z.ZodOptional; }, "strip", z.ZodTypeAny, { isActive: boolean; direction: string; sessionId: string; callerNumber: string; destinationNumber: string; dtmfDigits?: string | undefined; recordingUrl?: string | undefined; recording_url?: string | undefined; }, { isActive: boolean; direction: string; sessionId: string; callerNumber: string; destinationNumber: string; dtmfDigits?: string | undefined; recordingUrl?: string | undefined; recording_url?: string | undefined; }>; path: "/shopkeeper/telephony/webhook"; responses: { 200: z.ZodObject<{ action: z.ZodString; }, "strip", z.ZodTypeAny, { action: string; }, { action: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; callStatusWebhook: { summary: "Call duration/cost status updates"; method: "POST"; body: z.ZodObject<{ sessionId: z.ZodString; callSessionId: z.ZodOptional; isActive: z.ZodBoolean; direction: z.ZodEnum<["inbound", "outbound"]>; callerNumber: z.ZodString; destinationNumber: z.ZodString; durationInSeconds: z.ZodNumber; currencyCode: z.ZodOptional; amount: z.ZodOptional; status: z.ZodEnum<["ringing", "in_progress", "completed", "failed", "busy", "no_answer"]>; }, "strip", z.ZodTypeAny, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }>; path: "/shopkeeper/telephony/status"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; initiateCall: { summary: "Trigger outbound proactive call to shop owner"; method: "POST"; body: z.ZodObject<{ targetPhone: z.ZodString; triggerReason: z.ZodEnum<["critical_stock", "large_sale", "anomaly", "daily_summary"]>; shopContext: z.ZodOptional>; alertMessage: z.ZodOptional; }, "strip", z.ZodTypeAny, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }>; path: "/shopkeeper/telephony/call"; responses: { 200: z.ZodObject<{ callSession: z.ZodObject<{ id: z.ZodString; shopId: z.ZodString; direction: z.ZodEnum<["inbound", "outbound"]>; callerPhone: z.ZodString; startedAt: z.ZodDate; endedAt: z.ZodNullable; durationSeconds: z.ZodNullable; triggerReason: z.ZodNullable>; transcriptSummary: z.ZodNullable; actionsTaken: z.ZodNullable; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; amount?: number | undefined; product?: string | undefined; }, { type: string; amount?: number | undefined; product?: string | undefined; }>, "many">>; callCost: z.ZodNullable; ownerSatisfaction: z.ZodNullable>; gateway: z.ZodEnum<["africas_talking", "webrtc_voip"]>; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }>; tokensCharged: z.ZodNumber; }, "strip", z.ZodTypeAny, { callSession: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }; tokensCharged: number; }, { callSession: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }; tokensCharged: number; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; getCallLogs: { query: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; direction: z.ZodOptional>; page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }, { page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }>; summary: "Call history for shop"; method: "GET"; path: "/shopkeeper/telephony/logs"; responses: { 200: z.ZodObject<{ calls: z.ZodArray; callerPhone: z.ZodString; startedAt: z.ZodDate; endedAt: z.ZodNullable; durationSeconds: z.ZodNullable; triggerReason: z.ZodNullable>; transcriptSummary: z.ZodNullable; actionsTaken: z.ZodNullable; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; amount?: number | undefined; product?: string | undefined; }, { type: string; amount?: number | undefined; product?: string | undefined; }>, "many">>; callCost: z.ZodNullable; ownerSatisfaction: z.ZodNullable>; gateway: z.ZodEnum<["africas_talking", "webrtc_voip"]>; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; calls: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; calls: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperVisionContract: { analyzeInvoice: { summary: "Upload image and return parsed invoice items"; method: "POST"; contentType: "multipart/form-data"; body: z.ZodObject<{ file: z.ZodAny; }, "strip", z.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/shopkeeper/vision/invoice"; responses: { 200: z.ZodObject<{ items: z.ZodArray; totalAmount: z.ZodOptional; barcode: z.ZodOptional; productId: z.ZodOptional; confidence: z.ZodOptional; }, "strip", z.ZodTypeAny, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }>, "many">; supplierName: z.ZodOptional; totalAmount: z.ZodOptional; confidence: z.ZodOptional; }, "strip", z.ZodTypeAny, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; confirmRestock: { summary: "Commit parsed invoice items to inventory"; method: "POST"; body: z.ZodObject<{ items: z.ZodArray; productName: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }>, "many">; supplierName: z.ZodOptional; totalAmount: z.ZodOptional; }, "strip", z.ZodTypeAny, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }>; path: "/shopkeeper/vision/confirm"; responses: { 200: z.ZodObject<{ stockMovements: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { stockMovements: { productId: string; quantity: number; balanceAfter: number; productName: string; }[]; }, { stockMovements: { productId: string; quantity: number; balanceAfter: number; productName: string; }[]; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperInsightsContract: { list: { query: z.ZodObject<{ since: z.ZodOptional; unreadOnly: z.ZodDefault>; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; unreadOnly: boolean; since?: Date | undefined; }, { page?: number | undefined; limit?: number | undefined; since?: Date | undefined; unreadOnly?: boolean | undefined; }>; summary: "List cloud-generated insights for device sync"; method: "GET"; path: "/shopkeeper/insights"; responses: { 200: z.ZodObject<{ insights: z.ZodArray; title: z.ZodString; body: z.ZodString; payload: z.ZodNullable>; readAt: z.ZodNullable; engagementType: z.ZodNullable>; engagedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; insights: { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; insights: { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; markRead: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark insight as read"; method: "PATCH"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/insights/:id/read"; responses: { 200: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; title: z.ZodString; body: z.ZodString; payload: z.ZodNullable>; readAt: z.ZodNullable; engagementType: z.ZodNullable>; engagedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; engageInsight: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Record insight engagement (acted on / dismissed / ignored)"; method: "PATCH"; body: z.ZodObject<{ engagementType: z.ZodEnum<["acted_on", "dismissed", "ignored"]>; }, "strip", z.ZodTypeAny, { engagementType: "acted_on" | "dismissed" | "ignored"; }, { engagementType: "acted_on" | "dismissed" | "ignored"; }>; path: "/shopkeeper/insights/:id/engage"; responses: { 200: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; title: z.ZodString; body: z.ZodString; payload: z.ZodNullable>; readAt: z.ZodNullable; engagementType: z.ZodNullable>; engagedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; agentUsage: { query: z.ZodObject<{ from: z.ZodOptional; to: z.ZodOptional; limitDays: z.ZodOptional; }, "strip", z.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; limitDays?: number | undefined; }, { from?: Date | undefined; to?: Date | undefined; limitDays?: number | undefined; }>; summary: "Get trade agent usage (intents, daily counts, token spend)"; method: "GET"; path: "/shopkeeper/insights/agent-usage"; responses: { 200: z.ZodObject<{ byIntent: z.ZodRecord; byDay: z.ZodArray, "many">; totalSessions: z.ZodNumber; totalTokensUsed: z.ZodNumber; }, "strip", z.ZodTypeAny, { byIntent: Record; byDay: { date: string; tokensUsed: number; count: number; }[]; totalSessions: number; totalTokensUsed: number; }, { byIntent: Record; byDay: { date: string; tokensUsed: number; count: number; }[]; totalSessions: number; totalTokensUsed: number; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperAuditContract: { list: { query: z.ZodObject<{ since: z.ZodOptional; until: z.ZodOptional; actionType: z.ZodOptional; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; since?: Date | undefined; until?: Date | undefined; actionType?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; since?: Date | undefined; until?: Date | undefined; actionType?: string | undefined; }>; summary: "List server-originated action audit logs"; method: "GET"; path: "/shopkeeper/audit-logs"; responses: { 200: z.ZodObject<{ logs: z.ZodArray>; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { id: string; createdAt: Date; payload: Record | null; actionType: string; }, { id: string; createdAt: Date; payload: Record | null; actionType: string; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; logs: { id: string; createdAt: Date; payload: Record | null; actionType: string; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; logs: { id: string; createdAt: Date; payload: Record | null; actionType: string; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; /** Intent shape matches mobile TransactionIntent (record_sale, stock_query, restock, credit_summary, credit_payment). */ declare const voiceIntentSchema: z.ZodObject<{ type: z.ZodEnum<["record_sale", "stock_query", "restock", "credit_summary", "credit_payment"]>; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>; type VoiceIntent = z.infer; declare const voiceBatchItemSchema: z.ZodObject<{ type: z.ZodLiteral<"record_sale">; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>; type VoiceBatchItem = z.infer; declare const voiceParseResponseSchema: z.ZodObject<{ intent: z.ZodNullable; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: z.ZodNullable; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; type VoiceParseResponse = z.infer; declare const voiceTranscribeResponseSchema: z.ZodObject<{ transcript: z.ZodString; intent: z.ZodNullable; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: z.ZodNullable; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; type VoiceTranscribeResponse = z.infer; /** One flat intent per row for ActionPreview-style review (ambient / multi-turn transcript). */ declare const voiceAmbientExtractResponseSchema: z.ZodObject<{ intents: z.ZodArray; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }>; type VoiceAmbientExtractResponse = z.infer; declare const shopkeeperVoiceContract: { parseTranscript: { summary: "Parse voice transcript to transaction intent (keyword + optional LLM fallback)"; method: "POST"; body: z.ZodObject<{ transcript: z.ZodString; productHints: z.ZodOptional; }, "strip", z.ZodTypeAny, { transcript: string; productHints?: string | undefined; }, { transcript: string; productHints?: string | undefined; }>; path: "/shopkeeper/voice/parse"; responses: { 200: z.ZodObject<{ intent: z.ZodNullable; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: z.ZodNullable; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; transcribeAudio: { summary: "Transcribe audio via Whisper and parse intent — single round trip, AI stays server-side"; method: "POST"; body: z.ZodObject<{ audioBase64: z.ZodString; language: z.ZodOptional; productHints: z.ZodOptional; }, "strip", z.ZodTypeAny, { audioBase64: string; productHints?: string | undefined; language?: string | undefined; }, { audioBase64: string; productHints?: string | undefined; language?: string | undefined; }>; path: "/shopkeeper/voice/transcribe"; responses: { 200: z.ZodObject<{ transcript: z.ZodString; intent: z.ZodNullable; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: z.ZodNullable; productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; 422: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; extractAmbientIntents: { summary: "Extract structured transaction intents from a long conversation transcript (ambient listening hand-off)"; method: "POST"; body: z.ZodObject<{ transcript: z.ZodString; productHints: z.ZodOptional; }, "strip", z.ZodTypeAny, { transcript: string; productHints?: string | undefined; }, { transcript: string; productHints?: string | undefined; }>; path: "/shopkeeper/voice/extract-ambient"; responses: { 200: z.ZodObject<{ intents: z.ZodArray; productId: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; customerId: z.ZodOptional; amount: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; }; declare const shopkeeperMobileLlmContract: { getManifest: { summary: "Get current on-device LLM model manifest (filename + hash for update check)"; method: "GET"; path: "/shopkeeper/mobile-llm/manifest"; responses: { 200: z.ZodObject<{ modelFileName: z.ZodString; sha256: z.ZodOptional; downloadUrl: z.ZodOptional; }, "strip", z.ZodTypeAny, { modelFileName: string; sha256?: string | undefined; downloadUrl?: string | undefined; }, { modelFileName: string; sha256?: string | undefined; downloadUrl?: string | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getUploadLogUrl: { summary: "Get presigned PUT URL to upload one on-device LLM request/response log (direct to S3)."; method: "POST"; body: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>; path: "/shopkeeper/mobile-llm/upload-log-url"; responses: { 200: z.ZodObject<{ uploadUrl: z.ZodString; key: z.ZodString; }, "strip", z.ZodTypeAny, { uploadUrl: string; key: string; }, { uploadUrl: string; key: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const reservationSchema: z.ZodObject<{ id: z.ZodString; quantity: z.ZodNumber; status: z.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; expiresAt: z.ZodDate; productId: z.ZodString; customerId: z.ZodNullable; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>; type ShopReservationDto = z.infer; declare const shopkeeperReservationsContract: { listReservations: { query: z.ZodObject<{ status: z.ZodOptional>; } & { page: z.ZodDefault; limit: z.ZodDefault; }, "strip", z.ZodTypeAny, { page: number; limit: number; status?: "cancelled" | "expired" | "pending" | "fulfilled" | undefined; }, { status?: "cancelled" | "expired" | "pending" | "fulfilled" | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "List reservations for the shop"; method: "GET"; path: "/shopkeeper/reservations"; responses: { 200: z.ZodObject<{ reservations: z.ZodArray; expiresAt: z.ZodDate; productId: z.ZodString; customerId: z.ZodNullable; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>, "many">; pagination: z.ZodObject<{ page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", z.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; reservations: { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; reservations: { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createReservation: { summary: "Create a product reservation"; method: "POST"; body: z.ZodObject<{ productId: z.ZodString; quantity: z.ZodNumber; customerId: z.ZodOptional; expiresAt: z.ZodDate; }, "strip", z.ZodTypeAny, { productId: string; quantity: number; expiresAt: Date; customerId?: string | undefined; }, { productId: string; quantity: number; expiresAt: Date; customerId?: string | undefined; }>; path: "/shopkeeper/reservations"; responses: { 201: z.ZodObject<{ id: z.ZodString; quantity: z.ZodNumber; status: z.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; expiresAt: z.ZodDate; productId: z.ZodString; customerId: z.ZodNullable; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateReservationStatus: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update reservation status (e.g. fulfil or cancel)"; method: "PATCH"; body: z.ZodObject<{ status: z.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; }, "strip", z.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; }>; path: "/shopkeeper/reservations/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; quantity: z.ZodNumber; status: z.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; expiresAt: z.ZodDate; productId: z.ZodString; customerId: z.ZodNullable; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperIntelligenceContract: { getAgentAutonomy: { summary: "Per-shop autonomous execution thresholds and fine-tune cohort"; method: "GET"; path: "/shopkeeper/intelligence/agent-autonomy"; responses: { 200: z.ZodObject<{ settings: z.ZodRecord; defaults: z.ZodRecord; intentRouterCohort: z.ZodEnum<["control", "experimental"]>; }, "strip", z.ZodTypeAny, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; putAgentAutonomy: { summary: "Update autonomy settings (partial merge over defaults)"; method: "PUT"; body: z.ZodRecord; path: "/shopkeeper/intelligence/agent-autonomy"; responses: { 200: z.ZodObject<{ settings: z.ZodRecord; defaults: z.ZodRecord; intentRouterCohort: z.ZodEnum<["control", "experimental"]>; }, "strip", z.ZodTypeAny, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getWeeklyPlanLatest: { summary: "Most recent weekly operational plan"; method: "GET"; path: "/shopkeeper/intelligence/weekly-plan/latest"; responses: { 200: z.ZodObject<{ plan: z.ZodNullable; title: z.ZodString; detail: z.ZodString; itemStatus: z.ZodEnum<["pending", "approved", "rejected", "done"]>; payload: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }, { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }>, "many">; summaryText: z.ZodNullable; deliveredAt: z.ZodNullable; approvedAt: z.ZodNullable; createdAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; }, { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; }>>; }, "strip", z.ZodTypeAny, { plan: { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; } | null; }, { plan: { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; } | null; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; setWeeklyPlanStatus: { pathParams: z.ZodObject<{ planId: z.ZodString; }, "strip", z.ZodTypeAny, { planId: string; }, { planId: string; }>; summary: "Approve or reject a weekly plan"; method: "POST"; body: z.ZodObject<{ status: z.ZodEnum<["approved", "rejected", "partial"]>; }, "strip", z.ZodTypeAny, { status: "approved" | "rejected" | "partial"; }, { status: "approved" | "rejected" | "partial"; }>; path: "/shopkeeper/intelligence/weekly-plan/:planId/status"; responses: { 200: z.ZodObject<{ updated: z.ZodBoolean; }, "strip", z.ZodTypeAny, { updated: boolean; }, { updated: boolean; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateWeeklyPlanItem: { pathParams: z.ZodObject<{ planId: z.ZodString; itemId: z.ZodString; }, "strip", z.ZodTypeAny, { planId: string; itemId: string; }, { planId: string; itemId: string; }>; summary: "Update a single weekly plan line item"; method: "PATCH"; body: z.ZodObject<{ itemStatus: z.ZodEnum<["approved", "rejected", "done"]>; }, "strip", z.ZodTypeAny, { itemStatus: "approved" | "rejected" | "done"; }, { itemStatus: "approved" | "rejected" | "done"; }>; path: "/shopkeeper/intelligence/weekly-plan/:planId/items/:itemId"; responses: { 200: z.ZodObject<{ ok: z.ZodBoolean; }, "strip", z.ZodTypeAny, { ok: boolean; }, { ok: boolean; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopkeeperSettingsContract: { getAlertPreferences: { summary: "Get owner alert push and digest preferences"; method: "GET"; path: "/shopkeeper/settings/alert-preferences"; responses: { 200: z.ZodObject<{ preferences: z.ZodObject<{ lowStockPush: z.ZodBoolean; marginAlertPush: z.ZodBoolean; creditOverduePush: z.ZodBoolean; dailyDigestEnabled: z.ZodBoolean; digestHourLocal: z.ZodNumber; }, "strip", z.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; defaults: z.ZodObject<{ lowStockPush: z.ZodBoolean; marginAlertPush: z.ZodBoolean; creditOverduePush: z.ZodBoolean; dailyDigestEnabled: z.ZodBoolean; digestHourLocal: z.ZodNumber; }, "strip", z.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; }, "strip", z.ZodTypeAny, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; patchAlertPreferences: { summary: "Update alert push and digest preferences (partial merge)"; method: "PATCH"; body: z.ZodObject<{ lowStockPush: z.ZodOptional; marginAlertPush: z.ZodOptional; creditOverduePush: z.ZodOptional; dailyDigestEnabled: z.ZodOptional; digestHourLocal: z.ZodOptional; }, "strip", z.ZodTypeAny, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }>; path: "/shopkeeper/settings/alert-preferences"; responses: { 200: z.ZodObject<{ preferences: z.ZodObject<{ lowStockPush: z.ZodBoolean; marginAlertPush: z.ZodBoolean; creditOverduePush: z.ZodBoolean; dailyDigestEnabled: z.ZodBoolean; digestHourLocal: z.ZodNumber; }, "strip", z.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; defaults: z.ZodObject<{ lowStockPush: z.ZodBoolean; marginAlertPush: z.ZodBoolean; creditOverduePush: z.ZodBoolean; dailyDigestEnabled: z.ZodBoolean; digestHourLocal: z.ZodNumber; }, "strip", z.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; }, "strip", z.ZodTypeAny, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const shopAlertPreferencesSchema: z.ZodObject<{ lowStockPush: z.ZodBoolean; marginAlertPush: z.ZodBoolean; creditOverduePush: z.ZodBoolean; dailyDigestEnabled: z.ZodBoolean; /** Hour (0–23) in Africa/Lagos for daily digest delivery. */ digestHourLocal: z.ZodNumber; }, "strip", z.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; declare const updateShopAlertPreferencesSchema: z.ZodObject<{ lowStockPush: z.ZodOptional; marginAlertPush: z.ZodOptional; creditOverduePush: z.ZodOptional; dailyDigestEnabled: z.ZodOptional; digestHourLocal: z.ZodOptional; }, "strip", z.ZodTypeAny, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }>; type ShopAlertPreferences = z.infer; declare const shopLocationSchema: z.ZodObject<{ lat: z.ZodOptional; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>; declare const shopOnlineOrderStatusEnum: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; declare const storefrontPublicProductSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; sellingPrice: z.ZodNullable; iconPhotoUrl: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }>; declare const storefrontPublicShopSchema: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; currency: z.ZodString; acceptsPaystack: z.ZodBoolean; acceptsDirectTransfer: z.ZodBoolean; paymentInstructions: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }>; declare const storefrontGetShopResponseSchema: z.ZodObject<{ shop: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; currency: z.ZodString; acceptsPaystack: z.ZodBoolean; acceptsDirectTransfer: z.ZodBoolean; paymentInstructions: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }>; products: z.ZodArray; iconPhotoUrl: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }>; declare const storefrontCheckoutLineSchema: z.ZodObject<{ productId: z.ZodString; quantity: z.ZodNumber; }, "strip", z.ZodTypeAny, { productId: string; quantity: number; }, { productId: string; quantity: number; }>; declare const storefrontCheckoutBodySchema: z.ZodObject<{ items: z.ZodArray, "many">; buyerEmail: z.ZodString; buyerPhone: z.ZodString; buyerName: z.ZodOptional; paymentMethod: z.ZodDefault>; paymentPath: z.ZodDefault>; }, "strip", z.ZodTypeAny, { paymentMethod: "paystack" | "direct_transfer"; buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentPath: "reserve" | "pay_now"; buyerName?: string | undefined; }, { buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentMethod?: "paystack" | "direct_transfer" | undefined; buyerName?: string | undefined; paymentPath?: "reserve" | "pay_now" | undefined; }>; declare const storefrontCheckoutResponseSchema: z.ZodObject<{ checkoutType: z.ZodEnum<["paystack_redirect", "manual_transfer", "reserved"]>; paymentUrl: z.ZodOptional; reference: z.ZodOptional; orderId: z.ZodString; instructions: z.ZodOptional; trackingUrl: z.ZodString; }, "strip", z.ZodTypeAny, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }>; declare const storefrontVerifyPaymentBodySchema: z.ZodObject<{ reference: z.ZodString; }, "strip", z.ZodTypeAny, { reference: string; }, { reference: string; }>; declare const storefrontVerifyPaymentResponseSchema: z.ZodObject<{ verified: z.ZodBoolean; orderId: z.ZodOptional; }, "strip", z.ZodTypeAny, { verified: boolean; orderId?: string | undefined; }, { verified: boolean; orderId?: string | undefined; }>; declare const storefrontOrderTimelineStepSchema: z.ZodObject<{ key: z.ZodString; label: z.ZodString; completed: z.ZodBoolean; current: z.ZodBoolean; }, "strip", z.ZodTypeAny, { label: string; completed: boolean; key: string; current: boolean; }, { label: string; completed: boolean; key: string; current: boolean; }>; declare const storefrontPublicOrderLineSchema: z.ZodObject<{ productName: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodNumber; lineTotal: z.ZodNumber; }, "strip", z.ZodTypeAny, { quantity: number; unitPrice: number; productName: string; lineTotal: number; }, { quantity: number; unitPrice: number; productName: string; lineTotal: number; }>; declare const storefrontPublicOrderSchema: z.ZodObject<{ id: z.ZodString; shopName: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; currency: z.ZodString; totalAmount: z.ZodNumber; items: z.ZodArray, "many">; pickupLocation: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; timeline: z.ZodArray, "many">; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }>; declare const storefrontLocationSchema: z.ZodObject<{ market: z.ZodOptional; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>; declare const storefrontFeaturedShopSchema: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; location: z.ZodNullable; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }>; declare const storefrontMarketQuerySchema: z.ZodObject<{ city: z.ZodOptional; market: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>; declare const storefrontMarketResponseSchema: z.ZodObject<{ featuredShops: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }>, "many">; categories: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }>; declare const storefrontDirectoryQuerySchema: z.ZodObject<{ city: z.ZodOptional; market: z.ZodOptional; category: z.ZodOptional; limit: z.ZodDefault; offset: z.ZodDefault; }, "strip", z.ZodTypeAny, { limit: number; offset: number; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { market?: string | undefined; city?: string | undefined; category?: string | undefined; limit?: number | undefined; offset?: number | undefined; }>; declare const storefrontDirectoryShopSchema: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; location: z.ZodNullable; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; categoryTags: z.ZodArray; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }>; declare const storefrontListShopsResponseSchema: z.ZodObject<{ shops: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; categoryTags: z.ZodArray; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }>, "many">; total: z.ZodNumber; limit: z.ZodNumber; offset: z.ZodNumber; }, "strip", z.ZodTypeAny, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }>; declare const storefrontMarketSearchQuerySchema: z.ZodObject<{ q: z.ZodString; city: z.ZodOptional; market: z.ZodOptional; category: z.ZodOptional; inStockOnly: z.ZodDefault]>, boolean, boolean | "0" | "1" | "true" | "false">>; }, "strip", z.ZodTypeAny, { q: string; inStockOnly: boolean; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { q: string; market?: string | undefined; city?: string | undefined; category?: string | undefined; inStockOnly?: boolean | "0" | "1" | "true" | "false" | undefined; }>; declare const storefrontSearchProductSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; sellingPrice: z.ZodNullable; currentStock: z.ZodNumber; unit: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }>; declare const storefrontSearchShopGroupSchema: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; location: z.ZodNullable; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; products: z.ZodArray; currentStock: z.ZodNumber; unit: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }>, "many">; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }>; declare const storefrontMarketSearchResponseSchema: z.ZodObject<{ results: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; products: z.ZodArray; currentStock: z.ZodNumber; unit: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }>, "many">; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }>, "many">; }, "strip", z.ZodTypeAny, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }>; declare const storefrontContract: { getMarket: { query: z.ZodObject<{ city: z.ZodOptional; market: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>; summary: "Public marketplace home: featured shops and categories"; method: "GET"; path: "/storefront/market"; responses: { 200: z.ZodObject<{ featuredShops: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }>, "many">; categories: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }>; }; }; listShops: { query: z.ZodObject<{ city: z.ZodOptional; market: z.ZodOptional; category: z.ZodOptional; limit: z.ZodDefault; offset: z.ZodDefault; }, "strip", z.ZodTypeAny, { limit: number; offset: number; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { market?: string | undefined; city?: string | undefined; category?: string | undefined; limit?: number | undefined; offset?: number | undefined; }>; summary: "Public shop directory with location and category filters"; method: "GET"; path: "/storefront/shops"; responses: { 200: z.ZodObject<{ shops: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; categoryTags: z.ZodArray; productCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }>, "many">; total: z.ZodNumber; limit: z.ZodNumber; offset: z.ZodNumber; }, "strip", z.ZodTypeAny, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }>; }; }; searchMarket: { query: z.ZodObject<{ q: z.ZodString; city: z.ZodOptional; market: z.ZodOptional; category: z.ZodOptional; inStockOnly: z.ZodDefault]>, boolean, boolean | "0" | "1" | "true" | "false">>; }, "strip", z.ZodTypeAny, { q: string; inStockOnly: boolean; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { q: string; market?: string | undefined; city?: string | undefined; category?: string | undefined; inStockOnly?: boolean | "0" | "1" | "true" | "false" | undefined; }>; summary: "Cross-shop product search grouped by merchant"; method: "GET"; path: "/storefront/market/search"; responses: { 200: z.ZodObject<{ results: z.ZodArray; city: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; products: z.ZodArray; currentStock: z.ZodNumber; unit: z.ZodNullable; }, "strip", z.ZodTypeAny, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }>, "many">; }, "strip", z.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }>, "many">; }, "strip", z.ZodTypeAny, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }>; }; }; getShopBySlug: { pathParams: z.ZodObject<{ slug: z.ZodString; }, "strip", z.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Public storefront: shop profile and active catalog"; method: "GET"; path: "/storefront/shops/:slug"; responses: { 200: z.ZodObject<{ shop: z.ZodObject<{ slug: z.ZodString; shopName: z.ZodString; currency: z.ZodString; acceptsPaystack: z.ZodBoolean; acceptsDirectTransfer: z.ZodBoolean; paymentInstructions: z.ZodNullable; location: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }>; products: z.ZodArray; iconPhotoUrl: z.ZodNullable; category: z.ZodNullable; unit: z.ZodNullable; currentStock: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; checkout: { pathParams: z.ZodObject<{ slug: z.ZodString; }, "strip", z.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Create pending online order and initialize Paystack (split to shop subaccount)"; method: "POST"; body: z.ZodObject<{ items: z.ZodArray, "many">; buyerEmail: z.ZodString; buyerPhone: z.ZodString; buyerName: z.ZodOptional; paymentMethod: z.ZodDefault>; paymentPath: z.ZodDefault>; }, "strip", z.ZodTypeAny, { paymentMethod: "paystack" | "direct_transfer"; buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentPath: "reserve" | "pay_now"; buyerName?: string | undefined; }, { buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentMethod?: "paystack" | "direct_transfer" | undefined; buyerName?: string | undefined; paymentPath?: "reserve" | "pay_now" | undefined; }>; path: "/storefront/shops/:slug/checkout"; responses: { 200: z.ZodObject<{ checkoutType: z.ZodEnum<["paystack_redirect", "manual_transfer", "reserved"]>; paymentUrl: z.ZodOptional; reference: z.ZodOptional; orderId: z.ZodString; instructions: z.ZodOptional; trackingUrl: z.ZodString; }, "strip", z.ZodTypeAny, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getOrderById: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; query: z.ZodObject<{ token: z.ZodString; }, "strip", z.ZodTypeAny, { token: string; }, { token: string; }>; summary: "Public order tracking (token-gated)"; method: "GET"; path: "/storefront/orders/:id"; responses: { 200: z.ZodObject<{ id: z.ZodString; shopName: z.ZodString; status: z.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; currency: z.ZodString; totalAmount: z.ZodNumber; items: z.ZodArray, "many">; pickupLocation: z.ZodNullable; lng: z.ZodOptional; address: z.ZodOptional; market: z.ZodOptional; city: z.ZodOptional; state: z.ZodOptional; pickupHours: z.ZodOptional; }, "strip", z.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; timeline: z.ZodArray, "many">; createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyPayment: { pathParams: z.ZodObject<{ slug: z.ZodString; }, "strip", z.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Verify Paystack payment after redirect (fulfills order idempotently)"; method: "POST"; body: z.ZodObject<{ reference: z.ZodString; }, "strip", z.ZodTypeAny, { reference: string; }, { reference: string; }>; path: "/storefront/shops/:slug/verify-payment"; responses: { 200: z.ZodObject<{ verified: z.ZodBoolean; orderId: z.ZodOptional; }, "strip", z.ZodTypeAny, { verified: boolean; orderId?: string | undefined; }, { verified: boolean; orderId?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; storefrontWebhookPaystack: { summary: "Paystack webhook for storefront orders"; method: "POST"; body: z.ZodObject<{ event: z.ZodOptional; data: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">>>; }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ event: z.ZodOptional; data: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">>>; }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ event: z.ZodOptional; data: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ reference: z.ZodOptional; status: z.ZodOptional; amount: z.ZodOptional; }, z.ZodTypeAny, "passthrough">>>; }, z.ZodTypeAny, "passthrough">>; path: "/storefront/webhook/paystack"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const paymentProviderEnum: z.ZodEnum<["paystack", "opay"]>; declare const orderChannelEnum: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; declare const orderStatusEnum: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; declare const orderPaymentStatusEnum: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; declare const collectPaymentModeEnum: z.ZodEnum<["link", "qr", "auto"]>; declare const orderLineItemSchema: z.ZodObject<{ productId: z.ZodString; quantity: z.ZodNumber; unitPrice: z.ZodNumber; lineTotal: z.ZodNumber; productName: z.ZodString; }, "strip", z.ZodTypeAny, { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }, { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }>; declare const shopOrderPaymentSchema: z.ZodObject<{ id: z.ZodString; provider: z.ZodUnion<[z.ZodEnum<["paystack", "opay"]>, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>; declare const shopOrderSchema: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; declare const paymentConnectionSchema: z.ZodObject<{ id: z.ZodString; provider: z.ZodEnum<["paystack", "opay"]>; status: z.ZodEnum<["active", "inactive", "pending"]>; capabilities: z.ZodObject<{ qr: z.ZodOptional; link: z.ZodOptional; transfer: z.ZodOptional; }, "strip", z.ZodTypeAny, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }>; merchantId: z.ZodNullable; isDefault: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }>; declare const createOrderSchema: z.ZodObject<{ items: z.ZodArray, "many">; channel: z.ZodDefault>; buyerEmail: z.ZodOptional; buyerPhone: z.ZodOptional; buyerName: z.ZodOptional; customerId: z.ZodOptional; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; items: { productId: string; quantity: number; }[]; customerId?: string | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }, { items: { productId: string; quantity: number; }[]; customerId?: string | undefined; channel?: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk" | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }>; declare const collectPaymentSchema: z.ZodObject<{ provider: z.ZodOptional>; mode: z.ZodDefault>; buyerEmail: z.ZodOptional; expiryMinutes: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "link" | "qr" | "auto"; expiryMinutes: number; buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; }, { buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; mode?: "link" | "qr" | "auto" | undefined; expiryMinutes?: number | undefined; }>; declare const approveOrderSchema: z.ZodObject<{ paymentMode: z.ZodDefault>; }, "strip", z.ZodTypeAny, { paymentMode: "collect" | "cash_on_pickup"; }, { paymentMode?: "collect" | "cash_on_pickup" | undefined; }>; declare const rejectOrderSchema: z.ZodObject<{ reason: z.ZodString; }, "strip", z.ZodTypeAny, { reason: string; }, { reason: string; }>; declare const upsertPaymentConnectionSchema: z.ZodObject<{ provider: z.ZodEnum<["paystack", "opay"]>; credentials: z.ZodObject<{ merchantId: z.ZodOptional; subaccountCode: z.ZodOptional; publicKey: z.ZodOptional; secretKey: z.ZodOptional; apiKey: z.ZodOptional; }, "strip", z.ZodTypeAny, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }>; isDefault: z.ZodOptional; }, "strip", z.ZodTypeAny, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }>; declare const supplierSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; email: z.ZodNullable; bankDetails: z.ZodNullable>; categories: z.ZodNullable>; isActive: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }>; declare const createSupplierSchema: z.ZodObject<{ name: z.ZodString; phone: z.ZodOptional; email: z.ZodOptional; bankDetails: z.ZodOptional>; categories: z.ZodOptional>; }, "strip", z.ZodTypeAny, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }>; declare const supplierInvoiceSchema: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; amount: z.ZodNumber; amountPaid: z.ZodNumber; remainingBalance: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: z.ZodNullable; lineItems: z.ZodNullable, "many">>; notes: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; declare const createSupplierInvoiceSchema: z.ZodObject<{ supplierId: z.ZodString; amount: z.ZodNumber; currency: z.ZodDefault; dueDate: z.ZodOptional; lineItems: z.ZodOptional, "many">>; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { currency: string; amount: number; supplierId: string; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }, { amount: number; supplierId: string; currency?: string | undefined; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }>; declare const supplierPaymentSchema: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; invoiceId: z.ZodNullable; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; declare const supplierInvoiceDetailSchema: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; amount: z.ZodNumber; amountPaid: z.ZodNumber; remainingBalance: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: z.ZodNullable; lineItems: z.ZodNullable, "many">>; notes: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; } & { payments: z.ZodArray; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; declare const createSupplierPaymentSchema: z.ZodObject<{ supplierId: z.ZodString; invoiceId: z.ZodOptional; amount: z.ZodNumber; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }>; declare const approveSupplierPaymentSchema: z.ZodObject<{ confirm: z.ZodLiteral; }, "strip", z.ZodTypeAny, { confirm: true; }, { confirm: true; }>; declare const reconciliationSummarySchema: z.ZodObject<{ date: z.ZodString; paidCount: z.ZodNumber; pendingCount: z.ZodNumber; expiredCount: z.ZodNumber; paidTotal: z.ZodNumber; pendingTotal: z.ZodNumber; mismatchCount: z.ZodNumber; byProvider: z.ZodObject<{ paystack: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; opay: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; manual: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; }, "strip", z.ZodTypeAny, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }>; byChannel: z.ZodRecord>; byPaymentMethod: z.ZodRecord>; cashCreditTotals: z.ZodObject<{ cashTotal: z.ZodNumber; creditTotal: z.ZodNumber; transferTotal: z.ZodNumber; }, "strip", z.ZodTypeAny, { cashTotal: number; creditTotal: number; transferTotal: number; }, { cashTotal: number; creditTotal: number; transferTotal: number; }>; mismatches: z.ZodArray; paymentId: z.ZodOptional; issue: z.ZodString; }, "strip", z.ZodTypeAny, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; declare const reconciliationMismatchSchema: z.ZodObject<{ orderId: z.ZodOptional; paymentId: z.ZodOptional; issue: z.ZodString; amount: z.ZodOptional; createdAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }>; declare const reconciliationMismatchesResponseSchema: z.ZodObject<{ date: z.ZodString; items: z.ZodArray; paymentId: z.ZodOptional; issue: z.ZodString; amount: z.ZodOptional; createdAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; type ShopOrder = z.infer; type OrderLineItem = z.infer; type PaymentConnection = z.infer; declare const shopkeeperPaymentsContract: { listPaymentConnections: { summary: "List merchant payment provider connections"; method: "GET"; path: "/shopkeeper/payment-connections"; responses: { 200: z.ZodObject<{ connections: z.ZodArray; status: z.ZodEnum<["active", "inactive", "pending"]>; capabilities: z.ZodObject<{ qr: z.ZodOptional; link: z.ZodOptional; transfer: z.ZodOptional; }, "strip", z.ZodTypeAny, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }>; merchantId: z.ZodNullable; isDefault: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }>, "many">; }, "strip", z.ZodTypeAny, { connections: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }[]; }, { connections: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; upsertPaymentConnection: { summary: "Connect or update a payment provider for this shop"; method: "POST"; body: z.ZodObject<{ provider: z.ZodEnum<["paystack", "opay"]>; credentials: z.ZodObject<{ merchantId: z.ZodOptional; subaccountCode: z.ZodOptional; publicKey: z.ZodOptional; secretKey: z.ZodOptional; apiKey: z.ZodOptional; }, "strip", z.ZodTypeAny, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }>; isDefault: z.ZodOptional; }, "strip", z.ZodTypeAny, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }>; path: "/shopkeeper/payment-connections"; responses: { 200: z.ZodObject<{ connection: z.ZodObject<{ id: z.ZodString; provider: z.ZodEnum<["paystack", "opay"]>; status: z.ZodEnum<["active", "inactive", "pending"]>; capabilities: z.ZodObject<{ qr: z.ZodOptional; link: z.ZodOptional; transfer: z.ZodOptional; }, "strip", z.ZodTypeAny, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }>; merchantId: z.ZodNullable; isDefault: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }>; }, "strip", z.ZodTypeAny, { connection: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }; }, { connection: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deletePaymentConnection: { pathParams: z.ZodObject<{ provider: z.ZodEnum<["paystack", "opay"]>; }, "strip", z.ZodTypeAny, { provider: "opay" | "paystack"; }, { provider: "opay" | "paystack"; }>; summary: "Remove a payment provider connection"; method: "DELETE"; path: "/shopkeeper/payment-connections/:provider"; responses: { 200: z.ZodObject<{ deleted: z.ZodBoolean; }, "strip", z.ZodTypeAny, { deleted: boolean; }, { deleted: boolean; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createOrder: { summary: "Create a commerce order from cart items"; method: "POST"; body: z.ZodObject<{ items: z.ZodArray, "many">; channel: z.ZodDefault>; buyerEmail: z.ZodOptional; buyerPhone: z.ZodOptional; buyerName: z.ZodOptional; customerId: z.ZodOptional; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; items: { productId: string; quantity: number; }[]; customerId?: string | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }, { items: { productId: string; quantity: number; }[]; customerId?: string | undefined; channel?: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk" | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }>; path: "/shopkeeper/orders"; responses: { 201: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", z.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listOrders: { query: z.ZodObject<{ status: z.ZodOptional>; limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { status?: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment" | undefined; limit?: number | undefined; }, { status?: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment" | undefined; limit?: number | undefined; }>; summary: "List shop orders"; method: "GET"; path: "/shopkeeper/orders"; responses: { 200: z.ZodObject<{ orders: z.ZodArray; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { orders: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }[]; }, { orders: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getOrder: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get order with payment attempts"; method: "GET"; path: "/shopkeeper/orders/:id"; responses: { 200: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", z.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; collectPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Generate payment link or QR for an order"; method: "POST"; body: z.ZodObject<{ provider: z.ZodOptional>; mode: z.ZodDefault>; buyerEmail: z.ZodOptional; expiryMinutes: z.ZodDefault; }, "strip", z.ZodTypeAny, { mode: "link" | "qr" | "auto"; expiryMinutes: number; buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; }, { buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; mode?: "link" | "qr" | "auto" | undefined; expiryMinutes?: number | undefined; }>; path: "/shopkeeper/orders/:id/collect-payment"; responses: { 200: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; paymentUrl: z.ZodOptional; qrPayload: z.ZodOptional; reference: z.ZodString; expiresAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { reference: string; order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; paymentUrl?: string | undefined; expiresAt?: Date | undefined; qrPayload?: string | undefined; }, { reference: string; order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; paymentUrl?: string | undefined; expiresAt?: Date | undefined; qrPayload?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyOrderPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Poll-verify order payment status"; method: "POST"; body: z.ZodObject<{ reference: z.ZodOptional; }, "strip", z.ZodTypeAny, { reference?: string | undefined; }, { reference?: string | undefined; }>; path: "/shopkeeper/orders/:id/verify-payment"; responses: { 200: z.ZodObject<{ verified: z.ZodBoolean; order: z.ZodOptional; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>>; }, "strip", z.ZodTypeAny, { verified: boolean; order?: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; } | undefined; }, { verified: boolean; order?: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; } | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; cancelOrder: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Cancel a pending order"; method: "POST"; body: z.ZodOptional>; path: "/shopkeeper/orders/:id/cancel"; responses: { 200: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", z.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveOrder: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve a customer-initiated order awaiting owner review"; method: "POST"; body: z.ZodObject<{ paymentMode: z.ZodDefault>; }, "strip", z.ZodTypeAny, { paymentMode: "collect" | "cash_on_pickup"; }, { paymentMode?: "collect" | "cash_on_pickup" | undefined; }>; path: "/shopkeeper/orders/:id/approve"; responses: { 200: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", z.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; rejectOrder: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Reject a pending-approval order with reason"; method: "POST"; body: z.ZodObject<{ reason: z.ZodString; }, "strip", z.ZodTypeAny, { reason: string; }, { reason: string; }>; path: "/shopkeeper/orders/:id/reject"; responses: { 200: z.ZodObject<{ order: z.ZodObject<{ id: z.ZodString; status: z.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: z.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: z.ZodString; totalAmount: z.ZodNumber; buyerEmail: z.ZodNullable; buyerPhone: z.ZodNullable; buyerName: z.ZodNullable; customerId: z.ZodNullable; lineItems: z.ZodArray, "many">; notes: z.ZodNullable; payments: z.ZodOptional, z.ZodLiteral<"manual">]>; reference: z.ZodString; amount: z.ZodNumber; status: z.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: z.ZodNullable; qrPayload: z.ZodNullable; expiresAt: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", z.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; paymentWebhook: { pathParams: z.ZodObject<{ provider: z.ZodEnum<["paystack", "opay"]>; }, "strip", z.ZodTypeAny, { provider: "opay" | "paystack"; }, { provider: "opay" | "paystack"; }>; summary: "Unified payment provider webhook ingress"; method: "POST"; body: z.ZodRecord; path: "/shopkeeper/payments/webhook/:provider"; responses: { 200: z.ZodObject<{ received: z.ZodBoolean; }, "strip", z.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSuppliers: { summary: "List registered suppliers"; method: "GET"; path: "/shopkeeper/suppliers"; responses: { 200: z.ZodObject<{ suppliers: z.ZodArray; email: z.ZodNullable; bankDetails: z.ZodNullable>; categories: z.ZodNullable>; isActive: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }>, "many">; }, "strip", z.ZodTypeAny, { suppliers: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }[]; }, { suppliers: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplier: { summary: "Register a supplier"; method: "POST"; body: z.ZodObject<{ name: z.ZodString; phone: z.ZodOptional; email: z.ZodOptional; bankDetails: z.ZodOptional>; categories: z.ZodOptional>; }, "strip", z.ZodTypeAny, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }>; path: "/shopkeeper/suppliers"; responses: { 201: z.ZodObject<{ supplier: z.ZodObject<{ id: z.ZodString; name: z.ZodString; phone: z.ZodNullable; email: z.ZodNullable; bankDetails: z.ZodNullable>; categories: z.ZodNullable>; isActive: z.ZodBoolean; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }>; }, "strip", z.ZodTypeAny, { supplier: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }; }, { supplier: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSupplierInvoices: { query: z.ZodObject<{ status: z.ZodOptional>; supplierId: z.ZodOptional; }, "strip", z.ZodTypeAny, { status?: "paid" | "cancelled" | "partial" | "open" | undefined; supplierId?: string | undefined; }, { status?: "paid" | "cancelled" | "partial" | "open" | undefined; supplierId?: string | undefined; }>; summary: "List supplier bills"; method: "GET"; path: "/shopkeeper/supplier-invoices"; responses: { 200: z.ZodObject<{ invoices: z.ZodArray; dueDate: z.ZodNullable; lineItems: z.ZodNullable, "many">>; notes: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>, "many">; }, "strip", z.ZodTypeAny, { invoices: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }[]; }, { invoices: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplierInvoice: { summary: "Create a supplier bill"; method: "POST"; body: z.ZodObject<{ supplierId: z.ZodString; amount: z.ZodNumber; currency: z.ZodDefault; dueDate: z.ZodOptional; lineItems: z.ZodOptional, "many">>; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { currency: string; amount: number; supplierId: string; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }, { amount: number; supplierId: string; currency?: string | undefined; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }>; path: "/shopkeeper/supplier-invoices"; responses: { 201: z.ZodObject<{ invoice: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; amount: z.ZodNumber; amountPaid: z.ZodNumber; remainingBalance: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: z.ZodNullable; lineItems: z.ZodNullable, "many">>; notes: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; }, "strip", z.ZodTypeAny, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSupplierInvoice: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get supplier invoice with payment history"; method: "GET"; path: "/shopkeeper/supplier-invoices/:id"; responses: { 200: z.ZodObject<{ invoice: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; amount: z.ZodNumber; amountPaid: z.ZodNumber; remainingBalance: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: z.ZodNullable; lineItems: z.ZodNullable, "many">>; notes: z.ZodNullable; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; } & { payments: z.ZodArray; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; }, "strip", z.ZodTypeAny, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSupplierPayments: { query: z.ZodObject<{ status: z.ZodOptional>; }, "strip", z.ZodTypeAny, { status?: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing" | undefined; }, { status?: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing" | undefined; }>; summary: "List supplier payment requests"; method: "GET"; path: "/shopkeeper/supplier-payments"; responses: { 200: z.ZodObject<{ payments: z.ZodArray; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>, "many">; }, "strip", z.ZodTypeAny, { payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; }, { payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplierPayment: { summary: "Draft a supplier payment (requires owner approval)"; method: "POST"; body: z.ZodObject<{ supplierId: z.ZodString; invoiceId: z.ZodOptional; amount: z.ZodNumber; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }>; path: "/shopkeeper/supplier-payments"; responses: { 201: z.ZodObject<{ payment: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; invoiceId: z.ZodNullable; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", z.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; confirmSupplierPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark supplier payment as paid manually (offline transfer)"; method: "POST"; body: z.ZodObject<{ transferReference: z.ZodOptional; notes: z.ZodOptional; }, "strip", z.ZodTypeAny, { notes?: string | undefined; transferReference?: string | undefined; }, { notes?: string | undefined; transferReference?: string | undefined; }>; path: "/shopkeeper/supplier-payments/:id/confirm"; responses: { 200: z.ZodObject<{ payment: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; invoiceId: z.ZodNullable; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", z.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveSupplierPayment: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve and initiate orchestrated supplier transfer"; method: "POST"; body: z.ZodObject<{ confirm: z.ZodLiteral; }, "strip", z.ZodTypeAny, { confirm: true; }, { confirm: true; }>; path: "/shopkeeper/supplier-payments/:id/approve"; responses: { 200: z.ZodObject<{ payment: z.ZodObject<{ id: z.ZodString; supplierId: z.ZodString; invoiceId: z.ZodNullable; amount: z.ZodNumber; currency: z.ZodString; status: z.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: z.ZodNullable; provider: z.ZodNullable>; } & { createdAt: z.ZodDate; updatedAt: z.ZodDate; }, "strip", z.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", z.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReconciliationSummary: { query: z.ZodObject<{ date: z.ZodOptional; }, "strip", z.ZodTypeAny, { date?: string | undefined; }, { date?: string | undefined; }>; summary: "Daily payment reconciliation summary"; method: "GET"; path: "/shopkeeper/payments/reconciliation"; responses: { 200: z.ZodObject<{ date: z.ZodString; paidCount: z.ZodNumber; pendingCount: z.ZodNumber; expiredCount: z.ZodNumber; paidTotal: z.ZodNumber; pendingTotal: z.ZodNumber; mismatchCount: z.ZodNumber; byProvider: z.ZodObject<{ paystack: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; opay: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; manual: z.ZodObject<{ count: z.ZodNumber; total: z.ZodNumber; }, "strip", z.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; }, "strip", z.ZodTypeAny, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }>; byChannel: z.ZodRecord>; byPaymentMethod: z.ZodRecord>; cashCreditTotals: z.ZodObject<{ cashTotal: z.ZodNumber; creditTotal: z.ZodNumber; transferTotal: z.ZodNumber; }, "strip", z.ZodTypeAny, { cashTotal: number; creditTotal: number; transferTotal: number; }, { cashTotal: number; creditTotal: number; transferTotal: number; }>; mismatches: z.ZodArray; paymentId: z.ZodOptional; issue: z.ZodString; }, "strip", z.ZodTypeAny, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReconciliationMismatches: { query: z.ZodObject<{ date: z.ZodOptional; page: z.ZodOptional; limit: z.ZodOptional; }, "strip", z.ZodTypeAny, { date?: string | undefined; page?: number | undefined; limit?: number | undefined; }, { date?: string | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "Paginated payment reconciliation mismatches"; method: "GET"; path: "/shopkeeper/payments/reconciliation/mismatches"; responses: { 200: z.ZodObject<{ date: z.ZodString; items: z.ZodArray; paymentId: z.ZodOptional; issue: z.ZodString; amount: z.ZodOptional; createdAt: z.ZodOptional; }, "strip", z.ZodTypeAny, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; page: z.ZodNumber; limit: z.ZodNumber; total: z.ZodNumber; totalPages: z.ZodNumber; }, "strip", z.ZodTypeAny, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const groupBuyCampaignStatusEnum: z.ZodEnum<["active", "threshold_met", "expired", "cancelled"]>; declare const groupBuyParticipantStatusEnum: z.ZodEnum<["opted_in", "withdrawn", "confirmed"]>; declare const groupBuyCampaignSchema: z.ZodObject<{ id: z.ZodString; normalizedName: z.ZodString; market: z.ZodString; thresholdQty: z.ZodNumber; deadline: z.ZodDate; status: z.ZodEnum<["active", "threshold_met", "expired", "cancelled"]>; totalDemand: z.ZodNumber; participantCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }>; declare const groupBuyOptInSchema: z.ZodObject<{ campaignId: z.ZodString; quantity: z.ZodNumber; }, "strip", z.ZodTypeAny, { quantity: number; campaignId: string; }, { quantity: number; campaignId: string; }>; declare const groupBuyOptInResponseSchema: z.ZodObject<{ participantId: z.ZodString; campaignId: z.ZodString; quantity: z.ZodNumber; status: z.ZodEnum<["opted_in", "withdrawn", "confirmed"]>; }, "strip", z.ZodTypeAny, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }>; type GroupBuyCampaign = z.infer; declare const shopkeeperGroupBuyContract: { listCampaigns: { query: z.ZodObject<{ market: z.ZodOptional; }, "strip", z.ZodTypeAny, { market?: string | undefined; }, { market?: string | undefined; }>; summary: "List active group-buy campaigns for the shop market"; method: "GET"; path: "/shopkeeper/group-buy/campaigns"; responses: { 200: z.ZodObject<{ campaigns: z.ZodArray; totalDemand: z.ZodNumber; participantCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }>, "many">; }, "strip", z.ZodTypeAny, { campaigns: { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }[]; }, { campaigns: { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }[]; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; optIn: { summary: "Opt into a group-buy campaign with a quantity"; method: "POST"; body: z.ZodObject<{ campaignId: z.ZodString; quantity: z.ZodNumber; }, "strip", z.ZodTypeAny, { quantity: number; campaignId: string; }, { quantity: number; campaignId: string; }>; path: "/shopkeeper/group-buy/opt-in"; responses: { 200: z.ZodObject<{ participantId: z.ZodString; campaignId: z.ZodString; quantity: z.ZodNumber; status: z.ZodEnum<["opted_in", "withdrawn", "confirmed"]>; }, "strip", z.ZodTypeAny, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const demandSampleSizeBucketEnum: z.ZodEnum<["5-9", "10-24", "25-49", "50+"]>; declare const marketDemandProductSchema: z.ZodObject<{ normalizedName: z.ZodString; demandIndex: z.ZodNumber; medianPriceBand: z.ZodNullable; p75: z.ZodNullable; }, "strip", z.ZodTypeAny, { p25: number | null; p75: number | null; median: number; }, { p25: number | null; p75: number | null; median: number; }>>; sampleSizeBucket: z.ZodEnum<["5-9", "10-24", "25-49", "50+"]>; }, "strip", z.ZodTypeAny, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }>; declare const marketDemandResponseSchema: z.ZodObject<{ city: z.ZodString; market: z.ZodString; category: z.ZodNullable; from: z.ZodString; to: z.ZodString; products: z.ZodArray; p75: z.ZodNullable; }, "strip", z.ZodTypeAny, { p25: number | null; p75: number | null; median: number; }, { p25: number | null; p75: number | null; median: number; }>>; sampleSizeBucket: z.ZodEnum<["5-9", "10-24", "25-49", "50+"]>; }, "strip", z.ZodTypeAny, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }>, "many">; }, "strip", z.ZodTypeAny, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }>; type MarketDemandProduct = z.infer; declare const platformMarketIntelligenceContract: { getDemand: { query: z.ZodObject<{ city: z.ZodString; market: z.ZodString; category: z.ZodOptional; from: z.ZodString; to: z.ZodString; }, "strip", z.ZodTypeAny, { market: string; city: string; from: string; to: string; category?: string | undefined; }, { market: string; city: string; from: string; to: string; category?: string | undefined; }>; summary: "Anonymized aggregate demand signals for B2B partners"; method: "GET"; path: "/platform/market-intelligence/demand"; responses: { 200: z.ZodObject<{ city: z.ZodString; market: z.ZodString; category: z.ZodNullable; from: z.ZodString; to: z.ZodString; products: z.ZodArray; p75: z.ZodNullable; }, "strip", z.ZodTypeAny, { p25: number | null; p75: number | null; median: number; }, { p25: number | null; p75: number | null; median: number; }>>; sampleSizeBucket: z.ZodEnum<["5-9", "10-24", "25-49", "50+"]>; }, "strip", z.ZodTypeAny, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }>, "many">; }, "strip", z.ZodTypeAny, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const tradeAgentSourceEnum: z.ZodEnum<["whatsapp", "telephony", "api", "cron"]>; declare const senderRoleEnum: z.ZodEnum<["owner", "customer", "unknown"]>; /** Preferred intent from client (e.g. mobile). Aligns with voice/parse; productId/productName both accepted. */ declare const tradePreferredIntentSchema: z.ZodObject<{ type: z.ZodEnum<["stock_query", "report_request", "price_check", "availability", "credit_summary", "credit_payment", "record_sale", "restock", "stock_update", "add_customer", "competitor_check", "weekly_analysis", "supplier_optimize", "schedule_follow_up", "create_order", "reserve", "list_reservations", "collect_payment", "payment_status", "reconcile_payments", "create_supplier_bill", "pay_supplier", "analytics_query"]>; productId: z.ZodNullable>; productName: z.ZodNullable>; customerId: z.ZodNullable>; customerName: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; price: z.ZodOptional; amount: z.ZodOptional; operation: z.ZodOptional>; phoneNumber: z.ZodNullable>; paymentMethod: z.ZodNullable>; message: z.ZodNullable>; delayHours: z.ZodOptional; channel: z.ZodNullable>>; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>; type TradePreferredIntent = z.infer; declare const tradeAgentInputSchema: z.ZodObject<{ input: z.ZodString; source: z.ZodEnum<["whatsapp", "telephony", "api", "cron"]>; senderRole: z.ZodOptional>; sessionId: z.ZodOptional; preferredIntent: z.ZodOptional; productId: z.ZodNullable>; productName: z.ZodNullable>; customerId: z.ZodNullable>; customerName: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; price: z.ZodOptional; amount: z.ZodOptional; operation: z.ZodOptional>; phoneNumber: z.ZodNullable>; paymentMethod: z.ZodNullable>; message: z.ZodNullable>; delayHours: z.ZodOptional; channel: z.ZodNullable>>; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>>; /** Batch from mobile pipeline; when set, first item seeds resolution (multi-intent execution is server-side). */ preferredIntents: z.ZodOptional; productId: z.ZodNullable>; productName: z.ZodNullable>; customerId: z.ZodNullable>; customerName: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; price: z.ZodOptional; amount: z.ZodOptional; operation: z.ZodOptional>; phoneNumber: z.ZodNullable>; paymentMethod: z.ZodNullable>; message: z.ZodNullable>; delayHours: z.ZodOptional; channel: z.ZodNullable>>; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }>; declare const tradeAgentIntentOutputSchema: z.ZodObject<{ type: z.ZodString; productName: z.ZodOptional; customerName: z.ZodOptional; quantity: z.ZodOptional; price: z.ZodOptional; operation: z.ZodOptional; phoneNumber: z.ZodOptional; amount: z.ZodOptional; paymentMethod: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>; declare const policyTierEnum: z.ZodEnum<["auto_execute", "ask_confirm", "escalate_human"]>; type PolicyTier = z.infer; declare const tradeAgentResponseSchema: z.ZodObject<{ reply: z.ZodString; intent: z.ZodNullable; customerName: z.ZodOptional; quantity: z.ZodOptional; price: z.ZodOptional; operation: z.ZodOptional; phoneNumber: z.ZodOptional; amount: z.ZodOptional; paymentMethod: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>>; /** All intents executed in this turn (chain). Omitted when only legacy [intent] is used. */ intents: z.ZodOptional; customerName: z.ZodOptional; quantity: z.ZodOptional; price: z.ZodOptional; operation: z.ZodOptional; phoneNumber: z.ZodOptional; amount: z.ZodOptional; paymentMethod: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>, "many">>; /** Resolver + model confidence 0..1 when available. */ confidence: z.ZodOptional; clarificationNeeded: z.ZodOptional; clarificationPrompt: z.ZodOptional; /** When true, client should confirm before re-submitting with preferredIntent (Phase 5B autonomy). */ requiresConfirmation: z.ZodOptional; /** Confidence-based execution policy tier. */ policyTier: z.ZodOptional>; policyReason: z.ZodOptional; result: z.ZodNullable>; sessionId: z.ZodOptional; auditId: z.ZodOptional; }, "strip", z.ZodTypeAny, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }>; declare const shopkeeperTradeAgentContract: { getScheduledTasks: { summary: "List pending scheduled follow-up tasks for the shop"; method: "GET"; path: "/shopkeeper/agent/scheduled-tasks"; responses: { 200: z.ZodArray, "many">; }; }; cancelScheduledTask: { pathParams: z.ZodObject<{ id: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Cancel a pending scheduled follow-up task"; method: "DELETE"; body: z.ZodUndefined; path: "/shopkeeper/agent/scheduled-tasks/:id"; responses: { 204: z.ZodUndefined; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; runAgent: { summary: "Run the unified cloud trade agent"; method: "POST"; body: z.ZodObject<{ input: z.ZodString; source: z.ZodEnum<["whatsapp", "telephony", "api", "cron"]>; senderRole: z.ZodOptional>; sessionId: z.ZodOptional; preferredIntent: z.ZodOptional; productId: z.ZodNullable>; productName: z.ZodNullable>; customerId: z.ZodNullable>; customerName: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; price: z.ZodOptional; amount: z.ZodOptional; operation: z.ZodOptional>; phoneNumber: z.ZodNullable>; paymentMethod: z.ZodNullable>; message: z.ZodNullable>; delayHours: z.ZodOptional; channel: z.ZodNullable>>; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>>; preferredIntents: z.ZodOptional; productId: z.ZodNullable>; productName: z.ZodNullable>; customerId: z.ZodNullable>; customerName: z.ZodNullable>; quantity: z.ZodOptional; unitPrice: z.ZodOptional; price: z.ZodOptional; amount: z.ZodOptional; operation: z.ZodOptional>; phoneNumber: z.ZodNullable>; paymentMethod: z.ZodNullable>; message: z.ZodNullable>; delayHours: z.ZodOptional; channel: z.ZodNullable>>; }, "strip", z.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }>; path: "/shopkeeper/trade/agent"; responses: { 200: z.ZodObject<{ reply: z.ZodString; intent: z.ZodNullable; customerName: z.ZodOptional; quantity: z.ZodOptional; price: z.ZodOptional; operation: z.ZodOptional; phoneNumber: z.ZodOptional; amount: z.ZodOptional; paymentMethod: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>>; intents: z.ZodOptional; customerName: z.ZodOptional; quantity: z.ZodOptional; price: z.ZodOptional; operation: z.ZodOptional; phoneNumber: z.ZodOptional; amount: z.ZodOptional; paymentMethod: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>, "many">>; confidence: z.ZodOptional; clarificationNeeded: z.ZodOptional; clarificationPrompt: z.ZodOptional; requiresConfirmation: z.ZodOptional; policyTier: z.ZodOptional>; policyReason: z.ZodOptional; result: z.ZodNullable>; sessionId: z.ZodOptional; auditId: z.ZodOptional; }, "strip", z.ZodTypeAny, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }>; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: z.ZodObject<{ message: z.ZodString; code: z.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: z.ZodNumber; balance: z.ZodNumber; }, "strip", z.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; 500: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordLearnedExample: { summary: "Record a successful (input, intent) from mobile for in-context learning"; method: "POST"; body: z.ZodObject<{ input: z.ZodString; intentJson: z.ZodRecord; }, "strip", z.ZodTypeAny, { input: string; intentJson: Record; }, { input: string; intentJson: Record; }>; path: "/shopkeeper/agent/learned-example"; responses: { 204: z.ZodUndefined; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordFeedback: { summary: "Attach fine-tuning label to LLM request log (latest trade-agent log if llmLogId omitted)"; method: "POST"; body: z.ZodObject<{ label: z.ZodEnum<["positive", "negative", "neutral"]>; comment: z.ZodOptional; llmLogId: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: "positive" | "negative" | "neutral"; comment?: string | undefined; llmLogId?: string | undefined; }, { label: "positive" | "negative" | "neutral"; comment?: string | undefined; llmLogId?: string | undefined; }>; path: "/shopkeeper/trade/agent/feedback"; responses: { 204: z.ZodUndefined; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordRejectedExample: { summary: "Record a rejected parse (e.g. user cancelled ActionPreviewSheet) for future task mining"; method: "POST"; body: z.ZodObject<{ input: z.ZodString; }, "strip", z.ZodTypeAny, { input: string; }, { input: string; }>; path: "/shopkeeper/agent/learned-example/rejected"; responses: { 204: z.ZodUndefined; 400: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: z.ZodObject<{ message: z.ZodString; code: z.ZodOptional; details: z.ZodOptional>; }, "strip", z.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; declare const apiContract: { shopkeeperDevice: { register: { summary: "Register new owner, shop, and device"; method: "POST"; body: zod.ZodObject<{ ownerName: zod.ZodString; phone: zod.ZodString; pin: zod.ZodString; otpCode: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodDefault>; country: zod.ZodDefault; currency: zod.ZodDefault; timezone: zod.ZodDefault; businessType: zod.ZodOptional; location: zod.ZodOptional; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; deviceId: zod.ZodString; deviceName: zod.ZodOptional; osVersion: zod.ZodOptional; appVersion: zod.ZodOptional; installerCode: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; deviceId: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }, { ownerName: string; phone: string; pin: string; otpCode: string; shopName: string; agentName: string; deviceId: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; timezone?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; installerCode?: string | undefined; }>; path: "/api/v1/shopkeeper/device/register"; responses: { 201: zod.ZodObject<{ owner: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodString; email: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }>; shop: zod.ZodObject<{ id: zod.ZodString; ownerId: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: zod.ZodBoolean; country: zod.ZodString; currency: zod.ZodString; timezone: zod.ZodString; businessType: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: zod.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: zod.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: zod.ZodNullable; lastActiveAt: zod.ZodNullable; storefrontSlug: zod.ZodNullable; storefrontEnabled: zod.ZodBoolean; paystackSubaccountCode: zod.ZodNullable; storefrontDirectTransferEnabled: zod.ZodBoolean; storefrontPaymentInstructions: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shops: zod.ZodArray; status: zod.ZodEnum<["active", "suspended", "churned"]>; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; ownerToken: zod.ZodString; shopToken: zod.ZodString; refreshToken: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; shopToken: string; refreshToken: string; expiresIn: number; }, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; shopToken: string; refreshToken: string; expiresIn: number; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; login: { summary: "Authenticate owner with phone + PIN"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; pin: zod.ZodString; deviceId: zod.ZodString; deviceName: zod.ZodOptional; role: zod.ZodDefault>; osVersion: zod.ZodOptional; appVersion: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { phone: string; pin: string; deviceId: string; role: "owner" | "assistant"; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; }, { phone: string; pin: string; deviceId: string; deviceName?: string | undefined; osVersion?: string | undefined; appVersion?: string | undefined; role?: "owner" | "assistant" | undefined; }>; path: "/api/v1/shopkeeper/device/login"; responses: { 200: zod.ZodObject<{ owner: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodString; email: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }, { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }>; shops: zod.ZodArray; status: zod.ZodEnum<["active", "suspended", "churned"]>; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; ownerToken: zod.ZodString; refreshToken: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; refreshToken: string; expiresIn: number; }, { owner: { phone: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; }; shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; ownerToken: string; refreshToken: string; expiresIn: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; selectShop: { summary: "Select active shop and get shop-scoped token"; method: "POST"; body: zod.ZodObject<{ shopId: zod.ZodString; }, "strip", zod.ZodTypeAny, { shopId: string; }, { shopId: string; }>; path: "/api/v1/shopkeeper/device/select-shop"; responses: { 200: zod.ZodObject<{ shop: zod.ZodObject<{ id: zod.ZodString; ownerId: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: zod.ZodBoolean; country: zod.ZodString; currency: zod.ZodString; timezone: zod.ZodString; businessType: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: zod.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: zod.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: zod.ZodNullable; lastActiveAt: zod.ZodNullable; storefrontSlug: zod.ZodNullable; storefrontEnabled: zod.ZodBoolean; paystackSubaccountCode: zod.ZodNullable; storefrontDirectTransferEnabled: zod.ZodBoolean; storefrontPaymentInstructions: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shopToken: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; addShop: { summary: "Add a new shop to owner account"; method: "POST"; body: zod.ZodObject<{ shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodDefault>; country: zod.ZodDefault; currency: zod.ZodDefault; businessType: zod.ZodOptional; location: zod.ZodOptional; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", zod.ZodTypeAny, { shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }, { shopName: string; agentName: string; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; country?: string | undefined; currency?: string | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; }>; path: "/api/v1/shopkeeper/device/shops"; responses: { 201: zod.ZodObject<{ shop: zod.ZodObject<{ id: zod.ZodString; ownerId: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: zod.ZodBoolean; country: zod.ZodString; currency: zod.ZodString; timezone: zod.ZodString; businessType: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: zod.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: zod.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: zod.ZodNullable; lastActiveAt: zod.ZodNullable; storefrontSlug: zod.ZodNullable; storefrontEnabled: zod.ZodBoolean; paystackSubaccountCode: zod.ZodNullable; storefrontDirectTransferEnabled: zod.ZodBoolean; storefrontPaymentInstructions: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; shopToken: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }, { shop: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }; shopToken: string; expiresIn: number; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listShops: { summary: "List all shops for authenticated owner"; method: "GET"; path: "/api/v1/shopkeeper/device/shops"; responses: { 200: zod.ZodObject<{ shops: zod.ZodArray; status: zod.ZodEnum<["active", "suspended", "churned"]>; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }>, "many">; }, "strip", zod.ZodTypeAny, { shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; }, { shops: { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; businessType: string | null; id: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; refresh: { summary: "Refresh owner access token"; method: "POST"; body: zod.ZodObject<{ refreshToken: zod.ZodString; }, "strip", zod.ZodTypeAny, { refreshToken: string; }, { refreshToken: string; }>; path: "/api/v1/shopkeeper/device/refresh"; responses: { 200: zod.ZodObject<{ ownerToken: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { ownerToken: string; expiresIn: number; }, { ownerToken: string; expiresIn: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateDevice: { summary: "Update device metadata"; method: "PATCH"; body: zod.ZodObject<{ appVersion: zod.ZodOptional; fcmToken: zod.ZodOptional; osVersion: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { osVersion?: string | undefined; appVersion?: string | undefined; fcmToken?: string | undefined; }, { osVersion?: string | undefined; appVersion?: string | undefined; fcmToken?: string | undefined; }>; path: "/api/v1/shopkeeper/device"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendOtp: { summary: "Send OTP to phone number"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; }, "strip", zod.ZodTypeAny, { phone: string; }, { phone: string; }>; path: "/api/v1/shopkeeper/device/send-otp"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { message: string; expiresIn: number; }, { message: string; expiresIn: number; }>; 429: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyOtp: { summary: "Verify OTP code"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; code: zod.ZodString; }, "strip", zod.ZodTypeAny, { code: string; phone: string; }, { code: string; phone: string; }>; path: "/api/v1/shopkeeper/device/verify-otp"; responses: { 200: zod.ZodObject<{ verified: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { verified: boolean; }, { verified: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; resetPin: { summary: "Reset owner PIN using OTP"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; otpCode: zod.ZodString; newPin: zod.ZodString; }, "strip", zod.ZodTypeAny, { phone: string; otpCode: string; newPin: string; }, { phone: string; otpCode: string; newPin: string; }>; path: "/api/v1/shopkeeper/device/reset-pin"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; registerStaffProfile: { summary: "Register a named staff profile on the authenticated device"; method: "POST"; body: zod.ZodObject<{ displayName: zod.ZodString; }, "strip", zod.ZodTypeAny, { displayName: string; }, { displayName: string; }>; path: "/api/v1/shopkeeper/device/staff/register"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; displayName: zod.ZodString; isActive: zod.ZodBoolean; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; displayName: string; isActive: boolean; }, { id: string; createdAt: Date; displayName: string; isActive: boolean; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStaffProfiles: { summary: "List staff profiles for the authenticated device"; method: "GET"; path: "/api/v1/shopkeeper/device/staff"; responses: { 200: zod.ZodObject<{ profiles: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { profiles: { id: string; createdAt: Date; displayName: string; }[]; }, { profiles: { id: string; createdAt: Date; displayName: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeper: { getShop: { summary: "Get current shop details"; method: "GET"; path: "/api/v1/shopkeeper/shop"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; ownerId: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: zod.ZodBoolean; country: zod.ZodString; currency: zod.ZodString; timezone: zod.ZodString; businessType: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: zod.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: zod.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: zod.ZodNullable; lastActiveAt: zod.ZodNullable; storefrontSlug: zod.ZodNullable; storefrontEnabled: zod.ZodBoolean; paystackSubaccountCode: zod.ZodNullable; storefrontDirectTransferEnabled: zod.ZodBoolean; storefrontPaymentInstructions: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateShop: { summary: "Update shop details"; method: "PATCH"; body: zod.ZodObject<{ ownerName: zod.ZodOptional; shopName: zod.ZodOptional; agentName: zod.ZodOptional; agentLanguage: zod.ZodOptional>; agentPersonality: zod.ZodOptional>; businessType: zod.ZodOptional; location: zod.ZodOptional; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; storefrontSlug: zod.ZodOptional>; storefrontEnabled: zod.ZodOptional; paystackSubaccountCode: zod.ZodOptional>; storefrontDirectTransferEnabled: zod.ZodOptional; storefrontPaymentInstructions: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }, { ownerName?: string | undefined; shopName?: string | undefined; agentName?: string | undefined; agentLanguage?: "en" | "pcm" | "ha" | "yo" | "ig" | undefined; businessType?: string | undefined; location?: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | undefined; storefrontSlug?: string | null | undefined; storefrontEnabled?: boolean | undefined; paystackSubaccountCode?: string | null | undefined; storefrontDirectTransferEnabled?: boolean | undefined; storefrontPaymentInstructions?: string | null | undefined; agentPersonality?: Record | undefined; }>; path: "/api/v1/shopkeeper/shop"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; ownerId: zod.ZodString; shopName: zod.ZodString; agentName: zod.ZodString; agentLanguage: zod.ZodEnum<["en", "pcm", "ha", "yo", "ig"]>; whatsappPaired: zod.ZodBoolean; country: zod.ZodString; currency: zod.ZodString; timezone: zod.ZodString; businessType: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; status: zod.ZodEnum<["active", "suspended", "churned"]>; subscriptionTier: zod.ZodEnum<["free", "standard", "pro"]>; lastSyncAt: zod.ZodNullable; lastActiveAt: zod.ZodNullable; storefrontSlug: zod.ZodNullable; storefrontEnabled: zod.ZodBoolean; paystackSubaccountCode: zod.ZodNullable; storefrontDirectTransferEnabled: zod.ZodBoolean; storefrontPaymentInstructions: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }, { status: "active" | "suspended" | "churned"; shopName: string; agentName: string; agentLanguage: "en" | "pcm" | "ha" | "yo" | "ig"; country: string; currency: string; timezone: string; businessType: string | null; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; id: string; createdAt: Date; updatedAt: Date; ownerId: string; whatsappPaired: boolean; subscriptionTier: "free" | "standard" | "pro"; lastSyncAt: Date | null; lastActiveAt: Date | null; storefrontSlug: string | null; storefrontEnabled: boolean; paystackSubaccountCode: string | null; storefrontDirectTransferEnabled: boolean; storefrontPaymentInstructions: string | null; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listProducts: { query: zod.ZodObject<{ active: zod.ZodOptional; category: zod.ZodOptional; search: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; search?: string | undefined; active?: boolean | undefined; category?: string | undefined; }, { search?: string | undefined; active?: boolean | undefined; category?: string | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "List shop products"; method: "GET"; path: "/api/v1/shopkeeper/products"; responses: { 200: zod.ZodObject<{ products: zod.ZodArray; category: zod.ZodNullable; unit: zod.ZodNullable; currentStock: zod.ZodNumber; costPrice: zod.ZodNullable; sellingPrice: zod.ZodNullable; targetMarginPct: zod.ZodNullable; autoReorderEnabled: zod.ZodBoolean; autoReorderMaxAmount: zod.ZodNullable; preferredSupplierId: zod.ZodNullable; reorderThreshold: zod.ZodNullable; barcode: zod.ZodNullable; iconPhotoUrl: zod.ZodNullable; gridPosition: zod.ZodNullable; gridColor: zod.ZodNullable; isActive: zod.ZodBoolean; visibleOnline: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { products: { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }[]; pagination: { page: number; limit: number; total: number; totalPages: number; }; }, { products: { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }[]; pagination: { page: number; limit: number; total: number; totalPages: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getProduct: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get product by ID"; method: "GET"; path: "/api/v1/shopkeeper/products/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; nameVariants: zod.ZodNullable; category: zod.ZodNullable; unit: zod.ZodNullable; currentStock: zod.ZodNumber; costPrice: zod.ZodNullable; sellingPrice: zod.ZodNullable; targetMarginPct: zod.ZodNullable; autoReorderEnabled: zod.ZodBoolean; autoReorderMaxAmount: zod.ZodNullable; preferredSupplierId: zod.ZodNullable; reorderThreshold: zod.ZodNullable; barcode: zod.ZodNullable; iconPhotoUrl: zod.ZodNullable; gridPosition: zod.ZodNullable; gridColor: zod.ZodNullable; isActive: zod.ZodBoolean; visibleOnline: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createProduct: { summary: "Create a new product"; method: "POST"; body: zod.ZodObject<{ name: zod.ZodString; nameVariants: zod.ZodOptional; category: zod.ZodOptional; unit: zod.ZodOptional; currentStock: zod.ZodDefault; costPrice: zod.ZodOptional; sellingPrice: zod.ZodOptional; targetMarginPct: zod.ZodOptional; autoReorderEnabled: zod.ZodOptional; autoReorderMaxAmount: zod.ZodOptional; preferredSupplierId: zod.ZodOptional; reorderThreshold: zod.ZodOptional; barcode: zod.ZodOptional; gridPosition: zod.ZodOptional; gridColor: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { name: string; currentStock: number; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }, { name: string; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; }>; path: "/api/v1/shopkeeper/products"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; nameVariants: zod.ZodNullable; category: zod.ZodNullable; unit: zod.ZodNullable; currentStock: zod.ZodNumber; costPrice: zod.ZodNullable; sellingPrice: zod.ZodNullable; targetMarginPct: zod.ZodNullable; autoReorderEnabled: zod.ZodBoolean; autoReorderMaxAmount: zod.ZodNullable; preferredSupplierId: zod.ZodNullable; reorderThreshold: zod.ZodNullable; barcode: zod.ZodNullable; iconPhotoUrl: zod.ZodNullable; gridPosition: zod.ZodNullable; gridColor: zod.ZodNullable; isActive: zod.ZodBoolean; visibleOnline: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateProduct: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update a product"; method: "PATCH"; body: zod.ZodObject<{ name: zod.ZodOptional; nameVariants: zod.ZodOptional>; category: zod.ZodOptional>; unit: zod.ZodOptional>; currentStock: zod.ZodOptional>; costPrice: zod.ZodOptional>; sellingPrice: zod.ZodOptional>; targetMarginPct: zod.ZodOptional>; autoReorderEnabled: zod.ZodOptional>; autoReorderMaxAmount: zod.ZodOptional>; preferredSupplierId: zod.ZodOptional>; reorderThreshold: zod.ZodOptional>; barcode: zod.ZodOptional>; gridPosition: zod.ZodOptional>; gridColor: zod.ZodOptional>; } & { iconPhotoUrl: zod.ZodOptional; visibleOnline: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }, { name?: string | undefined; category?: string | undefined; nameVariants?: string | undefined; unit?: string | undefined; currentStock?: number | undefined; costPrice?: number | undefined; sellingPrice?: number | undefined; targetMarginPct?: number | undefined; autoReorderEnabled?: boolean | undefined; autoReorderMaxAmount?: number | undefined; preferredSupplierId?: string | undefined; reorderThreshold?: number | undefined; barcode?: string | undefined; iconPhotoUrl?: string | undefined; gridPosition?: number | undefined; gridColor?: string | undefined; visibleOnline?: boolean | undefined; }>; path: "/api/v1/shopkeeper/products/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; nameVariants: zod.ZodNullable; category: zod.ZodNullable; unit: zod.ZodNullable; currentStock: zod.ZodNumber; costPrice: zod.ZodNullable; sellingPrice: zod.ZodNullable; targetMarginPct: zod.ZodNullable; autoReorderEnabled: zod.ZodBoolean; autoReorderMaxAmount: zod.ZodNullable; preferredSupplierId: zod.ZodNullable; reorderThreshold: zod.ZodNullable; barcode: zod.ZodNullable; iconPhotoUrl: zod.ZodNullable; gridPosition: zod.ZodNullable; gridColor: zod.ZodNullable; isActive: zod.ZodBoolean; visibleOnline: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }, { id: string; name: string; createdAt: Date; updatedAt: Date; isActive: boolean; category: string | null; nameVariants: string | null; unit: string | null; currentStock: number; costPrice: number | null; sellingPrice: number | null; targetMarginPct: number | null; autoReorderEnabled: boolean; autoReorderMaxAmount: number | null; preferredSupplierId: string | null; reorderThreshold: number | null; barcode: string | null; iconPhotoUrl: string | null; gridPosition: number | null; gridColor: string | null; visibleOnline: boolean; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deleteProduct: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Delete a product (soft delete)"; method: "DELETE"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/products/:id"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; uploadProductIcon: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Upload product icon photo"; method: "POST"; contentType: "multipart/form-data"; body: zod.ZodObject<{ file: zod.ZodAny; }, "strip", zod.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/api/v1/shopkeeper/products/:id/icon"; responses: { 200: zod.ZodObject<{ iconUrl: zod.ZodString; }, "strip", zod.ZodTypeAny, { iconUrl: string; }, { iconUrl: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSales: { query: zod.ZodObject<{ from: zod.ZodOptional; to: zod.ZodOptional; productId: zod.ZodOptional; inputMethod: zod.ZodOptional; paymentMethod: zod.ZodOptional; staffProfileId: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; inputMethod?: string | undefined; paymentMethod?: string | undefined; staffProfileId?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; inputMethod?: string | undefined; paymentMethod?: string | undefined; staffProfileId?: string | undefined; }>; summary: "List sales with filters"; method: "GET"; path: "/api/v1/shopkeeper/sales"; responses: { 200: zod.ZodObject<{ sales: zod.ZodArray; paymentSplits: zod.ZodOptional; amount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: zod.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: zod.ZodString; transcription: zod.ZodNullable; confidenceScore: zod.ZodNullable; approved: zod.ZodBoolean; receiptPrinted: zod.ZodBoolean; recordedAt: zod.ZodDate; customerId: zod.ZodNullable; callSessionId: zod.ZodNullable; onlineOrderId: zod.ZodNullable; transactionType: zod.ZodDefault>; originalSaleId: zod.ZodNullable; staffProfileId: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; summary: zod.ZodObject<{ totalRevenue: zod.ZodNumber; totalTransactions: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { totalRevenue: number; totalTransactions: number; }, { totalRevenue: number; totalTransactions: number; }>; }, "strip", zod.ZodTypeAny, { summary: { totalRevenue: number; totalTransactions: number; }; pagination: { page: number; limit: number; total: number; totalPages: number; }; sales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }[]; }, { summary: { totalRevenue: number; totalTransactions: number; }; pagination: { page: number; limit: number; total: number; totalPages: number; }; sales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSale: { summary: "Record a manual sale and update stock"; method: "POST"; body: zod.ZodEffects; paymentMethod: zod.ZodDefault>; paymentSplits: zod.ZodOptional; amount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>; inputMethod: zod.ZodDefault>; customerId: zod.ZodOptional; staffProfileId: zod.ZodOptional; recordedAt: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>, { productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; quantity: number; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }, { productId: string; quantity: number; inputMethod?: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web" | undefined; paymentMethod?: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack" | undefined; staffProfileId?: string | undefined; unitPrice?: number | undefined; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | undefined; recordedAt?: Date | undefined; customerId?: string | undefined; }>; path: "/api/v1/shopkeeper/sales"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; productId: zod.ZodString; quantity: zod.ZodNumber; unitPrice: zod.ZodNumber; totalAmount: zod.ZodNumber; paymentMethod: zod.ZodEnum<["cash", "transfer", "credit", "momo", "opay", "online_paystack"]>; paymentSplits: zod.ZodOptional; amount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: zod.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: zod.ZodString; transcription: zod.ZodNullable; confidenceScore: zod.ZodNullable; approved: zod.ZodBoolean; receiptPrinted: zod.ZodBoolean; recordedAt: zod.ZodDate; customerId: zod.ZodNullable; callSessionId: zod.ZodNullable; onlineOrderId: zod.ZodNullable; transactionType: zod.ZodDefault>; originalSaleId: zod.ZodNullable; staffProfileId: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listCustomers: { query: zod.ZodObject<{ search: zod.ZodOptional; hasCredit: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; search?: string | undefined; hasCredit?: boolean | undefined; }, { search?: string | undefined; page?: number | undefined; limit?: number | undefined; hasCredit?: boolean | undefined; }>; summary: "List shop customers"; method: "GET"; path: "/api/v1/shopkeeper/customers"; responses: { 200: zod.ZodObject<{ customers: zod.ZodArray; creditBalance: zod.ZodNumber; totalSpent: zod.ZodNumber; lastVisitAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; customers: { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; customers: { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createCustomer: { summary: "Create a new customer"; method: "POST"; body: zod.ZodObject<{ name: zod.ZodString; phone: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { name: string; phone?: string | undefined; }, { name: string; phone?: string | undefined; }>; path: "/api/v1/shopkeeper/customers"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodNullable; creditBalance: zod.ZodNumber; totalSpent: zod.ZodNumber; lastVisitAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomer: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get customer by ID"; method: "GET"; path: "/api/v1/shopkeeper/customers/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodNullable; creditBalance: zod.ZodNumber; totalSpent: zod.ZodNumber; lastVisitAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateCustomer: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update customer name or phone"; method: "PATCH"; body: zod.ZodObject<{ name: zod.ZodOptional; phone: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { phone?: string | undefined; name?: string | undefined; }, { phone?: string | undefined; name?: string | undefined; }>; path: "/api/v1/shopkeeper/customers/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodNullable; creditBalance: zod.ZodNumber; totalSpent: zod.ZodNumber; lastVisitAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomerCreditHistory: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; query: zod.ZodObject<{ page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; }, { page?: number | undefined; limit?: number | undefined; }>; summary: "List credit sales and repayments for a customer"; method: "GET"; path: "/api/v1/shopkeeper/customers/:id/credit-history"; responses: { 200: zod.ZodObject<{ events: zod.ZodArray; amount: zod.ZodNumber; occurredAt: zod.ZodDate; paymentMethod: zod.ZodNullable; note: zod.ZodNullable; saleId: zod.ZodNullable; productId: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }, { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; events: { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; events: { type: "credit_sale" | "repayment"; id: string; productId: string | null; paymentMethod: string | null; amount: number; occurredAt: Date; note: string | null; saleId: string | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createCreditPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Record a credit repayment and decrement balance"; method: "POST"; body: zod.ZodObject<{ amount: zod.ZodNumber; paymentMethod: zod.ZodOptional; note: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }, { amount: number; paymentMethod?: string | undefined; note?: string | undefined; }>; path: "/api/v1/shopkeeper/customers/:id/credit-payments"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodNullable; creditBalance: zod.ZodNumber; totalSpent: zod.ZodNumber; lastVisitAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }, { phone: string | null; id: string; name: string; createdAt: Date; updatedAt: Date; creditBalance: number; totalSpent: number; lastVisitAt: Date | null; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendCustomerReminder: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Send debt reminder to customer via WhatsApp or SMS"; method: "POST"; body: zod.ZodObject<{ channel: zod.ZodEnum<["whatsapp", "sms"]>; }, "strip", zod.ZodTypeAny, { channel: "whatsapp" | "sms"; }, { channel: "whatsapp" | "sms"; }>; path: "/api/v1/shopkeeper/customers/:id/send-reminder"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; channel: zod.ZodEnum<["whatsapp", "sms"]>; }, "strip", zod.ZodTypeAny, { message: string; channel: "whatsapp" | "sms"; }, { message: string; channel: "whatsapp" | "sms"; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; reEngageCustomer: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Send owner-approved WhatsApp re-engagement to at-risk customer"; method: "POST"; body: zod.ZodObject<{ ownerOverride: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { ownerOverride?: boolean | undefined; }, { ownerOverride?: boolean | undefined; }>; path: "/api/v1/shopkeeper/customers/:id/re-engage"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; messageId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { message: string; messageId?: string | undefined; }, { message: string; messageId?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStockMovements: { query: zod.ZodObject<{ productId: zod.ZodOptional; type: zod.ZodOptional; from: zod.ZodOptional; to: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; type?: string | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; }, { type?: string | undefined; page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; productId?: string | undefined; }>; summary: "List stock movements"; method: "GET"; path: "/api/v1/shopkeeper/stock-movements"; responses: { 200: zod.ZodObject<{ movements: zod.ZodArray; quantity: zod.ZodNumber; balanceAfter: zod.ZodNumber; source: zod.ZodNullable; notes: zod.ZodNullable; callSessionId: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }, { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; movements: { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; movements: { id: string; createdAt: Date; productId: string; quantity: number; callSessionId: string | null; movementType: "sale" | "restock" | "adjustment" | "return"; balanceAfter: number; source: string | null; notes: string | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listStorefrontOrders: { query: zod.ZodObject<{ status: zod.ZodDefault>; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { status: "all" | "awaiting_payment" | "awaiting_approval" | "paid" | "reserved" | "ready" | "collected" | "cancelled"; limit: number; }, { status?: "all" | "awaiting_payment" | "awaiting_approval" | "paid" | "reserved" | "ready" | "collected" | "cancelled" | undefined; limit?: number | undefined; }>; summary: "List storefront online orders with status filters"; method: "GET"; path: "/api/v1/shopkeeper/storefront/orders"; responses: { 200: zod.ZodObject<{ orders: zod.ZodArray; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodString; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; itemCount: zod.ZodNumber; itemsPreview: zod.ZodArray; trackingUrl: zod.ZodString; createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }>, "many">; }, "strip", zod.ZodTypeAny, { orders: { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }[]; }, { orders: { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; buyerEmail: string; buyerPhone: string | null; buyerName: string | null; itemCount: number; itemsPreview: string[]; trackingUrl: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateStorefrontOrderStatus: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Advance storefront order status (approve, ready, collected, cancel)"; method: "PATCH"; body: zod.ZodObject<{ action: zod.ZodEnum<["approve", "ready", "collected", "cancel"]>; }, "strip", zod.ZodTypeAny, { action: "ready" | "collected" | "approve" | "cancel"; }, { action: "ready" | "collected" | "approve" | "cancel"; }>; path: "/api/v1/shopkeeper/storefront/orders/:id/status"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; }, "strip", zod.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; id: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveStorefrontManualPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve storefront manual transfer order and record sale"; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/storefront/orders/:id/approve-manual-payment"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodString; }, "strip", zod.ZodTypeAny, { status: string; id: string; }, { status: string; id: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperSync: { pushChanges: { summary: "Device pushes local changes to server"; method: "POST"; body: zod.ZodObject<{ shopId: zod.ZodString; deviceId: zod.ZodOptional; changes: zod.ZodArray; id: zod.ZodString; action: zod.ZodEnum<["insert", "update", "delete"]>; data: zod.ZodRecord; timestamp: zod.ZodNumber; deviceId: zod.ZodString; generationId: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }, { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }>, "many">; lastSyncTimestamp: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }, { shopId: string; changes: { deviceId: string; id: string; action: "insert" | "update" | "delete"; table: "products" | "sales" | "customers" | "stock_movements" | "reservations"; data: Record; timestamp: number; generationId: number; }[]; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; }>; path: "/api/v1/shopkeeper/sync/push"; responses: { 200: zod.ZodObject<{ accepted: zod.ZodArray; conflicts: zod.ZodArray; resolution: zod.ZodEnum<["server_wins", "device_wins", "merged"]>; }, "strip", zod.ZodTypeAny, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }, { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }>, "many">; serverTimestamp: zod.ZodNumber; newGenerationId: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }, { accepted: string[]; conflicts: { id: string; table: string; serverVersion: Record; resolution: "server_wins" | "device_wins" | "merged"; }[]; serverTimestamp: number; newGenerationId: number; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; pullChanges: { query: zod.ZodObject<{ shopId: zod.ZodString; deviceId: zod.ZodOptional; lastSyncTimestamp: zod.ZodOptional; tables: zod.ZodOptional, "many">>; }, "strip", zod.ZodTypeAny, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }, { shopId: string; deviceId?: string | undefined; lastSyncTimestamp?: number | undefined; tables?: ("products" | "sales" | "customers" | "stock_movements" | "reservations" | "insights" | "trade_facts")[] | undefined; }>; summary: "Device pulls server changes since timestamp"; method: "GET"; path: "/api/v1/shopkeeper/sync/pull"; responses: { 200: zod.ZodObject<{ changes: zod.ZodArray; data: zod.ZodRecord; timestamp: zod.ZodNumber; generationId: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }, { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }>, "many">; hasMore: zod.ZodBoolean; serverTimestamp: zod.ZodNumber; nextLastSyncTimestamp: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }, { changes: { id: string; action: "insert" | "update" | "delete"; table: string; data: Record; timestamp: number; generationId: number; }[]; serverTimestamp: number; hasMore: boolean; nextLastSyncTimestamp?: number | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSyncStatus: { query: zod.ZodObject<{ shopId: zod.ZodString; deviceId: zod.ZodString; }, "strip", zod.ZodTypeAny, { deviceId: string; shopId: string; }, { deviceId: string; shopId: string; }>; summary: "Check last sync timestamp and pending count"; method: "GET"; path: "/api/v1/shopkeeper/sync/status"; responses: { 200: zod.ZodObject<{ lastSyncTimestamp: zod.ZodNullable; pendingCount: zod.ZodNumber; generationId: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { generationId: number; lastSyncTimestamp: number | null; pendingCount: number; }, { generationId: number; lastSyncTimestamp: number | null; pendingCount: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listConflicts: { query: zod.ZodObject<{ resolved: zod.ZodOptional>; limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { limit?: number | undefined; resolved?: "true" | "false" | undefined; }, { limit?: number | undefined; resolved?: "true" | "false" | undefined; }>; summary: "List sync conflicts for the shop (unresolved or all)"; method: "GET"; path: "/api/v1/shopkeeper/sync/conflicts"; responses: { 200: zod.ZodObject<{ conflicts: zod.ZodArray; resolution: zod.ZodString; deviceId: zod.ZodNullable; resolvedAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }, { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }>, "many">; total: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { total: number; conflicts: { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }[]; }, { total: number; conflicts: { deviceId: string | null; id: string; createdAt: Date; table: string; serverVersion: Record; resolution: string; recordId: string; resolvedAt: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; resolveConflict: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark a sync conflict as resolved (keep_local or use_cloud)"; method: "PATCH"; body: zod.ZodObject<{ resolution: zod.ZodEnum<["keep_local", "use_cloud"]>; }, "strip", zod.ZodTypeAny, { resolution: "keep_local" | "use_cloud"; }, { resolution: "keep_local" | "use_cloud"; }>; path: "/api/v1/shopkeeper/sync/conflicts/:id"; responses: { 200: zod.ZodObject<{ ok: zod.ZodLiteral; }, "strip", zod.ZodTypeAny, { ok: true; }, { ok: true; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperBackup: { uploadBackup: { summary: "Upload encrypted SQLite backup to R2"; method: "POST"; contentType: "multipart/form-data"; body: zod.ZodObject<{ file: zod.ZodAny; }, "strip", zod.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/api/v1/shopkeeper/backup/upload"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; shopId: zod.ZodString; sizeBytes: zod.ZodNumber; checksum: zod.ZodString; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getLatestBackup: { query: zod.ZodObject<{ shopId: zod.ZodString; }, "strip", zod.ZodTypeAny, { shopId: string; }, { shopId: string; }>; summary: "Get latest backup metadata"; method: "GET"; path: "/api/v1/shopkeeper/backup/latest"; responses: { 200: zod.ZodNullable>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; downloadBackup: { query: zod.ZodObject<{ shopId: zod.ZodString; backupId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { shopId: string; backupId?: string | undefined; }, { shopId: string; backupId?: string | undefined; }>; summary: "Download encrypted backup for restore"; method: "GET"; path: "/api/v1/shopkeeper/backup/download"; responses: { 200: zod.ZodObject<{ url: zod.ZodString; identity: zod.ZodObject<{ agentName: zod.ZodString; personality: zod.ZodRecord; }, "strip", zod.ZodTypeAny, { agentName: string; personality: Record; }, { agentName: string; personality: Record; }>; checksum: zod.ZodString; }, "strip", zod.ZodTypeAny, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }, { checksum: string; url: string; identity: { agentName: string; personality: Record; }; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listBackups: { query: zod.ZodObject<{ shopId: zod.ZodString; } & { limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { shopId: string; limit?: number | undefined; }, { shopId: string; limit?: number | undefined; }>; summary: "List all backups with dates"; method: "GET"; path: "/api/v1/shopkeeper/backup/list"; responses: { 200: zod.ZodObject<{ backups: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { backups: { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }[]; }, { backups: { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; requestBackup: { summary: "Create server-side backup (export shop data and upload to storage)"; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/backup/request"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; shopId: zod.ZodString; sizeBytes: zod.ZodNumber; checksum: zod.ZodString; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }, { id: string; createdAt: Date; shopId: string; sizeBytes: number; checksum: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperWhatsapp: { pairWhatsapp: { summary: "Link owner WhatsApp number"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; verificationCode: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { phone: string; verificationCode?: string | undefined; }, { phone: string; verificationCode?: string | undefined; }>; path: "/api/v1/shopkeeper/whatsapp/pair"; responses: { 200: zod.ZodObject<{ paired: zod.ZodBoolean; message: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { paired: boolean; message?: string | undefined; }, { paired: boolean; message?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; unpairWhatsapp: { summary: "Unlink WhatsApp"; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/whatsapp/unpair"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendMessage: { summary: "Queue outbound message"; method: "POST"; body: zod.ZodUnion<[zod.ZodObject<{ messageType: zod.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: zod.ZodString; content: zod.ZodOptional; interactive: zod.ZodOptional; buttons: zod.ZodOptional, "many">>; sections: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { id: string; title: string; description?: string | undefined; }, { id: string; title: string; description?: string | undefined; }>, "many">; }, "strip", zod.ZodTypeAny, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }, { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }>, "many">>; }, "strip", zod.ZodTypeAny, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }, { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; }>>; mediaUrl: zod.ZodOptional; metadata: zod.ZodOptional>; templateName: zod.ZodOptional; templateParams: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }, { messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; metadata?: Record | undefined; interactive?: { type: "button" | "list"; buttons?: { id: string; title: string; }[] | undefined; sections?: { title: string; rows: { id: string; title: string; description?: string | undefined; }[]; }[] | undefined; } | undefined; content?: string | undefined; mediaUrl?: string | undefined; templateName?: string | undefined; templateParams?: string[] | undefined; }>, zod.ZodObject<{ text: zod.ZodString; }, "strip", zod.ZodTypeAny, { text: string; }, { text: string; }>]>; path: "/api/v1/shopkeeper/whatsapp/send"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listMessages: { query: zod.ZodObject<{ messageType: zod.ZodOptional; direction: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; messageType?: string | undefined; direction?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; messageType?: string | undefined; direction?: string | undefined; }>; summary: "Get message history"; method: "GET"; path: "/api/v1/shopkeeper/whatsapp/messages"; responses: { 200: zod.ZodObject<{ messages: zod.ZodArray; messageType: zod.ZodEnum<["text", "image", "audio", "interactive", "sale_alert", "daily_report", "low_stock", "customer_reply", "remote_command", "reservation", "subscription_alert", "custom"]>; recipient: zod.ZodString; content: zod.ZodString; status: zod.ZodEnum<["queued", "sent", "delivered", "failed"]>; metadata: zod.ZodNullable>; sentAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }, { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; messages: { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; messages: { metadata: Record | null; status: "failed" | "queued" | "sent" | "delivered"; id: string; createdAt: Date; messageType: "custom" | "text" | "image" | "audio" | "interactive" | "sale_alert" | "daily_report" | "low_stock" | "customer_reply" | "remote_command" | "reservation" | "subscription_alert"; recipient: string; content: string; direction: "inbound" | "outbound"; sentAt: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; incomingWebhook: { summary: "WAPI.js incoming webhook"; method: "POST"; body: zod.ZodEffects; message: zod.ZodOptional; timestamp: zod.ZodOptional; messageId: zod.ZodOptional; type: zod.ZodOptional; mediaUrl: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }>, { from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; timestamp?: number | undefined; mediaUrl?: string | undefined; }, unknown>, { timestamp: number; from: string; message?: string | undefined; type?: string | undefined; to?: string | undefined; messageId?: string | undefined; mediaUrl?: string | undefined; }, unknown>; path: "/api/v1/shopkeeper/whatsapp/webhook"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deliveryStatusWebhook: { summary: "Provider delivery status callback"; method: "POST"; body: zod.ZodEffects; externalId: zod.ZodOptional; status: zod.ZodEnum<["sent", "delivered", "failed", "read"]>; }, "strip", zod.ZodTypeAny, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }, { status: "failed" | "sent" | "delivered" | "read"; messageId?: string | undefined; externalId?: string | undefined; }>; path: "/api/v1/shopkeeper/whatsapp/webhook/status"; responses: { 200: zod.ZodObject<{ updated: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { updated: boolean; }, { updated: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateAutoReply: { summary: "Configure auto-reply settings"; method: "PATCH"; body: zod.ZodObject<{ enabled: zod.ZodOptional; afterHoursMessage: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }>; path: "/api/v1/shopkeeper/whatsapp/auto-reply"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateAutoReplyPost: { summary: "Configure auto-reply settings (POST for mobile compatibility)"; method: "POST"; body: zod.ZodObject<{ enabled: zod.ZodOptional; afterHoursMessage: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }, { enabled?: boolean | undefined; afterHoursMessage?: string | undefined; }>; path: "/api/v1/shopkeeper/whatsapp/auto-reply"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperBilling: { getSubscription: { summary: "Get current subscription"; method: "GET"; path: "/api/v1/shopkeeper/subscription"; responses: { 200: zod.ZodNullable; status: zod.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: zod.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: zod.ZodNumber; currency: zod.ZodString; paymentMethod: zod.ZodNullable; currentPeriodStart: zod.ZodDate; currentPeriodEnd: zod.ZodDate; cancelledAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSubscription: { summary: "Subscribe to a plan"; method: "POST"; body: zod.ZodObject<{ tier: zod.ZodEnum<["free", "standard", "pro"]>; billingCycle: zod.ZodEnum<["daily", "weekly", "monthly", "annual"]>; paymentMethod: zod.ZodOptional>; paymentRef: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }, { tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; paymentMethod?: "momo" | "opay" | "paystack" | "card" | "bank" | "mobile_money" | undefined; paymentRef?: string | undefined; }>; path: "/api/v1/shopkeeper/subscription"; responses: { 201: zod.ZodObject<{ subscription: zod.ZodObject<{ id: zod.ZodString; tier: zod.ZodEnum<["free", "standard", "pro"]>; status: zod.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: zod.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: zod.ZodNumber; currency: zod.ZodString; paymentMethod: zod.ZodNullable; currentPeriodStart: zod.ZodDate; currentPeriodEnd: zod.ZodDate; cancelledAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>; paymentUrl: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { subscription: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }; paymentUrl?: string | undefined; }, { subscription: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }; paymentUrl?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; cancelSubscription: { summary: "Cancel subscription"; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/subscription/cancel"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; tier: zod.ZodEnum<["free", "standard", "pro"]>; status: zod.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: zod.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: zod.ZodNumber; currency: zod.ZodString; paymentMethod: zod.ZodNullable; currentPeriodStart: zod.ZodDate; currentPeriodEnd: zod.ZodDate; cancelledAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyPayment: { summary: "Verify mobile money payment"; method: "POST"; body: zod.ZodObject<{ provider: zod.ZodEnum<["paystack"]>; transactionRef: zod.ZodString; }, "strip", zod.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; path: "/api/v1/shopkeeper/subscription/verify-payment"; responses: { 200: zod.ZodObject<{ verified: zod.ZodBoolean; subscription: zod.ZodOptional; status: zod.ZodEnum<["active", "past_due", "cancelled", "expired"]>; billingCycle: zod.ZodEnum<["daily", "weekly", "monthly", "annual"]>; amount: zod.ZodNumber; currency: zod.ZodString; paymentMethod: zod.ZodNullable; currentPeriodStart: zod.ZodDate; currentPeriodEnd: zod.ZodDate; cancelledAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }, { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; }>>; }, "strip", zod.ZodTypeAny, { verified: boolean; subscription?: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; } | undefined; }, { verified: boolean; subscription?: { status: "active" | "cancelled" | "expired" | "past_due"; currency: string; id: string; createdAt: Date; updatedAt: Date; paymentMethod: string | null; amount: number; tier: "free" | "standard" | "pro"; billingCycle: "daily" | "weekly" | "monthly" | "annual"; currentPeriodStart: Date; currentPeriodEnd: Date; cancelledAt: Date | null; } | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listPayments: { query: zod.ZodObject<{ limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { limit?: number | undefined; }, { limit?: number | undefined; }>; summary: "Payment history"; method: "GET"; path: "/api/v1/shopkeeper/subscription/payments"; responses: { 200: zod.ZodObject<{ payments: zod.ZodArray; status: zod.ZodEnum<["pending", "success", "failed"]>; paidAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }, { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }>, "many">; }, "strip", zod.ZodTypeAny, { payments: { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }[]; }, { payments: { status: "failed" | "pending" | "success"; currency: string; id: string; createdAt: Date; amount: number; provider: string; providerRef: string | null; paidAt: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; paystackWebhook: { summary: "Paystack payment webhook"; method: "POST"; body: zod.ZodRecord; path: "/api/v1/shopkeeper/billing/webhook/paystack"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; }; }; }; shopkeeperWallet: { getWallet: { summary: "Get wallet balance and recent activity"; method: "GET"; path: "/api/v1/shopkeeper/wallet"; responses: { 200: zod.ZodObject<{ wallet: zod.ZodObject<{ id: zod.ZodString; shopId: zod.ZodString; balance: zod.ZodNumber; lifetimeEarned: zod.ZodNumber; lifetimeSpent: zod.ZodNumber; lastGrantAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>; recentTransactions: zod.ZodArray; amount: zod.ZodNumber; feature: zod.ZodNullable>; description: zod.ZodNullable; referenceId: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>, "many">; }, "strip", zod.ZodTypeAny, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; recentTransactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; recentTransactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; purchaseTokens: { summary: "Purchase a token bundle (initiates Paystack payment; wallet credited on success)"; method: "POST"; body: zod.ZodObject<{ bundleId: zod.ZodString; paymentRef: zod.ZodOptional; paymentMethod: zod.ZodLiteral<"paystack">; }, "strip", zod.ZodTypeAny, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }, { paymentMethod: "paystack"; bundleId: string; paymentRef?: string | undefined; }>; path: "/api/v1/shopkeeper/wallet/purchase"; responses: { 200: zod.ZodObject<{ wallet: zod.ZodObject<{ id: zod.ZodString; shopId: zod.ZodString; balance: zod.ZodNumber; lifetimeEarned: zod.ZodNumber; lifetimeSpent: zod.ZodNumber; lastGrantAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>; transaction: zod.ZodOptional; amount: zod.ZodNumber; feature: zod.ZodNullable>; description: zod.ZodNullable; referenceId: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>>; paymentUrl: zod.ZodOptional; referenceId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; paymentUrl?: string | undefined; referenceId?: string | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }, { wallet: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }; paymentUrl?: string | undefined; referenceId?: string | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listBundles: { summary: "List available token bundles"; method: "GET"; path: "/api/v1/shopkeeper/wallet/bundles"; responses: { 200: zod.ZodObject<{ bundles: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { bundles: { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }[]; }, { bundles: { currency: string; id: string; name: string; isActive: boolean; price: number; tokenAmount: number; bonusTokens: number; }[]; }>; }; }; listTransactions: { query: zod.ZodObject<{ type: zod.ZodOptional; feature: zod.ZodOptional; from: zod.ZodOptional; to: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; type?: string | undefined; from?: Date | undefined; to?: Date | undefined; feature?: string | undefined; }, { type?: string | undefined; page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; feature?: string | undefined; }>; summary: "List token transaction history"; method: "GET"; path: "/api/v1/shopkeeper/wallet/transactions"; responses: { 200: zod.ZodObject<{ transactions: zod.ZodArray; amount: zod.ZodNumber; feature: zod.ZodNullable>; description: zod.ZodNullable; referenceId: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; transactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; transactions: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyTokenPayment: { summary: "Verify Paystack payment for token purchase"; method: "POST"; body: zod.ZodObject<{ provider: zod.ZodLiteral<"paystack">; transactionRef: zod.ZodString; }, "strip", zod.ZodTypeAny, { provider: "paystack"; transactionRef: string; }, { provider: "paystack"; transactionRef: string; }>; path: "/api/v1/shopkeeper/wallet/verify-payment"; responses: { 200: zod.ZodObject<{ verified: zod.ZodBoolean; wallet: zod.ZodOptional; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; }>>; transaction: zod.ZodOptional; amount: zod.ZodNumber; feature: zod.ZodNullable>; description: zod.ZodNullable; referenceId: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }, { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; }>>; }, "strip", zod.ZodTypeAny, { verified: boolean; wallet?: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; } | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }, { verified: boolean; wallet?: { id: string; createdAt: Date; updatedAt: Date; shopId: string; balance: number; lifetimeEarned: number; lifetimeSpent: number; lastGrantAt: Date | null; } | undefined; transaction?: { description: string | null; type: "refund" | "purchase" | "consumption" | "grant" | "bonus"; id: string; createdAt: Date; amount: number; walletId: string; feature: "voice_call" | "voice_command" | "cloud_analytics" | "proactive_call" | "dashboard_access" | null; referenceId: string | null; } | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; tokenPaymentWebhook: { summary: "Legacy webhook endpoint (not used)"; method: "POST"; body: zod.ZodObject<{ event: zod.ZodString; data: zod.ZodRecord; }, "strip", zod.ZodTypeAny, { data: Record; event: string; }, { data: Record; event: string; }>; path: "/api/v1/shopkeeper/wallet/webhook/flutterwave"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; tokenPaymentWebhookPaystack: { summary: "Paystack payment webhook for token purchases (verify x-paystack-signature with raw body)"; method: "POST"; body: zod.ZodObject<{ event: zod.ZodOptional; data: zod.ZodOptional; status: zod.ZodOptional; }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">>>; }, "strip", zod.ZodTypeAny, { data?: zod.objectOutputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough"> | undefined; event?: string | undefined; }, { data?: zod.objectInputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough"> | undefined; event?: string | undefined; }>; path: "/api/v1/shopkeeper/wallet/webhook/paystack"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperReports: { getDailyReport: { query: zod.ZodObject<{ date: zod.ZodDate; }, "strip", zod.ZodTypeAny, { date: Date; }, { date: Date; }>; summary: "Get report for specific date"; method: "GET"; path: "/api/v1/shopkeeper/reports/daily"; responses: { 200: zod.ZodNullable; salesByPayment: zod.ZodObject<{ cash: zod.ZodNumber; transfer: zod.ZodNumber; credit: zod.ZodNumber; momo: zod.ZodNumber; opay: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: zod.ZodArray, "many">; lowStockItems: zod.ZodArray, "many">; callSummary: zod.ZodNullable>; tokensUsed: zod.ZodNullable; sentViaWhatsapp: zod.ZodBoolean; generatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReportRange: { query: zod.ZodObject<{ from: zod.ZodDate; to: zod.ZodDate; }, "strip", zod.ZodTypeAny, { from: Date; to: Date; }, { from: Date; to: Date; }>; summary: "Get report data for date range"; method: "GET"; path: "/api/v1/shopkeeper/reports/range"; responses: { 200: zod.ZodObject<{ reports: zod.ZodArray; salesByPayment: zod.ZodObject<{ cash: zod.ZodNumber; transfer: zod.ZodNumber; credit: zod.ZodNumber; momo: zod.ZodNumber; opay: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: zod.ZodArray, "many">; lowStockItems: zod.ZodArray, "many">; callSummary: zod.ZodNullable>; tokensUsed: zod.ZodNullable; sentViaWhatsapp: zod.ZodBoolean; generatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>, "many">; summary: zod.ZodObject<{ totalSales: zod.ZodNumber; totalTransactions: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { totalTransactions: number; totalSales: number; }, { totalTransactions: number; totalSales: number; }>; }, "strip", zod.ZodTypeAny, { summary: { totalTransactions: number; totalSales: number; }; reports: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }[]; }, { summary: { totalTransactions: number; totalSales: number; }; reports: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; downloadPdf: { query: zod.ZodObject<{ from: zod.ZodDate; to: zod.ZodDate; }, "strip", zod.ZodTypeAny, { from: Date; to: Date; }, { from: Date; to: Date; }>; summary: "Generate and download PDF report"; method: "GET"; path: "/api/v1/shopkeeper/reports/pdf"; responses: { 200: zod.ZodAny; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; triggerDailyReport: { summary: "Manually trigger daily report generation"; method: "POST"; body: zod.ZodObject<{ date: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { date?: Date | undefined; }, { date?: Date | undefined; }>; path: "/api/v1/shopkeeper/reports/trigger"; responses: { 200: zod.ZodObject<{ report: zod.ZodObject<{ id: zod.ZodString; reportDate: zod.ZodDate; totalSales: zod.ZodNumber; totalTransactions: zod.ZodNumber; salesByMethod: zod.ZodObject<{ litepos: zod.ZodNumber; litepos_barcode: zod.ZodNumber; voice_ptt: zod.ZodNumber; voice_kiosk: zod.ZodNumber; voice_whatsapp: zod.ZodNumber; voice_call: zod.ZodNumber; telephony: zod.ZodNumber; vision: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }, { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }>; salesByPayment: zod.ZodObject<{ cash: zod.ZodNumber; transfer: zod.ZodNumber; credit: zod.ZodNumber; momo: zod.ZodNumber; opay: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { cash: number; transfer: number; credit: number; momo: number; opay: number; }, { cash: number; transfer: number; credit: number; momo: number; opay: number; }>; topProducts: zod.ZodArray, "many">; lowStockItems: zod.ZodArray, "many">; callSummary: zod.ZodNullable>; tokensUsed: zod.ZodNullable; sentViaWhatsapp: zod.ZodBoolean; generatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }, { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }>; }, "strip", zod.ZodTypeAny, { report: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }; }, { report: { id: string; totalTransactions: number; reportDate: Date; totalSales: number; salesByMethod: { litepos: number; litepos_barcode: number; voice_ptt: number; voice_kiosk: number; voice_whatsapp: number; voice_call: number; telephony: number; vision: number; }; salesByPayment: { cash: number; transfer: number; credit: number; momo: number; opay: number; }; topProducts: { name: string; productId: string; qty: number; revenue: number; }[]; lowStockItems: { name: string; currentStock: number; productId: string; }[]; callSummary: { totalCalls: number; totalDuration: number; proactiveCalls: number; actionsFromCalls: number; } | null; tokensUsed: number | null; sentViaWhatsapp: boolean; generatedAt: Date; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; sendDailyReport: { query: zod.ZodObject<{ date: zod.ZodDate; }, "strip", zod.ZodTypeAny, { date: Date; }, { date: Date; }>; summary: "Generate daily report and send to owner WhatsApp"; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/reports/daily/send"; responses: { 200: zod.ZodObject<{ message: zod.ZodString; }, "strip", zod.ZodTypeAny, { message: string; }, { message: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getFinancialStatement: { query: zod.ZodObject<{ months: zod.ZodDefault; format: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { months: number; format: "pdf" | "csv" | "json"; }, { months?: number | undefined; format?: "pdf" | "csv" | "json" | undefined; }>; summary: "P&L-style aggregates from daily reports for banks / lenders"; method: "GET"; path: "/api/v1/shopkeeper/reports/financial-statement"; responses: { 200: zod.ZodObject<{ format: zod.ZodEnum<["pdf", "csv", "json"]>; pdfBase64: zod.ZodOptional; csv: zod.ZodOptional; json: zod.ZodOptional>; filename: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { format: "pdf" | "csv" | "json"; csv?: string | undefined; json?: Record | undefined; pdfBase64?: string | undefined; filename?: string | undefined; }, { format: "pdf" | "csv" | "json"; csv?: string | undefined; json?: Record | undefined; pdfBase64?: string | undefined; filename?: string | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperAnalytics: { getLiveView: { query: zod.ZodObject<{ since: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { since?: Date | undefined; }, { since?: Date | undefined; }>; summary: "Real-time transaction feed and stock levels"; method: "GET"; path: "/api/v1/shopkeeper/analytics/live"; responses: { 200: zod.ZodObject<{ recentSales: zod.ZodArray; paymentSplits: zod.ZodOptional; amount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }, { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }>, "many">>>; inputMethod: zod.ZodEnum<["litepos", "litepos_barcode", "voice_ptt", "voice_kiosk", "voice_whatsapp", "voice_call", "telephony", "vision", "storefront_web"]>; recordedBy: zod.ZodString; transcription: zod.ZodNullable; confidenceScore: zod.ZodNullable; approved: zod.ZodBoolean; receiptPrinted: zod.ZodBoolean; recordedAt: zod.ZodDate; customerId: zod.ZodNullable; callSessionId: zod.ZodNullable; onlineOrderId: zod.ZodNullable; transactionType: zod.ZodDefault>; originalSaleId: zod.ZodNullable; staffProfileId: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }, { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }>, "many">; revenueToday: zod.ZodNumber; transactionsToday: zod.ZodNumber; lowStockItems: zod.ZodArray; }, "strip", zod.ZodTypeAny, { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }, { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }>, "many">; lastSyncAt: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { lastSyncAt: Date | null; lowStockItems: { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }[]; recentSales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; transactionType: "sale" | "refund"; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; }[]; revenueToday: number; transactionsToday: number; }, { lastSyncAt: Date | null; lowStockItems: { name: string; currentStock: number; reorderThreshold: number | null; productId: string; }[]; recentSales: { id: string; productId: string; inputMethod: "litepos" | "litepos_barcode" | "voice_ptt" | "voice_kiosk" | "voice_whatsapp" | "voice_call" | "telephony" | "vision" | "storefront_web"; paymentMethod: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; staffProfileId: string | null; quantity: number; unitPrice: number; totalAmount: number; recordedBy: string; transcription: string | null; confidenceScore: number | null; approved: boolean; receiptPrinted: boolean; recordedAt: Date; customerId: string | null; callSessionId: string | null; onlineOrderId: string | null; originalSaleId: string | null; paymentSplits?: { method: "cash" | "transfer" | "credit" | "momo" | "opay" | "online_paystack"; amount: number; }[] | null | undefined; transactionType?: "sale" | "refund" | undefined; }[]; revenueToday: number; transactionsToday: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getAnalytics: { query: zod.ZodObject<{ period: zod.ZodDefault>; from: zod.ZodOptional; to: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { period: "day" | "week" | "month" | "quarter" | "year"; from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; period?: "day" | "week" | "month" | "quarter" | "year" | undefined; }>; summary: "Sales trends, product performance, payment breakdowns"; method: "GET"; path: "/api/v1/shopkeeper/analytics/trends"; responses: { 200: zod.ZodObject<{ salesTrend: zod.ZodArray, "many">; productPerformance: zod.ZodArray; velocity: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }, { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }>, "many">; paymentBreakdown: zod.ZodRecord; inputMethodBreakdown: zod.ZodRecord; peakHours: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { salesTrend: { date: string; transactions: number; revenue: number; }[]; productPerformance: { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }[]; paymentBreakdown: Record; inputMethodBreakdown: Record; peakHours: { transactions: number; revenue: number; hour: number; }[]; }, { salesTrend: { date: string; transactions: number; revenue: number; }[]; productPerformance: { name: string; productId: string; revenue: number; margin: number | null; velocity: number; }[]; paymentBreakdown: Record; inputMethodBreakdown: Record; peakHours: { transactions: number; revenue: number; hour: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getEmployeeView: { query: zod.ZodObject<{ from: zod.ZodOptional; to: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; }>; summary: "Employee transactions and cash reconciliation"; method: "GET"; path: "/api/v1/shopkeeper/analytics/employees"; responses: { 200: zod.ZodObject<{ employees: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { employees: { name: string; totalRevenue: number; totalTransactions: number; cashCollected: number; expectedCash: number; discrepancy: number; }[]; }, { employees: { name: string; totalRevenue: number; totalTransactions: number; cashCollected: number; expectedCash: number; discrepancy: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMultiShopComparison: { query: zod.ZodObject<{ period: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { period: "day" | "week" | "month"; }, { period?: "day" | "week" | "month" | undefined; }>; summary: "Side-by-side shop comparison for multi-shop owners"; method: "GET"; path: "/api/v1/shopkeeper/analytics/multi-shop"; responses: { 200: zod.ZodObject<{ shops: zod.ZodArray; activeEmployees: zod.ZodNumber; lowStockCount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }>, "many">; }, "strip", zod.ZodTypeAny, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }[]; }, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMultiShopSummary: { query: zod.ZodObject<{ period: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { period: "day" | "week" | "month"; }, { period?: "day" | "week" | "month" | undefined; }>; summary: "Aggregate KPIs and per-shop health for multi-shop command center"; method: "GET"; path: "/api/v1/shopkeeper/analytics/multi-shop/summary"; responses: { 200: zod.ZodObject<{ aggregate: zod.ZodObject<{ shopCount: zod.ZodNumber; totalRevenue: zod.ZodNumber; totalTransactions: zod.ZodNumber; totalLowStockSkus: zod.ZodNumber; avgRevenuePerShop: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }, { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }>; shops: zod.ZodArray; activeEmployees: zod.ZodNumber; lowStockCount: zod.ZodNumber; vsAverage: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }, { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }>, "many">; }, "strip", zod.ZodTypeAny, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }[]; aggregate: { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }; }, { shops: { shopName: string; shopId: string; transactions: number; revenue: number; topProduct: string | null; activeEmployees: number; lowStockCount: number; vsAverage: number; }[]; aggregate: { totalRevenue: number; totalTransactions: number; shopCount: number; totalLowStockSkus: number; avgRevenuePerShop: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createShareLink: { summary: "Generate tokenized read-only link for accountant/lender"; method: "POST"; body: zod.ZodObject<{ permissions: zod.ZodArray, "many">; expiresInDays: zod.ZodDefault; label: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { permissions: ("read_analytics" | "read_reports" | "read_transactions" | "bank_share")[]; expiresInDays: number; label?: string | undefined; }, { permissions: ("read_analytics" | "read_reports" | "read_transactions" | "bank_share")[]; expiresInDays?: number | undefined; label?: string | undefined; }>; path: "/api/v1/shopkeeper/analytics/share"; responses: { 201: zod.ZodObject<{ shareToken: zod.ZodString; shareUrl: zod.ZodString; expiresAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { shareToken: string; shareUrl: string; expiresAt: Date; }, { shareToken: string; shareUrl: string; expiresAt: Date; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSharedView: { pathParams: zod.ZodObject<{ token: zod.ZodString; }, "strip", zod.ZodTypeAny, { token: string; }, { token: string; }>; query: zod.ZodObject<{ period: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { period: "week" | "month" | "quarter"; }, { period?: "week" | "month" | "quarter" | undefined; }>; summary: "Public read-only view via shared link"; method: "GET"; path: "/api/v1/shopkeeper/analytics/shared/:token"; responses: { 200: zod.ZodObject<{ shopName: zod.ZodString; analytics: zod.ZodObject<{ salesTrend: zod.ZodArray, "many">; totalRevenue: zod.ZodNumber; totalTransactions: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }, { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }>; financialStatement: zod.ZodOptional>; generatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { shopName: string; generatedAt: Date; analytics: { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }; financialStatement?: Record | undefined; }, { shopName: string; generatedAt: Date; analytics: { totalRevenue: number; totalTransactions: number; salesTrend: { date: string; transactions: number; revenue: number; }[]; }; financialStatement?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSalesForecast: { query: zod.ZodObject<{ productId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { productId?: string | undefined; }, { productId?: string | undefined; }>; summary: "Next 7 days demand forecast per product"; method: "GET"; path: "/api/v1/shopkeeper/analytics/forecast"; responses: { 200: zod.ZodObject<{ forecast: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { forecast: { productId: string; productName: string; avgDailyQty: number; forecastNext7Days: number; }[]; }, { forecast: { productId: string; productName: string; avgDailyQty: number; forecastNext7Days: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getCustomerSegmentation: { summary: "Customer segments by recency, frequency, monetary"; method: "GET"; path: "/api/v1/shopkeeper/analytics/segmentation"; responses: { 200: zod.ZodObject<{ segments: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }, { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }>, "many">; }, "strip", zod.ZodTypeAny, { segments: { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }[]; }, { segments: { customers: { id: string; name: string; totalSpent: number; recencyDays: number; visits: number; }[]; segment: string; count: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSeasonality: { query: zod.ZodObject<{ days: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { days: number; }, { days?: number | undefined; }>; summary: "Sales patterns by day of week and hour"; method: "GET"; path: "/api/v1/shopkeeper/analytics/seasonality"; responses: { 200: zod.ZodObject<{ byDayOfWeek: zod.ZodArray, "many">; byHour: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { byDayOfWeek: { transactions: number; revenue: number; day: number; dayName: string; }[]; byHour: { transactions: number; revenue: number; hour: number; }[]; }, { byDayOfWeek: { transactions: number; revenue: number; day: number; dayName: string; }[]; byHour: { transactions: number; revenue: number; hour: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getMarketBenchmark: { query: zod.ZodObject<{ normalizedName: zod.ZodString; market: zod.ZodString; city: zod.ZodString; }, "strip", zod.ZodTypeAny, { market: string; city: string; normalizedName: string; }, { market: string; city: string; normalizedName: string; }>; summary: "Median / IQR selling price for a product label in a market (privacy-safe aggregate)"; method: "GET"; path: "/api/v1/shopkeeper/analytics/market-benchmark"; responses: { 200: zod.ZodNullable; p75: zod.ZodNullable; sampleSize: zod.ZodNumber; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { market: string; city: string; updatedAt: Date; normalizedName: string; medianPrice: number; p25: number | null; p75: number | null; sampleSize: number; }, { market: string; city: string; updatedAt: Date; normalizedName: string; medianPrice: number; p25: number | null; p75: number | null; sampleSize: number; }>>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; getLenderPackage: { query: zod.ZodObject<{ lenderOptIn: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { lenderOptIn?: "true" | undefined; }, { lenderOptIn?: "true" | undefined; }>; summary: "MFI handoff package — owner-only with explicit opt-in"; method: "GET"; path: "/api/v1/shopkeeper/analytics/lender-package"; responses: { 200: zod.ZodObject<{ scoreSummary: zod.ZodObject<{ score: zod.ZodNumber; band: zod.ZodEnum<["excellent", "good", "fair", "limited"]>; components: zod.ZodObject<{ revenueConsistency: zod.ZodNumber; paymentMethodDiversification: zod.ZodNumber; creditRepaymentRate: zod.ZodNumber; growthTrend: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }, { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }>; }, "strip", zod.ZodTypeAny, { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }, { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }>; financialStatement: zod.ZodRecord; computedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { financialStatement: Record; scoreSummary: { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }; computedAt: Date; }, { financialStatement: Record; scoreSummary: { score: number; band: "excellent" | "good" | "fair" | "limited"; components: { revenueConsistency: number; paymentMethodDiversification: number; creditRepaymentRate: number; growthTrend: number; }; }; computedAt: Date; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 403: zod.ZodObject<{ message: zod.ZodString; details: zod.ZodOptional>; } & { code: zod.ZodOptional>; daysRemaining: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { message: string; code?: "lending_not_eligible" | undefined; details?: Record | undefined; daysRemaining?: number | undefined; }, { message: string; code?: "lending_not_eligible" | undefined; details?: Record | undefined; daysRemaining?: number | undefined; }>; }; }; getMarginOptimization: { summary: "Products with low margin or selling below cost"; method: "GET"; path: "/api/v1/shopkeeper/analytics/margin"; responses: { 200: zod.ZodObject<{ products: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { products: { costPrice: number; sellingPrice: number; productId: string; productName: string; currentMarginPercent: number; suggestion: string; }[]; }, { products: { costPrice: number; sellingPrice: number; productId: string; productName: string; currentMarginPercent: number; suggestion: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperInstaller: { registerInstaller: { summary: "Register new installer"; method: "POST"; body: zod.ZodObject<{ name: zod.ZodString; phone: zod.ZodString; password: zod.ZodString; email: zod.ZodOptional; city: zod.ZodString; market: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }, { phone: string; city: string; name: string; password: string; market?: string | undefined; email?: string | undefined; }>; path: "/api/v1/shopkeeper/installers/register"; responses: { 201: zod.ZodObject<{ installer: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodString; email: zod.ZodNullable; city: zod.ZodString; market: zod.ZodNullable; status: zod.ZodEnum<["active", "suspended", "inactive"]>; rating: zod.ZodNumber; totalOnboardings: zod.ZodNumber; totalEarnings: zod.ZodNumber; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; token: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; loginInstaller: { summary: "Installer auth"; method: "POST"; body: zod.ZodObject<{ phone: zod.ZodString; password: zod.ZodString; }, "strip", zod.ZodTypeAny, { phone: string; password: string; }, { phone: string; password: string; }>; path: "/api/v1/shopkeeper/installers/login"; responses: { 200: zod.ZodObject<{ installer: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodString; email: zod.ZodNullable; city: zod.ZodString; market: zod.ZodNullable; status: zod.ZodEnum<["active", "suspended", "inactive"]>; rating: zod.ZodNumber; totalOnboardings: zod.ZodNumber; totalEarnings: zod.ZodNumber; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; token: zod.ZodString; expiresIn: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }, { expiresIn: number; token: string; installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getInstallerProfile: { summary: "Get own profile + stats"; method: "GET"; path: "/api/v1/shopkeeper/installers/me"; responses: { 200: zod.ZodObject<{ installer: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodString; email: zod.ZodNullable; city: zod.ZodString; market: zod.ZodNullable; status: zod.ZodEnum<["active", "suspended", "inactive"]>; rating: zod.ZodNumber; totalOnboardings: zod.ZodNumber; totalEarnings: zod.ZodNumber; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; stats: zod.ZodObject<{ totalOnboardings: zod.ZodNumber; totalEarnings: zod.ZodNumber; pendingFollowUps: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }, { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }>; }, "strip", zod.ZodTypeAny, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; stats: { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }; }, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; stats: { totalOnboardings: number; totalEarnings: number; pendingFollowUps: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listOnboardings: { query: zod.ZodObject<{ status: zod.ZodOptional; limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { status?: string | undefined; limit?: number | undefined; }, { status?: string | undefined; limit?: number | undefined; }>; summary: "List installer onboardings"; method: "GET"; path: "/api/v1/shopkeeper/installers/onboardings"; responses: { 200: zod.ZodObject<{ onboardings: zod.ZodArray; setupCompleted: zod.ZodBoolean; tierConverted: zod.ZodNullable; convertedAt: zod.ZodNullable; commissionPaid: zod.ZodNumber; satisfactionScore: zod.ZodNullable; followUpDay3: zod.ZodBoolean; followUpDay7: zod.ZodBoolean; followUpDay14: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>, "many">; }, "strip", zod.ZodTypeAny, { onboardings: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }[]; }, { onboardings: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; logOnboarding: { summary: "Log a new shop onboarding"; method: "POST"; body: zod.ZodObject<{ shopPhone: zod.ZodString; setupCompleted: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { shopPhone: string; setupCompleted: boolean; }, { shopPhone: string; setupCompleted?: boolean | undefined; }>; path: "/api/v1/shopkeeper/installers/onboardings"; responses: { 201: zod.ZodObject<{ onboarding: zod.ZodObject<{ id: zod.ZodString; installerId: zod.ZodString; shopPhone: zod.ZodString; shopId: zod.ZodNullable; setupCompleted: zod.ZodBoolean; tierConverted: zod.ZodNullable; convertedAt: zod.ZodNullable; commissionPaid: zod.ZodNumber; satisfactionScore: zod.ZodNullable; followUpDay3: zod.ZodBoolean; followUpDay7: zod.ZodBoolean; followUpDay14: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>; }, "strip", zod.ZodTypeAny, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; logFollowUp: { summary: "Log a follow-up visit"; method: "POST"; body: zod.ZodObject<{ onboardingId: zod.ZodString; day: zod.ZodEnum<["3", "7", "14"]>; satisfactionScore: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }, { day: "3" | "7" | "14"; onboardingId: string; satisfactionScore?: number | undefined; }>; path: "/api/v1/shopkeeper/installers/follow-up"; responses: { 200: zod.ZodObject<{ onboarding: zod.ZodObject<{ id: zod.ZodString; installerId: zod.ZodString; shopPhone: zod.ZodString; shopId: zod.ZodNullable; setupCompleted: zod.ZodBoolean; tierConverted: zod.ZodNullable; convertedAt: zod.ZodNullable; commissionPaid: zod.ZodNumber; satisfactionScore: zod.ZodNullable; followUpDay3: zod.ZodBoolean; followUpDay7: zod.ZodBoolean; followUpDay14: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }, { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }>; }, "strip", zod.ZodTypeAny, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }, { onboarding: { id: string; createdAt: Date; updatedAt: Date; shopId: string | null; installerId: string; shopPhone: string; setupCompleted: boolean; tierConverted: string | null; convertedAt: Date | null; commissionPaid: number; satisfactionScore: number | null; followUpDay3: boolean; followUpDay7: boolean; followUpDay14: boolean; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getLeaderboard: { query: zod.ZodObject<{ period: zod.ZodOptional>; limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { limit?: number | undefined; period?: "week" | "month" | undefined; }, { limit?: number | undefined; period?: "week" | "month" | undefined; }>; summary: "Installer rankings"; method: "GET"; path: "/api/v1/shopkeeper/installers/leaderboard"; responses: { 200: zod.ZodObject<{ leaderboard: zod.ZodArray; city: zod.ZodString; market: zod.ZodNullable; status: zod.ZodEnum<["active", "suspended", "inactive"]>; rating: zod.ZodNumber; totalOnboardings: zod.ZodNumber; totalEarnings: zod.ZodNumber; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }, { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }>; onboardings: zod.ZodNumber; earnings: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }, { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }>, "many">; }, "strip", zod.ZodTypeAny, { leaderboard: { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }[]; }, { leaderboard: { installer: { status: "active" | "suspended" | "inactive"; phone: string; market: string | null; city: string; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; rating: number; totalOnboardings: number; totalEarnings: number; }; onboardings: number; rank: number; earnings: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getEarnings: { query: zod.ZodObject<{ from: zod.ZodOptional; to: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; }, { from?: Date | undefined; to?: Date | undefined; }>; summary: "Commission history"; method: "GET"; path: "/api/v1/shopkeeper/installers/earnings"; responses: { 200: zod.ZodObject<{ total: zod.ZodNumber; byOnboarding: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { total: number; byOnboarding: { amount: number; paidAt: Date; shopPhone: string; onboardingId: string; }[]; }, { total: number; byOnboarding: { amount: number; paidAt: Date; shopPhone: string; onboardingId: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperBarcodes: { lookupBarcode: { pathParams: zod.ZodObject<{ barcode: zod.ZodString; }, "strip", zod.ZodTypeAny, { barcode: string; }, { barcode: string; }>; summary: "Lookup product by barcode"; method: "GET"; path: "/api/v1/shopkeeper/barcodes/:barcode"; responses: { 200: zod.ZodNullable; category: zod.ZodNullable; imageUrl: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }>>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; submitBarcode: { summary: "Submit new barcode→product mapping"; method: "POST"; body: zod.ZodObject<{ barcode: zod.ZodString; name: zod.ZodString; brand: zod.ZodOptional; category: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { name: string; barcode: string; brand?: string | undefined; category?: string | undefined; }, { name: string; barcode: string; brand?: string | undefined; category?: string | undefined; }>; path: "/api/v1/shopkeeper/barcodes"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; barcode: zod.ZodString; name: zod.ZodString; brand: zod.ZodNullable; category: zod.ZodNullable; imageUrl: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }, { brand: string | null; id: string; name: string; category: string | null; barcode: string; imageUrl: string | null; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperTelephony: { incomingWebhook: { summary: "Africa's Talking incoming call handler"; method: "POST"; body: zod.ZodObject<{ sessionId: zod.ZodString; callerNumber: zod.ZodString; destinationNumber: zod.ZodString; direction: zod.ZodString; isActive: zod.ZodBoolean; dtmfDigits: zod.ZodOptional; recordingUrl: zod.ZodOptional; recording_url: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { isActive: boolean; direction: string; sessionId: string; callerNumber: string; destinationNumber: string; dtmfDigits?: string | undefined; recordingUrl?: string | undefined; recording_url?: string | undefined; }, { isActive: boolean; direction: string; sessionId: string; callerNumber: string; destinationNumber: string; dtmfDigits?: string | undefined; recordingUrl?: string | undefined; recording_url?: string | undefined; }>; path: "/api/v1/shopkeeper/telephony/webhook"; responses: { 200: zod.ZodObject<{ action: zod.ZodString; }, "strip", zod.ZodTypeAny, { action: string; }, { action: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; callStatusWebhook: { summary: "Call duration/cost status updates"; method: "POST"; body: zod.ZodObject<{ sessionId: zod.ZodString; callSessionId: zod.ZodOptional; isActive: zod.ZodBoolean; direction: zod.ZodEnum<["inbound", "outbound"]>; callerNumber: zod.ZodString; destinationNumber: zod.ZodString; durationInSeconds: zod.ZodNumber; currencyCode: zod.ZodOptional; amount: zod.ZodOptional; status: zod.ZodEnum<["ringing", "in_progress", "completed", "failed", "busy", "no_answer"]>; }, "strip", zod.ZodTypeAny, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }, { status: "failed" | "ringing" | "in_progress" | "completed" | "busy" | "no_answer"; isActive: boolean; direction: "inbound" | "outbound"; sessionId: string; callerNumber: string; destinationNumber: string; durationInSeconds: number; amount?: number | undefined; callSessionId?: string | undefined; currencyCode?: string | undefined; }>; path: "/api/v1/shopkeeper/telephony/status"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; initiateCall: { summary: "Trigger outbound proactive call to shop owner"; method: "POST"; body: zod.ZodObject<{ targetPhone: zod.ZodString; triggerReason: zod.ZodEnum<["critical_stock", "large_sale", "anomaly", "daily_summary"]>; shopContext: zod.ZodOptional>; alertMessage: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }, { criticalItems?: string[] | undefined; alertMessage?: string | undefined; }>>; }, "strip", zod.ZodTypeAny, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }, { targetPhone: string; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary"; shopContext?: { criticalItems?: string[] | undefined; alertMessage?: string | undefined; } | undefined; }>; path: "/api/v1/shopkeeper/telephony/call"; responses: { 200: zod.ZodObject<{ callSession: zod.ZodObject<{ id: zod.ZodString; shopId: zod.ZodString; direction: zod.ZodEnum<["inbound", "outbound"]>; callerPhone: zod.ZodString; startedAt: zod.ZodDate; endedAt: zod.ZodNullable; durationSeconds: zod.ZodNullable; triggerReason: zod.ZodNullable>; transcriptSummary: zod.ZodNullable; actionsTaken: zod.ZodNullable; amount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: string; amount?: number | undefined; product?: string | undefined; }, { type: string; amount?: number | undefined; product?: string | undefined; }>, "many">>; callCost: zod.ZodNullable; ownerSatisfaction: zod.ZodNullable>; gateway: zod.ZodEnum<["africas_talking", "webrtc_voip"]>; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }>; tokensCharged: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { callSession: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }; tokensCharged: number; }, { callSession: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }; tokensCharged: number; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; getCallLogs: { query: zod.ZodObject<{ from: zod.ZodOptional; to: zod.ZodOptional; direction: zod.ZodOptional>; page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }, { page?: number | undefined; limit?: number | undefined; from?: Date | undefined; to?: Date | undefined; direction?: "inbound" | "outbound" | undefined; }>; summary: "Call history for shop"; method: "GET"; path: "/api/v1/shopkeeper/telephony/logs"; responses: { 200: zod.ZodObject<{ calls: zod.ZodArray; callerPhone: zod.ZodString; startedAt: zod.ZodDate; endedAt: zod.ZodNullable; durationSeconds: zod.ZodNullable; triggerReason: zod.ZodNullable>; transcriptSummary: zod.ZodNullable; actionsTaken: zod.ZodNullable; amount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: string; amount?: number | undefined; product?: string | undefined; }, { type: string; amount?: number | undefined; product?: string | undefined; }>, "many">>; callCost: zod.ZodNullable; ownerSatisfaction: zod.ZodNullable>; gateway: zod.ZodEnum<["africas_talking", "webrtc_voip"]>; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }, { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; calls: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; calls: { id: string; createdAt: Date; shopId: string; direction: "inbound" | "outbound"; triggerReason: "critical_stock" | "large_sale" | "anomaly" | "daily_summary" | null; callerPhone: string; startedAt: Date; endedAt: Date | null; durationSeconds: number | null; transcriptSummary: string | null; actionsTaken: { type: string; amount?: number | undefined; product?: string | undefined; }[] | null; callCost: number | null; ownerSatisfaction: "helpful" | "not_helpful" | null; gateway: "africas_talking" | "webrtc_voip"; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperVision: { analyzeInvoice: { summary: "Upload image and return parsed invoice items"; method: "POST"; contentType: "multipart/form-data"; body: zod.ZodObject<{ file: zod.ZodAny; }, "strip", zod.ZodTypeAny, { file?: any; }, { file?: any; }>; path: "/api/v1/shopkeeper/vision/invoice"; responses: { 200: zod.ZodObject<{ items: zod.ZodArray; totalAmount: zod.ZodOptional; barcode: zod.ZodOptional; productId: zod.ZodOptional; confidence: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }, { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }>, "many">; supplierName: zod.ZodOptional; totalAmount: zod.ZodOptional; confidence: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; barcode?: string | undefined; productId?: string | undefined; unitPrice?: number | undefined; totalAmount?: number | undefined; confidence?: number | undefined; }[]; totalAmount?: number | undefined; confidence?: number | undefined; supplierName?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; confirmRestock: { summary: "Commit parsed invoice items to inventory"; method: "POST"; body: zod.ZodObject<{ items: zod.ZodArray; productName: zod.ZodString; quantity: zod.ZodNumber; unitPrice: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }, { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }>, "many">; supplierName: zod.ZodOptional; totalAmount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }, { items: { quantity: number; productName: string; productId?: string | undefined; unitPrice?: number | undefined; }[]; totalAmount?: number | undefined; supplierName?: string | undefined; }>; path: "/api/v1/shopkeeper/vision/confirm"; responses: { 200: zod.ZodObject<{ stockMovements: zod.ZodArray, "many">; }, "strip", zod.ZodTypeAny, { stockMovements: { productId: string; quantity: number; balanceAfter: number; productName: string; }[]; }, { stockMovements: { productId: string; quantity: number; balanceAfter: number; productName: string; }[]; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperInsights: { list: { query: zod.ZodObject<{ since: zod.ZodOptional; unreadOnly: zod.ZodDefault>; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; unreadOnly: boolean; since?: Date | undefined; }, { page?: number | undefined; limit?: number | undefined; since?: Date | undefined; unreadOnly?: boolean | undefined; }>; summary: "List cloud-generated insights for device sync"; method: "GET"; path: "/api/v1/shopkeeper/insights"; responses: { 200: zod.ZodObject<{ insights: zod.ZodArray; title: zod.ZodString; body: zod.ZodString; payload: zod.ZodNullable>; readAt: zod.ZodNullable; engagementType: zod.ZodNullable>; engagedAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; insights: { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; insights: { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; markRead: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark insight as read"; method: "PATCH"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/insights/:id/read"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; type: zod.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; title: zod.ZodString; body: zod.ZodString; payload: zod.ZodNullable>; readAt: zod.ZodNullable; engagementType: zod.ZodNullable>; engagedAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; engageInsight: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Record insight engagement (acted on / dismissed / ignored)"; method: "PATCH"; body: zod.ZodObject<{ engagementType: zod.ZodEnum<["acted_on", "dismissed", "ignored"]>; }, "strip", zod.ZodTypeAny, { engagementType: "acted_on" | "dismissed" | "ignored"; }, { engagementType: "acted_on" | "dismissed" | "ignored"; }>; path: "/api/v1/shopkeeper/insights/:id/engage"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; type: zod.ZodEnum<["margin_alert", "restock_suggestion", "weekly_summary", "supplier_tip", "expiry_alert", "anomaly", "bestseller_shift", "custom"]>; title: zod.ZodString; body: zod.ZodString; payload: zod.ZodNullable>; readAt: zod.ZodNullable; engagementType: zod.ZodNullable>; engagedAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }, { body: string; type: "custom" | "anomaly" | "margin_alert" | "restock_suggestion" | "weekly_summary" | "supplier_tip" | "expiry_alert" | "bestseller_shift"; id: string; createdAt: Date; title: string; payload: Record | null; readAt: Date | null; engagementType: "acted_on" | "dismissed" | "ignored" | null; engagedAt: Date | null; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; agentUsage: { query: zod.ZodObject<{ from: zod.ZodOptional; to: zod.ZodOptional; limitDays: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { from?: Date | undefined; to?: Date | undefined; limitDays?: number | undefined; }, { from?: Date | undefined; to?: Date | undefined; limitDays?: number | undefined; }>; summary: "Get trade agent usage (intents, daily counts, token spend)"; method: "GET"; path: "/api/v1/shopkeeper/insights/agent-usage"; responses: { 200: zod.ZodObject<{ byIntent: zod.ZodRecord; byDay: zod.ZodArray, "many">; totalSessions: zod.ZodNumber; totalTokensUsed: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { byIntent: Record; byDay: { date: string; tokensUsed: number; count: number; }[]; totalSessions: number; totalTokensUsed: number; }, { byIntent: Record; byDay: { date: string; tokensUsed: number; count: number; }[]; totalSessions: number; totalTokensUsed: number; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperAudit: { list: { query: zod.ZodObject<{ since: zod.ZodOptional; until: zod.ZodOptional; actionType: zod.ZodOptional; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; since?: Date | undefined; until?: Date | undefined; actionType?: string | undefined; }, { page?: number | undefined; limit?: number | undefined; since?: Date | undefined; until?: Date | undefined; actionType?: string | undefined; }>; summary: "List server-originated action audit logs"; method: "GET"; path: "/api/v1/shopkeeper/audit-logs"; responses: { 200: zod.ZodObject<{ logs: zod.ZodArray>; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { id: string; createdAt: Date; payload: Record | null; actionType: string; }, { id: string; createdAt: Date; payload: Record | null; actionType: string; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; logs: { id: string; createdAt: Date; payload: Record | null; actionType: string; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; logs: { id: string; createdAt: Date; payload: Record | null; actionType: string; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperVoice: { parseTranscript: { summary: "Parse voice transcript to transaction intent (keyword + optional LLM fallback)"; method: "POST"; body: zod.ZodObject<{ transcript: zod.ZodString; productHints: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { transcript: string; productHints?: string | undefined; }, { transcript: string; productHints?: string | undefined; }>; path: "/api/v1/shopkeeper/voice/parse"; responses: { 200: zod.ZodObject<{ intent: zod.ZodNullable; productId: zod.ZodNullable>; quantity: zod.ZodOptional; unitPrice: zod.ZodOptional; customerId: zod.ZodOptional; amount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: zod.ZodNullable; productId: zod.ZodString; quantity: zod.ZodNumber; unitPrice: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", zod.ZodTypeAny, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; transcribeAudio: { summary: "Transcribe audio via Whisper and parse intent — single round trip, AI stays server-side"; method: "POST"; body: zod.ZodObject<{ audioBase64: zod.ZodString; language: zod.ZodOptional; productHints: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { audioBase64: string; productHints?: string | undefined; language?: string | undefined; }, { audioBase64: string; productHints?: string | undefined; language?: string | undefined; }>; path: "/api/v1/shopkeeper/voice/transcribe"; responses: { 200: zod.ZodObject<{ transcript: zod.ZodString; intent: zod.ZodNullable; productId: zod.ZodNullable>; quantity: zod.ZodOptional; unitPrice: zod.ZodOptional; customerId: zod.ZodOptional; amount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>>; batchIntents: zod.ZodNullable; productId: zod.ZodString; quantity: zod.ZodNumber; unitPrice: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }, { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }>, "many">>; }, "strip", zod.ZodTypeAny, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }, { transcript: string; intent: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; } | null; batchIntents: { type: "record_sale"; productId: string; quantity: number; unitPrice?: number | undefined; }[] | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; 422: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; extractAmbientIntents: { summary: "Extract structured transaction intents from a long conversation transcript (ambient listening hand-off)"; method: "POST"; body: zod.ZodObject<{ transcript: zod.ZodString; productHints: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { transcript: string; productHints?: string | undefined; }, { transcript: string; productHints?: string | undefined; }>; path: "/api/v1/shopkeeper/voice/extract-ambient"; responses: { 200: zod.ZodObject<{ intents: zod.ZodArray; productId: zod.ZodNullable>; quantity: zod.ZodOptional; unitPrice: zod.ZodOptional; customerId: zod.ZodOptional; amount: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }>, "many">; }, "strip", zod.ZodTypeAny, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }, { intents: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment"; productId?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | undefined; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; }; }; }; shopkeeperTradeAgent: { getScheduledTasks: { summary: "List pending scheduled follow-up tasks for the shop"; method: "GET"; path: "/api/v1/shopkeeper/agent/scheduled-tasks"; responses: { 200: zod.ZodArray, "many">; }; }; cancelScheduledTask: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Cancel a pending scheduled follow-up task"; method: "DELETE"; body: zod.ZodUndefined; path: "/api/v1/shopkeeper/agent/scheduled-tasks/:id"; responses: { 204: zod.ZodUndefined; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; runAgent: { summary: "Run the unified cloud trade agent"; method: "POST"; body: zod.ZodObject<{ input: zod.ZodString; source: zod.ZodEnum<["whatsapp", "telephony", "api", "cron"]>; senderRole: zod.ZodOptional>; sessionId: zod.ZodOptional; preferredIntent: zod.ZodOptional; productId: zod.ZodNullable>; productName: zod.ZodNullable>; customerId: zod.ZodNullable>; customerName: zod.ZodNullable>; quantity: zod.ZodOptional; unitPrice: zod.ZodOptional; price: zod.ZodOptional; amount: zod.ZodOptional; operation: zod.ZodOptional>; phoneNumber: zod.ZodNullable>; paymentMethod: zod.ZodNullable>; message: zod.ZodNullable>; delayHours: zod.ZodOptional; channel: zod.ZodNullable>>; }, "strip", zod.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>>; preferredIntents: zod.ZodOptional; productId: zod.ZodNullable>; productName: zod.ZodNullable>; customerId: zod.ZodNullable>; customerName: zod.ZodNullable>; quantity: zod.ZodOptional; unitPrice: zod.ZodOptional; price: zod.ZodOptional; amount: zod.ZodOptional; operation: zod.ZodOptional>; phoneNumber: zod.ZodNullable>; paymentMethod: zod.ZodNullable>; message: zod.ZodNullable>; delayHours: zod.ZodOptional; channel: zod.ZodNullable>>; }, "strip", zod.ZodTypeAny, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }, { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }>, "many">>; }, "strip", zod.ZodTypeAny, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }, { source: "telephony" | "whatsapp" | "api" | "cron"; input: string; sessionId?: string | undefined; senderRole?: "unknown" | "owner" | "customer" | undefined; preferredIntent?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; } | undefined; preferredIntents?: { type: "restock" | "record_sale" | "stock_query" | "credit_summary" | "credit_payment" | "report_request" | "price_check" | "availability" | "stock_update" | "add_customer" | "competitor_check" | "weekly_analysis" | "supplier_optimize" | "schedule_follow_up" | "create_order" | "reserve" | "list_reservations" | "collect_payment" | "payment_status" | "reconcile_payments" | "create_supplier_bill" | "pay_supplier" | "analytics_query"; message?: string | null | undefined; productId?: string | null | undefined; paymentMethod?: string | null | undefined; quantity?: number | undefined; unitPrice?: number | undefined; amount?: number | undefined; customerId?: string | null | undefined; channel?: "whatsapp" | "in_app" | null | undefined; price?: number | undefined; productName?: string | null | undefined; customerName?: string | null | undefined; operation?: "set" | "add" | undefined; phoneNumber?: string | null | undefined; delayHours?: number | undefined; }[] | undefined; }>; path: "/api/v1/shopkeeper/trade/agent"; responses: { 200: zod.ZodObject<{ reply: zod.ZodString; intent: zod.ZodNullable; customerName: zod.ZodOptional; quantity: zod.ZodOptional; price: zod.ZodOptional; operation: zod.ZodOptional; phoneNumber: zod.ZodOptional; amount: zod.ZodOptional; paymentMethod: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>>; intents: zod.ZodOptional; customerName: zod.ZodOptional; quantity: zod.ZodOptional; price: zod.ZodOptional; operation: zod.ZodOptional; phoneNumber: zod.ZodOptional; amount: zod.ZodOptional; paymentMethod: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }, { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }>, "many">>; confidence: zod.ZodOptional; clarificationNeeded: zod.ZodOptional; clarificationPrompt: zod.ZodOptional; requiresConfirmation: zod.ZodOptional; policyTier: zod.ZodOptional>; policyReason: zod.ZodOptional; result: zod.ZodNullable>; sessionId: zod.ZodOptional; auditId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }, { intent: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; } | null; reply: string; result: Record | null; sessionId?: string | undefined; confidence?: number | undefined; intents?: { type: string; paymentMethod?: string | undefined; quantity?: number | undefined; amount?: number | undefined; price?: number | undefined; productName?: string | undefined; customerName?: string | undefined; operation?: string | undefined; phoneNumber?: string | undefined; }[] | undefined; clarificationNeeded?: boolean | undefined; clarificationPrompt?: string | undefined; requiresConfirmation?: boolean | undefined; policyTier?: "auto_execute" | "ask_confirm" | "escalate_human" | undefined; policyReason?: string | undefined; auditId?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 402: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodLiteral<"INSUFFICIENT_TOKENS">; requiredTokens: zod.ZodNumber; balance: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }, { code: "INSUFFICIENT_TOKENS"; message: string; balance: number; requiredTokens: number; }>; 500: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordLearnedExample: { summary: "Record a successful (input, intent) from mobile for in-context learning"; method: "POST"; body: zod.ZodObject<{ input: zod.ZodString; intentJson: zod.ZodRecord; }, "strip", zod.ZodTypeAny, { input: string; intentJson: Record; }, { input: string; intentJson: Record; }>; path: "/api/v1/shopkeeper/agent/learned-example"; responses: { 204: zod.ZodUndefined; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordFeedback: { summary: "Attach fine-tuning label to LLM request log (latest trade-agent log if llmLogId omitted)"; method: "POST"; body: zod.ZodObject<{ label: zod.ZodEnum<["positive", "negative", "neutral"]>; comment: zod.ZodOptional; llmLogId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { label: "positive" | "negative" | "neutral"; comment?: string | undefined; llmLogId?: string | undefined; }, { label: "positive" | "negative" | "neutral"; comment?: string | undefined; llmLogId?: string | undefined; }>; path: "/api/v1/shopkeeper/trade/agent/feedback"; responses: { 204: zod.ZodUndefined; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; recordRejectedExample: { summary: "Record a rejected parse (e.g. user cancelled ActionPreviewSheet) for future task mining"; method: "POST"; body: zod.ZodObject<{ input: zod.ZodString; }, "strip", zod.ZodTypeAny, { input: string; }, { input: string; }>; path: "/api/v1/shopkeeper/agent/learned-example/rejected"; responses: { 204: zod.ZodUndefined; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperMobileLlm: { getManifest: { summary: "Get current on-device LLM model manifest (filename + hash for update check)"; method: "GET"; path: "/api/v1/shopkeeper/mobile-llm/manifest"; responses: { 200: zod.ZodObject<{ modelFileName: zod.ZodString; sha256: zod.ZodOptional; downloadUrl: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { modelFileName: string; sha256?: string | undefined; downloadUrl?: string | undefined; }, { modelFileName: string; sha256?: string | undefined; downloadUrl?: string | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getUploadLogUrl: { summary: "Get presigned PUT URL to upload one on-device LLM request/response log (direct to S3)."; method: "POST"; body: zod.ZodObject<{}, "strip", zod.ZodTypeAny, {}, {}>; path: "/api/v1/shopkeeper/mobile-llm/upload-log-url"; responses: { 200: zod.ZodObject<{ uploadUrl: zod.ZodString; key: zod.ZodString; }, "strip", zod.ZodTypeAny, { uploadUrl: string; key: string; }, { uploadUrl: string; key: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperReservations: { listReservations: { query: zod.ZodObject<{ status: zod.ZodOptional>; } & { page: zod.ZodDefault; limit: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { page: number; limit: number; status?: "cancelled" | "expired" | "pending" | "fulfilled" | undefined; }, { status?: "cancelled" | "expired" | "pending" | "fulfilled" | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "List reservations for the shop"; method: "GET"; path: "/api/v1/shopkeeper/reservations"; responses: { 200: zod.ZodObject<{ reservations: zod.ZodArray; expiresAt: zod.ZodDate; productId: zod.ZodString; customerId: zod.ZodNullable; createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>, "many">; pagination: zod.ZodObject<{ page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { page: number; limit: number; total: number; totalPages: number; }, { page: number; limit: number; total: number; totalPages: number; }>; }, "strip", zod.ZodTypeAny, { pagination: { page: number; limit: number; total: number; totalPages: number; }; reservations: { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }[]; }, { pagination: { page: number; limit: number; total: number; totalPages: number; }; reservations: { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createReservation: { summary: "Create a product reservation"; method: "POST"; body: zod.ZodObject<{ productId: zod.ZodString; quantity: zod.ZodNumber; customerId: zod.ZodOptional; expiresAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { productId: string; quantity: number; expiresAt: Date; customerId?: string | undefined; }, { productId: string; quantity: number; expiresAt: Date; customerId?: string | undefined; }>; path: "/api/v1/shopkeeper/reservations"; responses: { 201: zod.ZodObject<{ id: zod.ZodString; quantity: zod.ZodNumber; status: zod.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; expiresAt: zod.ZodDate; productId: zod.ZodString; customerId: zod.ZodNullable; createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateReservationStatus: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Update reservation status (e.g. fulfil or cancel)"; method: "PATCH"; body: zod.ZodObject<{ status: zod.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; }, "strip", zod.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; }>; path: "/api/v1/shopkeeper/reservations/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; quantity: zod.ZodNumber; status: zod.ZodEnum<["pending", "fulfilled", "cancelled", "expired"]>; expiresAt: zod.ZodDate; productId: zod.ZodString; customerId: zod.ZodNullable; createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }, { status: "cancelled" | "expired" | "pending" | "fulfilled"; id: string; createdAt: Date; updatedAt: Date; productId: string; quantity: number; customerId: string | null; expiresAt: Date; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperIntelligence: { getAgentAutonomy: { summary: "Per-shop autonomous execution thresholds and fine-tune cohort"; method: "GET"; path: "/api/v1/shopkeeper/intelligence/agent-autonomy"; responses: { 200: zod.ZodObject<{ settings: zod.ZodRecord; defaults: zod.ZodRecord; intentRouterCohort: zod.ZodEnum<["control", "experimental"]>; }, "strip", zod.ZodTypeAny, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; putAgentAutonomy: { summary: "Update autonomy settings (partial merge over defaults)"; method: "PUT"; body: zod.ZodRecord; path: "/api/v1/shopkeeper/intelligence/agent-autonomy"; responses: { 200: zod.ZodObject<{ settings: zod.ZodRecord; defaults: zod.ZodRecord; intentRouterCohort: zod.ZodEnum<["control", "experimental"]>; }, "strip", zod.ZodTypeAny, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }, { settings: Record; defaults: Record; intentRouterCohort: "control" | "experimental"; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getWeeklyPlanLatest: { summary: "Most recent weekly operational plan"; method: "GET"; path: "/api/v1/shopkeeper/intelligence/weekly-plan/latest"; responses: { 200: zod.ZodObject<{ plan: zod.ZodNullable; title: zod.ZodString; detail: zod.ZodString; itemStatus: zod.ZodEnum<["pending", "approved", "rejected", "done"]>; payload: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }, { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }>, "many">; summaryText: zod.ZodNullable; deliveredAt: zod.ZodNullable; approvedAt: zod.ZodNullable; createdAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; }, { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; }>>; }, "strip", zod.ZodTypeAny, { plan: { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; } | null; }, { plan: { status: string; id: string; createdAt: Date; items: { id: string; category: "restock" | "credit_followup" | "pricing_review" | "expiry"; title: string; detail: string; itemStatus: "approved" | "pending" | "rejected" | "done"; payload?: Record | undefined; }[]; weekKey: string; summaryText: string | null; deliveredAt: Date | null; approvedAt: Date | null; } | null; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; setWeeklyPlanStatus: { pathParams: zod.ZodObject<{ planId: zod.ZodString; }, "strip", zod.ZodTypeAny, { planId: string; }, { planId: string; }>; summary: "Approve or reject a weekly plan"; method: "POST"; body: zod.ZodObject<{ status: zod.ZodEnum<["approved", "rejected", "partial"]>; }, "strip", zod.ZodTypeAny, { status: "approved" | "rejected" | "partial"; }, { status: "approved" | "rejected" | "partial"; }>; path: "/api/v1/shopkeeper/intelligence/weekly-plan/:planId/status"; responses: { 200: zod.ZodObject<{ updated: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { updated: boolean; }, { updated: boolean; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; updateWeeklyPlanItem: { pathParams: zod.ZodObject<{ planId: zod.ZodString; itemId: zod.ZodString; }, "strip", zod.ZodTypeAny, { planId: string; itemId: string; }, { planId: string; itemId: string; }>; summary: "Update a single weekly plan line item"; method: "PATCH"; body: zod.ZodObject<{ itemStatus: zod.ZodEnum<["approved", "rejected", "done"]>; }, "strip", zod.ZodTypeAny, { itemStatus: "approved" | "rejected" | "done"; }, { itemStatus: "approved" | "rejected" | "done"; }>; path: "/api/v1/shopkeeper/intelligence/weekly-plan/:planId/items/:itemId"; responses: { 200: zod.ZodObject<{ ok: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { ok: boolean; }, { ok: boolean; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperSettings: { getAlertPreferences: { summary: "Get owner alert push and digest preferences"; method: "GET"; path: "/api/v1/shopkeeper/settings/alert-preferences"; responses: { 200: zod.ZodObject<{ preferences: zod.ZodObject<{ lowStockPush: zod.ZodBoolean; marginAlertPush: zod.ZodBoolean; creditOverduePush: zod.ZodBoolean; dailyDigestEnabled: zod.ZodBoolean; digestHourLocal: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; defaults: zod.ZodObject<{ lowStockPush: zod.ZodBoolean; marginAlertPush: zod.ZodBoolean; creditOverduePush: zod.ZodBoolean; dailyDigestEnabled: zod.ZodBoolean; digestHourLocal: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; }, "strip", zod.ZodTypeAny, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; patchAlertPreferences: { summary: "Update alert push and digest preferences (partial merge)"; method: "PATCH"; body: zod.ZodObject<{ lowStockPush: zod.ZodOptional; marginAlertPush: zod.ZodOptional; creditOverduePush: zod.ZodOptional; dailyDigestEnabled: zod.ZodOptional; digestHourLocal: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }, { lowStockPush?: boolean | undefined; marginAlertPush?: boolean | undefined; creditOverduePush?: boolean | undefined; dailyDigestEnabled?: boolean | undefined; digestHourLocal?: number | undefined; }>; path: "/api/v1/shopkeeper/settings/alert-preferences"; responses: { 200: zod.ZodObject<{ preferences: zod.ZodObject<{ lowStockPush: zod.ZodBoolean; marginAlertPush: zod.ZodBoolean; creditOverduePush: zod.ZodBoolean; dailyDigestEnabled: zod.ZodBoolean; digestHourLocal: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; defaults: zod.ZodObject<{ lowStockPush: zod.ZodBoolean; marginAlertPush: zod.ZodBoolean; creditOverduePush: zod.ZodBoolean; dailyDigestEnabled: zod.ZodBoolean; digestHourLocal: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }, { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }>; }, "strip", zod.ZodTypeAny, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }, { defaults: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; preferences: { lowStockPush: boolean; marginAlertPush: boolean; creditOverduePush: boolean; dailyDigestEnabled: boolean; digestHourLocal: number; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; storefront: { getMarket: { query: zod.ZodObject<{ city: zod.ZodOptional; market: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>; summary: "Public marketplace home: featured shops and categories"; method: "GET"; path: "/api/v1/storefront/market"; responses: { 200: zod.ZodObject<{ featuredShops: zod.ZodArray; city: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; productCount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }>, "many">; categories: zod.ZodArray; city: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }, { featuredShops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; }[]; categories: string[]; city?: string | undefined; }>; }; }; listShops: { query: zod.ZodObject<{ city: zod.ZodOptional; market: zod.ZodOptional; category: zod.ZodOptional; limit: zod.ZodDefault; offset: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { limit: number; offset: number; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { market?: string | undefined; city?: string | undefined; category?: string | undefined; limit?: number | undefined; offset?: number | undefined; }>; summary: "Public shop directory with location and category filters"; method: "GET"; path: "/api/v1/storefront/shops"; responses: { 200: zod.ZodObject<{ shops: zod.ZodArray; city: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; categoryTags: zod.ZodArray; productCount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }>, "many">; total: zod.ZodNumber; limit: zod.ZodNumber; offset: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }, { shops: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; slug: string; productCount: number; categoryTags: string[]; }[]; limit: number; total: number; offset: number; }>; }; }; searchMarket: { query: zod.ZodObject<{ q: zod.ZodString; city: zod.ZodOptional; market: zod.ZodOptional; category: zod.ZodOptional; inStockOnly: zod.ZodDefault]>, boolean, boolean | "0" | "1" | "true" | "false">>; }, "strip", zod.ZodTypeAny, { q: string; inStockOnly: boolean; market?: string | undefined; city?: string | undefined; category?: string | undefined; }, { q: string; market?: string | undefined; city?: string | undefined; category?: string | undefined; inStockOnly?: boolean | "0" | "1" | "true" | "false" | undefined; }>; summary: "Cross-shop product search grouped by merchant"; method: "GET"; path: "/api/v1/storefront/market/search"; responses: { 200: zod.ZodObject<{ results: zod.ZodArray; city: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { market?: string | undefined; city?: string | undefined; }, { market?: string | undefined; city?: string | undefined; }>>; products: zod.ZodArray; currentStock: zod.ZodNumber; unit: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }, { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }>, "many">; }, "strip", zod.ZodTypeAny, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }, { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }>, "many">; }, "strip", zod.ZodTypeAny, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }, { results: { shopName: string; location: { market?: string | undefined; city?: string | undefined; } | null; products: { id: string; name: string; unit: string | null; currentStock: number; sellingPrice: number | null; }[]; slug: string; }[]; }>; }; }; getShopBySlug: { pathParams: zod.ZodObject<{ slug: zod.ZodString; }, "strip", zod.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Public storefront: shop profile and active catalog"; method: "GET"; path: "/api/v1/storefront/shops/:slug"; responses: { 200: zod.ZodObject<{ shop: zod.ZodObject<{ slug: zod.ZodString; shopName: zod.ZodString; currency: zod.ZodString; acceptsPaystack: zod.ZodBoolean; acceptsDirectTransfer: zod.ZodBoolean; paymentInstructions: zod.ZodNullable; location: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; }, "strip", zod.ZodTypeAny, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }, { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }>; products: zod.ZodArray; iconPhotoUrl: zod.ZodNullable; category: zod.ZodNullable; unit: zod.ZodNullable; currentStock: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }, { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }>, "many">; }, "strip", zod.ZodTypeAny, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }, { shop: { shopName: string; currency: string; location: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; slug: string; acceptsPaystack: boolean; acceptsDirectTransfer: boolean; paymentInstructions: string | null; }; products: { id: string; name: string; category: string | null; unit: string | null; currentStock: number; sellingPrice: number | null; iconPhotoUrl: string | null; }[]; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; checkout: { pathParams: zod.ZodObject<{ slug: zod.ZodString; }, "strip", zod.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Create pending online order and initialize Paystack (split to shop subaccount)"; method: "POST"; body: zod.ZodObject<{ items: zod.ZodArray, "many">; buyerEmail: zod.ZodString; buyerPhone: zod.ZodString; buyerName: zod.ZodOptional; paymentMethod: zod.ZodDefault>; paymentPath: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { paymentMethod: "paystack" | "direct_transfer"; buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentPath: "reserve" | "pay_now"; buyerName?: string | undefined; }, { buyerEmail: string; buyerPhone: string; items: { productId: string; quantity: number; }[]; paymentMethod?: "paystack" | "direct_transfer" | undefined; buyerName?: string | undefined; paymentPath?: "reserve" | "pay_now" | undefined; }>; path: "/api/v1/storefront/shops/:slug/checkout"; responses: { 200: zod.ZodObject<{ checkoutType: zod.ZodEnum<["paystack_redirect", "manual_transfer", "reserved"]>; paymentUrl: zod.ZodOptional; reference: zod.ZodOptional; orderId: zod.ZodString; instructions: zod.ZodOptional; trackingUrl: zod.ZodString; }, "strip", zod.ZodTypeAny, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }, { trackingUrl: string; checkoutType: "reserved" | "paystack_redirect" | "manual_transfer"; orderId: string; paymentUrl?: string | undefined; reference?: string | undefined; instructions?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getOrderById: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; query: zod.ZodObject<{ token: zod.ZodString; }, "strip", zod.ZodTypeAny, { token: string; }, { token: string; }>; summary: "Public order tracking (token-gated)"; method: "GET"; path: "/api/v1/storefront/orders/:id"; responses: { 200: zod.ZodObject<{ id: zod.ZodString; shopName: zod.ZodString; status: zod.ZodEnum<["pending_payment", "awaiting_manual_payment", "paid", "reserved", "ready_for_pickup", "collected", "cancelled", "failed", "expired"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; items: zod.ZodArray, "many">; pickupLocation: zod.ZodNullable; lng: zod.ZodOptional; address: zod.ZodOptional; market: zod.ZodOptional; city: zod.ZodOptional; state: zod.ZodOptional; pickupHours: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }, { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; }>>; timeline: zod.ZodArray, "many">; createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }, { status: "paid" | "reserved" | "collected" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "ready_for_pickup" | "failed" | "expired"; shopName: string; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; items: { quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; pickupLocation: { lat?: number | undefined; lng?: number | undefined; address?: string | undefined; market?: string | undefined; city?: string | undefined; state?: string | undefined; pickupHours?: string | undefined; } | null; timeline: { label: string; completed: boolean; key: string; current: boolean; }[]; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyPayment: { pathParams: zod.ZodObject<{ slug: zod.ZodString; }, "strip", zod.ZodTypeAny, { slug: string; }, { slug: string; }>; summary: "Verify Paystack payment after redirect (fulfills order idempotently)"; method: "POST"; body: zod.ZodObject<{ reference: zod.ZodString; }, "strip", zod.ZodTypeAny, { reference: string; }, { reference: string; }>; path: "/api/v1/storefront/shops/:slug/verify-payment"; responses: { 200: zod.ZodObject<{ verified: zod.ZodBoolean; orderId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { verified: boolean; orderId?: string | undefined; }, { verified: boolean; orderId?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; storefrontWebhookPaystack: { summary: "Paystack webhook for storefront orders"; method: "POST"; body: zod.ZodObject<{ event: zod.ZodOptional; data: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">>>; }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{ event: zod.ZodOptional; data: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">>>; }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{ event: zod.ZodOptional; data: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, "passthrough", zod.ZodTypeAny, zod.objectOutputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">, zod.objectInputType<{ reference: zod.ZodOptional; status: zod.ZodOptional; amount: zod.ZodOptional; }, zod.ZodTypeAny, "passthrough">>>; }, zod.ZodTypeAny, "passthrough">>; path: "/api/v1/storefront/webhook/paystack"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperPayments: { listPaymentConnections: { summary: "List merchant payment provider connections"; method: "GET"; path: "/api/v1/shopkeeper/payment-connections"; responses: { 200: zod.ZodObject<{ connections: zod.ZodArray; status: zod.ZodEnum<["active", "inactive", "pending"]>; capabilities: zod.ZodObject<{ qr: zod.ZodOptional; link: zod.ZodOptional; transfer: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }>; merchantId: zod.ZodNullable; isDefault: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }>, "many">; }, "strip", zod.ZodTypeAny, { connections: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }[]; }, { connections: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; upsertPaymentConnection: { summary: "Connect or update a payment provider for this shop"; method: "POST"; body: zod.ZodObject<{ provider: zod.ZodEnum<["paystack", "opay"]>; credentials: zod.ZodObject<{ merchantId: zod.ZodOptional; subaccountCode: zod.ZodOptional; publicKey: zod.ZodOptional; secretKey: zod.ZodOptional; apiKey: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }, { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }>; isDefault: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }, { provider: "opay" | "paystack"; credentials: { merchantId?: string | undefined; subaccountCode?: string | undefined; publicKey?: string | undefined; secretKey?: string | undefined; apiKey?: string | undefined; }; isDefault?: boolean | undefined; }>; path: "/api/v1/shopkeeper/payment-connections"; responses: { 200: zod.ZodObject<{ connection: zod.ZodObject<{ id: zod.ZodString; provider: zod.ZodEnum<["paystack", "opay"]>; status: zod.ZodEnum<["active", "inactive", "pending"]>; capabilities: zod.ZodObject<{ qr: zod.ZodOptional; link: zod.ZodOptional; transfer: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }, { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }>; merchantId: zod.ZodNullable; isDefault: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }, { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }>; }, "strip", zod.ZodTypeAny, { connection: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }; }, { connection: { status: "active" | "pending" | "inactive"; id: string; createdAt: Date; updatedAt: Date; provider: "opay" | "paystack"; capabilities: { link?: boolean | undefined; transfer?: boolean | undefined; qr?: boolean | undefined; }; merchantId: string | null; isDefault: boolean; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; deletePaymentConnection: { pathParams: zod.ZodObject<{ provider: zod.ZodEnum<["paystack", "opay"]>; }, "strip", zod.ZodTypeAny, { provider: "opay" | "paystack"; }, { provider: "opay" | "paystack"; }>; summary: "Remove a payment provider connection"; method: "DELETE"; path: "/api/v1/shopkeeper/payment-connections/:provider"; responses: { 200: zod.ZodObject<{ deleted: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { deleted: boolean; }, { deleted: boolean; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createOrder: { summary: "Create a commerce order from cart items"; method: "POST"; body: zod.ZodObject<{ items: zod.ZodArray, "many">; channel: zod.ZodDefault>; buyerEmail: zod.ZodOptional; buyerPhone: zod.ZodOptional; buyerName: zod.ZodOptional; customerId: zod.ZodOptional; notes: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; items: { productId: string; quantity: number; }[]; customerId?: string | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }, { items: { productId: string; quantity: number; }[]; customerId?: string | undefined; channel?: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk" | undefined; notes?: string | undefined; buyerEmail?: string | undefined; buyerPhone?: string | undefined; buyerName?: string | undefined; }>; path: "/api/v1/shopkeeper/orders"; responses: { 201: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", zod.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 409: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listOrders: { query: zod.ZodObject<{ status: zod.ZodOptional>; limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { status?: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment" | undefined; limit?: number | undefined; }, { status?: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment" | undefined; limit?: number | undefined; }>; summary: "List shop orders"; method: "GET"; path: "/api/v1/shopkeeper/orders"; responses: { 200: zod.ZodObject<{ orders: zod.ZodArray; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>, "many">; }, "strip", zod.ZodTypeAny, { orders: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }[]; }, { orders: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getOrder: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get order with payment attempts"; method: "GET"; path: "/api/v1/shopkeeper/orders/:id"; responses: { 200: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", zod.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; collectPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Generate payment link or QR for an order"; method: "POST"; body: zod.ZodObject<{ provider: zod.ZodOptional>; mode: zod.ZodDefault>; buyerEmail: zod.ZodOptional; expiryMinutes: zod.ZodDefault; }, "strip", zod.ZodTypeAny, { mode: "link" | "qr" | "auto"; expiryMinutes: number; buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; }, { buyerEmail?: string | undefined; provider?: "opay" | "paystack" | undefined; mode?: "link" | "qr" | "auto" | undefined; expiryMinutes?: number | undefined; }>; path: "/api/v1/shopkeeper/orders/:id/collect-payment"; responses: { 200: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; paymentUrl: zod.ZodOptional; qrPayload: zod.ZodOptional; reference: zod.ZodString; expiresAt: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { reference: string; order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; paymentUrl?: string | undefined; expiresAt?: Date | undefined; qrPayload?: string | undefined; }, { reference: string; order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; paymentUrl?: string | undefined; expiresAt?: Date | undefined; qrPayload?: string | undefined; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; verifyOrderPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Poll-verify order payment status"; method: "POST"; body: zod.ZodObject<{ reference: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { reference?: string | undefined; }, { reference?: string | undefined; }>; path: "/api/v1/shopkeeper/orders/:id/verify-payment"; responses: { 200: zod.ZodObject<{ verified: zod.ZodBoolean; order: zod.ZodOptional; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>>; }, "strip", zod.ZodTypeAny, { verified: boolean; order?: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; } | undefined; }, { verified: boolean; order?: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; } | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; cancelOrder: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Cancel a pending order"; method: "POST"; body: zod.ZodOptional>; path: "/api/v1/shopkeeper/orders/:id/cancel"; responses: { 200: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", zod.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveOrder: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve a customer-initiated order awaiting owner review"; method: "POST"; body: zod.ZodObject<{ paymentMode: zod.ZodDefault>; }, "strip", zod.ZodTypeAny, { paymentMode: "collect" | "cash_on_pickup"; }, { paymentMode?: "collect" | "cash_on_pickup" | undefined; }>; path: "/api/v1/shopkeeper/orders/:id/approve"; responses: { 200: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", zod.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; rejectOrder: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Reject a pending-approval order with reason"; method: "POST"; body: zod.ZodObject<{ reason: zod.ZodString; }, "strip", zod.ZodTypeAny, { reason: string; }, { reason: string; }>; path: "/api/v1/shopkeeper/orders/:id/reject"; responses: { 200: zod.ZodObject<{ order: zod.ZodObject<{ id: zod.ZodString; status: zod.ZodEnum<["pending_approval", "approved", "awaiting_fulfillment", "pending_payment", "awaiting_manual_payment", "paid", "cancelled", "failed", "expired"]>; channel: zod.ZodEnum<["litepos", "whatsapp", "storefront_web", "voice", "kiosk"]>; currency: zod.ZodString; totalAmount: zod.ZodNumber; buyerEmail: zod.ZodNullable; buyerPhone: zod.ZodNullable; buyerName: zod.ZodNullable; customerId: zod.ZodNullable; lineItems: zod.ZodArray, "many">; notes: zod.ZodNullable; payments: zod.ZodOptional, zod.ZodLiteral<"manual">]>; reference: zod.ZodString; amount: zod.ZodNumber; status: zod.ZodEnum<["pending", "paid", "failed", "expired", "cancelled"]>; paymentUrl: zod.ZodNullable; qrPayload: zod.ZodNullable; expiresAt: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }, { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }>, "many">>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }, { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }>; }, "strip", zod.ZodTypeAny, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }, { order: { status: "approved" | "paid" | "cancelled" | "pending_payment" | "awaiting_manual_payment" | "failed" | "expired" | "pending_approval" | "awaiting_fulfillment"; currency: string; id: string; createdAt: Date; updatedAt: Date; totalAmount: number; customerId: string | null; channel: "litepos" | "storefront_web" | "whatsapp" | "voice" | "kiosk"; notes: string | null; buyerEmail: string | null; buyerPhone: string | null; buyerName: string | null; lineItems: { productId: string; quantity: number; unitPrice: number; productName: string; lineTotal: number; }[]; payments?: { status: "paid" | "cancelled" | "failed" | "expired" | "pending"; id: string; createdAt: Date; updatedAt: Date; amount: number; paymentUrl: string | null; provider: "opay" | "paystack" | "manual"; reference: string; expiresAt: Date | null; qrPayload: string | null; }[] | undefined; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; paymentWebhook: { pathParams: zod.ZodObject<{ provider: zod.ZodEnum<["paystack", "opay"]>; }, "strip", zod.ZodTypeAny, { provider: "opay" | "paystack"; }, { provider: "opay" | "paystack"; }>; summary: "Unified payment provider webhook ingress"; method: "POST"; body: zod.ZodRecord; path: "/api/v1/shopkeeper/payments/webhook/:provider"; responses: { 200: zod.ZodObject<{ received: zod.ZodBoolean; }, "strip", zod.ZodTypeAny, { received: boolean; }, { received: boolean; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSuppliers: { summary: "List registered suppliers"; method: "GET"; path: "/api/v1/shopkeeper/suppliers"; responses: { 200: zod.ZodObject<{ suppliers: zod.ZodArray; email: zod.ZodNullable; bankDetails: zod.ZodNullable>; categories: zod.ZodNullable>; isActive: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }>, "many">; }, "strip", zod.ZodTypeAny, { suppliers: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }[]; }, { suppliers: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplier: { summary: "Register a supplier"; method: "POST"; body: zod.ZodObject<{ name: zod.ZodString; phone: zod.ZodOptional; email: zod.ZodOptional; bankDetails: zod.ZodOptional>; categories: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }, { name: string; phone?: string | undefined; email?: string | undefined; categories?: string[] | undefined; bankDetails?: Record | undefined; }>; path: "/api/v1/shopkeeper/suppliers"; responses: { 201: zod.ZodObject<{ supplier: zod.ZodObject<{ id: zod.ZodString; name: zod.ZodString; phone: zod.ZodNullable; email: zod.ZodNullable; bankDetails: zod.ZodNullable>; categories: zod.ZodNullable>; isActive: zod.ZodBoolean; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }, { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }>; }, "strip", zod.ZodTypeAny, { supplier: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }; }, { supplier: { phone: string | null; id: string; name: string; email: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; categories: string[] | null; bankDetails: Record | null; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSupplierInvoices: { query: zod.ZodObject<{ status: zod.ZodOptional>; supplierId: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { status?: "paid" | "cancelled" | "partial" | "open" | undefined; supplierId?: string | undefined; }, { status?: "paid" | "cancelled" | "partial" | "open" | undefined; supplierId?: string | undefined; }>; summary: "List supplier bills"; method: "GET"; path: "/api/v1/shopkeeper/supplier-invoices"; responses: { 200: zod.ZodObject<{ invoices: zod.ZodArray; dueDate: zod.ZodNullable; lineItems: zod.ZodNullable, "many">>; notes: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>, "many">; }, "strip", zod.ZodTypeAny, { invoices: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }[]; }, { invoices: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplierInvoice: { summary: "Create a supplier bill"; method: "POST"; body: zod.ZodObject<{ supplierId: zod.ZodString; amount: zod.ZodNumber; currency: zod.ZodDefault; dueDate: zod.ZodOptional; lineItems: zod.ZodOptional, "many">>; notes: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { currency: string; amount: number; supplierId: string; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }, { amount: number; supplierId: string; currency?: string | undefined; notes?: string | undefined; lineItems?: Record[] | undefined; dueDate?: Date | undefined; }>; path: "/api/v1/shopkeeper/supplier-invoices"; responses: { 201: zod.ZodObject<{ invoice: zod.ZodObject<{ id: zod.ZodString; supplierId: zod.ZodString; amount: zod.ZodNumber; amountPaid: zod.ZodNumber; remainingBalance: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: zod.ZodNullable; lineItems: zod.ZodNullable, "many">>; notes: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; }, "strip", zod.ZodTypeAny, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getSupplierInvoice: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Get supplier invoice with payment history"; method: "GET"; path: "/api/v1/shopkeeper/supplier-invoices/:id"; responses: { 200: zod.ZodObject<{ invoice: zod.ZodObject<{ id: zod.ZodString; supplierId: zod.ZodString; amount: zod.ZodNumber; amountPaid: zod.ZodNumber; remainingBalance: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["open", "partial", "paid", "cancelled"]>; dueDate: zod.ZodNullable; lineItems: zod.ZodNullable, "many">>; notes: zod.ZodNullable; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; } & { payments: zod.ZodArray; amount: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: zod.ZodNullable; provider: zod.ZodNullable>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>, "many">; }, "strip", zod.ZodTypeAny, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }, { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }>; }, "strip", zod.ZodTypeAny, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }, { invoice: { status: "paid" | "cancelled" | "partial" | "open"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; notes: string | null; payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; lineItems: Record[] | null; supplierId: string; amountPaid: number; remainingBalance: number; dueDate: Date | null; }; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; listSupplierPayments: { query: zod.ZodObject<{ status: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { status?: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing" | undefined; }, { status?: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing" | undefined; }>; summary: "List supplier payment requests"; method: "GET"; path: "/api/v1/shopkeeper/supplier-payments"; responses: { 200: zod.ZodObject<{ payments: zod.ZodArray; amount: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: zod.ZodNullable; provider: zod.ZodNullable>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>, "many">; }, "strip", zod.ZodTypeAny, { payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; }, { payments: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; createSupplierPayment: { summary: "Draft a supplier payment (requires owner approval)"; method: "POST"; body: zod.ZodObject<{ supplierId: zod.ZodString; invoiceId: zod.ZodOptional; amount: zod.ZodNumber; notes: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }, { amount: number; supplierId: string; notes?: string | undefined; invoiceId?: string | undefined; }>; path: "/api/v1/shopkeeper/supplier-payments"; responses: { 201: zod.ZodObject<{ payment: zod.ZodObject<{ id: zod.ZodString; supplierId: zod.ZodString; invoiceId: zod.ZodNullable; amount: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: zod.ZodNullable; provider: zod.ZodNullable>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", zod.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; confirmSupplierPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Mark supplier payment as paid manually (offline transfer)"; method: "POST"; body: zod.ZodObject<{ transferReference: zod.ZodOptional; notes: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { notes?: string | undefined; transferReference?: string | undefined; }, { notes?: string | undefined; transferReference?: string | undefined; }>; path: "/api/v1/shopkeeper/supplier-payments/:id/confirm"; responses: { 200: zod.ZodObject<{ payment: zod.ZodObject<{ id: zod.ZodString; supplierId: zod.ZodString; invoiceId: zod.ZodNullable; amount: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: zod.ZodNullable; provider: zod.ZodNullable>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", zod.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; approveSupplierPayment: { pathParams: zod.ZodObject<{ id: zod.ZodString; }, "strip", zod.ZodTypeAny, { id: string; }, { id: string; }>; summary: "Approve and initiate orchestrated supplier transfer"; method: "POST"; body: zod.ZodObject<{ confirm: zod.ZodLiteral; }, "strip", zod.ZodTypeAny, { confirm: true; }, { confirm: true; }>; path: "/api/v1/shopkeeper/supplier-payments/:id/approve"; responses: { 200: zod.ZodObject<{ payment: zod.ZodObject<{ id: zod.ZodString; supplierId: zod.ZodString; invoiceId: zod.ZodNullable; amount: zod.ZodNumber; currency: zod.ZodString; status: zod.ZodEnum<["pending_confirmation", "approved", "processing", "completed", "failed", "cancelled"]>; transferReference: zod.ZodNullable; provider: zod.ZodNullable>; } & { createdAt: zod.ZodDate; updatedAt: zod.ZodDate; }, "strip", zod.ZodTypeAny, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }, { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }>; }, "strip", zod.ZodTypeAny, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }, { payment: { status: "approved" | "cancelled" | "failed" | "completed" | "pending_confirmation" | "processing"; currency: string; id: string; createdAt: Date; updatedAt: Date; amount: number; provider: "opay" | "paystack" | null; supplierId: string; invoiceId: string | null; transferReference: string | null; }; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReconciliationSummary: { query: zod.ZodObject<{ date: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { date?: string | undefined; }, { date?: string | undefined; }>; summary: "Daily payment reconciliation summary"; method: "GET"; path: "/api/v1/shopkeeper/payments/reconciliation"; responses: { 200: zod.ZodObject<{ date: zod.ZodString; paidCount: zod.ZodNumber; pendingCount: zod.ZodNumber; expiredCount: zod.ZodNumber; paidTotal: zod.ZodNumber; pendingTotal: zod.ZodNumber; mismatchCount: zod.ZodNumber; byProvider: zod.ZodObject<{ paystack: zod.ZodObject<{ count: zod.ZodNumber; total: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; opay: zod.ZodObject<{ count: zod.ZodNumber; total: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; manual: zod.ZodObject<{ count: zod.ZodNumber; total: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { total: number; count: number; }, { total: number; count: number; }>; }, "strip", zod.ZodTypeAny, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }, { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }>; byChannel: zod.ZodRecord>; byPaymentMethod: zod.ZodRecord>; cashCreditTotals: zod.ZodObject<{ cashTotal: zod.ZodNumber; creditTotal: zod.ZodNumber; transferTotal: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { cashTotal: number; creditTotal: number; transferTotal: number; }, { cashTotal: number; creditTotal: number; transferTotal: number; }>; mismatches: zod.ZodArray; paymentId: zod.ZodOptional; issue: zod.ZodString; }, "strip", zod.ZodTypeAny, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; }, "strip", zod.ZodTypeAny, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; pendingCount: number; paidCount: number; expiredCount: number; paidTotal: number; pendingTotal: number; mismatchCount: number; byProvider: { opay: { total: number; count: number; }; paystack: { total: number; count: number; }; manual: { total: number; count: number; }; }; byChannel: Record; byPaymentMethod: Record; cashCreditTotals: { cashTotal: number; creditTotal: number; transferTotal: number; }; mismatches: { issue: string; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; getReconciliationMismatches: { query: zod.ZodObject<{ date: zod.ZodOptional; page: zod.ZodOptional; limit: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { date?: string | undefined; page?: number | undefined; limit?: number | undefined; }, { date?: string | undefined; page?: number | undefined; limit?: number | undefined; }>; summary: "Paginated payment reconciliation mismatches"; method: "GET"; path: "/api/v1/shopkeeper/payments/reconciliation/mismatches"; responses: { 200: zod.ZodObject<{ date: zod.ZodString; items: zod.ZodArray; paymentId: zod.ZodOptional; issue: zod.ZodString; amount: zod.ZodOptional; createdAt: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }, { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }>, "many">; page: zod.ZodNumber; limit: zod.ZodNumber; total: zod.ZodNumber; totalPages: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }, { date: string; page: number; limit: number; total: number; totalPages: number; items: { issue: string; createdAt?: Date | undefined; amount?: number | undefined; orderId?: string | undefined; paymentId?: string | undefined; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; shopkeeperGroupBuy: { listCampaigns: { query: zod.ZodObject<{ market: zod.ZodOptional; }, "strip", zod.ZodTypeAny, { market?: string | undefined; }, { market?: string | undefined; }>; summary: "List active group-buy campaigns for the shop market"; method: "GET"; path: "/api/v1/shopkeeper/group-buy/campaigns"; responses: { 200: zod.ZodObject<{ campaigns: zod.ZodArray; totalDemand: zod.ZodNumber; participantCount: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }, { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }>, "many">; }, "strip", zod.ZodTypeAny, { campaigns: { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }[]; }, { campaigns: { status: "active" | "cancelled" | "expired" | "threshold_met"; market: string; id: string; normalizedName: string; thresholdQty: number; deadline: Date; totalDemand: number; participantCount: number; }[]; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; optIn: { summary: "Opt into a group-buy campaign with a quantity"; method: "POST"; body: zod.ZodObject<{ campaignId: zod.ZodString; quantity: zod.ZodNumber; }, "strip", zod.ZodTypeAny, { quantity: number; campaignId: string; }, { quantity: number; campaignId: string; }>; path: "/api/v1/shopkeeper/group-buy/opt-in"; responses: { 200: zod.ZodObject<{ participantId: zod.ZodString; campaignId: zod.ZodString; quantity: zod.ZodNumber; status: zod.ZodEnum<["opted_in", "withdrawn", "confirmed"]>; }, "strip", zod.ZodTypeAny, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }, { status: "opted_in" | "withdrawn" | "confirmed"; quantity: number; campaignId: string; participantId: string; }>; 400: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; platformMarketIntelligence: { getDemand: { query: zod.ZodObject<{ city: zod.ZodString; market: zod.ZodString; category: zod.ZodOptional; from: zod.ZodString; to: zod.ZodString; }, "strip", zod.ZodTypeAny, { market: string; city: string; from: string; to: string; category?: string | undefined; }, { market: string; city: string; from: string; to: string; category?: string | undefined; }>; summary: "Anonymized aggregate demand signals for B2B partners"; method: "GET"; path: "/api/v1/platform/market-intelligence/demand"; responses: { 200: zod.ZodObject<{ city: zod.ZodString; market: zod.ZodString; category: zod.ZodNullable; from: zod.ZodString; to: zod.ZodString; products: zod.ZodArray; p75: zod.ZodNullable; }, "strip", zod.ZodTypeAny, { p25: number | null; p75: number | null; median: number; }, { p25: number | null; p75: number | null; median: number; }>>; sampleSizeBucket: zod.ZodEnum<["5-9", "10-24", "25-49", "50+"]>; }, "strip", zod.ZodTypeAny, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }, { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }>, "many">; }, "strip", zod.ZodTypeAny, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }, { market: string; city: string; category: string | null; products: { normalizedName: string; demandIndex: number; medianPriceBand: { p25: number | null; p75: number | null; median: number; } | null; sampleSizeBucket: "5-9" | "10-24" | "25-49" | "50+"; }[]; from: string; to: string; }>; 401: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 404: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; 429: zod.ZodObject<{ message: zod.ZodString; code: zod.ZodOptional; details: zod.ZodOptional>; }, "strip", zod.ZodTypeAny, { message: string; code?: string | undefined; details?: Record | undefined; }, { message: string; code?: string | undefined; details?: Record | undefined; }>; }; }; }; }; type ApiContract = typeof apiContract; export { type AddShopInput, type AnalyzeInvoiceResponse, type ApiContract, type CallLogQuery, type CallSession, type CallStatus, type ConfirmRestockInput, type CreateCreditPaymentInput, type CreateCustomerInput, type CreateProductInput, type CreateSaleInput, type CreateSubscriptionInput, type CreditHistoryEvent, type DailyReport, type DebtReminderChannel, type ErrorResponse, type GroupBuyCampaign, type IncomingWhatsapp, type InitiateCallInput, type Installer, type InsufficientTokensError, type InteractiveAction, type InvoiceLineItem, type LogFollowUpInput, type LogOnboardingInput, type MarketDemandProduct, type Onboarding, type OrderLineItem, type PaginationQuery, type PaginationResponse, type Payment, type PaymentConnection, type PaymentSplit, type PolicyTier, type PurchaseTokensInput, type RegisterInstallerInput, type RegisterOwnerAndShopInput, type RestoreBackupRequest, type RestoreBackupResponse, type SendCustomerReminderInput, type SendWhatsappInput, type Shop, type ShopAlertPreferences, type ShopCustomer, type ShopInsight, type ShopListItem, type ShopOrder, type ShopOwner, type ShopProduct, type ShopReservationDto, type ShopSale, type StockMovement, type StorefrontManualOrder, type StorefrontOrder, type Subscription, type SuccessResponse, type SyncChange, type SyncPullQuery, type SyncPullResponse, type SyncPullTable, type SyncPushRequest, type SyncPushResponse, type SyncSaleData, type TimestampFields, type TokenBundle, type TokenTransaction, type TradePreferredIntent, type UpdateCustomerInput, type UpdateProductInput, type UpdateShopInput, type UpdateStorefrontOrderStatusInput, type VerifyPaymentInput, type VerifyTokenPaymentInput, type VoiceAmbientExtractResponse, type VoiceBatchItem, type VoiceIntent, type VoiceParseResponse, type VoiceTranscribeResponse, type Wallet, type WhatsappMessage, type WhatsappMessageType, type WhatsappPairInput, addShopSchema, agentLanguageEnum, analyzeInvoiceResponseSchema, apiContract, approveOrderSchema, approveSupplierPaymentSchema, callDirectionEnum, callGatewayEnum, callLogQuerySchema, callSessionSchema, callStatusSchema, callTriggerReasonEnum, collectPaymentModeEnum, collectPaymentSchema, confirmRestockSchema, createCreditPaymentSchema, createCustomerSchema, createOrderSchema, createProductSchema, createSaleSchema, createSubscriptionSchema, createSupplierInvoiceSchema, createSupplierPaymentSchema, createSupplierSchema, creditHistoryEventSchema, creditHistoryEventTypeEnum, dailyReportSchema, debtReminderChannelEnum, deliveryStatusWebhookSchema, demandSampleSizeBucketEnum, deviceRoleEnum, errorResponseSchema, groupBuyCampaignSchema, groupBuyCampaignStatusEnum, groupBuyOptInResponseSchema, groupBuyOptInSchema, groupBuyParticipantStatusEnum, incomingWhatsappSchema, initiateCallSchema, inputMethodEnum, insightEngagementTypeEnum, insightTypeEnum, installerSchema, insufficientTokensErrorSchema, interactiveActionSchema, invoiceLineItemSchema, logFollowUpSchema, logOnboardingSchema, marketDemandProductSchema, marketDemandResponseSchema, movementTypeEnum, onboardingSchema, orderChannelEnum, orderLineItemSchema, orderPaymentStatusEnum, orderStatusEnum, paginationQuerySchema, paginationResponseSchema, paymentConnectionSchema, paymentMethodEnum, paymentProviderEnum, paymentSchema, paymentSplitSchema, paymentSplitsSchema, platformMarketIntelligenceContract, policyTierEnum, purchaseTokensSchema, reEngageCustomerResponseSchema, reEngageCustomerSchema, reconciliationMismatchSchema, reconciliationMismatchesResponseSchema, reconciliationSummarySchema, registerInstallerSchema, registerOwnerAndShopSchema, rejectOrderSchema, reservationSchema, restoreBackupRequestSchema, restoreBackupResponseSchema, saleTransactionTypeEnum, sendCustomerReminderResponseSchema, sendCustomerReminderSchema, sendWhatsappBodySchema, sendWhatsappSchema, sendWhatsappSimpleSchema, senderRoleEnum, shopAlertPreferencesSchema, shopCustomerSchema, shopInsightSchema, shopListItemSchema, shopLocationSchema, shopOnlineOrderStatusEnum, shopOrderPaymentSchema, shopOrderSchema, shopOwnerSchema, shopProductSchema, shopSaleSchema, shopSchema, shopStatusEnum, shopkeeperAnalyticsContract, shopkeeperAuditContract, shopkeeperBackupContract, shopkeeperBarcodesContract, shopkeeperBillingContract, shopkeeperContract, shopkeeperDeviceContract, shopkeeperGroupBuyContract, shopkeeperInsightsContract, shopkeeperInstallerContract, shopkeeperIntelligenceContract, shopkeeperMobileLlmContract, shopkeeperPaymentsContract, shopkeeperReportsContract, shopkeeperReservationsContract, shopkeeperSettingsContract, shopkeeperSyncContract, shopkeeperTelephonyContract, shopkeeperTradeAgentContract, shopkeeperVisionContract, shopkeeperVoiceContract, shopkeeperWalletContract, shopkeeperWhatsappContract, stockMovementSchema, storefrontCheckoutBodySchema, storefrontCheckoutLineSchema, storefrontCheckoutResponseSchema, storefrontContract, storefrontDirectoryQuerySchema, storefrontDirectoryShopSchema, storefrontFeaturedShopSchema, storefrontGetShopResponseSchema, storefrontListShopsResponseSchema, storefrontLocationSchema, storefrontManualOrderSchema, storefrontMarketQuerySchema, storefrontMarketResponseSchema, storefrontMarketSearchQuerySchema, storefrontMarketSearchResponseSchema, storefrontOrderSchema, storefrontOrderStatusFilterEnum, storefrontOrderTimelineStepSchema, storefrontPublicOrderLineSchema, storefrontPublicOrderSchema, storefrontPublicProductSchema, storefrontPublicShopSchema, storefrontSearchProductSchema, storefrontSearchShopGroupSchema, storefrontVerifyPaymentBodySchema, storefrontVerifyPaymentResponseSchema, subscriptionSchema, subscriptionTierEnum, successResponseSchema, supplierInvoiceDetailSchema, supplierInvoiceSchema, supplierPaymentSchema, supplierSchema, syncChangeSchema, syncPullQuerySchema, syncPullResponseSchema, syncPullTablesEnum, syncPushRequestSchema, syncPushResponseSchema, syncSaleDataSchema, timestampSchema, tokenBundleSchema, tokenFeatureEnum, tokenTransactionSchema, tokenTransactionTypeEnum, tradeAgentInputSchema, tradeAgentIntentOutputSchema, tradeAgentResponseSchema, tradeAgentSourceEnum, tradePreferredIntentSchema, updateCustomerSchema, updateProductSchema, updateShopAlertPreferencesSchema, updateShopSchema, updateStorefrontOrderStatusBodySchema, updateStorefrontOrderStatusResponseSchema, upsertPaymentConnectionSchema, verifyPaymentSchema, verifyTokenPaymentSchema, voiceAmbientExtractResponseSchema, voiceIntentSchema, voiceParseResponseSchema, voiceTranscribeResponseSchema, walletSchema, whatsappMessageSchema, whatsappMessageTypeEnum, whatsappPairSchema };