// data.jsx — products, scent families, orders, customers const SCENT_FAMILIES = [ { id: 'oud', ar: 'العود', en: 'Oud', desc_ar: 'دخان، خشب أسود، عمق ليلي', desc_en: 'Smoke, blackwood, nocturnal depth', tone: '#3D2A1E', notes_ar: ['عود هندي', 'صندل', 'جلد', 'دخان'], notes_en: ['Indian agarwood', 'Sandalwood', 'Leather', 'Smoke'] }, { id: 'rose', ar: 'الورد', en: 'Rose', desc_ar: 'وردة طازجة، عسل، شفافية', desc_en: 'Fresh petals, honeyed, luminous', tone: '#B85563', notes_ar: ['ورد طائفي', 'فاوانيا', 'عسل', 'مسك'], notes_en: ['Taif rose', 'Peony', 'Honey', 'Musk'] }, { id: 'amber', ar: 'العنبر', en: 'Amber', desc_ar: 'راتنج، فانيليا، دفء معدني', desc_en: 'Resin, vanilla, mineral warmth', tone: '#C97B5E', notes_ar: ['عنبر رمادي', 'لبدنوم', 'بنزوين', 'كهرمان'], notes_en: ['Ambergris', 'Labdanum', 'Benzoin', 'Amber'] }, { id: 'musk', ar: 'المسك', en: 'Musk', desc_ar: 'جلدي، حليبي، حسي', desc_en: 'Skin, milky, sensual', tone: '#D9C7A8', notes_ar: ['مسك أبيض', 'إيريس', 'كشمير', 'حليب لوز'], notes_en: ['White musk', 'Iris', 'Cashmere', 'Almond milk'] }, { id: 'spice', ar: 'البهارات', en: 'Spice', desc_ar: 'كاردمم، فلفل، زنجبيل هندي', desc_en: 'Cardamom, pepper, Indian ginger', tone: '#8C4A2B', notes_ar: ['هيل', 'قرنفل', 'زعفران', 'فلفل وردي'], notes_en: ['Cardamom', 'Clove', 'Saffron', 'Pink pepper'] }, { id: 'flora', ar: 'الزهور', en: 'Floral', desc_ar: 'ياسمين، توبروز، فل', desc_en: 'Jasmine, tuberose, mogra', tone: '#9B8FB5', notes_ar: ['ياسمين سامباك', 'فل', 'تشامبا', 'توبروز'], notes_en: ['Jasmine sambac', 'Mogra', 'Champa', 'Tuberose'] }, { id: 'woody', ar: 'الأخشاب', en: 'Woody', desc_ar: 'صندل، خشب الأرز، فيتيفر', desc_en: 'Sandalwood, cedar, vetiver', tone: '#6B7050', notes_ar: ['صندل ميسوري', 'أرز', 'فيتيفر', 'كاكاو'], notes_en: ['Mysore sandal', 'Cedar', 'Vetiver', 'Cacao'] }, ]; const PRODUCTS = [ { id: 'p01', name_ar: 'ليل بومباي', name_en: 'Bombay Nights', family: 'oud', price: 720, sizes: [{ml:30,price:380},{ml:50,price:720},{ml:100,price:1290}], stock: 24, rating: 4.8, top_ar:'هيل، كافور', heart_ar:'عود، ورد', base_ar:'صندل، مسك', tag_ar:'الأكثر مبيعاً', tag_en:'Bestseller', year: 2024, origin: 'Assam', concentration: 'Extrait', tone: '#2E1F18' }, { id: 'p02', name_ar: 'ورد ميسور', name_en: 'Mysore Rose', family: 'rose', price: 540, sizes: [{ml:30,price:290},{ml:50,price:540},{ml:100,price:980}], stock: 12, rating: 4.7, top_ar:'فلفل وردي', heart_ar:'ورد طائفي', base_ar:'صندل ميسوري', tag_ar:'جديد', tag_en:'New', year: 2025, origin: 'Mysore', concentration: 'EDP', tone: '#B85563' }, { id: 'p03', name_ar: 'كاردمم', name_en: 'Cardamom', family: 'spice', price: 460, sizes: [{ml:30,price:250},{ml:50,price:460},{ml:100,price:820}], stock: 31, rating: 4.6, top_ar:'هيل، زنجبيل', heart_ar:'قرنفل، زعفران', base_ar:'كهرمان', year: 2023, origin: 'Kerala', concentration: 'EDP', tone: '#8C4A2B' }, { id: 'p04', name_ar: 'ياسمين سامباك', name_en: 'Sambac', family: 'flora', price: 510, sizes: [{ml:30,price:270},{ml:50,price:510},{ml:100,price:910}], stock: 18, rating: 4.9, top_ar:'برغموت', heart_ar:'ياسمين، فل', base_ar:'مسك أبيض', tag_ar:'إصدار محدود', tag_en:'Limited', year: 2024, origin: 'Tamil Nadu', concentration: 'Parfum', tone: '#9B8FB5' }, { id: 'p05', name_ar: 'صندل قديم', name_en: 'Old Sandalwood', family: 'woody', price: 890, sizes: [{ml:30,price:480},{ml:50,price:890},{ml:100,price:1620}], stock: 6, rating: 4.9, top_ar:'فلفل أسود', heart_ar:'صندل، أرز', base_ar:'فيتيفر، كاكاو', tag_ar:'نادر', tag_en:'Rare', year: 2022, origin: 'Mysore', concentration: 'Extrait', tone: '#6B7050' }, { id: 'p06', name_ar: 'مسك حليبي', name_en: 'Milk Musk', family: 'musk', price: 380, sizes: [{ml:30,price:200},{ml:50,price:380},{ml:100,price:680}], stock: 42, rating: 4.5, top_ar:'لوز', heart_ar:'إيريس، كشمير', base_ar:'مسك أبيض', year: 2024, origin: 'Rajasthan', concentration: 'EDP', tone: '#D9C7A8' }, { id: 'p07', name_ar: 'عنبر جودبور', name_en: 'Jodhpur Amber', family: 'amber', price: 640, sizes: [{ml:30,price:340},{ml:50,price:640},{ml:100,price:1180}], stock: 15, rating: 4.7, top_ar:'برتقال دموي', heart_ar:'لبدنوم', base_ar:'عنبر، بنزوين', year: 2024, origin: 'Rajasthan', concentration: 'EDP', tone: '#C97B5E' }, { id: 'p08', name_ar: 'دخان الأرز', name_en: 'Cedar Smoke', family: 'woody', price: 470, sizes: [{ml:30,price:250},{ml:50,price:470},{ml:100,price:840}], stock: 22, rating: 4.4, top_ar:'كافور', heart_ar:'أرز، عرعر', base_ar:'فيتيفر، دخان', year: 2023, origin: 'Himalayan', concentration: 'EDP', tone: '#5C5240' }, { id: 'p09', name_ar: 'زعفران', name_en: 'Saffron', family: 'spice', price: 780, sizes: [{ml:30,price:420},{ml:50,price:780},{ml:100,price:1420}], stock: 9, rating: 4.8, top_ar:'زعفران، هيل', heart_ar:'ورد، عود', base_ar:'جلد، عنبر', tag_ar:'فاخر', tag_en:'Premium', year: 2024, origin: 'Kashmir', concentration: 'Extrait', tone: '#A65A2A' }, { id: 'p10', name_ar: 'فل وموغرا', name_en: 'Mogra', family: 'flora', price: 430, sizes: [{ml:30,price:230},{ml:50,price:430},{ml:100,price:770}], stock: 26, rating: 4.6, top_ar:'ليمون هندي', heart_ar:'فل، تشامبا', base_ar:'مسك، صندل', year: 2024, origin: 'Tamil Nadu', concentration: 'EDP', tone: '#B0A4C2' }, { id: 'p11', name_ar: 'عود كامبودي', name_en: 'Cambodi Oud', family: 'oud', price: 1340, sizes: [{ml:30,price:720},{ml:50,price:1340},{ml:100,price:2480}], stock: 4, rating: 5.0, top_ar:'هيل أخضر', heart_ar:'عود معتق', base_ar:'صندل، جلد', tag_ar:'نادر', tag_en:'Rare', year: 2021, origin: 'Assam', concentration: 'Extrait', tone: '#1F140C' }, { id: 'p12', name_ar: 'وردة دلهي', name_en: 'Delhi Rose', family: 'rose', price: 480, sizes: [{ml:30,price:260},{ml:50,price:480},{ml:100,price:860}], stock: 17, rating: 4.5, top_ar:'فاوانيا', heart_ar:'ورد دمشقي', base_ar:'باتشولي', year: 2024, origin: 'Delhi', concentration: 'EDP', tone: '#C56B7A' }, { id: 'p13', name_ar: 'فيتيفر مونسون', name_en: 'Monsoon Vetiver', family: 'woody', price: 520, sizes: [{ml:30,price:280},{ml:50,price:520},{ml:100,price:940}], stock: 19, rating: 4.6, top_ar:'بومبلي', heart_ar:'فيتيفر طازج', base_ar:'تربة، خشب', year: 2024, origin: 'Karnataka', concentration: 'EDT', tone: '#566849' }, { id: 'p14', name_ar: 'عنبر ذهبي', name_en: 'Gold Amber', family: 'amber', price: 690, sizes: [{ml:30,price:360},{ml:50,price:690},{ml:100,price:1240}], stock: 11, rating: 4.7, top_ar:'برغموت', heart_ar:'كهرمان، عنبر', base_ar:'فانيليا، بنزوين', year: 2023, origin: 'Rajasthan', concentration: 'Extrait', tone: '#D08A5C' }, { id: 'p15', name_ar: 'مسك غزال', name_en: 'Gazelle Musk', family: 'musk', price: 590, sizes: [{ml:30,price:310},{ml:50,price:590},{ml:100,price:1060}], stock: 14, rating: 4.8, top_ar:'كزبرة', heart_ar:'مسك، إيريس', base_ar:'صندل، عنبر', year: 2024, origin: 'Lucknow', concentration: 'Extrait', tone: '#C2B79A' }, { id: 'p16', name_ar: 'توبروز ليلي', name_en: 'Tuberose Noir', family: 'flora', price: 620, sizes: [{ml:30,price:330},{ml:50,price:620},{ml:100,price:1120}], stock: 8, rating: 4.7, top_ar:'فلفل أبيض', heart_ar:'توبروز', base_ar:'عنبر، مسك', year: 2024, origin: 'Tamil Nadu', concentration: 'Parfum', tone: '#7F7595' }, { id: 'p17', name_ar: 'قرنفل ليلكنو', name_en: 'Lucknow Clove', family: 'spice', price: 410, sizes: [{ml:30,price:220},{ml:50,price:410},{ml:100,price:740}], stock: 25, rating: 4.4, top_ar:'قرنفل، فلفل', heart_ar:'ورد، توبكو', base_ar:'جلد، باتشولي', year: 2023, origin: 'Lucknow', concentration: 'EDP', tone: '#7A3922' }, { id: 'p18', name_ar: 'باتشولي قديم', name_en: 'Aged Patchouli', family: 'woody', price: 560, sizes: [{ml:30,price:300},{ml:50,price:560},{ml:100,price:1000}], stock: 13, rating: 4.6, top_ar:'برتقال', heart_ar:'باتشولي معتق', base_ar:'كاكاو، فانيليا', year: 2022, origin: 'Kerala', concentration: 'EDP', tone: '#4A3B2A' }, { id: 'p19', name_ar: 'ورد وعود', name_en: 'Rose & Oud', family: 'rose', price: 870, sizes: [{ml:30,price:470},{ml:50,price:870},{ml:100,price:1580}], stock: 7, rating: 4.9, top_ar:'زعفران', heart_ar:'ورد، عود', base_ar:'عنبر، صندل', tag_ar:'كلاسيكي', tag_en:'Iconic', year: 2024, origin: 'Assam', concentration: 'Extrait', tone: '#8E3F4A' }, { id: 'p20', name_ar: 'حرير', name_en: 'Silk', family: 'musk', price: 510, sizes: [{ml:30,price:270},{ml:50,price:510},{ml:100,price:910}], stock: 20, rating: 4.6, top_ar:'كمثرى', heart_ar:'إيريس، حرير', base_ar:'مسك، صندل', year: 2025, origin: 'Varanasi', concentration: 'EDP', tone: '#CFC1A8' }, { id: 'p21', name_ar: 'عود نهاري', name_en: 'Day Oud', family: 'oud', price: 590, sizes: [{ml:30,price:310},{ml:50,price:590},{ml:100,price:1060}], stock: 16, rating: 4.5, top_ar:'حمضيات هندية', heart_ar:'عود خفيف', base_ar:'صندل، مسك', year: 2024, origin: 'Assam', concentration: 'EDP', tone: '#5B4530' }, { id: 'p22', name_ar: 'بنزوين', name_en: 'Benzoin', family: 'amber', price: 440, sizes: [{ml:30,price:230},{ml:50,price:440},{ml:100,price:790}], stock: 28, rating: 4.4, top_ar:'كزبرة، يوسفي', heart_ar:'بنزوين، توليب', base_ar:'فانيليا، عنبر', year: 2024, origin: 'Rajasthan', concentration: 'EDP', tone: '#C28858' }, ]; const ATTARS = [ { id: 'a1', name_ar: 'غلام نبي', name_en: 'Ghulam Nabi', city_ar: 'ميسور', city_en: 'Mysore', since: 1971, family: 'woody', craft_ar: 'تقطير الصندل النقي', craft_en: 'Pure sandalwood distillation', signature: 'صندل قديم', bio_ar: 'الجيل الرابع من بيت صندل في ميسور. يقطّر خشب الصندل على نار هادئة لأربعين يوماً، تماماً كما علّمه جدّه.', bio_en: 'Fourth-generation sandal house in Mysore. Distils sandalwood over a slow flame for forty days — exactly as his grandfather taught him.', quote_ar: 'الصبر هو النوتة الأولى في كل عطر.', quote_en: 'Patience is the first note in every scent.', tone: '#6B7050' }, { id: 'a2', name_ar: 'رشيدة بيغوم', name_en: 'Rashida Begum', city_ar: 'لكنو', city_en: 'Lucknow', since: 1988, family: 'flora', craft_ar: 'عطور الزهور بطريقة الديغ', craft_en: 'Floral deg-bhapka attars', signature: 'فل وموغرا', bio_ar: 'تلتقط رائحة الفل عند الفجر، حين تكون البتلات في ذروتها، وتحبسها في زيت الصندل بطريقة الديغ التقليدية.', bio_en: 'Captures mogra at dawn, when the petals peak, sealing it into sandal oil through the traditional deg-bhapka method.', quote_ar: 'الزهرة تعطيك سرّها مرّة واحدة في اليوم.', quote_en: 'A flower gives its secret once a day.', tone: '#9B8FB5' }, { id: 'a3', name_ar: 'إقبال أحمد', name_en: 'Iqbal Ahmed', city_ar: 'آسام', city_en: 'Assam', since: 1979, family: 'oud', craft_ar: 'عود معتّق', craft_en: 'Aged agarwood', signature: 'عود كامبودي', bio_ar: 'يختار أشجار العود من غابات آسام ويترك الخشب يعتّق سنوات قبل التقطير، حتى يصل العمق المطلوب.', bio_en: 'Selects agarwood from the forests of Assam and ages the wood for years before distilling, until the required depth arrives.', quote_ar: 'العود لا يُستعجل — يُنتظر.', quote_en: 'Oud is not rushed — it is awaited.', tone: '#2E1F18' }, { id: 'a4', name_ar: 'مهتاب كور', name_en: 'Mehtab Kaur', city_ar: 'كشمير', city_en: 'Kashmir', since: 1994, family: 'spice', craft_ar: 'الزعفران والورد', craft_en: 'Saffron & rose', signature: 'زعفران', bio_ar: 'من حقول الزعفران في بامبور، تجمع الخيوط يدوياً وتزاوجها مع ورد كشمير لتخلق دفئاً نادراً.', bio_en: 'From the saffron fields of Pampore, she hand-gathers the threads and weds them to Kashmiri rose for a rare warmth.', quote_ar: 'كل خيط زعفران هو غروب مُجمّع.', quote_en: 'Each saffron thread is a gathered sunset.', tone: '#A65A2A' }, ]; const ORDERS = [ { id: 'IST-2826', customer: 'فاطمة العامري', email: 'fatma@…', total: 1430, items: 2, date: '2026-05-18', status: 'pending', city: 'دبي' }, { id: 'IST-2825', customer: 'محمد القحطاني', email: 'm.qaht@…', total: 720, items: 1, date: '2026-05-18', status: 'shipped', city: 'أبوظبي' }, { id: 'IST-2824', customer: 'سارة المنصوري', email: 'sara@…', total: 2110, items: 3, date: '2026-05-17', status: 'delivered', city: 'الشارقة'}, { id: 'IST-2823', customer: 'أحمد الزعابي', email: 'a.ze@…', total: 540, items: 1, date: '2026-05-17', status: 'shipped', city: 'دبي' }, { id: 'IST-2822', customer: 'نورة الكعبي', email: 'noura@…', total: 1820, items: 2, date: '2026-05-16', status: 'delivered', city: 'العين' }, { id: 'IST-2821', customer: 'خالد الشحي', email: 'k.sh@…', total: 460, items: 1, date: '2026-05-16', status: 'cancelled', city: 'دبي' }, { id: 'IST-2820', customer: 'مريم الفلاسي', email: 'maryam@…',total: 1340, items: 1, date: '2026-05-15', status: 'delivered', city: 'دبي' }, { id: 'IST-2819', customer: 'عبدالله الرئيسي', email: 'a.ra@…', total: 980, items: 2, date: '2026-05-15', status: 'delivered', city: 'الفجيرة'}, { id: 'IST-2818', customer: 'هند البلوشي', email: 'hind@…', total: 380, items: 1, date: '2026-05-14', status: 'delivered', city: 'دبي' }, { id: 'IST-2817', customer: 'سيف النعيمي', email: 'saif@…', total: 1690, items: 3, date: '2026-05-14', status: 'delivered', city: 'عجمان' }, ]; const CUSTOMERS = [ { id: 'u1', name: 'فاطمة العامري', email: 'fatma@example.ae', orders: 12, spent: 8420, tier: 'VIP' }, { id: 'u2', name: 'محمد القحطاني', email: 'm.qaht@example.ae', orders: 6, spent: 3210, tier: 'Member' }, { id: 'u3', name: 'سارة المنصوري', email: 'sara@example.ae', orders: 9, spent: 5870, tier: 'VIP' }, { id: 'u4', name: 'أحمد الزعابي', email: 'a.ze@example.ae', orders: 3, spent: 1240, tier: 'Member' }, { id: 'u5', name: 'نورة الكعبي', email: 'noura@example.ae', orders: 14, spent: 9810, tier: 'VIP' }, { id: 'u6', name: 'خالد الشحي', email: 'k.sh@example.ae', orders: 2, spent: 720, tier: 'New' }, { id: 'u7', name: 'مريم الفلاسي', email: 'maryam@example.ae', orders: 5, spent: 2840, tier: 'Member' }, { id: 'u8', name: 'عبدالله الرئيسي', email: 'a.ra@example.ae', orders: 4, spent: 1980, tier: 'Member' }, ]; // 14-day revenue series for the admin stats chart const REVENUE_SERIES = [4200, 3850, 5120, 4790, 6230, 5840, 7120, 6580, 5910, 7480, 8120, 7240, 9180, 8640]; const FAMILY_SPLIT = [ { id: 'oud', pct: 28 }, { id: 'rose', pct: 18 }, { id: 'amber', pct: 14 }, { id: 'woody', pct: 13 }, { id: 'spice', pct: 11 }, { id: 'flora', pct: 9 }, { id: 'musk', pct: 7 }, ]; // ── Financial data ──────────────────────────────────────── // 30-day series const FINANCE_30D = { revenue: [4200, 3850, 5120, 4790, 6230, 5840, 7120, 6580, 5910, 7480, 8120, 7240, 9180, 8640, 7320, 6890, 8410, 9120, 7840, 8260, 9610, 10240, 8820, 9340, 11120, 10560, 9840, 11430, 12180, 11520], expenses: [1840, 1620, 2210, 1980, 2640, 2120, 3140, 2730, 2410, 3180, 3520, 2940, 3820, 3280, 2810, 2640, 3120, 3680, 2940, 3210, 3720, 4120, 3380, 3540, 4280, 4020, 3760, 4310, 4640, 4380], }; // expense categories (current month) const EXPENSE_CATEGORIES = [ { id: 'inventory', ar: 'مخزون وعطور خام', en: 'Inventory & raw materials', pct: 42, color: '#C97B5E' }, { id: 'shipping', ar: 'شحن وتوصيل', en: 'Shipping & logistics', pct: 18, color: '#6B7050' }, { id: 'salaries', ar: 'رواتب', en: 'Salaries', pct: 16, color: '#8C4A2B' }, { id: 'rent', ar: 'إيجار وفواتير', en: 'Rent & utilities', pct: 10, color: '#9B8FB5' }, { id: 'marketing', ar: 'تسويق', en: 'Marketing', pct: 8, color: '#B59060' }, { id: 'misc', ar: 'متفرقات', en: 'Other', pct: 6, color: '#5C5240' }, ]; // recent transactions (mix of sales income + expense entries) const TRANSACTIONS = [ { id: 'TX-9821', date: '2026-05-18', type: 'sale', desc_ar: 'طلب IST-2826 · فاطمة العامري', desc_en: 'Order IST-2826 · F. Alameri', amount: 1430, method: 'card', ref: 'IST-2826', status: 'completed' }, { id: 'TX-9820', date: '2026-05-18', type: 'expense', desc_ar: 'فاتورة شحن أرامكس · مايو', desc_en: 'Aramex shipping · May', amount: -840, method: 'bank', ref: 'INV-S-051', status: 'completed', cat: 'shipping' }, { id: 'TX-9819', date: '2026-05-18', type: 'sale', desc_ar: 'طلب IST-2825 · محمد القحطاني', desc_en: 'Order IST-2825 · M. Qahtani', amount: 720, method: 'apple', ref: 'IST-2825', status: 'completed' }, { id: 'TX-9818', date: '2026-05-17', type: 'sale', desc_ar: 'طلب IST-2824 · سارة المنصوري', desc_en: 'Order IST-2824 · S. Mansoori', amount: 2110, method: 'card', ref: 'IST-2824', status: 'completed' }, { id: 'TX-9817', date: '2026-05-17', type: 'expense', desc_ar: 'استيراد عود من آسام', desc_en: 'Oud import from Assam', amount: -8420, method: 'bank', ref: 'PO-2026-118', status: 'completed', cat: 'inventory' }, { id: 'TX-9816', date: '2026-05-17', type: 'sale', desc_ar: 'طلب IST-2823 · أحمد الزعابي', desc_en: 'Order IST-2823 · A. Zaabi', amount: 540, method: 'mada', ref: 'IST-2823', status: 'completed' }, { id: 'TX-9815', date: '2026-05-16', type: 'sale', desc_ar: 'طلب IST-2822 · نورة الكعبي', desc_en: 'Order IST-2822 · N. Kaabi', amount: 1820, method: 'card', ref: 'IST-2822', status: 'completed' }, { id: 'TX-9814', date: '2026-05-16', type: 'expense', desc_ar: 'حملة إعلانية · إنستغرام', desc_en: 'Ad campaign · Instagram', amount: -1200, method: 'card', ref: 'AD-IG-0516', status: 'completed', cat: 'marketing' }, { id: 'TX-9813', date: '2026-05-16', type: 'refund', desc_ar: 'استرداد · طلب IST-2821', desc_en: 'Refund · IST-2821', amount: -460, method: 'card', ref: 'RF-2821', status: 'completed' }, { id: 'TX-9812', date: '2026-05-15', type: 'sale', desc_ar: 'طلب IST-2820 · مريم الفلاسي', desc_en: 'Order IST-2820 · M. Falasi', amount: 1340, method: 'card', ref: 'IST-2820', status: 'completed' }, { id: 'TX-9811', date: '2026-05-15', type: 'expense', desc_ar: 'إيجار محل · مايو', desc_en: 'Boutique rent · May', amount: -4800, method: 'bank', ref: 'RENT-05', status: 'completed', cat: 'rent' }, { id: 'TX-9810', date: '2026-05-15', type: 'sale', desc_ar: 'طلب IST-2819 · عبدالله الرئيسي', desc_en: 'Order IST-2819 · A. Raeesi', amount: 980, method: 'apple', ref: 'IST-2819', status: 'completed' }, { id: 'TX-9809', date: '2026-05-14', type: 'expense', desc_ar: 'رواتب فريق المتجر · مايو', desc_en: 'Staff salaries · May', amount: -7200, method: 'bank', ref: 'PAY-05', status: 'completed', cat: 'salaries' }, { id: 'TX-9808', date: '2026-05-14', type: 'sale', desc_ar: 'طلب IST-2818 · هند البلوشي', desc_en: 'Order IST-2818 · H. Balushi', amount: 380, method: 'mada', ref: 'IST-2818', status: 'completed' }, { id: 'TX-9807', date: '2026-05-14', type: 'sale', desc_ar: 'طلب IST-2817 · سيف النعيمي', desc_en: 'Order IST-2817 · S. Naimi', amount: 1690, method: 'card', ref: 'IST-2817', status: 'completed' }, { id: 'TX-9806', date: '2026-05-13', type: 'expense', desc_ar: 'زجاجات وعلب · مورد دبي', desc_en: 'Bottles & boxes · Dubai', amount: -1640, method: 'bank', ref: 'PO-118', status: 'pending', cat: 'inventory' }, { id: 'TX-9805', date: '2026-05-13', type: 'sale', desc_ar: 'طلب IST-2816 · ميساء الحوسني', desc_en: 'Order IST-2816 · M. Hosani', amount: 870, method: 'card', ref: 'IST-2816', status: 'completed' }, { id: 'TX-9804', date: '2026-05-12', type: 'expense', desc_ar: 'كهرباء وإنترنت · مايو', desc_en: 'Utilities · May', amount: -620, method: 'bank', ref: 'UTIL-05', status: 'completed', cat: 'rent' }, ]; // invoices issued (B2B / wholesale clients) const INVOICES = [ { id: 'INV-2026-041', date: '2026-05-15', due: '2026-06-14', client: 'بوتيك ريم · أبوظبي', client_en: 'Boutique Reem · AD', items: 18, subtotal: 12400, vat: 620, total: 13020, status: 'paid' }, { id: 'INV-2026-040', date: '2026-05-12', due: '2026-06-11', client: 'فندق برج العرب · سبا', client_en: 'Burj Al Arab Spa', items: 12, subtotal: 9800, vat: 490, total: 10290, status: 'sent' }, { id: 'INV-2026-039', date: '2026-05-10', due: '2026-06-09', client: 'أمازون السعودية', client_en: 'Amazon KSA', items: 64, subtotal: 38400, vat: 1920,total: 40320, status: 'paid' }, { id: 'INV-2026-038', date: '2026-05-08', due: '2026-06-07', client: 'متجر النيكاب · الرياض', client_en: 'Niqab Store · Riyadh',items: 22, subtotal: 14600, vat: 730, total: 15330, status: 'overdue' }, { id: 'INV-2026-037', date: '2026-05-04', due: '2026-06-03', client: 'بوتيك بلومينغديلز', client_en: 'Bloomingdale\'s ME', items: 30, subtotal: 19800, vat: 990, total: 20790, status: 'paid' }, { id: 'INV-2026-036', date: '2026-05-02', due: '2026-06-01', client: 'دفتر هدايا · الكويت', client_en: 'Gift Studio · KW', items: 14, subtotal: 8420, vat: 421, total: 8841, status: 'sent' }, ]; // month-by-month P&L for last 6 months const PNL_MONTHLY = [ { m_ar: 'ديسمبر', m_en: 'Dec', rev: 162400, exp: 89200, net: 73200 }, { m_ar: 'يناير', m_en: 'Jan', rev: 174800, exp: 94600, net: 80200 }, { m_ar: 'فبراير', m_en: 'Feb', rev: 158200, exp: 86400, net: 71800 }, { m_ar: 'مارس', m_en: 'Mar', rev: 198400, exp: 102800, net: 95600 }, { m_ar: 'أبريل', m_en: 'Apr', rev: 224600, exp: 118200, net: 106400 }, { m_ar: 'مايو', m_en: 'May', rev: 248200, exp: 124800, net: 123400 }, ]; // payment methods breakdown (current month) const PAYMENT_SPLIT = [ { id: 'card', ar: 'بطاقة ائتمان', en: 'Credit card', pct: 48, color: '#2A1F18' }, { id: 'apple', ar: 'Apple Pay', en: 'Apple Pay', pct: 22, color: '#6B7050' }, { id: 'mada', ar: 'مدى', en: 'Mada', pct: 16, color: '#C97B5E' }, { id: 'bank', ar: 'حوالة بنكية', en: 'Bank', pct: 9, color: '#8C4A2B' }, { id: 'cash', ar: 'نقداً', en: 'Cash', pct: 5, color: '#9B8FB5' }, ]; Object.assign(window, { SCENT_FAMILIES, PRODUCTS, ATTARS, ORDERS, CUSTOMERS, REVENUE_SERIES, FAMILY_SPLIT, FINANCE_30D, EXPENSE_CATEGORIES, TRANSACTIONS, INVOICES, PNL_MONTHLY, PAYMENT_SPLIT });