InfraDZ Software
نظام لتخطيط الموارد ونقاط البيع للمؤسسات الصغيرة والمتوسطة: المخزون والمبيعات والمشتريات وعروض الأسعار والفواتير، على الويب وكتطبيق لسطح المكتب، مع صلاحيات وصول لكل وحدة ولكل دور.
- دَوري
- مهندس برمجيات Full Stack
- الفترة
- أبريل 2026 — مايو 2026
- الحالة
- مُنجز

InfraDZ منصّة متكاملة لإدارة الأعمال موجّهة للمؤسسات الصغيرة والمتوسطة، تجمع المخزون والمبيعات والمشتريات والفوترة ونقطة البيع في نظام واحد. تعمل كل شركة بوصفها «tenant»، وهو الكيان الأعلى الذي يتخلّل جداول قاعدة البيانات الأربعة والسبعين في مخطط PostgreSQL، وتُمنح صلاحيات الوصول وحدةً بوحدة.
يصدر المنتج على واجهتين من قاعدة شيفرة واحدة: عميل ويب مبني بـ React، وتطبيق سطح مكتب بـ Tauri v2 يشير إلى مصادر React نفسها. يدعم تسجيل الدخول البريد وكلمة المرور وOTP وGoogle OAuth عبر نظام مصادقة هجين يجمع الـ cookies ورؤوس Bearer، وتتشكّل الواجهة وفق صلاحيات كل مستخدم، وصولاً إلى شريط جانبي لا يعرض إلا ما يُخوَّل الدور فتحه.
المشكلة المطلوب حلّها
كان التحدي الحقيقي هو خدمة شركات عديدة مستقلة من نظام واحد دون أن تختلط بياناتها. فالشركة التي لا تشغّل سوى نقطة بيع لا ينبغي أن ترى بقية الوحدات؛ وأمين الصندوق لا ينبغي أن يرى شاشات المشتريات؛ والمتجر الذي يحذف منتجاً باعه الشهر الماضي يجب ألا يُفسد سجلّه التاريخي. يضاف إلى ذلك أن المنتج كان يجب أن يتوفر تطبيقَ ويب وتطبيقَ سطح مكتب قابلاً للتثبيت في آن واحد — وهو ما يعني عادةً صيانة واجهتين أماميتين منفصلتين.

كيف بُني
التعدد المستأجري هنا بنيوي لا مضاف لاحقاً: «tenant» هو الكيان الأعلى في مخطط الجداول الأربعة والسبعين وفي الشيفرة كلها، وتُحدَّد صلاحيات الوصول لكل شركة وحدةً بوحدة. تنتقل الصلاحيات مع الجلسة — يعيدها المسار /auth/me — ويتحكم العميل في الوصول عبر الخطاف useCan والمكوّن <Can> وشريط جانبي مرشّح بالصلاحيات، فالشاشات التي لا يملك الدور استخدامها لا تُعرض أصلاً.
أما سطح المكتب فحُسم بـ Tauri v2: يشير تطبيق سطح المكتب إلى مصادر React الخاصة بعميل الويب، فتنتج قاعدة شيفرة واحدة كلا البناءين. وتخضع سلامة البيانات لقاعدة صارمة في الحذف الناعم: البيانات الرئيسية لا تُحذف نهائياً أبداً، بل يُقلب isActive إلى false مع إمكانية الاستعادة، فتبقى المستندات التاريخية مرتبطة بسجلات موجودة. وتتشارك وحدة نقطة البيع نوع «Article» الرئيسي مع بقية النظام، فيُعرَّف المنتج مرة واحدة ويسلك السلوك نفسه عند الصندوق وفي المخزون.
ماذا يفعل
نواة متعددة المستأجرين
كل جدول وكل مسار في الشيفرة مرتبط بكيان «tenant» أعلى، بما يعزل بيانات كل شركة عبر مخطط الجداول الأربعة والسبعين.
صلاحيات لكل وحدة
المخزون والمبيعات والمشتريات والفوترة ونقطة البيع وحدات منفصلة، ولا تصل كل شركة إلا إلى ما تستخدمه منها.
مصادقة هجينة
جلسات تجمع الـ cookies ورؤوس Bearer، مع تسجيل دخول بالبريد وكلمة المرور وOTP وGoogle OAuth.
واجهة محكومة بالصلاحيات
الخطاف useCan والمكوّن <Can> وشريط جانبي مرشّح بالصلاحيات تخفي كل ما لا يملك الدور التصرف فيه، استناداً إلى الصلاحيات القادمة من /auth/me.
سطح مكتب بمصدر واحد
بناء سطح المكتب بـ Tauri v2 يشير إلى مصادر React نفسها التي يستخدمها عميل الويب: قاعدة شيفرة واحدة لمنصتين.
حذف ناعم دائماً
البيانات الرئيسية لا تُحذف نهائياً: تُقلب السجلات إلى isActive=false ويمكن استعادتها، بما يحفظ السلامة المرجعية للسجل التاريخي.

بُني باستخدام
الواجهة الأمامية
قاعدة React واحدة تعرض عميل الويب وتطبيق سطح المكتب المبني بـ Tauri v2 معاً، فتُكتب كل شاشة من شاشات الـ ERP ونقطة البيع مرة واحدة وتصل إلى المنصتين.
الأنواع الساكنة تجعل نوع Article المشترك وعقود الصلاحيات قابلة للفرض عند الترجمة، وهو ما يجعل شحن قاعدة شيفرة واحدة كبناءي ويب وسطح مكتب أمراً مأموناً.
الخلفية
تشغيل الـ API على Node يُبقي الخادم والعميل بلغة واحدة، فتظل العقود مثل صلاحيات /auth/me ونوع Article المشترك متسقة عبر كامل المنظومة.
البيانات
مخطط علائقي من 74 جدولاً يحتاج مفاتيح أجنبية حقيقية: يربط PostgreSQL كل صف بالـ tenant الخاص به، ويتيح لقاعدة الحذف الناعم الحفاظ على مراجع كان الحذف النهائي سيكسرها.
البنية التحتية
الحاويات تثبّت الـ API وPostgreSQL على إصدارات متطابقة في كل بيئة، وهو ما يعتمد عليه نشر متعدد المستأجرين يخدم شركات كثيرة من منظومة واحدة.