// ENUMS export enum ItemAction { View = "view", Detail = "detail", Impression = "impression", TopUp = "top_up", Cancel = "cancel", Update = "update", Remove = "remove", Add = "add", Select = "select", AddToFavorite = "add_favorite", RemoveFromFavorite = "remove_favorite", AddToReminder = "add_reminder", RemoveFromReminder = "remove_reminder", RemoveFromReminderAuto = "remove_reminder_auto", Other = "other", } export enum StockStatus { InStock = 'in_stock', LowStock = 'low_stock', OutOfStock = 'out_of_stock' } export enum ItemType { Blood = "blood", Oxygen = "oxygen", Drug = "drug", Facility = "facility", Grocery = "grocery", MedicalEquipment = "medical_equipment", Subscription = "subscription", Electronics = "electronics", Clothing = "clothing", Book = "book", Misc = "misc", ItemVerification = "item_verification", ItemReport = "item_report", Reward = "reward", Survey = "survey", Other = "other", } export enum CartAction { AddItem = "add_item", RemoveItem = "remove_item" } export enum ShopMode { Delivery = "delivery", Pickup = "pickup" } export enum CancelType { Cart = "cart", Order = "order", } export enum DeliveryAction { Delivered = "delivered", Dispatch = "dispatch", Schedule = "schedule", Update = "update" } export enum ScanChannel { App = "app", Ussd = "ussd" } export enum ScanType { Pin = "pin", QrCode = "qr_code" } export enum SubscriptionStatus { Active = "active", InActive = "inactive", Paused = "paused", Other = "other" } export enum SubscriptionType { PayAsYouSell = "pay_as_you_sell", PayAsYouGo = "pay_as_you_go", Other = "other" } export enum BloodComponent { Platelets = "Platelets", Cryoprecipitate = "Cryoprecipitate", WholeBlood = "Whole Blood", FreshFrozenPlasma = "Fresh Frozen Plasma", PackedRedBloodCells = "Packed Red Blood Cells", Other = "Other" } export enum BloodGroup { A_plus = "A+", A_minus = "A-", B_plus = "B+", B_minus = "B-", AB_plus = "AB+", AB_minus = "AB-", O_plus = "O+", O_minus = "O-", Unsure = "unsure" } // EVENT PROPERTIES export interface ItemProperties { action: ItemAction, item: ItemDetail, search_id?: string, meta?: any } export interface ItemDetail { id: string, type: ItemType, quantity: number, price: number, currency: CurrencyCode, discount?: number, stock_status?: StockStatus, promo_id?: string, facility_id?: string, subscription?: Subscription, meta?: BloodMetaModel | OxygenMetaModel | any } export interface Subscription { status: SubscriptionStatus, type: SubscriptionType, subscription_items: Array, } export interface BloodMetaModel { cross_matching: boolean, temperature_strips: boolean, extra_tests: boolean, reason: string } export interface OxygenMetaModel { order_type: string, reason: string } export interface CoordinatesObject { lat: number, lon: number } export interface DeliveryProperties { id: string, // delivery_id order_id: string, action: DeliveryAction, is_urgent: boolean, est_delivery_ts: number, delivery_coordinates?: CoordinatesObject, dispatch_coordinates?: CoordinatesObject, meta?: any } export interface CancelCheckoutProperties { id: string, type: CancelType, items: Array, reason: string, meta?: any } export interface ItemTypeModel { id: string, type: ItemType, facility_id?: string } export interface CartProperties { id: string; action: CartAction, item: ItemDetail, cart_price: number, currency: CurrencyCode, } export interface CheckoutProperties { id: string //order_id cart_id: string, is_successful: boolean cart_price: number, currency: CurrencyCode, shop_mode?: ShopMode, items: Array, } export interface StoreProperties { id: string lat: number, lon: number } export interface ReportProperties { id: string short_desc: string, remarks: string } export interface ItemReportProperties { item: ItemTypeModel store_info: StoreProperties, report_info: ReportProperties } export interface ItemRequestProperties { request_id: string, item_name: string manufacturer: string } export interface ItemInfoProperties { id: string type: ItemType batch_id: string survey_id: string reward_id: string is_featured: boolean production_date: number expiry_date: number } export interface ItemVerificationProperties { scan_channel: ScanChannel scan_type: ScanType is_successful: boolean item_info?: ItemInfoProperties } export interface ItemImpressionModel { item_properties: ItemDetail catalog_properties?: DrugProperties | BloodProperties | OxygenProperties | MedicalEquipmentProperties | FacilityProperties } // CATALOG OBJECTS export interface DrugProperties { market_id: string, name?: string, description?: string, supplier_id: string, supplier_name: string, producer?: string, packaging?: string, active_ingredients: Array, drug_form?: string, drug_strength?: string, atc_anatomical_group?: string, otc_or_ethical?: string } export interface GroceryProperties { name?: string, category?: string, market_id: string, description?: string, supplier_id: string, supplier_name: string, producer?: string, packaging?: string, packaging_size?: number, packaging_units?: string, active_ingredients: Array } export interface BloodProperties { market_id: string, blood_component: BloodComponent, blood_group: BloodGroup, packaging?: string, packaging_size?: number, packaging_units?: string, supplier_id?: string, supplier_name?: string } export interface OxygenProperties { market_id: string, packaging?: string, packaging_size?: number, packaging_units?: string, supplier_id?: string, supplier_name?: string } export interface MedicalEquipmentProperties { name: string, description?: string, market_id: string, supplier_id?: string, supplier_name?: string producer?: string, packaging?: string, packaging_size?: number, packaging_units?: string, category?: string } export interface FacilityProperties { name: string, type: string, country?: string, region_state?: string, city?: string is_active?: boolean, has_delivery?: boolean, is_sponsored?: boolean } export enum CurrencyCode { AED = "AED", AFN = "AFN", ALL = "ALL", AMD = "AMD", ANG = "ANG", AOA = "AOA", ARS = "ARS", AUD = "AUD", AWG = "AWG", AZN = "AZN", BAM = "BAM", BBD = "BBD", BDT = "BDT", BGN = "BGN", BHD = "BHD", BIF = "BIF", BMD = "BMD", BND = "BND", BOB = "BOB", BRL = "BRL", BSD = "BSD", BTN = "BTN", BWP = "BWP", BYR = "BYR", BZD = "BZD", CAD = "CAD", CDF = "CDF", CHF = "CHF", CLP = "CLP", CNY = "CNY", COP = "COP", CRC = "CRC", CUC = "CUC", CUP = "CUP", CVE = "CVE", CZK = "CZK", DJF = "DJF", DKK = "DKK", DOP = "DOP", DZD = "DZD", EGP = "EGP", ERN = "ERN", ETB = "ETB", EUR = "EUR", FJD = "FJD", FKP = "FKP", GBP = "GBP", GEL = "GEL", GGP = "GGP", GHS = "GHS", GIP = "GIP", GMD = "GMD", GNF = "GNF", GTQ = "GTQ", GYD = "GYD", HKD = "HKD", HNL = "HNL", HRK = "HRK", HTG = "HTG", HUF = "HUF", IDR = "IDR", ILS = "ILS", IMP = "IMP", INR = "INR", IQD = "IQD", IRR = "IRR", ISK = "ISK", JEP = "JEP", JMD = "JMD", JOD = "JOD", JPY = "JPY", KES = "KES", KGS = "KGS", KHR = "KHR", KMF = "KMF", KPW = "KPW", KRW = "KRW", KWD = "KWD", KYD = "KYD", KZT = "KZT", LAK = "LAK", LBP = "LBP", LKR = "LKR", LRD = "LRD", LSL = "LSL", LYD = "LYD", MAD = "MAD", MDL = "MDL", MGA = "MGA", MKD = "MKD", MMK = "MMK", MNT = "MNT", MOP = "MOP", MRO = "MRO", MUR = "MUR", MVR = "MVR", MWK = "MWK", MXN = "MXN", MYR = "MYR", MZN = "MZN", NAD = "NAD", NGN = "NGN", NIO = "NIO", NOK = "NOK", NPR = "NPR", NZD = "NZD", OMR = "OMR", PAB = "PAB", PEN = "PEN", PGK = "PGK", PHP = "PHP", PKR = "PKR", PLN = "PLN", PYG = "PYG", QAR = "QAR", RON = "RON", RSD = "RSD", RUB = "RUB", RWF = "RWF", SAR = "SAR", SBD = "SBD", SCR = "SCR", SDG = "SDG", SEK = "SEK", SGD = "SGD", SHP = "SHP", SLL = "SLL", SOS = "SOS", SPL = "SPL", SRD = "SRD", STD = "STD", SVC = "SVC", SYP = "SYP", SZL = "SZL", THB = "THB", TJS = "TJS", TMT = "TMT", TND = "TND", TOP = "TOP", TRY = "TRY", TTD = "TTD", TVD = "TVD", TWD = "TWD", TZS = "TZS", UAH = "UAH", UGX = "UGX", USD = "USD", UYU = "UYU", UZS = "UZS", VEF = "VEF", VND = "VND", VUV = "VUV", WST = "WST", XAF = "XAF", XCD = "XCD", XDR = "XDR", XOF = "XOF", XPF = "XPF", YER = "YER", ZAR = "ZAR", ZMW = "ZMW", ZWD = "ZWD" }