Spaces:
Configuration error
Configuration error
| [ | |
| { | |
| "widget_id": "wid_open_po_count_001", | |
| "type": "kpi", | |
| "title": "Open Purchase Orders", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Purchase orders that are active and awaiting delivery or confirmation", | |
| "drill_down_url": "/purchases/orders", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_open_po_count_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_po_aging_001", | |
| "type": "kpi", | |
| "title": "PO Aging", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Outstanding purchase orders grouped by how long they have been open", | |
| "drill_down_url": "/purchases/orders", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_po_aging_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_receipts_this_week_001", | |
| "type": "kpi", | |
| "title": "Receipts This Week", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Deliveries received from suppliers in the last 7 days", | |
| "drill_down_url": "/purchases/receipts", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_receipts_this_week_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_stock_ins_today_001", | |
| "type": "kpi", | |
| "title": "Stock-Ins Today", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Items added directly to inventory today without a purchase order", | |
| "drill_down_url": "/self-grn", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_stock_ins_today_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_stock_take_pending_001", | |
| "type": "kpi", | |
| "title": "Pending Stock Takes", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Inventory counts that have been started but not yet completed", | |
| "drill_down_url": "/inventory/stock-take", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_stock_take_pending_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_shipments_transit_001", | |
| "type": "kpi", | |
| "title": "Shipments In Transit", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Orders that have been dispatched and are on their way to customers", | |
| "drill_down_url": "/trade-sales/client-orders", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_shipments_transit_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_appointments_today_001", | |
| "type": "kpi", | |
| "title": "Appointments Today", | |
| "category": "operations", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "All appointments scheduled for today along with their current status", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_appointments_today_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_no_show_rate_001", | |
| "type": "kpi", | |
| "title": "No-Show Rate", | |
| "category": "operations", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Share of confirmed appointments where the customer did not show up", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_no_show_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_staff_utilization_001", | |
| "type": "kpi", | |
| "title": "Staff Utilization", | |
| "category": "operations", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How much of your team's available time is being filled with bookings", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_staff_utilization_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_service_mix_001", | |
| "type": "kpi", | |
| "title": "Service Mix", | |
| "category": "operations", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Revenue earned across different service categories", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_service_mix_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_low_stock_skus_001", | |
| "type": "kpi", | |
| "title": "Low Stock SKUs", | |
| "category": "inventory", | |
| "unit": "count", | |
| "scope": [ | |
| "chain", | |
| "retail" | |
| ], | |
| "description": "Products running low or completely out of stock and needing replenishment", | |
| "drill_down_url": "/inventory/stock-overview", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_low_stock_skus_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_net_stock_value_001", | |
| "type": "kpi", | |
| "title": "Net Stock Value", | |
| "category": "inventory", | |
| "unit": "INR", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Total worth of all products currently held in inventory", | |
| "drill_down_url": "/inventory/stock-overview", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_net_stock_value_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_adjustments_mtd_001", | |
| "type": "kpi", | |
| "title": "Adjustments This Month", | |
| "category": "inventory", | |
| "unit": "count", | |
| "scope": [ | |
| "chain" | |
| ], | |
| "description": "Inventory corrections made this month to align stock records with actuals", | |
| "drill_down_url": "/inventory/adjustments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_adjustments_mtd_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_invoices_mtd_001", | |
| "type": "kpi", | |
| "title": "Invoices MTD", | |
| "category": "financial", | |
| "unit": "count", | |
| "scope": [ | |
| "company", | |
| "chain" | |
| ], | |
| "description": "Invoices raised to customers or trade partners this month", | |
| "drill_down_url": "/trade-sales/invoices", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_invoices_mtd_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_credit_debit_notes_mtd_001", | |
| "type": "kpi", | |
| "title": "Credit / Debit Notes MTD", | |
| "category": "financial", | |
| "unit": "INR", | |
| "scope": [ | |
| "company", | |
| "chain" | |
| ], | |
| "description": "Total value of billing adjustments issued to customers this month", | |
| "drill_down_url": "/trade-sales/credit-debit-notes", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_credit_debit_notes_mtd_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_pos_sales_today_001", | |
| "type": "kpi", | |
| "title": "POS Sales Today", | |
| "category": "sales", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Total revenue and number of sales completed at the counter today", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_pos_sales_today_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_avg_basket_size_001", | |
| "type": "kpi", | |
| "title": "Average Basket Size", | |
| "category": "sales", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Average amount spent per customer visit during the period", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_avg_basket_size_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_avg_ticket_value_001", | |
| "type": "kpi", | |
| "title": "Average Ticket Value", | |
| "category": "sales", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Average sale value across all completed transactions in the period", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_avg_ticket_value_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_discount_rate_001", | |
| "type": "kpi", | |
| "title": "Discount Rate", | |
| "category": "sales", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Proportion of revenue given away as discounts", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_discount_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_refund_rate_001", | |
| "type": "kpi", | |
| "title": "Refund Rate", | |
| "category": "sales", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Proportion of revenue returned to customers as refunds", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_refund_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_customer_growth_001", | |
| "type": "kpi", | |
| "title": "Customer Growth", | |
| "category": "customers", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "New customers who visited or made a purchase during the period", | |
| "drill_down_url": "/retail/customers", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_customer_growth_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_repeat_customer_rate_001", | |
| "type": "kpi", | |
| "title": "Repeat Customer Rate", | |
| "category": "customers", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Share of customers who have come back for more than one purchase", | |
| "drill_down_url": "/retail/customers", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_repeat_customer_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_service_catalogue_coverage_001", | |
| "type": "kpi", | |
| "title": "Service Catalogue Coverage", | |
| "category": "catalogue", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Active services available for booking and items with incomplete details", | |
| "drill_down_url": "/retail/catalogue", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_service_catalogue_coverage_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_bookings_today_001", | |
| "type": "kpi", | |
| "title": "SPA Bookings Today", | |
| "category": "spa_bookings", | |
| "unit": "count", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Number of spa appointments and expected revenue for today", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_bookings_today_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_bookings_week_001", | |
| "type": "kpi", | |
| "title": "SPA Bookings This Week", | |
| "category": "spa_bookings", | |
| "unit": "count", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Number of spa appointments and revenue generated over the last 7 days", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_bookings_week_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_occupancy_rate_001", | |
| "type": "kpi", | |
| "title": "SPA Occupancy Rate", | |
| "category": "spa_bookings", | |
| "unit": "%", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "How full your spa schedule is relative to total available appointment slots", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_occupancy_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_cancellation_rate_001", | |
| "type": "kpi", | |
| "title": "Cancellation Rate", | |
| "category": "spa_bookings", | |
| "unit": "%", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Share of bookings that were cancelled out of all bookings in the period", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_cancellation_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_reschedule_rate_001", | |
| "type": "kpi", | |
| "title": "Reschedule Rate", | |
| "category": "spa_bookings", | |
| "unit": "%", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Share of bookings that were moved to a different time in the period", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_reschedule_rate_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_top_services_001", | |
| "type": "kpi", | |
| "title": "Top Services", | |
| "category": "spa_bookings", | |
| "unit": "INR", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Your 5 most popular services ranked by bookings and revenue earned", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_top_services_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_spa_top_staff_001", | |
| "type": "kpi", | |
| "title": "Top Staff", | |
| "category": "spa_bookings", | |
| "unit": "count", | |
| "scope": [ | |
| "company", | |
| "retail" | |
| ], | |
| "description": "Your 5 highest-performing team members by bookings and revenue", | |
| "drill_down_url": "/spa/bookings", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_spa_top_staff_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_active_trade_relationships_001", | |
| "type": "kpi", | |
| "title": "Active Trade Relationships", | |
| "category": "trade_network", | |
| "unit": "count", | |
| "scope": [ | |
| "company" | |
| ], | |
| "description": "Business partnerships that are currently active versus those on hold or expired", | |
| "drill_down_url": "/trade-network/relationships", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_active_trade_relationships_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_new_partners_added_001", | |
| "type": "kpi", | |
| "title": "New Partners Added", | |
| "category": "trade_network", | |
| "unit": "count", | |
| "scope": [ | |
| "company" | |
| ], | |
| "description": "New suppliers or distributors brought on board during the period", | |
| "drill_down_url": "/trade-network/partners", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_new_partners_added_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_warehouse_throughput_001", | |
| "type": "kpi", | |
| "title": "Warehouse Throughput", | |
| "category": "trade_network", | |
| "unit": "count/day", | |
| "scope": [ | |
| "company", | |
| "chain" | |
| ], | |
| "description": "Average number of goods received and dispatched per day in the period", | |
| "drill_down_url": "/trade-network/warehouses", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_warehouse_throughput_001", | |
| "period_window": "mtd", | |
| "unit": "count/day" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_partner_performance_001", | |
| "type": "kpi", | |
| "title": "Partner Performance", | |
| "category": "trade_network", | |
| "unit": "%", | |
| "scope": [ | |
| "company" | |
| ], | |
| "description": "Top 5 suppliers ranked by how reliably they fulfilled your orders", | |
| "drill_down_url": "/trade-network/partners", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_partner_performance_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_revenue_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Revenue Over Time", | |
| "category": "sales_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How your sales revenue has moved day by day or week by week", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_revenue_trend_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_txn_volume_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Transaction Volume Trend", | |
| "category": "sales_charts", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How the number of sales transactions has changed over the period", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_txn_volume_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_discount_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Discount Trend", | |
| "category": "sales_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How your daily discount levels have trended relative to total sales", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_discount_trend_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_refund_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Refund Trend", | |
| "category": "sales_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How your daily refund levels have trended relative to total sales", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_refund_trend_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_gross_margin_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Gross Margin Trend", | |
| "category": "sales_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How much profit you are making after costs, tracked day by day", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_gross_margin_trend_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_sales_channel_mix_001", | |
| "type": "chart", | |
| "chart_type": "bar", | |
| "title": "Payment Channel Mix", | |
| "category": "sales_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Revenue split by how customers paid \u2014 cash, card, wallet, and more", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_sales_channel_mix_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_appt_volume_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Appointment Volume Trend", | |
| "category": "operations_charts", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How the number of appointments has changed from day to day", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_appt_volume_trend_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_appt_noshow_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "No-Show Trend", | |
| "category": "operations_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How your daily no-show rate has changed over the period", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_appt_noshow_trend_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_appt_cancellation_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Cancellation Trend", | |
| "category": "operations_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How your daily cancellation rate has changed over the period", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_appt_cancellation_trend_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_staff_utilization_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "Staff Utilization Trend", | |
| "category": "staff_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How well your team's time has been filled with bookings over the period", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_staff_utilization_trend_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_staff_performance_001", | |
| "type": "chart", | |
| "chart_type": "bar", | |
| "title": "Staff Performance", | |
| "category": "staff_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Revenue and bookings generated by each team member in the period", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_staff_performance_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_customers_acquisition_trend_001", | |
| "type": "chart", | |
| "chart_type": "line", | |
| "title": "New Customer Acquisition Trend", | |
| "category": "customers_charts", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How many new customers you have been gaining each day", | |
| "drill_down_url": "/retail/customers", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_customers_acquisition_trend_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_customers_repeat_vs_new_001", | |
| "type": "chart", | |
| "chart_type": "stacked_bar", | |
| "title": "Repeat vs New Customer Ratio", | |
| "category": "customers_charts", | |
| "unit": "%", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Daily breakdown of returning customers versus first-time visitors", | |
| "drill_down_url": "/retail/customers", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_customers_repeat_vs_new_001", | |
| "period_window": "mtd", | |
| "unit": "%" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_catalogue_service_revenue_dist_001", | |
| "type": "chart", | |
| "chart_type": "bar", | |
| "title": "Service Revenue Distribution", | |
| "category": "catalogue_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "How revenue is spread across your different service categories", | |
| "drill_down_url": "/retail/catalogue", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_catalogue_service_revenue_dist_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_chart_catalogue_top_services_001", | |
| "type": "chart", | |
| "chart_type": "bar", | |
| "title": "Top Services by Revenue", | |
| "category": "catalogue_charts", | |
| "unit": "INR", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Your 10 best-selling services ranked by revenue in the period", | |
| "drill_down_url": "/retail/catalogue", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_chart_catalogue_top_services_001", | |
| "period_window": "mtd", | |
| "unit": "INR" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_sales_recent_txns_001", | |
| "type": "table", | |
| "title": "Recent Transactions", | |
| "category": "sales_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Latest completed sales showing customer, amount, and payment status", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_sales_recent_txns_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_sales_refunds_cancellations_001", | |
| "type": "table", | |
| "title": "Refunded & Cancelled Sales", | |
| "category": "sales_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Sales that were refunded or cancelled, showing original and returned amounts", | |
| "drill_down_url": "/retail/pos", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_sales_refunds_cancellations_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_appt_queue_today_001", | |
| "type": "table", | |
| "title": "Today's Appointment Queue", | |
| "category": "operations_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "All appointments for today sorted by start time, including walk-ins", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_appt_queue_today_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_appt_upcoming_001", | |
| "type": "table", | |
| "title": "Upcoming Appointments", | |
| "category": "operations_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Confirmed appointments over the next 7 days with service and staff details", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_appt_upcoming_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_customers_top_001", | |
| "type": "table", | |
| "title": "Top Customers", | |
| "category": "customers_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Your highest-spending customers with total visits and last visit date", | |
| "drill_down_url": "/retail/customers", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_customers_top_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_catalogue_incomplete_001", | |
| "type": "table", | |
| "title": "Incomplete Catalogue Items", | |
| "category": "catalogue_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Services that are missing a price, duration, or category and need attention", | |
| "drill_down_url": "/retail/catalogue", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_catalogue_incomplete_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| }, | |
| { | |
| "widget_id": "wid_tbl_staff_no_bookings_001", | |
| "type": "table", | |
| "title": "Staff with No Bookings", | |
| "category": "staff_tables", | |
| "unit": "count", | |
| "scope": [ | |
| "retail" | |
| ], | |
| "description": "Team members who have not had any appointments in the selected period", | |
| "drill_down_url": "/retail/appointments", | |
| "data_config": { | |
| "source": "merchant_kpi_stats", | |
| "params": { | |
| "widget": "wid_tbl_staff_no_bookings_001", | |
| "period_window": "mtd", | |
| "unit": "count" | |
| } | |
| } | |
| } | |
| ] |