تمتلك منصة Moon ERP أربع وحدات تشغيلية ناضجة وعاملة في الإنتاج تشكّل العمود الفقري المالي والإداري لأي نظام مستشفيات قادم: وحدة Accounting (دفتر أستاذ كامل وقيود آلية)، ووحدة HRM (موظفون وورديات وحضور ورواتب)، ووحدة Inventory (مخازن وحركات مخزون بطرق تكلفة FIFO/متوسط مرجّح)، ووحدة NPHIES (أهلية التأمين والمطالبات السعودية بصيغة FHIR). الخلاصة الاستراتيجية: الفوترة المحاسبية، والرواتب، ومخزون الصيدلية والمستهلكات، والتكامل التأميني — كلها وظائف موجودة فعلاً ويجب ألا يُعاد بناؤها داخل وحدة HIS، بل تستهلكها HIS عبر عقود تكامل مثبتة يستخدمها مختبر LIS اليوم في الإنتاج.
AccountingHRMInventoryNPHIESالوحدة تغطي دورة محاسبية كاملة: شجرة حسابات هرمية ثنائية اللغة في جدول accounts (مستويات أب/ابن، تصنيف header/detail، تصنيف زكوي zakat_classification)، وقيود يومية في journal_entries وjournal_entry_lines بدورة حالات Draft → Approved → Posted / Cancelled، وسنوات وفترات مالية، وعملات وأسعار صرف، وسندات قبض وصرف (receipt_vouchers / payment_vouchers)، وشيكات وعُهد نقدية وتسويات بنكية وأصول ثابتة وموازنات وضرائب واستقطاع وزكاة.
Modules/Accounting/app/Contracts/AccountingServiceInterface.php تتيح createJournalEntry(JournalEntryDTO) وgetAccountBalance() وgetTrialBalance() لأي وحدة أخرى.Modules/Accounting/app/Actions/CreateJournalEntry.php الذي يتحقق من توازن المدين/الدائن، ويرفض الحسابات الرئيسية (header)، ويحلّ الفترة المالية تلقائياً عبر JournalEntryService::resolvePeriod()، ويعالج فروق العملات.source_type وsource_id في journal_entries يربطان كل قيد بمستنده الأصلي (فاتورة مختبر، مسير رواتب، فاتورة مبيعات...) — وهي الفتحة الجاهزة لقيود HIS.AutoAccountService::createChildAccount() تنشئ حسابات فرعية تحت أي كود أب تلقائياً (تُستخدم لحسابات الشركاء والموظفين).JournalEntryPosted، JournalEntryApproved، JournalEntryCancelled، PeriodClosed، FiscalYearClosed.الدليل العملي أن هذا النمط يعمل مع وحدة طبية: مختبر LIS يرحّل فواتيره اليوم عبر Modules/LIS/app/Actions/PostLabInvoice.php الذي ينشئ قيد إيراد بقيمة entry_type = 'lab_invoice' وقيد تكلفة 'lab_cogs' ضمن معاملة واحدة، وكذلك تفعل وحدات Sales وPurchases وPOS وHRM.
وحدة شاملة: ملف موظف كامل في جدول employees، أقسام هرمية في departments، مسميات وظيفية، ورديات وجداول مناوبات، حضور بأجهزة بصمة، إجازات، رواتب وقروض ومكافآت نهاية خدمة، توظيف وتقييم أداء وتدريب.
employees.user_id مفتاح أجنبي فريد إلى جدول users (في تهجير 2026_03_01_100003_create_employees_table.php) — أي مستخدم نظام يُربط بملفه الوظيفي مباشرة؛ وهذه هي السلسلة التي ستربط حساب الطبيب/الممرض في HIS بملفه الوظيفي وراتبه دون أي جداول جديدة.Shift يدعم الورديات الليلية وفترات السماح وحدود التأخير وعمولات الوقت الإضافي، بل ويتضمن حقولاً تمريضية جاهزة: nursing_extra_minutes وspecial_needs_extra_minutes وpresence_check_enabled — أي أن جدولة المناوبات الطبية مدعومة فعلاً.attendances وbiometric_devices وbiometric_employee_mappings مع مصادر تسجيل دخول/خروج وتصحيحات.PayrollAccountingService::postPayroll() ترحّل مسير الرواتب إلى دفتر الأستاذ بقيد entry_type = 'payroll'، وتنشئ حساب ذمم فرعياً لكل موظف عبر EmployeeAccountService بصيغة كود {parent_code}-{employee_number}.محرك مخزون متعدد المخازن: جدول warehouses (هرمي، مرتبط بالفرع وبحساب محاسبي account_id)، وأرصدة لحظية في inventory_stock_balances (كمية، متوسط تكلفة، قيمة إجمالية لكل منتج/متغير/مخزن)، وسجل حركة كامل في inventory_movements، وطبقات تكلفة FIFO في inventory_cost_layers، ومستندات استلام وصرف وتحويل وجرد وتسوية.
Modules/Inventory/app/Services/StockService.php توفر increaseStock() وdecreaseStock() وgetIssueCost() وgetProductCost() مع دعم طريقتي تقييم (fifo / weighted_avg) حسب إعداد inventory.valuation_method.reference_type وreference_id — أي أن صرف دواء من صيدلية HIS يُسجَّل كحركة issue بمرجع وصفة طبية دون تعديل المحرك.Modules/LIS/app/Models/LabReagent.php يرتبط بـproduct_id ويقرأ متوسط التكلفة من StockBalance مباشرة لحساب تكلفة الفحص.Core (Product، ProductVariant، ProductUnit) — فالصيدلية في HIS هي «مخزن من نوع خاص» وليست نظام مخزون جديداً.تكامل FHIR كامل مع منصة نفيس: إعدادات المنشأة والشهادات في nphies_config، وسجل تدقيق لكل معاملة (طلب/استجابة JSON كاملة) في nphies_transactions، وموافقات مسبقة في nphies_preauths (مرجع الموافقة، المبلغ المعتمد، فترة الصلاحية، البنود المعتمدة).
NphiesEligibilityService::check() تبني حزمة eligibility-request وتعيد حالة التغطية والمنافع.NphiesClaimService::submit() تبني المطالبة من بنود الفاتورة (مريض + مزود + مؤمِّن + تغطية + مطالبة) وتعيد المبلغ المغطى ومشاركة المريض، وتحدّث الفاتورة بحقول nphies_claim_status وnphies_covered_amount وnphies_copay_amount.FhirPatientBuilder وFhirServiceItemBuilder وNphiesFhirClient وNphiesPollingService للاستعلام الدوري.Modules\LIS\Models\LabPatient وLabInvoice)، والتهجيرات أضافت حقول نفيس إلى جدولي lab_invoices وlab_patients — فوترة HIS التأمينية يجب أن تمر من هنا بعد تعميم مدخلات البنّاءات لتقبل «مريض المستشفى» و«فاتورة المستشفى» بدل نسخ الوحدة (استنتاج مبني على بنية الكود الحالية).| الوظيفة المستشفوية | الوحدة المالكة | نقطة التكامل الفعلية | القرار |
|---|---|---|---|
| فوترة المرضى وقيود الإيراد والتكلفة | Accounting | CreateJournalEntry::execute() مع source_type خاص بـ HIS — بنفس نمط PostLabInvoice | تُستهلك — لا تُبنى |
| سندات القبض/الصرف والخزينة والشيكات | Accounting | receipt_vouchers / payment_vouchers / petty_cash | تُستهلك — لا تُبنى |
| ملفات الأطباء والتمريض ورواتبهم ومناوباتهم | HRM | employees.user_id → users + shift_schedules + PayrollAccountingService | تُستهلك — HIS يضيف فقط الملف المهني السريري |
| مخزون الصيدلية والمستهلكات الطبية | Inventory | StockService::decreaseStock() بمرجع وصفة/أمر طبي + مخازن من نوع صيدلية | تُستهلك — لا تُبنى |
| أهلية التأمين والموافقات والمطالبات | NPHIES | NphiesEligibilityService / NphiesPreauthService / NphiesClaimService | تُستهلك بعد تعميمها عن نماذج LIS |
| تعريف الخدمات والأصناف والشركاء والفروع | Core | Product / BusinessPartner / Branch / SettingsService | تُستهلك — لا تُبنى |
NPHIES لتخدم مريض المستشفى كما تخدم مريض المختبر، وهي فجوة تعميم لا فجوة بناء.