📑 المرجع الهندسي لنظام "مراكز التكلفة" (Cost Centers System) 1. بنية البيانات (Database Models) يجب بناء النظام على أساس هيكلي (Hierarchical) يتكون من ثلاثة نماذج رئيسية: CostCenterType: (أنواع مراكز التكلفة) مثل: إداري، تشغيلي، سيارات، مناديب. الحقول: code, name, name_ar, status (active/inactive). CostCenterCategory: (فئات مراكز التكلفة) لتصنيف المراكز داخل كل نوع. الحقول: code, name, name_ar, cost_center_type_id, status. CostCenter: (مراكز التكلفة) العنصر الأساسي. الحقول الأساسية: company_id, code (تلقائي), name, name_ar, parent_id (للربط الهرمي), center_type (parent/leaf), budget, status. قواعد هامة: الـ parent يمكنه احتواء مراكز فرعية ولا يمكن التحميل عليه مباشرة. الـ leaf لا يمكنه احتواء مراكز فرعية وهو الذي تُربط به القيود المالية. 2. المنطق البرمجي (Core Logic) مولد الأكواد (Code Generator Service): يجب وجود CostCenterCodeGenerator يقوم بتوليد كود المركز بناءً على كود الأب (مثلاً: إذا كان الأب 100، يكون الابن 10001). التحقق (Validation): لا يمكن تغيير مركز من parent إلى leaf إذا كان لديه أبناء. لا يمكن حذف مركز مرتبطة به قيود محاسبية أو لديه أبناء. 3. الشاشات وواجهة المستخدم (Screens) شاشة التعريف (CRUD): واجهة لإدارة المراكز (إضافة، تعديل، حذف) مع دعم اللغتين. عرض الشجرة (Tree View): شاشة تعرض المراكز بشكل هرمي (Nested Tree) يوضح علاقة الأب بالأبناء بشكل مرئي. شاشة الربط: واجهة لربط الحسابات في "دليل الحسابات" بمراكز التكلفة (تحديد هل الحساب يتطلب مركز تكلفة أم لا). 4. المسارات (Routes Structure) // المحاسبة Route::resource('cost-center-types', CostCenterTypeController::class); Route::resource('cost-center-categories', CostCenterCategoryController::class); Route::resource('cost-centers', CostCenterController::class); Route::get('cost-centers-tree', [CostCenterController::class, 'tree'])->name('cost-centers.tree'); // التقارير Route::prefix('reports/cost-center')->name('reports.cost-center.')->group(function () { Route::get('expenses', [CostCenterReportController::class, 'expensesReport']); Route::get('profitability', [CostCenterReportController::class, 'profitabilityReport']); Route::get('sales', [CostCenterReportController::class, 'salesByCenterReport']); Route::get('movements', [CostCenterReportController::class, 'costCenterMovements']); }); 5. نظام التقارير (Reports Service) يجب تنفيذ CostCenterReportService يقوم بالعمليات التالية: تقرير المصروفات: تجميع المبالغ من JournalDetail حيث account_type = expense والمرتبطة بمركز التكلفة. تقرير الربحية: (الإيرادات - المصروفات) لكل مركز. تقرير المبيعات: تجميع المبيعات من فواتير العملاء الموزعة على مراكز التكلفة. كشف حركة المركز: تقرير تفصيلي بكل القيود (يومية، سندات، فواتير) التي أثرت على مركز معين خلال فترة. التقرير الهرمي (Hierarchical Costs): تجميع تكاليف الأبناء وصبها في الأب بشكل تراكمي. 6. الربط مع الموديلات الأخرى JournalEntry / JournalDetail: كل سطر في القيد يجب أن يقبل cost_center_id. CustomerInvoice: يجب دعم توزيع مبلغ الفاتورة على مركز تكلفة واحد أو أكثر. ملاحظة للايجنت: "استخدم Tailwind CSS للتصميم، وEloquent للعمليات المالية، واحرص على دعم company_id في كل الاستعلامات لضمان فصل البيانات بين الشركات."