تطبيق سند - الفوترة الإلكترونية
نظام متكامل للامتثال لمتطلبات المرحلة الثانية (ZATCA Phase 2)
1) ما هو سند؟ ولماذا ستحتاجه؟
سند (Sanad) هو نظام امتثال (Compliance System) يعمل Self‑Hosted لمساعدة المنشآت في المملكة العربية السعودية على الالتزام الكامل بمتطلبات المرحلة الثانية للفوترة الإلكترونية (ZATCA Phase 2).
على عكس الحلول البسيطة، يقدم سند منظومة متكاملة تغطي:
- إصدار الفواتير الإلكترونية بمعيار
UBL 2.1وفق متطلبات ZATCA. - توقيع XAdES‑EPES وربط الشهادة والـ SignedProperties بشكل صحيح.
- إنشاء QR (TLV) متوافق ومشفّر في الوقت الفعلي.
- Hash Chaining / ICV لضمان تتابع الفواتير وعدم العبث (ضمان السلامة).
- لوحة تحكم احترافية باللغة العربية لإدارة الفواتير، الشهادات، الأجهزة، وسجل التدقيق.
- API تكامل موحد لاستقبال الفواتير من أي مصدر (WooCommerce / Shopify / POS / ERP).
2) ماذا يضم المنتج (Package Contents)
عند استلامك النسخة التجارية من سند، ستجد الأجزاء التالية:
- تطبيق الويب (Laravel/PHP): لوحة التحكم + API التكامل + قواعد البيانات + إدارة الشهادات.
- خدمة التوقيع (FastAPI/Python): محرك تشفير متخصص للعمليات الحساسة والتوقيع الرقمي.
- قوالب PDF: إخراج PDF/A-3 مع إرفاق XML مدمج بشكل قانوني.
- ملفات الإعداد: قوالب جاهزة، ملفات Docker، وسكريبتات التثبيت التلقائي.
ملاحظة: سند ليس نظام SaaS سحابي، بل يتم تشغيله على خوادمك الخاصة (Dedicated/VPS/Shared) لضمان خصوصية البيانات الكاملة.
3) المميزات الرئيسية ونقاط القوة
📄 توليد XML قياسي
إنشاء ملفات XML متوافقة 100% مع معيار UBL 2.1 للفواتير المبسطة والضريبية.
🔐 التوقيع الرقمي
توقيع الفواتير باستخدام محرك Python متخصص لتطبيق معايير XAdES-EPES بدقة.
📱 QR Code متوافق
إنشاء تلقائي لرموز QR مشفرة بمعيار TLV في الوقت الفعلي لكل حركة.
🔗 تكامل ZATCA
ربط مباشر مع خوادم الهيئة للتسجيل، الإبلاغ، والتصريح عن الفواتير.
🛡️ سلامة البيانات
نظام Hash Chaining يضمن تتابع الفواتير ومنع التلاعب بالسجلات التاريخية.
📊 تقارير شاملة
تصدير تقارير CSV تفصيلية لحالة الفواتير والأجهزة لسهولة المحاسبة.
نقاط قوة المنظومة:
- الامتثال: دعم كامل للفواتير الضريبية، المبسطة، إشعارات الدائن والمدين.
- التشغيل: معالج تثبيت Web-Wizard يقوم بتهيئة البيئة وقاعدة البيانات تلقائياً.
- المراقبة: أدوات Health/Metrics لتشخيص أعطال التكامل اللحظي.
- الصلاحيات: نظام RBAC متطور لإدارة وصول الموظفين والأنظمة.
4) الحماية والأمان
1. تشفير AES-256
تشفير المفاتيح والشهادات الحساسة في قاعدة البيانات باستخدام AES-256-CBC.
2. فصل الخدمات
عزل محرك التوقيع (Python) عن لوحة التحكم لتقليل سطح الهجوم وتأمين العمليات.
3. API Authentication
مصادقة عبر رموز Bearer Token مشفرة وقابلة للإبطال الفوري.
4. Webhook Security
التحقق من صحة الإشعارات الواردة باستخدام HMAC-SHA256 لضمان أصالة المصدر.
SANAD_INTERNAL_TOKEN أو
SANAD_WEBHOOK_SECRET مع أي جهة، وتأكد من تفعيل HTTPS دائماً.
5) التكنولوجيا المستخدمة
يعتمد سند على معمارية هجينة (Hybrid Architecture) تضمن التوازن بين سهولة الإدارة وقوة الأداء التشفيري:
| المكون | التقنية | الدور |
|---|---|---|
| Backend Framework | Laravel 12.x / PHP 8.3+ | منطق الأعمال، الواجهة الإدارية، وإدارة التفتيش |
| التشفير والتوقيع | Python (FastAPI) 3.10+ | التوقيع الرقمي (XAdES) والعمليات الرياضية |
| قاعدة البيانات | MySQL 8.0 / MariaDB 10.6+ | التخزين الدائم للبيانات والشهادات |
| التخزين المؤقت | Redis 7.0+ | تحسين الأداء وإدارة الصفوف (Queues) |
| الواجهة الأمامية | Bootstrap 5 & Alpine.js | تجربة مستخدم سريعة ومتجاوبة (RTL) |
6) متطلبات التنصيب ومواصفات السيرفر
المتطلبات الدنيا (Minimum)
- RAM: 2 GB
- CPU: 2 Cores
- Storage: 10 GB SSD
المواصفات الموصى بها
- RAM: 4 GB+
- CPU: 4 Cores+
- Storage: 20 GB+
متطلبات الاستضافة المشتركة (Shared)
- توفر SSH Access (لإدارة الأوامر).
- توفر ميزة Setup Python App (أو CloudLinux).
- إتاحة تعديل PHP Extensions.
إضافات PHP المطلوبة:
openssl, pdo, mbstring, xml, bcmath, curl, fileinfo, gd, gmp, zip
7) معالج التثبيت (Installer Wizard)
بعد رفع ملفات التطبيق وربط اسم المجال (Domain) بالمجلد العام (public)، قم بزيارة الرابط التالي لبدء التثبيت:
https://YOUR-DOMAIN/install
سيرشدك المعالج خلال الخطوات التالية بالترتيب:
- 1. الترحيب (Welcome): شاشة ترحيبية لبدء عملية تنصيب النظام.
-
2. المتطلبات (Requirements): يقوم النظام بفحص إصدار PHP والإضافات (Extensions) المطلوبة
مثل
bcmath, ctype, json, mbstring, openssl, pdo, tokenizer, xmlللتأكد من توافق السيرفر. -
3. الصلاحيات (Permissions): فحص إمكانية الكتابة على المجلدات الحساسة مثل
storage/وbootstrap/cache/وملف.envلضمان استقرار التطبيق. -
4. بيئة العمل (Environment): إعداد اسم التطبيق ورابطه:
APP_NAME: اسم المنشأة أو التطبيق.APP_URL: الرابط الكامل للموقع.- الوضع (Mode): اختيار
Production(للاستخدام الفعلي) أوLocal(للتطوير وتتبع الأخطاء).
- 5. قاعدة البيانات (Database): إدخال بيانات الاتصال (Host, Port, Database, Username, Password) مع إمكانية اختبار الاتصال (Test Connection) قبل المتابعة.
-
6. خدمة التوقيع (Python Service):
- على VPS: تحديد المنفذ (مثل 8000) ومسار الخدمة. يمكن تفعيل خيار Generate Setup Script لإنشاء سكريبت يجهز البيئة الافتراضية (venv) وخدمة النظام (systemd) تلقائياً.
- على استضافة مشتركة: إدخال الرابط المباشر لخدمة التوقيع إذا كانت مستضافة خارجياً.
- 7. التأكيد (Confirm): مراجعة شاملة لكافة الإعدادات المدخلة قبل البدء الفعلي في التثبيت.
-
8. تنفيذ التثبيت (Perform Install): يقوم النظام آلياً بـ:
- توليد مفتاح التطبيق (
APP_KEY). - بناء جداول قاعدة البيانات (Migrations).
- تهيئة نظام الصلاحيات والأدوار (RBAC).
- إنشاء حساب المدير الافتراضي (Admin User).
- توليد مفتاح التطبيق (
- 9. النهاية (Finish): إتمام العملية وتوجيهك إلى صفحة تسجيل الدخول.
8) التثبيت عبر ZIP على VPS
للمحترفين أو مديري الخوادم (Ubuntu/Debian)، يمنحك هذا الخيار أقصى درجات التحكم والأداء.
المتطلبات المسبقة:
- OS: Ubuntu 22.04 LTS أو أحدث.
- Web Server: Nginx أو Apache.
- PHP: الإصدار 8.2 أو 8.3 مع الإضافات المطلوبة.
- Database: MySQL 8.0+ أو MariaDB 10.6+.
- Services: Redis (لإدارة الصفوف)، Python 3.10+ (لخدمة التوقيع).
خطوات التثبيت السريع:
- رفع الملفات: قم برفع ملف
release.zipإلى مسار/var/www/sanadوفك الضغط. - ضبط الصلاحيات:
chown -R www-data:www-data /var/www/sanad chmod -R 775 /var/www/sanad/storage /var/www/sanad/bootstrap/cache - إعداد خدمة Python:
cd /var/www/sanad/sanad_service pip3 install -r requirements.txt # ينصح باستخدام Supervisor أو Systemd لتشغيل الخدمة في الخلفية - ضبط Nginx: وجه الـ Document Root إلى مجلد
/public. - المعالج: افتح المتصفح على رابط موقعك لاستكمال التثبيت عبر الـ Wizard.
9) التثبيت عبر Docker
الطريقة الأسهل والأكثر ضماناً لتشغيل النظام في بيئة معزولة ومطابقة للمعايير.
الخطوات:
- تأكد من تثبيت
DockerوDocker Compose Pluginعلى الخادم. - قم بفك ضغط ملف المشروع وانتقل للمجلد الرئيسي.
- أنشئ ملف البيئة المخصص للإنتاج:
cp .env.example .env.production # قم بتعديل القيم داخل الملف (DB_PASSWORD, APP_URL, ...) - شغل الحاويات (Containers):
docker compose -f docker-compose.prod.yml up -d --build - النظام الآن يعمل! قم بالدخول إلى الرابط لتشغيل معالج التثبيت وإتمام تهيئة قاعدة البيانات.
10) التثبيت على استضافة مشتركة (cPanel)
للمحترفين: إعداد بيئة هجينة (Hybrid) بتشغيل Laravel كتطبيق PHP وتشغيل خدمة التوقيع كتطبيق Python مستقل (Passenger).
10.1 رفع ملفات النظام (Laravel)
- ارفع ملف
release.zipداخل مجلدpublic_html/sanad(أو أي مسار فرعي مناسب). - اضبط Document Root للدومين ليشير إلى:
public_html/sanad/public. - أنشئ قاعدة بيانات MySQL ومستخدم جديد من لوحة cPanel.
10.2 تشغيل معالج التثبيت (مبدئي)
- افتح رابط موقعك:
https://YOUR-DOMAIN/install - أدخل بيانات قاعدة البيانات التي أنشأتها.
- في خطوة Python Service، أدخل الرابط المستقبلي للخدمة (مثلاً):
https://api.YOUR-DOMAIN.com(سنقوم بإنشائه في الخطوة التالية).
10.3 إعداد خدمة Python (FastAPI App)
- أنشئ Subdomain جديد للخدمة (مثلاً
api.YOUR-DOMAIN.com). - اذهب إلى أداة Setup Python App في cPanel.
- أنشئ تطبيقاً جديداً:
- Python Version: اختر 3.10 أو أحدث.
- Application Root: اختر المجلد الذي يحتوي على كود الخدمة (داخل مجلد مشروعك):
sanad/sanad_service. - Application URL: اختر الدومين الفرعي الذي أنشأته (api...).
- Startup File: اكتب
passenger_wsgi.py. - Entry Point: اكتب
application.
- إنشاء ملف التشغيل: داخل مجلد
sanad_service، أنشئ ملفاً جديداً باسمpassenger_wsgi.pyوضع فيه الكود التالي:import os import sys # Ensure app path uses current working directory sys.path.append(os.getcwd()) from a2wsgi import ASGIMiddleware from main import app as fastapi_app # Passenger entry point application = ASGIMiddleware(fastapi_app) - اضغط Update أو Restart للتطبيق في cPanel.
- تثبيت المكتبات: انسخ كود التفعيل (Virtual Environment) ونفذه في Terminal، ثم شغل:
pip install -r requirements.txt
10.4 ربط الإعدادات (Environment Sync)
لضمان التخاطب الآمن بين النظامين، يجب تطابق المفاتيح:
أولاً: في ملف Laravel (.env)
SANAD_PYTHON_MODE=fastapi
SANAD_PYTHON_SERVICE_URL=https://api.YOUR-DOMAIN.com
SANAD_INTERNAL_TOKEN=ضع_كود_سري_طويل_هنا
ثانياً: في إعدادات Python App (Environment Variables)
أضف المتغيرات التالية في واجهة cPanel Python App:
SANAD_INTERNAL_TOKEN: (نفس القيمة الموجودة في ملف .env)SANAD_ENVIRONMENT:productionSANAD_DISABLE_FASTAPI_DOCS:trueSANAD_ALLOWED_CALLER_IPS: عنوان IP السيرفر (Localhost أو Public IP).
يمكنك محاولة إكمال التثبيت، وإذا ظهر خطأ
403 Forbidden، راجع ملف stderr.log داخل
مجلد Python App لمعرفة الـ IP المحظور وإضافته للقائمة.
10.5 إعداد المهام المجدولة (Cron Jobs)
أضف السطر التالي في Cron Jobs (مع تعديل المسار واسم المستخدم):
* * * * * /usr/local/bin/php /home/USER/public_html/sanad/artisan schedule:run >> /dev/null 2>&1
11) لوحة التحكم - شرح مفصل
تحتوي لوحة التحكم على أدوات متكاملة لإدارة منظومة الفوترة. تم تقسيم الصفحات حسب الوظيفة:
1. لوحة المعلومات (Dashboard)
شاشة مركزية تعرض إحصائيات فورية: عدد الفواتير (المقبولة/المرفوضة)، حالة الاتصال مع ZATCA، ومؤشرات الأداء.
2. الفواتير (Invoices)
سجل كامل لكافة الفواتير. يمكنك:
- تحميل ملفات XML/PDF الموقعة.
- فحص تفاصيل QR و Hash.
- إعادة إرسال الفواتير المتعثرة (Retry).
3. الإشعارات (Credit/Debit Notes)
إدارة المرتجعات والتسويات المالية. يتم ربط كل إشعار بالفاتورة الأصلية تلقائياً لضمان التسلسل المرجعي.
4. الشهادات (Certificates)
إدارة شهادات ZATCA:
- توليد طلب توقيع الشهادة (CSR).
- تجديد الشهادات المنتهية.
- إدارة التشفير (Production Keys).
5. التأهيل (Onboarding)
معالج خطوات الربط مع الهيئة:
- الحصول على CSID لبيئة الامتثال.
- إجراء اختبارات الفواتير (Compliance Checks).
- الحصول على CSID الإنتاج النهائي.
6. صندوق الوارد (Integration Inbox)
سجل تقني لكافة الطلبات الواردة عبر API. يساعد المطورين في تتبع البيانات الخام (Payloads) وحل مشاكل الربط.
7. إدارة الرموز (API Tokens)
إنشاء وإبطال مفاتيح الوصول (Bearer Tokens) للأنظمة الخارجية (مثل ERP أو المتاجر الإلكترونية).
8. المستخدمين والأدوار (Users & Roles)
نظام صلاحيات دقيق (RBAC) للتحكم في من يحق له الوصول للفواتير، الإعدادات، أو سجلات التدقيق.
9. سجل التدقيق (Audit Logs)
تتبع (من فعل ماذا ومتى). يسجل كل عملية دخول، تعديل إعدادات، أو تصدير بيانات لأغراض الأمان.
10. طابور المعالجة (Queue & DLQ)
مراقبة المهام الخلفية. قسم خاص (Dead Letter Queue) للفواتير التي فشلت معالجتها نهائياً لتحليل السبب.
11. سلسلة الفواتير (Blockchain/Chain)
مراقبة ترابط الـ Hash بين الفواتير لضمان عدم وجود فجوات (Gaps) في التسلسل الرقمي.
12. إعدادات النظام (Settings)
ضبط المتغيرات العامة: معلومات الشركة، إعدادات البريد، وخيارات التشفير المتقدمة.
13. فحص النظام (Diagnostics & Health)
أدوات لفحص صحة الاتصال مع Redis، قاعدة البيانات، خدمة التوقيع، وبوابة ZATCA في وقت واحد.
14. التقارير (Reports)
تصدير تقارير Excel/CSV مخصصة حسب التاريخ، الحالة، أو الفرع لأغراض المحاسبة والمراجعة الضريبية.
12) إعداد ZATCA (Onboarding)
تتم عملية ربط النظام مع هيئة الزكاة والضريبة والجمارك من خلال صفحة Admin → Sanad → Onboarding.
هذه العملية ضرورية للحصول على شهادات التشفير (CSID) التي تسمح بتوقيع وإرسال الفواتير.
1. توليد المفاتيح (Generate CSR)
انقر على زر Generate CSR. سيقوم النظام بإنشاء زوج مفاتيح تشفير (Private Key/Public Key) وملف طلب توقيع الشهادة بالبيانات المدخلة في إعدادات الشركة.
2. الحصول على الامتثال (Compliance CSID)
احصل على رمز OTP من بوابة فاتورة (Fatoora Portal) التابعة للهيئة. أدخل الرمز في النظام لطلب شهادة الامتثال (CCSID) التي تستخدم لاختبار صحة الفواتير.
3. فحوصات الامتثال (Compliance Checks)
يقوم النظام آلياً بإرسال عينات من الفواتير (Standard, Simplified, Debit, Credit) للتأكد من مطابقتها للمعايير التقنية للهيئة.
4. شهادة الإنتاج (Production CSID)
بعد اجتياز الفحوصات بنجاح، سيظهر زر للحصول على Production CSID. عند تفعيله، يصبح النظام جاهزاً لإرسال الفواتير الفعلية.
حالات التنبيه:
- Simulation Mode: استخدم هذا الوضع للتجربة دون إرسال بيانات مالية حقيقية للهيئة.
- Production Mode: الوضع الفعلي. يتطلب OTP من حسابك الرسمي على بوابة الهيئة.
- Renewal: يقوم النظام بتنبيهك قبل انتهاء صلاحية الشهادة لتجديدها بضغطة زر.
13) واجهة API البرمجية
يوفر سند واجهة RESTful API كاملة مصممة للتكامل السلس:
/docs/api ويتم إنتاجه تلقائياً
ليعكس أحدث
التغييرات.
| الوظيفة | المسار (Relative) | الطريقة |
|---|---|---|
| تقديم فاتورة جديدة | /api/integration/v1/invoices |
POST |
| الاستعلام عن الحالة | /api/integration/v1/invoices/{id} |
GET |
| تحميل PDF الموقع | /api/integration/v1/invoices/{id}/pdf |
GET |
SANAD_WEBHOOK_SECRET في نظامك للتحقق
من HMAC-SHA256
الوارد من "سند" عند تحديث حالة الفواتير.
14) أسئلة شائعة
❓ ما الفرق بين CCSID و PCSID؟
CCSID هو شهادة اختبارية لإتمام عملية Onboarding وفحص التوافق، بينما PCSID هو الشهادة الفعلية المستخدمة في الإنتاج.
❓ ماذا يحدث عند فشل الإبلاغ للهيئة؟
سيقوم النظام بإعادة المحاولة تلقائياً (Auto-Retry) بناءً على إعدادات الجدولة، وإذا فشل بشكل نهائي تظهر الفاتورة في قائمة الفاشلة للتدخل اليدوي.
❓ هل يمكن ربط أكثر من متجر بنظام سند واحد؟
نعم، يمكنك إنشاء عدة Integration Tokens وتصنيفها، مما يسمح لنظام واحد بخدمة عدة منافذ بيع أو متاجر.
16) أخطاء شائعة وحلول
- خطأ: "Python Service Unreachable"
الحل: تأكد من تشغيل سكريبت Python أو الـ Container الخاص بـ FastAPI وتحقق من الرابط في ملف.env. - خطأ: "Hash Chain Broken"
الحل: استخدم ميزةRecovery Modeفي سجل الجهاز لإعادة بناء السلسلة من آخر فاتورة ناجحة. - خطأ: "403 Forbidden" (cPanel)
الحل: تأكد من إضافة IP السيرفر إلى قائمةSANAD_ALLOWED_CALLER_IPSفي إعدادات البيئة لخدمة Python.
16) الدعم الفني
للحصول على المساعدة التقنية أو التدريب، نحن متاحون عبر: