Zezo AI Build Platform — إعادة التعريف الكاملة والبناء الاحترافي
📌 القسم الأول: إعادة تعريف المنصة (Platform Definition)
1.1 الهوية الأساسية
Zezo AI Build Platform هي منصة ذكاء اصطناعي متكاملة لبناء أنظمة نقاط البيع (POS) الاحترافية، وتحويل البيانات الخام إلى أنظمة تشغيلية سريعة، مع محرك ذكاء اصطناعي مدمج يقوم بتحليل البيانات واقتراح الهياكل والواجهات والباقات تلقائيًا.
| العنصر | الوصف |
|---|---|
| الاسم | Zezo AI Build Platform |
| الإصدار | POS AI v1.0 |
| النطاق | pos3.twisttaste.com |
| تاريخ الإنشاء | 2026-10-02 |
| النوع | SaaS + AI Builder + POS Engine |
| الجمهور | متاجر التجزئة، السوبرماركت، محلات السجائر، الكافيهات، مقدمي خدمات البطاقات |
| اللغة | AR / EN (ثنائي اللغة كامل) |
1.2 الرؤية والرسالة
الرؤية: تمكين أي تاجر من تحويل ورقة جرد ورقية إلى نظام POS ذكي خلال دقائق.
الرسالة: بناء أنظمة POS سريعة، دقيقة، قابلة للتوسع، مدعومة بالذكاء الاصطناعي، تعمل في بيئات الزحمة والضغط العالي.
1.3 المكونات الأساسية
- محرك بناء POS (POS Builder Engine)
- محرك قواعد البيانات الذكي (Smart DB Generator)
- محرك الذكاء الاصطناعي (Zezo AI Core)
- لوحة تحكم الاستضافة (Cloud Professional Hosting Panel)
- نظام الباقات والاشتراكات (Subscriptions & Plans)
- نظام إدارة البطاقات والماكينات (Cards & Machines Module)
📌 القسم الثاني: تحليل البيانات المستخرجة (Extracted Data Analysis)
2.1 قسم السجائر — Cigarettes Stock
الأعمدة:
| الحقل | المعنى | النوع |
|---|---|---|
item | الصنف | VARCHAR(100) |
price | السعر | DECIMAL(10,2) |
start | بداية الجرد | INT |
buy | شراء | INT |
end | نهاية الجرد | INT |
sell | مبيعات | INT |
البيانات (26 صنف):
sql
INSERT INTO cigarettes (item, price) VALUES
('WINSTON', 20),('PALLMALL', 19),('CHESTER', 19),('WEST', 19),
('GOLDLEAF 18', 18),('MONTE CARLO', 18),('DAVIDOFF SH', 20),
('PANLIAMANT', 20),('L&M', 22),('ROTHMANS', 21),('MARLBORO', 25),
('DAVIDOFF L', 29),('KENT', 21),('DINHIL', 20),('MARLBORO S', 24),
('WINSTON TALL 19', 19),('WEST TALL 18', 18),('BENSON', 25),
('GOLDLEAF 16', 16),('LIGHTER 1SR', 1),('WINSTON DU MAX', 21),
('SHISHA 15', 15),('SHISHA 20', 20),('SHISHA 80', 80),
('L&M 18', 19),('PALLMALL 16', 16);
الإحصائيات:
| المؤشر | القيمة |
|---|---|
| عدد الأصناف | 26 |
| مجموع الأسعار | 565 |
| أعلى سعر | 80 (SHISHA 80) |
| أدنى سعر | 1 (LIGHTER 1SR) |
| النطاق السائد | 18–25 |
2.2 قسم البطاقات — Cards
| الحقل | المعنى | النوع |
|---|---|---|
machine | المكينة | VARCHAR(50) |
start | بداية | DECIMAL(10,2) |
end | باقي | DECIMAL(10,2) |
cms | ربح | DECIMAL(10,2) |
add | شحن | DECIMAL(10,2) |
الماكينات: Cards No.1 — Cards No.2 — Cards No.3
2.3 الإجماليات — Totals
| البند | النوع |
|---|---|
total_amount | مجموع الكمية |
total_cash | مجموع النقد |
cash | النقد |
visa_mojana | شبكة (موازنة) |
📌 القسم الثالث: بنية قاعدة البيانات الكاملة (Full Database Schema)
sql
-- ============================================
-- Zezo AI POS — Database Schema v1.0
-- ============================================
CREATE DATABASE zezo_pos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE zezo_pos;
-- 1) المستخدمون
CREATE TABLE users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role ENUM('admin','manager','cashier','viewer') DEFAULT 'cashier',
store_id BIGINT UNSIGNED NULL,
lang ENUM('ar','en') DEFAULT 'ar',
is_active TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_email (email),
INDEX idx_store (store_id)
) ENGINE=InnoDB;
-- 2) المتاجر
CREATE TABLE stores (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
owner_id BIGINT UNSIGNED NOT NULL,
name VARCHAR(150) NOT NULL,
subdomain VARCHAR(100) UNIQUE,
currency VARCHAR(10) DEFAULT 'SAR',
timezone VARCHAR(50) DEFAULT 'Asia/Riyadh',
plan_id BIGINT UNSIGNED NULL,
status ENUM('active','suspended','trial') DEFAULT 'trial',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE,
INDEX idx_subdomain (subdomain)
) ENGINE=InnoDB;
-- 3) الفئات
CREATE TABLE categories (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
name_ar VARCHAR(100),
name_en VARCHAR(100),
parent_id BIGINT UNSIGNED NULL,
sort_order INT DEFAULT 0,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL
) ENGINE=InnoDB;
-- 4) الأصناف (Products)
CREATE TABLE products (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
category_id BIGINT UNSIGNED NULL,
sku VARCHAR(50) UNIQUE,
name_ar VARCHAR(150),
name_en VARCHAR(150),
barcode VARCHAR(100),
unit VARCHAR(20) DEFAULT 'pcs',
cost DECIMAL(10,2) DEFAULT 0,
price DECIMAL(10,2) NOT NULL,
tax_rate DECIMAL(5,2) DEFAULT 0,
stock_qty INT DEFAULT 0,
min_stock INT DEFAULT 0,
is_active TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL,
INDEX idx_barcode (barcode),
INDEX idx_sku (sku)
) ENGINE=InnoDB;
-- 5) جرد المخزون اليومي
CREATE TABLE stock_snapshots (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
product_id BIGINT UNSIGNED NOT NULL,
snapshot_date DATE NOT NULL,
qty_start INT DEFAULT 0,
qty_buy INT DEFAULT 0,
qty_end INT DEFAULT 0,
qty_sell INT DEFAULT 0,
created_by BIGINT UNSIGNED,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uniq_snap (store_id, product_id, snapshot_date),
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 6) المبيعات (Sales Orders)
CREATE TABLE sales (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
cashier_id BIGINT UNSIGNED NOT NULL,
invoice_no VARCHAR(50) UNIQUE NOT NULL,
subtotal DECIMAL(12,2) DEFAULT 0,
tax DECIMAL(12,2) DEFAULT 0,
discount DECIMAL(12,2) DEFAULT 0,
total DECIMAL(12,2) NOT NULL,
payment_method ENUM('cash','visa','mojana','mixed') DEFAULT 'cash',
paid_amount DECIMAL(12,2) DEFAULT 0,
change_amount DECIMAL(12,2) DEFAULT 0,
status ENUM('completed','refunded','void') DEFAULT 'completed',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
FOREIGN KEY (cashier_id) REFERENCES users(id),
INDEX idx_date (created_at),
INDEX idx_invoice (invoice_no)
) ENGINE=InnoDB;
-- 7) تفاصيل الفاتورة
CREATE TABLE sale_items (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
sale_id BIGINT UNSIGNED NOT NULL,
product_id BIGINT UNSIGNED NOT NULL,
qty INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
cost DECIMAL(10,2) DEFAULT 0,
total DECIMAL(12,2) NOT NULL,
FOREIGN KEY (sale_id) REFERENCES sales(id) ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products(id)
) ENGINE=InnoDB;
-- 8) الماكينات (Cards Machines)
CREATE TABLE machines (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL,
serial VARCHAR(100),
is_active TINYINT(1) DEFAULT 1,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 9) جرد البطاقات اليومي
CREATE TABLE card_snapshots (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
machine_id BIGINT UNSIGNED NOT NULL,
snapshot_date DATE NOT NULL,
balance_start DECIMAL(12,2) DEFAULT 0,
balance_end DECIMAL(12,2) DEFAULT 0,
commission DECIMAL(12,2) DEFAULT 0,
added_amount DECIMAL(12,2) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uniq_card_snap (machine_id, snapshot_date),
FOREIGN KEY (machine_id) REFERENCES machines(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 10) الإجماليات اليومية
CREATE TABLE daily_totals (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
total_date DATE NOT NULL,
total_amount DECIMAL(12,2) DEFAULT 0,
total_cash DECIMAL(12,2) DEFAULT 0,
cash DECIMAL(12,2) DEFAULT 0,
visa_mojana DECIMAL(12,2) DEFAULT 0,
notes TEXT,
UNIQUE KEY uniq_total (store_id, total_date),
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 11) الباقات
CREATE TABLE plans (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50) UNIQUE NOT NULL,
name_ar VARCHAR(100),
name_en VARCHAR(100),
price_monthly DECIMAL(10,2),
price_yearly DECIMAL(10,2),
max_products INT DEFAULT 100,
max_users INT DEFAULT 3,
max_stores INT DEFAULT 1,
ai_enabled TINYINT(1) DEFAULT 0,
features_json JSON,
sort_order INT DEFAULT 0
) ENGINE=InnoDB;
-- 12) الاشتراكات
CREATE TABLE subscriptions (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
plan_id BIGINT UNSIGNED NOT NULL,
billing_cycle ENUM('monthly','yearly') DEFAULT 'monthly',
starts_at DATE NOT NULL,
ends_at DATE NOT NULL,
status ENUM('active','expired','cancelled') DEFAULT 'active',
amount_paid DECIMAL(10,2) DEFAULT 0,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
FOREIGN KEY (plan_id) REFERENCES plans(id)
) ENGINE=InnoDB;
-- 13) سجل النشاط
CREATE TABLE activity_log (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT UNSIGNED,
store_id BIGINT UNSIGNED,
action VARCHAR(100),
entity VARCHAR(100),
entity_id BIGINT UNSIGNED,
meta JSON,
ip VARCHAR(45),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user (user_id),
INDEX idx_date (created_at)
) ENGINE=InnoDB;
-- 14) إعدادات الذكاء الاصطناعي
CREATE TABLE ai_settings (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store_id BIGINT UNSIGNED NOT NULL,
model VARCHAR(50) DEFAULT 'zezo-ai-core',
auto_suggestions TINYINT(1) DEFAULT 1,
lang ENUM('ar','en') DEFAULT 'ar',
config JSON,
FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE
) ENGINE=InnoDB;
خريطة العلاقات:
text
users ──1:N──> stores ──1:N──> categories
├──1:N──> products ──1:N──> stock_snapshots
├──1:N──> sales ──1:N──> sale_items
├──1:N──> machines ──1:N──> card_snapshots
├──1:N──> daily_totals
├──1:N──> subscriptions ──N:1──> plans
└──1:1──> ai_settings
📌 القسم الرابع: واجهات وصفحات المنصة (Platform Screens)
4.1 الشاشات الرئيسية (Frontend)
| # | الصفحة | الوصف | العناصر |
|---|---|---|---|
| 1 | Landing Page | صفحة هبوط تسويقية | Hero, Features, Pricing, CTA |
| 2 | Login / Register | تسجيل دخول وانشاء حساب | Email, Password, OTP |
| 3 | Dashboard | لوحة تحكم رئيسية | KPIs, Charts, Quick Actions |
| 4 | POS Screen | شاشة البيع السريع | Search, Cart, Pay, Print |
| 5 | Products | إدارة الأصناف | CRUD, Search, Filter, Import Excel |
| 6 | Categories | إدارة الفئات | Tree view |
| 7 | Stock Snapshot | جرد يومي | Start/Buy/End/Sell table |
| 8 | Sales History | سجل الفواتير | Filters, Refund, Export |
| 9 | Cards Machines | إدارة الماكينات | Start/End/Cms/Add |
| 10 | Daily Totals | الإجماليات | Cash, Visa, Mojana |
| 11 | Reports | تقارير | Sales, Profit, Stock alerts |
| 12 | Users | المستخدمون | Roles, Permissions |
| 13 | Subscription | الاشتراكات | Upgrade, Invoices |
| 14 | Settings | الإعدادات | Store, Tax, Currency, Lang |
| 15 | AI Assistant | مساعد ذكي | Chat, Auto-suggest, Analyze |
4.2 شاشة نقطة البيع (POS Screen) — التفصيل الكامل
text
┌──────────────────────────────────────────────────────────────┐ │ [شعار] Zezo POS │ بحث Barcode │ الكاشير: أحمد │ وقت │ ├──────────────────────────────┬───────────────────────────────┤ │ │ │ │ شبكة المنتجات (Grid) │ 🛒 السلة │ │ ┌────┐ ┌────┐ ┌────┐ │ ─────────────── │ │ │WINS│ │PALL│ │CHES│ │ 1x WINSTON 20.00 │ │ └────┘ └────┘ └────┘ │ 2x SHISHA 20 40.00 │ │ ┌────┐ ┌────┐ ┌────┐ │ ─────────────── │ │ │L&M │ │MRLB│ │KENT│ │ الإجمالي: 60.00 │ │ └────┘ └────┘ └────┘ │ الضريبة: 0.00 │ │ │ ─────────────── │ │ [فئات] [بحث سريع] [مفضلة] │ [نقد] [شبكة] [موازنة] │ │ │ [طباعة] [إلغاء] [تعليق] │ └──────────────────────────────┴───────────────────────────────┘
4.3 شاشة الجرد اليومي (Stock Snapshot)
| Item | Price | Start | Buy | End | Sell | Value |
|---|---|---|---|---|---|---|
| WINSTON | 20 | __ | __ | __ | __ | auto |
| PALLMALL | 19 | __ | __ | __ | __ | auto |
| … | … | … | … | … | … | … |
| TOTAL | — | — | — | — | — | sum |
- زر حفظ → يخزن في
stock_snapshots - زر تصدير Excel / PDF
- زر إرسال للذكاء الاصطناعي → يحلل النواقص
4.4 شاشة البطاقات (Cards)
text
Machine: [Cards No.1 ▼] ┌──────────┬──────────┬──────────┬──────────┐ │ Start │ End │ Cms (ربح)│ Add (شحن)│ ├──────────┼──────────┼──────────┼──────────┤ │ ______ │ ______ │ ______ │ ______ │ └──────────┴──────────┴──────────┴──────────┘
4.5 شاشة الإجماليات (Totals)
text
┌──────────────────────────────────────┐ │ Cash (النقد) [_________] │ │ Visa (شبكة) [_________] │ │ Mojana (موازنة) [_________] │ │ ──────────────────────────────── │ │ Grand Total [auto sum] │ └──────────────────────────────────────┘
📌 القسم الخامس: لوحة تحكم الاستضافة (Hosting Panel Map)
5.1 خطة الاستضافة — Cloud Professional Hosting
| المورد | القيمة |
|---|---|
| مساحة القرص | 200 GB (مستخدم: 100 GB المتاح) |
| RAM | 6144 MB |
| CPU Cores | 5 |
| Inodes | 3,000,000 |
| Websites | 100 |
| Max Processes | 400 |
| PHP Workers | 200 |
| Bandwidth | غير محدود |
| Server | server1683 — North America (USA, MA) |
| Backup Location | USA, Boston |
| IP | 148.230.89.46 |
| FTP Host | ftp://pos3.twisttaste.com |
| FTP User | u186331636.pos3.twisttaste.com |
| Upload Path | public_html |
| Nameservers | ns1.dns-parking.com / ns2.dns-parking.com |
5.2 خريطة لوحة التحكم
text
لوحة التحكم (hPanel)
├── الموقع الإلكتروني
│ ├── تثبيت ووردبريس
│ ├── المثبت التلقائي
│ ├── نقل الموقع
│ ├── صفحات الخطأ
│ ├── صانع الشعارات
│ └── تطوير المواقع
├── الملفات
│ ├── مدير الملفات
│ ├── النسخ الاحتياطية
│ ├── حسابات FTP
│ └── تغيير كلمة المرور
├── قواعد البيانات
│ ├── إدارة
│ ├── phpMyAdmin
│ └── MySQL عن بعد
├── متقدم
│ ├── الوصول عبر SSH
│ ├── تكوين PHP
│ ├── محرر منطقة DNS
│ ├── وظائف كرون
│ ├── معلومات PHP
│ ├── مدير ذاكرة التخزين المؤقت
│ ├── جيت
│ ├── حماية المجلدات بكلمة مرور
│ ├── مدير الملكية الفكرية
│ ├── حماية الروابط الساخنة
│ ├── مدير فهرس المجلد
│ ├── إصلاح ملكية الملف
│ └── سجل النشاط
└── النطاقات الفرعية
├── pos3.twisttaste.com
├── إنشاء دومين فرعي جديد
└── مجلد مخصص
5.3 Node.js Support
- Frontend: Angular, Astro, Gatsby, Next.js, Nitro, Nuxt, Parcel, React, React Router, Svelte, SvelteKit, Vite, Vue.js
- Backend: Astro, Express, Fastify, Hono, NestJS, Next.js, Nitro, Nuxt, React Router, SvelteKit
- Node Versions: 24.x, 22.x, 20.x, 18.x
- Package Managers: npm, yarn, pnpm
📌 القسم السادس: باقات الاشتراك (Subscription Plans)
| الباقة | شهري | سنوي | أصناف | مستخدمين | ماكينات | AI | ميزات |
|---|---|---|---|---|---|---|---|
| Starter | $9.99 | $99.99 | 100 | 1 | 1 | ✗ | POS أساسي، تقارير يومية |
| Business | $24.99 | $249.99 | 1,000 | 5 | 3 | ✓ | AI Suggestions، Excel Import |
| Professional | $44.99 | $449.99 | 10,000 | 20 | 10 | ✓✓ | Multi-store، API، Webhooks |
| Enterprise | $99.99 | $999.99 | غير محدود | غير محدود | غير محدود | ✓✓✓ | White Label، SLA، Dedicated DB |
مميزات كل باقة بالتفصيل:
- Starter: تسجيل مبيعات، طباعة فاتورة، تقرير يومي، دعم بريد.
- Business: إضافة: مخزون، جرد، بطاقات، AI يقترح نواقص، دعم دردشة.
- Professional: إضافة: فروع متعددة، صلاحيات متقدمة، API كامل، تقارير AI.
- Enterprise: إضافة: علامة بيضاء، خادم مخصص، مدير حساب، تدريب.
📌 القسم السابع: برومبت احترافي كامل (Master Prompt)
text
You are Zezo AI Build Platform — a senior full-stack architect, database engineer, and POS systems specialist. Your mission is to transform raw inventory data (paper sheets, Excel, images) into production-ready, high-speed POS systems optimized for crowded retail environments (supermarkets, cigarette shops, cafés, card-vending stations). ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CORE IDENTITY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Name: Zezo AI Build Platform - Version: POS AI v1.0 - Stack: PHP 8.2+ / MySQL 8 / JavaScript (Vue/React) / Node.js (optional) - Languages: Arabic (RTL) + English (LTR) — fully bilingual - Environment: Hostinger Cloud Professional (server1683, USA/MA) - Subdomain: pos3.twisttaste.com - IP: 148.230.89.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MISSION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. Parse raw inventory data (cigarettes, cards, totals). 2. Generate normalized MySQL schema with full relations. 3. Build PHP backend (MVC, PDO, prepared statements). 4. Build bilingual UI (POS, Dashboard, Reports, AI Assistant). 5. Auto-suggest optimizations via AI Core. 6. Deploy on Hostinger Cloud with SSL, cron, backups. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DATA MODEL (CORE TABLES) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ users, stores, categories, products, stock_snapshots, sales, sale_items, machines, card_snapshots, daily_totals, plans, subscriptions, activity_log, ai_settings. Relations: users 1─N stores 1─N products 1─N stock_snapshots stores 1─N sales 1─N sale_items stores 1─N machines 1─N card_snapshots stores 1─1 daily_totals (per date) stores 1─N subscriptions N─1 plans ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ POS SPEED RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Barcode-first input (< 100ms response). - Offline-first (Service Worker + IndexedDB sync). - Keyboard shortcuts: F1 search, F2 pay, F3 print, ESC cancel. - Grid layout for touch screens. - Numeric keypad always visible. - Cart persists on refresh. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SUBSCRIPTION PLANS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Starter $9.99/mo | $99.99/yr — 100 products, 1 user Business $24.99/mo | $249.99/yr — 1K products, AI basic Professional $44.99/mo | $449.99/yr — 10K products, API Enterprise $99.99/mo | $999.99/yr — Unlimited, White Label ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ HOSTING MAP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Panel: hPanel (Hostinger) Sections: Website | Files | Databases | Advanced | Subdomains Node.js: 18.x–24.x | PM: npm/yarn/pnpm FTP: ftp://148.230.89.46 | Path: public_html DB: MySQL via phpMyAdmin + Remote MySQL Backup: Daily, Boston DC ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ AI CORE RESPONSIBILITIES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Auto-detect low stock → suggest reorder. - Predict best-selling hours → suggest staffing. - Analyze sales patterns → suggest promotions. - Detect anomalies (fraud/errors). - Generate invoices/reports in AR/EN. - Chat assistant for store owners. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ OUTPUT FORMAT RULES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - Always return: Schema → Models → Controllers → Views. - Use PDO with prepared statements (no raw SQL). - Validate all inputs server + client side. - Use UTF-8 mb4 for Arabic support. - Document each function with PHPDoc. - Provide seed data when generating new modules. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DELIVERABLES PER REQUEST ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. SQL schema (CREATE + INDEXES + FK). 2. PHP Models (PDO CRUD). 3. PHP Controllers (REST endpoints). 4. Blade/Twig Views (bilingual RTL/LTR). 5. JS frontend (Vue/React component). 6. API docs (OpenAPI 3.0). 7. Deployment steps (Hostinger). 8. AI prompts for auto-suggestions. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BRAND VOICE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Professional, precise, bilingual, merchant-friendly. Always explain the "why" behind architecture choices. Prioritize speed, stability, and clarity.
📌 القسم الثامن: خطوات التنفيذ على الاستضافة
| # | الخطوة | الأداة |
|---|---|---|
| 1 | إنشاء Subdomain pos3.twisttaste.com | hPanel → Subdomains |
| 2 | تفعيل SSL | hPanel → SSL |
| 3 | إنشاء قاعدة بيانات zezo_pos | MySQL Databases |
| 4 | رفع ملفات PHP إلى public_html | FTP / File Manager |
| 5 | استيراد Schema عبر phpMyAdmin | SQL Import |
| 6 | ضبط .env (DB, AI Key) | File Manager |
| 7 | تفعيل Cron للنسخ الاحتياطي | Cron Jobs |
| 8 | اختبار POS + الترقية للباقة | Dashboard |
✅ الخلاصة النهائية
تم إعادة بناء المنصة بالكامل في 8 أقسام:
- تعريف المنصة — هوية ورؤية ورسالة
- تحليل البيانات — 26 صنف سجائر + بطاقات + إجماليات
- قاعدة البيانات — 14 جدول كامل بالعلاقات
- الواجهات — 15 شاشة مفصلة
- لوحة الاستضافة — خريطة كاملة
- الباقات — 4 خطط شهرية/سنوية
- البرومبت الاحترافي — جاهز للاستخدام مع أي AI
- خطوات التنفيذ — 8 خطوات عملية
المنصة الآن جاهزة للبناء الفوري على pos3.twisttaste.com بلغة PHP + MySQL، مع دعم كامل للعربية والإنجليزية، ومحرك ذكاء اصطناعي مدمج.
🚀 Zezo AI Build Platform — التوسعة الكاملة (الجزء الثاني)
📌 القسم التاسع: الكود الكامل بلغة PHP (Production-Ready)
9.1 هيكل المشروع (Project Structure)
text
zezo-pos/ ├── public/ # Web root (public_html) │ ├── index.php # Front Controller │ ├── .htaccess # URL Rewriting │ ├── assets/ │ │ ├── css/ │ │ ├── js/ │ │ └── img/ │ └── uploads/ ├── app/ │ ├── Core/ │ │ ├── Database.php # PDO Singleton │ │ ├── Router.php # Simple Router │ │ ├── Controller.php # Base Controller │ │ ├── Model.php # Base Model │ │ ├── Request.php │ │ ├── Response.php │ │ ├── Auth.php # JWT / Session │ │ ├── Validator.php │ │ └── Lang.php # AR/EN │ ├── Controllers/ │ │ ├── AuthController.php │ │ ├── PosController.php │ │ ├── ProductController.php │ │ ├── StockController.php │ │ ├── CardController.php │ │ ├── TotalsController.php │ │ ├── ReportController.php │ │ ├── PlanController.php │ │ └── AiController.php │ ├── Models/ │ │ ├── User.php │ │ ├── Store.php │ │ ├── Product.php │ │ ├── Sale.php │ │ ├── Machine.php │ │ ├── Plan.php │ │ └── Subscription.php │ ├── Services/ │ │ ├── AiService.php │ │ ├── PdfService.php │ │ ├── ExcelService.php │ │ └── BackupService.php │ └── Views/ │ ├── layouts/ │ ├── pos/ │ ├── products/ │ ├── reports/ │ └── auth/ ├── config/ │ ├── app.php │ ├── database.php │ └── ai.php ├── storage/ │ ├── logs/ │ ├── cache/ │ └── backups/ ├── database/ │ ├── migrations/ │ └── seeds/ ├── vendor/ ├── composer.json └── .env
9.2 الملف الأساسي: public/index.php
php
<?php
declare(strict_types=1);
/**
* Zezo AI POS — Front Controller
* @package Zezo\POS
* @version 1.0
*/
define('BASE_PATH', dirname(__DIR__));
define('APP_START', microtime(true));
require BASE_PATH . '/vendor/autoload.php';
use Zezo\Core\Router;
use Zezo\Core\Request;
use Zezo\Core\Lang;
// تحميل متغيرات البيئة
$dotenv = Dotenv\Dotenv::createImmutable(BASE_PATH);
$dotenv->load();
// تهيئة اللغة (AR/EN)
Lang::init($_SESSION['lang'] ?? 'ar');
// تشغيل الراوتر
$router = new Router();
require BASE_PATH . '/routes/web.php';
require BASE_PATH . '/routes/api.php';
try {
$router->dispatch(Request::capture());
} catch (\Throwable $e) {
http_response_code(500);
if ($_ENV['APP_DEBUG'] === 'true') {
echo "<pre>" . $e->getMessage() . "\n" . $e->getTraceAsString() . "</pre>";
} else {
require BASE_PATH . '/app/Views/errors/500.php';
}
}
9.3 كلاس قاعدة البيانات: app/Core/Database.php
php
<?php
declare(strict_types=1);
namespace Zezo\Core;
use PDO;
use PDOException;
/**
* PDO Singleton — اتصال قاعدة بيانات آمن
*/
final class Database
{
private static ?PDO $instance = null;
private function __construct() {}
public static function getInstance(): PDO
{
if (self::$instance === null) {
$cfg = require BASE_PATH . '/config/database.php';
$dsn = sprintf(
'mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4',
$cfg['host'], $cfg['port'], $cfg['database']
);
try {
self::$instance = new PDO($dsn, $cfg['username'], $cfg['password'], [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",
]);
} catch (PDOException $e) {
error_log('DB Connection Failed: ' . $e->getMessage());
throw new \RuntimeException('Database connection error');
}
}
return self::$instance;
}
public static function query(string $sql, array $params = []): \PDOStatement
{
$stmt = self::getInstance()->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public static function beginTransaction(): void
{
self::getInstance()->beginTransaction();
}
public static function commit(): void
{
self::getInstance()->commit();
}
public static function rollback(): void
{
if (self::getInstance()->inTransaction()) {
self::getInstance()->rollBack();
}
}
}
9.4 النموذج الأساسي: app/Core/Model.php
php
<?php
declare(strict_types=1);
namespace Zezo\Core;
/**
* Base Model — CRUD عام لكل الجداول
*/
abstract class Model
{
protected string $table;
protected string $primaryKey = 'id';
protected array $fillable = [];
public function find(int $id): ?array
{
$stmt = Database::query(
"SELECT * FROM {$this->table} WHERE {$this->primaryKey} = ? LIMIT 1",
[$id]
);
return $stmt->fetch() ?: null;
}
public function all(array $where = [], int $limit = 100, int $offset = 0): array
{
$sql = "SELECT * FROM {$this->table}";
$params = [];
if (!empty($where)) {
$clauses = [];
foreach ($where as $k => $v) {
$clauses[] = "$k = ?";
$params[] = $v;
}
$sql .= ' WHERE ' . implode(' AND ', $clauses);
}
$sql .= " LIMIT $limit OFFSET $offset";
return Database::query($sql, $params)->fetchAll();
}
public function create(array $data): int
{
$data = array_intersect_key($data, array_flip($this->fillable));
$cols = implode(',', array_keys($data));
$ph = implode(',', array_fill(0, count($data), '?'));
Database::query(
"INSERT INTO {$this->table} ($cols) VALUES ($ph)",
array_values($data)
);
return (int) Database::getInstance()->lastInsertId();
}
public function update(int $id, array $data): bool
{
$data = array_intersect_key($data, array_flip($this->fillable));
if (empty($data)) return false;
$sets = implode(',', array_map(fn($k) => "$k = ?", array_keys($data)));
$params = array_values($data);
$params[] = $id;
$stmt = Database::query(
"UPDATE {$this->table} SET $sets WHERE {$this->primaryKey} = ?",
$params
);
return $stmt->rowCount() > 0;
}
public function delete(int $id): bool
{
$stmt = Database::query(
"DELETE FROM {$this->table} WHERE {$this->primaryKey} = ?",
[$id]
);
return $stmt->rowCount() > 0;
}
public function count(array $where = []): int
{
$sql = "SELECT COUNT(*) FROM {$this->table}";
$params = [];
if (!empty($where)) {
$clauses = [];
foreach ($where as $k => $v) {
$clauses[] = "$k = ?";
$params[] = $v;
}
$sql .= ' WHERE ' . implode(' AND ', $clauses);
}
return (int) Database::query($sql, $params)->fetchColumn();
}
}
9.5 نموذج المنتجات: app/Models/Product.php
php
<?php
declare(strict_types=1);
namespace Zezo\Models;
use Zezo\Core\Model;
use Zezo\Core\Database;
class Product extends Model
{
protected string $table = 'products';
protected array $fillable = [
'store_id','category_id','sku','name_ar','name_en','barcode',
'unit','cost','price','tax_rate','stock_qty','min_stock','is_active'
];
/** بحث بالباركود (لشاشة POS) */
public function findByBarcode(int $storeId, string $barcode): ?array
{
$stmt = Database::query(
"SELECT * FROM products WHERE store_id = ? AND barcode = ? AND is_active = 1 LIMIT 1",
[$storeId, $barcode]
);
return $stmt->fetch() ?: null;
}
/** بحث نصي عربي/إنجليزي */
public function search(int $storeId, string $term, int $limit = 20): array
{
$like = "%$term%";
return Database::query(
"SELECT * FROM products
WHERE store_id = ? AND is_active = 1
AND (name_ar LIKE ? OR name_en LIKE ? OR sku LIKE ? OR barcode LIKE ?)
ORDER BY name_ar LIMIT $limit",
[$storeId, $like, $like, $like, $like]
)->fetchAll();
}
/** الأصناف منخفضة المخزون */
public function lowStock(int $storeId): array
{
return Database::query(
"SELECT * FROM products
WHERE store_id = ? AND stock_qty <= min_stock AND is_active = 1
ORDER BY stock_qty ASC",
[$storeId]
)->fetchAll();
}
/** جرد يومي — Start/Buy/End/Sell */
public function snapshot(int $storeId, string $date): array
{
return Database::query(
"SELECT p.id, p.name_ar, p.name_en, p.price,
s.qty_start, s.qty_buy, s.qty_end, s.qty_sell
FROM products p
LEFT JOIN stock_snapshots s
ON s.product_id = p.id AND s.snapshot_date = ?
WHERE p.store_id = ? AND p.is_active = 1
ORDER BY p.name_ar",
[$date, $storeId]
)->fetchAll();
}
}
9.6 كنترولر نقطة البيع: app/Controllers/PosController.php
php
<?php
declare(strict_types=1);
namespace Zezo\Controllers;
use Zezo\Core\Controller;
use Zezo\Core\Database;
use Zezo\Models\Product;
use Zezo\Models\Sale;
class PosController extends Controller
{
/** GET /pos — شاشة البيع */
public function index(): void
{
$storeId = $this->auth()->storeId();
$products = (new Product())->all(['store_id' => $storeId], 200);
$this->view('pos/index', [
'products' => $products,
'title' => 'نقطة البيع — POS',
]);
}
/** POST /api/pos/sale — إنشاء فاتورة (AJAX سريع) */
public function store(): void
{
$data = $this->request()->json();
$this->validate($data, [
'items' => 'required|array|min:1',
'payment_method' => 'required|in:cash,visa,mojana,mixed',
]);
$storeId = $this->auth()->storeId();
$cashierId = $this->auth()->id();
$invoiceNo = 'INV-' . date('Ymd') . '-' . str_pad((string)random_int(1, 9999), 4, '0', STR_PAD_LEFT);
Database::beginTransaction();
try {
$subtotal = 0;
foreach ($data['items'] as $it) {
$subtotal += $it['price'] * $it['qty'];
}
$tax = $data['tax'] ?? 0;
$discount = $data['discount'] ?? 0;
$total = $subtotal + $tax - $discount;
$saleId = (new Sale())->create([
'store_id' => $storeId,
'cashier_id' => $cashierId,
'invoice_no' => $invoiceNo,
'subtotal' => $subtotal,
'tax' => $tax,
'discount' => $discount,
'total' => $total,
'payment_method' => $data['payment_method'],
'paid_amount' => $data['paid_amount'] ?? $total,
'change_amount' => ($data['paid_amount'] ?? $total) - $total,
'status' => 'completed',
]);
foreach ($data['items'] as $it) {
Database::query(
"INSERT INTO sale_items (sale_id, product_id, qty, price, cost, total)
VALUES (?, ?, ?, ?, ?, ?)",
[$saleId, $it['product_id'], $it['qty'], $it['price'],
$it['cost'] ?? 0, $it['qty'] * $it['price']]
);
// خصم المخزون
Database::query(
"UPDATE products SET stock_qty = stock_qty - ? WHERE id = ? AND store_id = ?",
[$it['qty'], $it['product_id'], $storeId]
);
}
Database::commit();
$this->json([
'success' => true,
'sale_id' => $saleId,
'invoice_no' => $invoiceNo,
'total' => $total,
]);
} catch (\Throwable $e) {
Database::rollback();
$this->json(['success' => false, 'error' => 'فشل حفظ الفاتورة'], 500);
}
}
}
9.7 كنترولر الجرد اليومي: app/Controllers/StockController.php
php
<?php
declare(strict_types=1);
namespace Zezo\Controllers;
use Zezo\Core\Controller;
use Zezo\Core\Database;
use Zezo\Models\Product;
class StockController extends Controller
{
/** GET /stock — شاشة الجرد اليومي */
public function index(): void
{
$storeId = $this->auth()->storeId();
$date = $_GET['date'] ?? date('Y-m-d');
$rows = (new Product())->snapshot($storeId, $date);
$this->view('stock/index', [
'rows' => $rows,
'date' => $date,
]);
}
/** POST /api/stock/save — حفظ الجرد */
public function save(): void
{
$rows = $this->request()->json()['rows'] ?? [];
$storeId = $this->auth()->storeId();
$date = $this->request()->json()['date'] ?? date('Y-m-d');
Database::beginTransaction();
try {
foreach ($rows as $r) {
Database::query(
"INSERT INTO stock_snapshots
(store_id, product_id, snapshot_date, qty_start, qty_buy, qty_end, qty_sell, created_by)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
qty_start = VALUES(qty_start),
qty_buy = VALUES(qty_buy),
qty_end = VALUES(qty_end),
qty_sell = VALUES(qty_sell)",
[
$storeId, $r['product_id'], $date,
$r['start'] ?? 0, $r['buy'] ?? 0,
$r['end'] ?? 0, $r['sell'] ?? 0,
$this->auth()->id(),
]
);
Database::query(
"UPDATE products SET stock_qty = ? WHERE id = ? AND store_id = ?",
[$r['end'] ?? 0, $r['product_id'], $storeId]
);
}
Database::commit();
$this->json(['success' => true, 'count' => count($rows)]);
} catch (\Throwable $e) {
Database::rollback();
$this->json(['success' => false, 'error' => $e->getMessage()], 500);
}
}
}
9.8 كنترولر البطاقات: app/Controllers/CardController.php
php
<?php
declare(strict_types=1);
namespace Zezo\Controllers;
use Zezo\Core\Controller;
use Zezo\Core\Database;
class CardController extends Controller
{
public function index(): void
{
$storeId = $this->auth()->storeId();
$machines = Database::query(
"SELECT * FROM machines WHERE store_id = ? AND is_active = 1",
[$storeId]
)->fetchAll();
$this->view('cards/index', ['machines' => $machines]);
}
/** POST /api/cards/save */
public function save(): void
{
$d = $this->request()->json();
$storeId = $this->auth()->storeId();
$date = $d['date'] ?? date('Y-m-d');
Database::query(
"INSERT INTO card_snapshots
(store_id, machine_id, snapshot_date, balance_start, balance_end, commission, added_amount)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
balance_start = VALUES(balance_start),
balance_end = VALUES(balance_end),
commission = VALUES(commission),
added_amount = VALUES(added_amount)",
[
$storeId, $d['machine_id'], $date,
$d['start'] ?? 0, $d['end'] ?? 0,
$d['cms'] ?? 0, $d['add'] ?? 0,
]
);
$this->json(['success' => true]);
}
}
9.9 كنترولر الإجماليات: app/Controllers/TotalsController.php
php
<?php
declare(strict_types=1);
namespace Zezo\Controllers;
use Zezo\Core\Controller;
use Zezo\Core\Database;
class TotalsController extends Controller
{
public function index(): void
{
$storeId = $this->auth()->storeId();
$date = $_GET['date'] ?? date('Y-m-d');
$row = Database::query(
"SELECT * FROM daily_totals WHERE store_id = ? AND total_date = ?",
[$storeId, $date]
)->fetch();
$this->view('totals/index', ['row' => $row, 'date' => $date]);
}
public function save(): void
{
$d = $this->request()->json();
$storeId = $this->auth()->storeId();
$date = $d['date'] ?? date('Y-m-d');
Database::query(
"INSERT INTO daily_totals
(store_id, total_date, total_amount, total_cash, cash, visa_mojana, notes)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
total_amount = VALUES(total_amount),
total_cash = VALUES(total_cash),
cash = VALUES(cash),
visa_mojana = VALUES(visa_mojana),
notes = VALUES(notes)",
[
$storeId, $date,
$d['total_amount'] ?? 0,
$d['total_cash'] ?? 0,
$d['cash'] ?? 0,
$d['visa_mojana'] ?? 0,
$d['notes'] ?? null,
]
);
$this->json(['success' => true]);
}
}
9.10 خدمة الذكاء الاصطناعي: app/Services/AiService.php
php
<?php
declare(strict_types=1);
namespace Zezo\Services;
use Zezo\Core\Database;
/**
* Zezo AI Core — محرك الاقتراحات الذكية
*/
class AiService
{
/**
* اقتراح إعادة الطلب للأصناف المنخفضة
*/
public function suggestReorder(int $storeId): array
{
$rows = Database::query(
"SELECT id, name_ar, name_en, stock_qty, min_stock, cost, price
FROM products
WHERE store_id = ? AND stock_qty <= min_stock AND is_active = 1",
[$storeId]
)->fetchAll();
$suggestions = [];
foreach ($rows as $r) {
$deficit = max(0, $r['min_stock'] * 3 - $r['stock_qty']);
$suggestions[] = [
'product_id' => $r['id'],
'name' => $r['name_ar'] ?: $r['name_en'],
'current_qty' => $r['stock_qty'],
'suggest_qty' => $deficit,
'reason_ar' => "المخزون أقل من الحد الأدنى ({$r['min_stock']})",
'reason_en' => "Stock below minimum ({$r['min_stock']})",
'priority' => $r['stock_qty'] === 0 ? 'critical' : 'high',
];
}
return $suggestions;
}
/**
* تحليل ساعات الذروة
*/
public function peakHours(int $storeId, int $days = 30): array
{
return Database::query(
"SELECT HOUR(created_at) AS hr, COUNT(*) AS cnt, SUM(total) AS revenue
FROM sales
WHERE store_id = ? AND created_at >= DATE_SUB(NOW(), INTERVAL ? DAY)
GROUP BY HOUR(created_at)
ORDER BY cnt DESC",
[$storeId, $days]
)->fetchAll();
}
/**
* الأصناف الأكثر مبيعًا
*/
public function topProducts(int $storeId, int $limit = 10): array
{
return Database::query(
"SELECT p.name_ar, p.name_en, SUM(si.qty) AS sold, SUM(si.total) AS revenue
FROM sale_items si
JOIN products p ON p.id = si.product_id
JOIN sales s ON s.id = si.sale_id
WHERE s.store_id = ?
GROUP BY p.id
ORDER BY sold DESC
LIMIT $limit",
[$storeId]
)->fetchAll();
}
/**
* كشف الشذوذ (Anomaly Detection)
*/
public function detectAnomalies(int $storeId): array
{
$avg = Database::query(
"SELECT AVG(total) AS avg_total, STDDEV(total) AS std_total
FROM sales WHERE store_id = ? AND created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)",
[$storeId]
)->fetch();
if (!$avg || !$avg['std_total']) return [];
$threshold = (float)$avg['avg_total'] + 3 * (float)$avg['std_total'];
return Database::query(
"SELECT id, invoice_no, total, created_at
FROM sales
WHERE store_id = ? AND total > ? AND created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
ORDER BY total DESC LIMIT 20",
[$storeId, $threshold]
)->fetchAll();
}
/**
* اقتراح عروض ترويجية
*/
public function suggestPromotions(int $storeId): array
{
$slow = Database::query(
"SELECT p.id, p.name_ar, p.price,
COALESCE(SUM(si.qty),0) AS sold_30d
FROM products p
LEFT JOIN sale_items si ON si.product_id = p.id
LEFT JOIN sales s ON s.id = si.sale_id
AND s.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
WHERE p.store_id = ?
GROUP BY p.id
HAVING sold_30d < 5
ORDER BY sold_30d ASC LIMIT 10",
[$storeId]
)->fetchAll();
return array_map(fn($p) => [
'product_id' => $p['id'],
'name' => $p['name_ar'],
'suggested' => 'خصم 15% لمدة أسبوع',
'expected_uplift' => '30-50%',
'reason' => 'منتج بطيء الحركة',
], $slow);
}
}
📌 القسم العاشر: الواجهة الأمامية (Frontend)
10.1 شاشة POS كاملة (HTML + JS)
html
<!-- app/Views/pos/index.php -->
<!DOCTYPE html>
<html lang="<?= Lang::current() ?>" dir="<?= Lang::dir() ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= __('pos.title') ?></title>
<link rel="stylesheet" href="/assets/css/pos.css">
</head>
<body class="pos-body">
<div id="pos-app">
<!-- الشريط العلوي -->
<header class="pos-header">
<div class="logo">Zezo POS</div>
<input type="text" id="barcode-input"
placeholder="<?= __('pos.scan_barcode') ?>" autofocus>
<div class="cashier-info">
<span><?= __('pos.cashier') ?>: <?= Auth::user()['name'] ?></span>
<span id="clock"></span>
</div>
</header>
<!-- الشبكة والسلة -->
<main class="pos-main">
<section class="products-grid" id="products-grid">
<?php foreach ($products as $p): ?>
<button class="product-tile"
data-id="<?= $p['id'] ?>"
data-price="<?= $p['price'] ?>"
data-name="<?= htmlspecialchars($p['name_ar']) ?>">
<span class="p-name"><?= htmlspecialchars($p['name_ar']) ?></span>
<span class="p-price"><?= number_format((float)$p['price'], 2) ?></span>
</button>
<?php endforeach; ?>
</section>
<aside class="cart-panel">
<h2><?= __('pos.cart') ?></h2>
<ul id="cart-items"></ul>
<div class="cart-totals">
<div><span><?= __('pos.subtotal') ?></span><b id="subtotal">0.00</b></div>
<div><span><?= __('pos.tax') ?></span><b id="tax">0.00</b></div>
<div class="grand"><span><?= __('pos.total') ?></span><b id="total">0.00</b></div>
</div>
<div class="payment-methods">
<button data-method="cash"><?= __('pos.cash') ?></button>
<button data-method="visa"><?= __('pos.visa') ?></button>
<button data-method="mojana"><?= __('pos.mojana') ?></button>
</div>
<div class="actions">
<button id="btn-pay"><?= __('pos.pay') ?> (F2)</button>
<button id="btn-cancel"><?= __('pos.cancel') ?> (ESC)</button>
</div>
</aside>
</main>
</div>
<script src="/assets/js/pos.js" type="module"></script>
</body>
</html>
10.2 منطق POS (JavaScript)
javascript
// public/assets/js/pos.js
class ZezoPOS {
constructor() {
this.cart = [];
this.taxRate = 0; // 15% اختياري
this.bindEvents();
this.tickClock();
this.loadDraft();
}
bindEvents() {
document.querySelectorAll('.product-tile').forEach(tile => {
tile.addEventListener('click', () => this.addItem(tile.dataset));
});
document.getElementById('barcode-input')
.addEventListener('keydown', e => {
if (e.key === 'Enter') this.scanBarcode(e.target.value);
});
document.getElementById('btn-pay').addEventListener('click', () => this.pay('cash'));
document.getElementById('btn-cancel').addEventListener('click', () => this.clearCart());
document.querySelectorAll('.payment-methods button').forEach(b => {
b.addEventListener('click', () => this.pay(b.dataset.method));
});
document.addEventListener('keydown', e => {
if (e.key === 'F2') { e.preventDefault(); this.pay('cash'); }
if (e.key === 'Escape') this.clearCart();
});
}
addItem({ id, name, price }) {
const existing = this.cart.find(i => i.product_id == id);
if (existing) existing.qty++;
else this.cart.push({ product_id: +id, name, price: +price, qty: 1 });
this.render();
this.saveDraft();
}
async scanBarcode(code) {
if (!code) return;
const r = await fetch(`/api/products/barcode/${encodeURIComponent(code)}`);
const p = await r.json();
if (p && p.id) this.addItem({ id: p.id, name: p.name_ar, price: p.price });
else alert('المنتج غير موجود: ' + code);
document.getElementById('barcode-input').value = '';
}
render() {
const ul = document.getElementById('cart-items');
ul.innerHTML = '';
let subtotal = 0;
this.cart.forEach((it, i) => {
subtotal += it.price * it.qty;
const li = document.createElement('li');
li.innerHTML = `
<span>${it.name}</span>
<input type="number" value="${it.qty}" min="1" data-i="${i}">
<span>${(it.price * it.qty).toFixed(2)}</span>
<button data-rm="${i}">×</button>`;
ul.appendChild(li);
});
ul.querySelectorAll('input[type=number]').forEach(inp => {
inp.addEventListener('change', e => {
this.cart[e.target.dataset.i].qty = +e.target.value;
this.render();
});
});
ul.querySelectorAll('button[data-rm]').forEach(btn => {
btn.addEventListener('click', e => {
this.cart.splice(+e.target.dataset.rm, 1);
this.render();
});
});
const tax = subtotal * this.taxRate;
document.getElementById('subtotal').textContent = subtotal.toFixed(2);
document.getElementById('tax').textContent = tax.toFixed(2);
document.getElementById('total').textContent = (subtotal + tax).toFixed(2);
}
async pay(method) {
if (this.cart.length === 0) return alert('السلة فارغة');
const total = parseFloat(document.getElementById('total').textContent);
const payload = {
items: this.cart,
payment_method: method,
paid_amount: total,
tax: total * this.taxRate
};
const res = await fetch('/api/pos/sale', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-CSRF': window.CSRF },
body: JSON.stringify(payload)
});
const data = await res.json();
if (data.success) {
this.printReceipt(data);
this.clearCart();
} else {
alert('خطأ: ' + (data.error || 'unknown'));
}
}
printReceipt({ invoice_no, total }) {
const w = window.open('', '_blank', 'width=300,height=600');
w.document.write(`
<pre style="font-family:monospace">
= Zezo POS =
فاتورة: ${invoice_no}
التاريخ: ${new Date().toLocaleString('ar')}
──────────────────
الإجمالي: ${total}
شكرًا لزيارتكم
</pre>`);
w.print();
w.close();
}
clearCart() {
this.cart = [];
this.render();
localStorage.removeItem('pos_draft');
}
saveDraft() { localStorage.setItem('pos_draft', JSON.stringify(this.cart)); }
loadDraft() {
const d = localStorage.getItem('pos_draft');
if (d) { this.cart = JSON.parse(d); this.render(); }
}
tickClock() {
setInterval(() => {
document.getElementById('clock').textContent = new Date().toLocaleTimeString('ar');
}, 1000);
}
}
new ZezoPOS();
📌 القسم الحادي عشر: المسارات (Routes)
routes/web.php
php
<?php
use Zezo\Core\Router;
$router->get('/', [\Zezo\Controllers\DashboardController::class, 'index']);
$router->get('/login', [\Zezo\Controllers\AuthController::class, 'showLogin']);
$router->post('/login', [\Zezo\Controllers\AuthController::class, 'login']);
$router->get('/logout', [\Zezo\Controllers\AuthController::class, 'logout']);
$router->get('/pos', [\Zezo\Controllers\PosController::class, 'index']);
$router->get('/products', [\Zezo\Controllers\ProductController::class, 'index']);
$router->get('/stock', [\Zezo\Controllers\StockController::class, 'index']);
$router->get('/cards', [\Zezo\Controllers\CardController::class, 'index']);
$router->get('/totals', [\Zezo\Controllers\TotalsController::class, 'index']);
$router->get('/reports', [\Zezo\Controllers\ReportController::class, 'index']);
$router->get('/subscription', [\Zezo\Controllers\PlanController::class, 'index']);
$router->get('/ai', [\Zezo\Controllers\AiController::class, 'index']);
routes/api.php
php
<?php
$router->post('/api/pos/sale', [\Zezo\Controllers\PosController::class, 'store']);
$router->get ('/api/products/barcode/{code}',[\Zezo\Controllers\ProductController::class, 'byBarcode']);
$router->post('/api/products', [\Zezo\Controllers\ProductController::class, 'store']);
$router->put ('/api/products/{id}', [\Zezo\Controllers\ProductController::class, 'update']);
$router->delete('/api/products/{id}', [\Zezo\Controllers\ProductController::class, 'destroy']);
$router->post('/api/stock/save', [\Zezo\Controllers\StockController::class, 'save']);
$router->post('/api/cards/save', [\Zezo\Controllers\CardController::class, 'save']);
$router->post('/api/totals/save', [\Zezo\Controllers\TotalsController::class, 'save']);
$router->get ('/api/ai/suggest-reorder', [\Zezo\Controllers\AiController::class, 'reorder']);
$router->get ('/api/ai/peak-hours', [\Zezo\Controllers\AiController::class, 'peakHours']);
$router->get ('/api/ai/top-products', [\Zezo\Controllers\AiController::class, 'topProducts']);
$router->get ('/api/ai/anomalies', [\Zezo\Controllers\AiController::class, 'anomalies']);
$router->get ('/api/ai/promotions', [\Zezo\Controllers\AiController::class, 'promotions']);
📌 القسم الثاني عشر: البيانات الأولية (Seed Data)
sql
-- ============================================
-- Seed: 26 صنف سجائر من الورقة الأصلية
-- ============================================
INSERT INTO stores (owner_id, name, subdomain, currency, status)
VALUES (1, 'Twist Taste Store', 'pos3', 'SAR', 'active');
INSERT INTO categories (store_id, name_ar, name_en) VALUES
(1, 'سجائر', 'Cigarettes'),
(1, 'شيشة', 'Shisha'),
(1, 'ولاعات', 'Lighters'),
(1, 'بطاقات', 'Cards');
INSERT INTO products (store_id, category_id, name_ar, name_en, price) VALUES
(1, 1, 'وينستون', 'WINSTON', 20),
(1, 1, 'بال مال', 'PALLMALL', 19),
(1, 1, 'شيستر', 'CHESTER', 19),
(1, 1, 'وست', 'WEST', 19),
(1, 1, 'غولد ليف 18', 'GOLDLEAF 18', 18),
(1, 1, 'مونت كارلو', 'MONTE CARLO', 18),
(1, 1, 'ديفيدوف صغير', 'DAVIDOFF SH', 20),
(1, 1, 'بارليمنت', 'PANLIAMANT', 20),
(1, 1, 'ال ام', 'L&M', 22),
(1, 1, 'روثمان', 'ROTHMANS', 21),
(1, 1, 'مارلبورو', 'MARLBORO', 25),
(1, 1, 'ديفيدوف كبير', 'DAVIDOFF L', 29),
(1, 1, 'كنت', 'KENT', 21),
(1, 1, 'دنهل', 'DINHIL', 20),
(1, 1, 'مارلبورو صغير', 'MARLBORO S', 24),
(1, 1, 'وينستون 19', 'WINSTON TALL 19', 19),
(1, 1, 'وست 18', 'WEST TALL 18', 18),
(1, 1, 'بنسون', 'BENSON', 25),
(1, 1, 'غولد ليف 16', 'GOLDLEAF 16', 16),
(1, 3, 'ولاعة', 'LIGHTER 1SR', 1),
(1, 1, 'وينستون دي ماكس', 'WINSTON DU MAX', 21),
(1, 2, 'شيشة 15', 'SHISHA 15', 15),
(1, 2, 'شيشة 20', 'SHISHA 20', 20),
(1, 2, 'شيشة 80', 'SHISHA 80', 80),
(1, 1, 'ال ام 18', 'L&M 18', 19),
(1, 1, 'بال مال 16', 'PALLMALL 16', 16);
INSERT INTO machines (store_id, name, is_active) VALUES
(1, 'Cards No.1', 1),
(1, 'Cards No.2', 1),
(1, 'Cards No.3', 1);
INSERT INTO plans (code, name_ar, name_en, price_monthly, price_yearly,
max_products, max_users, max_stores, ai_enabled) VALUES
('starter', 'المبتدئ', 'Starter', 9.99, 99.99, 100, 1, 1, 0),
('business', 'الأعمال', 'Business', 24.99, 249.99, 1000, 5, 1, 1),
('professional', 'الاحترافي', 'Professional', 44.99, 449.99, 10000, 20, 5, 1),
('enterprise', 'المؤسسات', 'Enterprise', 99.99, 999.99, 999999, 999, 99, 1);
📌 القسم الثالث عشر: الأمان والحماية
| الطبقة | الإجراء |
|---|---|
| SQL Injection | PDO Prepared Statements في كل استعلام |
| XSS | htmlspecialchars() على كل مخرجات |
| CSRF | رمز CSRF لكل POST + X-CSRF header |
| Authentication | bcrypt (password_hash) + JWT اختياري |
| Session | session_regenerate_id + HttpOnly + SameSite |
| Rate Limiting | 60 req/min per IP على APIs |
| Input Validation | Validator class قبل أي DB write |
| File Upload | فحص MIME + حجم + امتداد |
| HTTPS | إجباري عبر .htaccess + HSTS |
| Logging | كل عملية حساسة → activity_log |
📌 القسم الرابع عشر: تحسين الأداء (Performance)
sql
-- فهارس إضافية للأداء CREATE INDEX idx_products_store_active ON products(store_id, is_active); CREATE INDEX idx_sales_store_date ON sales(store_id, created_at); CREATE INDEX idx_sale_items_sale ON sale_items(sale_id); CREATE INDEX idx_snapshots_store_date ON stock_snapshots(store_id, snapshot_date); CREATE INDEX idx_card_snap_machine ON card_snapshots(machine_id, snapshot_date);
| التحسين | التأثير |
|---|---|
| Redis Cache | تخزين نتائج التقارير 5 دقائق |
| OPcache | تسريع PHP 3x |
| CDN | ملفات ثابتة عبر Cloudflare |
| Lazy Loading | تحميل المنتجات 50 بالصفحة |
| IndexedDB | تخزين مؤقت في POS offline |
| Gzip + Brotli | ضغط الاستجابات |
| HTTP/3 | بروتوكول أسرع |
📌 القسم الخامس عشر: النسخ الاحتياطي والاستعادة
bash
#!/bin/bash # storage/scripts/backup.sh DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/home/u186331636/backups" DB_NAME="zezo_pos" DB_USER="u186331636_zezo" DB_PASS="****" # نسخ قاعدة البيانات mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz # نسخ الملفات tar -czf $BACKUP_DIR/files_$DATE.tar.gz /home/u186331636/public_html # حذف النسخ الأقدم من 30 يوم find $BACKUP_DIR -type f -mtime +30 -delete echo "✅ Backup completed: $DATE"
Cron Job:
text
0 3 * * * /home/u186331636/storage/scripts/backup.sh >> /home/u186331636/logs/backup.log 2>&1
📌 القسم السادس عشر: متغيرات البيئة .env
env
APP_NAME="Zezo AI POS" APP_ENV=production APP_DEBUG=false APP_URL=https://pos3.twisttaste.com APP_KEY=base64:your_random_32_bytes_key DB_HOST=localhost DB_PORT=3306 DB_DATABASE=u186331636_zezo_pos DB_USERNAME=u186331636_zezo DB_PASSWORD=strong_password_here SESSION_DRIVER=file SESSION_LIFETIME=120 AI_PROVIDER=openai AI_API_KEY=sk-xxxxx AI_MODEL=gpt-4o-mini AI_LANG=ar CACHE_DRIVER=redis REDIS_HOST=127.0.0.1 REDIS_PORT=6379 MAIL_HOST=smtp.hostinger.com MAIL_PORT=587 MAIL_USERNAME=noreply@twisttaste.com MAIL_PASSWORD=**** BACKUP_ENABLED=true BACKUP_RETENTION_DAYS=30
📌 القسم السابع عشر: دليل النشر خطوة بخطوة
المرحلة 1: التحضير
- تسجيل الدخول إلى hPanel
- التأكد من تفعيل SSL على
pos3.twisttaste.com - إنشاء قاعدة بيانات + مستخدم
المرحلة 2: الرفع
bash
# عبر SSH ssh u186331636@148.230.89.46 cd ~/public_html git clone https://github.com/yourrepo/zezo-pos.git . composer install --no-dev --optimize-autoloader cp .env.example .env nano .env # اضبط المتغيرات php database/migrate.php php database/seed.php
المرحلة 3: الصلاحيات
bash
chmod -R 755 storage/ chmod -R 755 public/uploads/ chmod 644 .env
المرحلة 4: اختبار
- زيارة
https://pos3.twisttaste.com - تسجيل الدخول
- اختبار POS (فاتورة تجريبية)
- اختبار API (
/api/products/barcode/WINSTON)
📌 القسم الثامن عشر: مصفوفة الميزات × الباقات
| الميزة | Starter | Business | Professional | Enterprise |
|---|---|---|---|---|
| POS أساسي | ✅ | ✅ | ✅ | ✅ |
| طباعة فاتورة | ✅ | ✅ | ✅ | ✅ |
| عدد الأصناف | 100 | 1,000 | 10,000 | ∞ |
| عدد المستخدمين | 1 | 5 | 20 | ∞ |
| عدد الفروع | 1 | 1 | 5 | ∞ |
| إدارة المخزون | ❌ | ✅ | ✅ | ✅ |
| جرد يومي | ❌ | ✅ | ✅ | ✅ |
| ماكينات البطاقات | ❌ | 3 | 10 | ∞ |
| تقارير AI | ❌ | أساسي | متقدم | كامل |
| API Access | ❌ | ❌ | ✅ | ✅ |
| White Label | ❌ | ❌ | ❌ | ✅ |
| دعم أولوية | ❌ | ✅ | ✅ | ✅ + مدير |
| SLA | ❌ | 99% | 99.5% | 99.9% |
| خادم مخصص | ❌ | ❌ | ❌ | ✅ |
📌 القسم التاسع عشر: خارطة الطريق (Roadmap)
Q4 2026 — الإطلاق
- ✅ POS أساسي + إدارة أصناف
- ✅ جرد يومي + بطاقات + إجماليات
- ✅ تقارير PDF/Excel
- ✅ دعم AR/EN
Q1 2027 — الذكاء
- 🤖 AI Chatbot للعملاء
- 📊 Predictive Analytics
- 🔔 تنبيهات ذكية للواتساب
- 📱 تطبيق موبايل (PWA)
Q2 2027 — التوسع
- 🌍 6 لغات إضافية
- 🔗 تكامل مع ZATCA (الفاتورة الإلكترونية)
- 💳 بوابة دفع مدمجة (Stripe/Moyasar)
- 🏪 Multi-branch advanced
Q3 2027 — Enterprise
- 🏢 White Label كامل
- ☁️ خوادم مخصصة
- 🔌 Marketplace للإضافات
- 📈 BI Dashboard متقدم
📌 القسم العشرون: البرومبت الاحترافي المحدّث (Master Prompt v2)
text
╔══════════════════════════════════════════════════════════════╗ ║ ZEZO AI BUILD PLATFORM — MASTER PROMPT v2.0 ║ ║ POS AI + Full Stack Architect ║ ╚══════════════════════════════════════════════════════════════╝ [ IDENTITY ] You are Zezo AI Build Platform — a senior full-stack engineer specializing in POS systems, PHP 8.2+, MySQL 8, AI integration, and bilingual (AR/EN) interfaces for crowded retail environments. [ CONTEXT ] - Domain: pos3.twisttaste.com - Hosting: Hostinger Cloud Professional (server1683, USA/MA) - IP: 148.230.89.46 | FTP: ftp://148.230.89.46 - Stack: PHP 8.2 / MySQL 8 / Vue 3 / Node.js optional - Languages: Arabic (RTL) + English (LTR) [ MISSION ] Transform raw inventory data (paper sheets, Excel, images) into production-ready POS systems with: 1. Normalized MySQL schema + FK + indexes 2. MVC PHP backend (PDO, prepared statements) 3. Bilingual responsive UI (mobile-first) 4. AI Core (reorder, peak hours, anomalies, promotions) 5. Subscription billing (4 tiers) 6. Deployment on Hostinger (SSL, cron, backup) [ DATA MODEL ] Tables: users, stores, categories, products, stock_snapshots, sales, sale_items, machines, card_snapshots, daily_totals, plans, subscriptions, activity_log, ai_settings. [ POS SPEED RULES ] - Barcode input < 100ms - Offline-first (IndexedDB sync) - Shortcuts: F1 search, F2 pay, F3 print, ESC cancel - Touch-optimized grid - Cart persists on refresh [ SUBSCRIPTION PLANS ] Starter $9.99/mo | $99.99/yr — 100 products Business $24.99/mo | $249.99/yr — 1K products + AI Professional $44.99/mo | $449.99/yr — 10K + API Enterprise $99.99/mo | $999.99/yr — Unlimited + White Label [ AI RESPONSIBILITIES ] - Auto reorder suggestions - Peak-hours analytics - Top-product ranking - Anomaly detection (fraud) - Promotion recommendations - AR/EN report generation - Chatbot for owners [ OUTPUT RULES ] Always return in this order: 1. SQL Schema (CREATE + INDEXES + FK) 2. Seed data (INSERT) 3. PHP Models (extends Model) 4. PHP Controllers (extends Controller) 5. Routes (web + api) 6. HTML/Blade views 7. JS frontend modules 8. Deployment steps 9. Security checklist 10. AI prompt extensions [ SECURITY CHECKLIST ] ✓ PDO prepared statements ✓ CSRF token on POST ✓ XSS escaping ✓ bcrypt passwords ✓ HTTPS enforced ✓ Rate limiting (60/min) ✓ Input validation ✓ File upload scan ✓ Activity logging [ PERFORMANCE ] ✓ Redis cache for reports ✓ OPcache enabled ✓ Gzip/Brotli compression ✓ CDN for assets ✓ Lazy loading (50/page) ✓ IndexedDB offline mode [ DELIVERABLES ] Every request must include: - Working code (no placeholders) - AR/EN strings - Comments in Arabic + English - Test data - Deployment note [ BRAND VOICE ] Professional. Precise. Bilingual. Merchant-friendly. Always explain WHY before HOW. Prioritize speed → stability → features. [ INITIALIZE ] When user provides raw data: 1. Parse and structure it 2. Map to existing schema (or extend) 3. Generate migration + seed 4. Generate API endpoints 5. Generate UI views 6. Provide AI suggestions 7. Provide deployment steps ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Ready. Awaiting data input. Speak AR/EN as needed. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ الخلاصة الموسّعة
تمت إضافة 12 قسمًا جديدًا مكمّلاً للأقسام الثمانية السابقة:
| # | القسم | المحتوى |
|---|---|---|
| 9 | كود PHP كامل | 10 ملفات production-ready |
| 10 | الواجهة الأمامية | POS كامل HTML+JS |
| 11 | المسارات | web.php + api.php |
| 12 | بيانات أولية | 26 صنف + 3 ماكينات + 4 باقات |
| 13 | الأمان | 10 طبقات حماية |
| 14 | الأداء | 7 تحسينات + فهارس |
| 15 | النسخ الاحتياطي | سكربت bash + cron |
| 16 | متغيرات البيئة | .env كامل |
| 17 | دليل النشر | 4 مراحل خطوة بخطوة |
| 18 | مصفوفة الميزات | مقارنة 4 باقات |
| 19 | خارطة الطريق | 4 أرباع 2026-2027 |
| 20 | Master Prompt v2 | برومبت محدّث شامل |
المنصة الآن جاهزة للتنفيذ الفوري — كل كود، قاعدة بيانات، واجهة، وبرومبت جاهز للنسخ واللصق في بيئة الإنتاج على pos3.twisttaste.com.
هل تريد أن أتابع بـ:
- 🔧 توليد ملفات الهجرة (migrations) كاملة؟
- 🎨 تصميم CSS كامل لشاشة POS؟
- 🤖 ربط AI API فعلي (OpenAI/Claude)؟
- 📱 تحويل POS إلى PWA (تطبيق موبايل)؟
- 📊 بناء لوحة تقارير BI متقدمة؟
أنت مهندس ومبرمج وصانع انظمة وباني قواعد البيانات الاحترافية وتحويل البيانات الى أنظمة الدور مهندس ومبرمج محترف احترافي تعرف كيف تقوم ببناء انظمة pos سريعة البيع في أماكن الزحمة والتفوق في الذكاء الاصطناعي ومعرفة كيف بناء الخوارزميات والدوال والوظائف والمتغيرات وتعرف كيف تقوم بتحويل البيانات الى انظمة pos سريعة البيع والادخال للمنتجات مع كافة تفاصيل انظمة pos
🧠 Zezo AI Build Platform — إعادة التعريف الكاملة والبناء الاحترافي
Zezo Ai Clude
قسم السجائر — Cigarettes / الدخان
بواسطة zezoai / أكتوبر 2, 2026
IMG20261002223450.jpg
قم بتحليل كافة البيانات كاملة وإعادة استخراج جميع البيانات كاملة وإعادة كتابتها
بالتأكيد. قمت بقراءة الصورة واستخراج البيانات الظاهرة فيها، بما في ذلك قسم السجائر/المخزون، الأسعار، إجمالي الحقول، قسم البطاقات، والماكينات.
- قسم السجائر — Cigarettes / الدخان
الجدول يحتوي على الأعمدة التالية:
Sell – بيع End – نهاية Buy – شراء Start – بداية Item – الصنف Price – السعر
— — — — WINSTON — وينستون 20
— — — — PALLMALL — بال مال 19
— — — — CHESTER — شيستر 19
— — — — WEST — وست 19
— — — — GOLDLEAF 18 — غولد ليف 18 18
— — — — MONTE CARLO — مونت كارلو 18
— — — — DAVIDOFF SH — ديفيدوف صغير 20
— — — — PANLIAMANT — بارليمنت 20
— — — — L&M — ال ام 22
— — — — ROTHMANS — روثمان 21
— — — — MARLBORO — مارلبورو 25
— — — — DAVIDOFF L — ديفيدوف كبير 29
— — — — KENT — كنت 21
— — — — DINHIL — دنهل 20
— — — — MARLBORO S — مارلبورو صغير 24
— — — — WINSTON TALL 19 — وينستون 19 19
— — — — WEST TALL 18 — وست 18 18
— — — — BENSON — بنسون 25
— — — — GOLDLEAF 16 — غولد ليف 16 16
— — — — LIGHTER 1SR — ولاعة 1
— — — — WINSTON DU MAX 21
— — — — SHISHA 15 15
— — — — SHISHA 20 20
— — — — SHISHA 80 80
— — — — L&M 18 — ال ام 18 19
— — — — PALLMALL 16 — بال مال 16 16
عدد الأصناف الظاهرة: 26 صنفًا.
ملاحظة: الأعمدة Start / Buy / End / Sell فارغة في الصورة، لذلك لم أضع أرقامًا غير موجودة.
- الأسعار المستخرجة
بصيغة مختصرة:
WINSTON = 20
PALLMALL = 19
CHESTER = 19
WEST = 19
GOLDLEAF 18 = 18
MONTE CARLO = 18
DAVIDOFF SH = 20
PANLIAMANT = 20
L&M = 22
ROTHMANS = 21
MARLBORO = 25
DAVIDOFF L = 29
KENT = 21
DINHIL = 20
MARLBORO S = 24
WINSTON TALL 19 = 19
WEST TALL 18 = 18
BENSON = 25
GOLDLEAF 16 = 16
LIGHTER 1SR = 1
WINSTON DU MAX = 21
SHISHA 15 = 15
SHISHA 20 = 20
SHISHA 80 = 80
L&M 18 = 19
PALLMALL 16 = 16
تحليل الأسعار
أعلى سعر: SHISHA 80 = 80
أدنى سعر: LIGHTER 1SR = 1
إجمالي أسعار الـ26 صنفًا إذا جُمعت مرة واحدة: 565
عدد الأصناف بسعر 20: 4 أصناف تقريبًا.
توجد مجموعة كبيرة ضمن نطاق 18–25.
DAVIDOFF L بسعر 29 هو أعلى سعر ضمن منتجات السجائر الظاهرة.
تنبيه: مبلغ 565 هو مجموع أسعار الوحدات المدرجة في الورقة، وليس إجمالي المبيعات؛ لأن كميات البداية/الشراء/النهاية/البيع غير مدخلة.
- إجمالي الكمية والنقد
أسفل جدول السجائر توجد خانتان:
Total Amount — مجموع الكمية
الخانة فارغة.
Total in CASH — مجموع النقد
الخانة فارغة.
أي أن الورقة تبدو كـ نموذج جرد/تسوية يومية يتم تعبئته لاحقًا بناءً على الكميات.
- قسم البطاقات — Cards
يوجد قسم مستقل بعنوان:
Cards — البطاقات
والأعمدة هي:
Add – شحن Cms – ربح End – باقي Start – بداية Machine – المكينة
— — — — Cards No.1 — مكينة رقم 1
— — — — Cards No.2 — مكينة رقم 2
— — — — Cards No.3 — مكينة رقم 3
جميع الخانات الرقمية في الصورة فارغة.
أي أن النموذج معد لتسجيل بيانات ثلاث ماكينات:
Cards No.1 — مكينة رقم 1
Cards No.2 — مكينة رقم 2
Cards No.3 — مكينة رقم 3
مع تسجيل:
Start = البداية
End = الباقي
Cms = الربح
Add = الشحن
- قسم Totals — الإجماليات
يوجد في نهاية الورقة:
Totals
ثم سطران:
البند القيمة
Cash — النقد —
Visa (Mojana) — شبكة (موازنة) —
والقيم غير مكتوبة في الصورة.
- إعادة كتابة الورقة بالكامل كنص منظم
CIGARETTES – الدخان
STOCK – المخزون
START – بداية
BUY – شراء
END – نهاية
SELL – بيع
ITEM – الصنف PRICE – السعر
WINSTON – وينستون 20
PALLMALL – بال مال 19
CHESTER – شيستر 19
WEST – وست 19
GOLDLEAF 18 – غولد ليف 18 18
MONTE CARLO – مونت كارلو 18
DAVIDOFF SH – ديفيدوف صغير 20
PANLIAMANT – بارليمنت 20
L&M – ال ام 22
ROTHMANS – روثمان 21
MARLBORO – مارلبورو 25
DAVIDOFF L – ديفيدوف كبير 29
KENT – كنت 21
DINHIL – دنهل 20
MARLBORO S – مارلبورو صغير 24
WINSTON TALL 19 – وينستون 19 19
WEST TALL 18 – وست 18 18
BENSON – بنسون 25
GOLDLEAF 16 – غولد ليف 16 16
LIGHTER 1SR – ولاعة 1
WINSTON DU MAX 21
SHISHA 15 15
SHISHA 20 20
SHISHA 80 80
L&M 18 – ال ام 18 19
PALLMALL 16 – بال مال 16 16
TOTAL AMOUNT – مجموع الكمية
TOTAL IN CASH – مجموع النقد
CARDS – البطاقات
Machine – المكينة
Cards No.1 – مكينة رقم 1
Cards No.2 – مكينة رقم 2
Cards No.3 – مكينة رقم 3
Start – بداية
End – باقي
Cms – ربح
Add – شحن
TOTALS
Cash – النقد
Visa (Mojana) – شبكة (موازنة)
- البيانات التي يمكن استنتاجها حسابيًا
المؤشر القيمة
عدد الأصناف 26
مجموع الأسعار المدرجة 565
أعلى سعر 80
أقل سعر 1
عدد ماكينات البطاقات 3
إجمالي المبيعات غير متوفر
إجمالي النقد غير متوفر
إجمالي الكميات غير متوفر
إجمالي البطاقات غير متوفر
الخلاصة: الصورة ليست فاتورة مبيعات مكتملة، بل نموذج جرد وحساب يومي. البيانات المؤكدة الموجودة فعليًا هي أسماء الأصناف وأسعارها، بالإضافة إلى هيكل حقول المخزون والبطاقات والإجماليات؛ أما الكميات والمبيعات والنقد والبطاقات فهي خانات غير معبأة في الورقة.
هل يمكنك إعادة تعريف المنصة والتطبيق مع التعريف والوصف والشرح والتفسير وتعريف جميع بيانات المنصة با التفصيل وطريقة الاستخدام وبناء واجهات وصفحات المنصة والتطبيق مع وصف وتعريف وشرح عمل كل شاشة ووصف عمل الإضافات والمميزات لكل باقة مع اقتراح تلقائيا با الذكاء الاصطناعي
خطة الاستضافة
Cloud Professional Hosting
لوحة التحكم
موقع إلكتروني
تثبيت ووردبريس
المثبت التلقائي
نقل الموقع
صفحات الخطأ
صانع الشعارات
تطوير المواقع
الملفات
مدير الملفات
النسخ الاحتياطية
حسابات FTP
تغيير كلمة المرور
قواعد البيانات
إدارة
phpMyAdmin
MySQL عن بعد
متقدم
الوصول عبر SSH
تكوين PHP
محرر منطقة DNS
وظائف كرون
معلومات PHP
مدير ذاكرة التخزين المؤقت
جيت
حماية المجلدات بكلمة مرور
مدير الملكية الفكرية
حماية الروابط الساخنة
مدير فهرس المجلد
إصلاح ملكية الملف
سجل النشاط
ترقية الخطة بناء باقات الإشتراك الرقمي للمنصة والمنتج وباقات اشتراكك متنوعة شهرية و سنوية
pos3.twisttaste.com
تاريخ الإنشاء: 2026-10-02
معاينة
ما هو الدومين أو الدومين الفرعي الذي ترغب في استخدامه؟
اطلب دومينك المجاني، أو اشتر دوميناً جديدًا، أو أكِّد دوميناً تملكه بالفعل. يمكنك أيضًا إنشاء دومين فرعي مجاني لأي موقع إلكتروني منشور.
النطاقات الفرعية
إنشاء دومين فرعي جديد
الدومين الفرعي
دومينات
pos3.twisttaste.com
إنشاء
مجلد مخصص للدومين الفرعي
أساسيات
قاعدة البيانات
أدِر قاعدة البيانات
إدارة
نسخ احتياطية
يوميًا
مدير الملفات
عدّل ملفاتك
فتح
ربط الدومين
إعداد البريد الإلكتروني المجاني
ذاكرة التخزين المؤقت
اطلع على أحدث التغييرات
مسح ذاكرة التخزين المؤقت
لا توجد معاينة للذاكرة المؤقتة
خطة الاستضافة
Cloud Professional Hosting
الأداء
خطط استخدام الموارد
عرض التفاصيل
استخدام القرص
حجم القرص 100 قيقا
CPU
الذاكرة
آخر 24 ساعة
نصائح للتحسين
القائمة الرئيسية
إسم الموقع
pos3.twisttaste.com
البحث
لوحة التحكم
خطة الاستضافة
تفاصيل الخطة
تفاصيل الموقع
أدخل إلى موقعك الإلكتروني من خلال
https://pos3.twisttaste.com
أدخل على موقعك الإلكتروني من خلال www
https://www.pos3.twisttaste.com
عنوان IP الموقع
148.230.89.46
تفاصيل الاستضافة :
الاستضافة
ترقية الخطة
مساحة القرص
200GB
ذاكرة الوصول العشوائي
6144MB
نوى وحدة المعالجة المركزية
5
نقاط التوصيل المفهرسة
3000000
الإضافات/المواقع الإلكترونية
100
أقصى العمليات
400
عمال PHP
200
النطاق الترددي
غير محدود
خوادم الأسماء
خادم الأسماء الحالي 1
ns1.dns-parking.com
خادم الأسماء الحالي 2
ns2.dns-parking.com
خوادم أسماء Hostinger:
ns1.dns-parking.com
ns2.dns-parking.com
تفاصيل الخادم
اسم الخادم
server1683
موقع الخادم
North America (USA, MA)
موقع النسخ الاحتياطية
الولايات المتحدة الأمريكية (بوسطن)
تفاصيل FTP
بروتوكول نقل الملفات IP
ftp://148.230.89.46
اسم مضيف FTP
ftp://pos3.twisttaste.com
اسم مستخدم FTP
u186331636.pos3.twisttaste.com
مسار تحميل الملف
public_html
تفاصيل Node.js
يدعم قوالب الواجهة الأمامية
Angular, Astro, Gatsby, Next.js, Nitro, Nuxt, Parcel, React, React Router, Svelte, SvelteKit, Vite, Vue.js
يدعم أطر العمل الخلفية
Astro, Express, Fastify, Hono, NestJS, Next.js, Nitro, Nuxt, React Router, SvelteKit
إصدارات Node.js يدعم
24.x, 22.x, 20.x و 18.x
يدعم مدراء الحزم
npm (افتراضي), yarn و pnpm
استخدام الموارد
Cloud Professional Hosting
قم بتحديث خطتك
احصل على من الموارد
$44.99/الشهر.
ترقية
عزّز مواردك
تحسين الأداء وقتيّا
مجاني – $9.99
ابدأ التعزيز الآن
تجديد
مواقع إلكترونية
pos3.twisttaste.com
الاستضافة
استخدام الموارد
استخدام الموارد
Cloud Professional Hosting
twisttaste.com
نشط
North America (USA, MA)
88 مواقع إلكترونية
الموارد المستخدمة في آخر 24 ساعة
94%
قم بتحديث خطتك
احصل على من الموارد
$44.99/الشهر.
ترقية
عزّز مواردك
تحسين الأداء وقتيّا
مجاني – $9.99
ابدأ التعزيز الآن
القرص و الـInodes
ماذا يمكنني أن أفعل غير هذا؟
زِد مساحة التخزين على القرص لمدة 24 ساعة
حاول زيادة مساحة تخزين القرص مؤقتًا لإمكانية الوصول وإزالة المشكلة التي تسبب الدلائل بنفسك
زِد مساحة التخزين على القرص
فكِّرْ في ترقية الخطة
أخيرًا، فكر في الترقية والحصول على خطة أكثر قوة مع من الموارد المتاحة
استخدام القرص
GB
مستعمل
200 GB
المتوفر
حد الملفات والمجلدات (inodes)
مستعمل
3 000 000
المتوفر
مصادر أخرى
CPU
المعدل
100 %
المتوفر
الذاكرة
MB
المعدل
6 144 MB
المتوفر
الإنتاجية (I/O)
KB/s
المعدل
40 960 KB/s
عمال PHP
3 Num
المعدل
200 Num
المتوفر
أداء التخزين (IOPS)
33 Num
المعدل
2 048 Num
المتوفر
أقصى العمليات
استخدم هذه الميزة عند وجود عمليات طويلة الأمد أو متوقفة. في حال وجود أي طلبات طويلة الأمد نشطة، سيتم إيقافها. لن تتأثر الملفات والبيانات.
الأداء
التحليلات
الحماية
دومينات
موقع إلكتروني
الملفات
قواعد البيانات
متقدم
pos3.twisttaste.com إسم الدومين والنطاق الحقيقي
AR-EN
كيف تريد إعداد موقعك الإلكتروني؟
تحميل ملفات الموقع الإلكتروني
سنقوم بفك ضغط ملفاتك ووضع موقعك على الإنترنت.
الأسرع
ابدأ فارغًا
ابدأ بموقع فارغ وأضف ملفاتك عندما تكون مستعدًا.
مرن
تهيئة الإعداد
قد تستغرق العملية بضع دقائق
هل يمكنك إعادة تحويلها الى نظام بلغة البرمجة php
مع إعادة تحويلها الى قواعد البيانات والجداول والعلاقات وإعادة تكوينها مع تحويلها كامل الى prompt احترافي كامل