94 lines
6.4 KiB
PHP
94 lines
6.4 KiB
PHP
<?php
|
|
/**
|
|
* Musadaq Academy — Educational Content
|
|
* GET /v1/academy/articles
|
|
* GET /v1/academy/articles?category=tax
|
|
*
|
|
* Returns curated accounting and tax educational articles.
|
|
* Content is stored in-code for MVP, can be migrated to DB later.
|
|
*/
|
|
|
|
use App\Middleware\AuthMiddleware;
|
|
|
|
$decoded = AuthMiddleware::check();
|
|
|
|
$category = $_GET['category'] ?? null;
|
|
$search = $_GET['search'] ?? null;
|
|
|
|
// In-code content library (MVP — migrate to DB when content grows)
|
|
$articles = [
|
|
[
|
|
'id' => 'tax-101',
|
|
'category' => 'tax',
|
|
'title' => 'دليل ضريبة المبيعات الأردنية الشامل',
|
|
'summary' => 'كل ما تحتاج معرفته عن نسب ضريبة المبيعات في الأردن: العامة (16%)، المخفضة (4% و 8%)، والمعفاة.',
|
|
'content' => "## نسب ضريبة المبيعات في الأردن\n\n### النسبة العامة: 16%\nتُطبق على معظم السلع والخدمات.\n\n### النسبة المخفضة: 4%\n- الأدوية\n- المستلزمات الطبية\n\n### النسبة المخفضة: 8%\n- الخدمات السياحية\n- بعض المواد الغذائية المصنعة\n\n### معفاة من الضريبة (0%)\n- الخبز\n- الحليب\n- التعليم\n- الخدمات الصحية\n\n> ملاحظة: هذه المعلومات للإرشاد فقط. راجع دائرة ضريبة الدخل والمبيعات للتفاصيل الرسمية.",
|
|
'reading_time' => 3,
|
|
'icon' => '🏛️',
|
|
],
|
|
[
|
|
'id' => 'jofotara-guide',
|
|
'category' => 'jofotara',
|
|
'title' => 'كيف تربط شركتك بمنظومة جوفوترا',
|
|
'summary' => 'خطوات تسجيل شركتك والحصول على Client ID و Secret Key من منظومة الفوترة الإلكترونية.',
|
|
'content' => "## خطوات الربط بجوفوترا\n\n### 1. التسجيل في المنظومة\n- ادخل على portal.jofotara.gov.jo\n- سجّل بالرقم الضريبي لشركتك\n\n### 2. الحصول على المفاتيح\n- من لوحة التحكم، اختر \"إدارة التطبيقات\"\n- أنشئ تطبيق جديد\n- انسخ Client ID و Secret Key\n\n### 3. الربط في مُصادَق\n- افتح إعدادات الشركة\n- الصق Client ID و Secret Key\n- اضغط \"اختبار الاتصال\"\n\n> بعد الربط، يمكنك إرسال الفواتير لجوفوترا بضغطة واحدة!",
|
|
'reading_time' => 4,
|
|
'icon' => '🔗',
|
|
],
|
|
[
|
|
'id' => 'invoice-types',
|
|
'category' => 'invoicing',
|
|
'title' => 'أنواع الفواتير الإلكترونية في الأردن',
|
|
'summary' => 'الفرق بين فاتورة المبيعات، الإشعار الدائن، والإشعار المدين حسب UBL 2.1.',
|
|
'content' => "## أنواع الفواتير\n\n### 1. فاتورة مبيعات (Invoice)\nالنوع الأساسي — تُصدر عند بيع سلعة أو خدمة.\n\n### 2. إشعار دائن (Credit Note)\nيُصدر لتعديل فاتورة سابقة بالتخفيض (مرتجعات أو خصومات).\n\n### 3. إشعار مدين (Debit Note)\nيُصدر لتعديل فاتورة سابقة بالزيادة.\n\n### متطلبات UBL 2.1\n- كل فاتورة يجب أن تحتوي على رقم ضريبي صحيح\n- التاريخ بصيغة ISO\n- تفصيل البنود مع الكمية والسعر",
|
|
'reading_time' => 3,
|
|
'icon' => '📄',
|
|
],
|
|
[
|
|
'id' => 'ai-tips',
|
|
'category' => 'tips',
|
|
'title' => 'نصائح للحصول على أفضل نتائج من الذكاء الاصطناعي',
|
|
'summary' => 'كيف تصوّر الفاتورة لتحصل على استخراج دقيق بنسبة 99%.',
|
|
'content' => "## نصائح التصوير\n\n### ✅ افعل:\n- صوّر الفاتورة كاملة مع الحواف\n- تأكد من الإضاءة الجيدة\n- ضع الفاتورة على سطح مسطح\n- صوّر من الأعلى مباشرة (لا بزاوية)\n\n### ❌ لا تفعل:\n- لا تصوّر جزء من الفاتورة فقط\n- لا تصوّر فاتورة مطوية أو مجعدة\n- لا تصوّر في إضاءة خافتة\n- لا ترفع صور أقل من 300x300 بكسل\n\n### 💡 نصيحة إضافية:\nاستخدم ميزة الـ Batch Scan لتصوير عدة فواتير دفعة واحدة!",
|
|
'reading_time' => 2,
|
|
'icon' => '💡',
|
|
],
|
|
[
|
|
'id' => 'security-guide',
|
|
'category' => 'security',
|
|
'title' => 'كيف يحمي مُصادَق بياناتك',
|
|
'summary' => 'نظرة على تقنيات التشفير والحماية المستخدمة في المنصة.',
|
|
'content' => "## حماية بياناتك\n\n### تشفير AES-256-GCM\nكل البيانات الحساسة (أسماء، أرقام ضريبية، مفاتيح API) مشفرة بأقوى معيار تشفير.\n\n### فصل البيانات (Multi-Tenancy)\nكل مكتب محاسبي معزول تماماً — لا يمكن لأي مكتب رؤية بيانات مكتب آخر.\n\n### مصادقة ثنائية\nتسجيل الدخول يتطلب OTP عبر واتساب بالإضافة لكلمة المرور.\n\n### HMAC Signature\nكل طلب API يتم التحقق من سلامته عبر توقيع رقمي.",
|
|
'reading_time' => 3,
|
|
'icon' => '🔒',
|
|
],
|
|
];
|
|
|
|
// Filter by category
|
|
if ($category) {
|
|
$articles = array_values(array_filter($articles, fn($a) => $a['category'] === $category));
|
|
}
|
|
|
|
// Search
|
|
if ($search) {
|
|
$searchLower = mb_strtolower($search);
|
|
$articles = array_values(array_filter($articles, fn($a) =>
|
|
str_contains(mb_strtolower($a['title']), $searchLower) ||
|
|
str_contains(mb_strtolower($a['summary']), $searchLower)
|
|
));
|
|
}
|
|
|
|
$categories = [
|
|
['key' => 'tax', 'name' => 'ضرائب', 'icon' => '🏛️'],
|
|
['key' => 'jofotara', 'name' => 'جوفوترا', 'icon' => '🔗'],
|
|
['key' => 'invoicing', 'name' => 'فوترة', 'icon' => '📄'],
|
|
['key' => 'tips', 'name' => 'نصائح', 'icon' => '💡'],
|
|
['key' => 'security', 'name' => 'أمان', 'icon' => '🔒'],
|
|
];
|
|
|
|
json_success([
|
|
'articles' => $articles,
|
|
'categories' => $categories,
|
|
'total' => count($articles),
|
|
], 'أكاديمية مُصادَق');
|