Aptli

المعاملات

تنشئ المعاملات سجلاً تدقيقياً ثابتاً لكل حركة في المخزون، والاستهلاك، والاستلام، والتعديل، والاستلام بالمسح. لا يمكن تعديل المعاملات أو حذفها - حيث تُضاف التصحيحات في شكل معاملات تعديل جديدة.

أنواع المعاملات

٠

صفحة المعاملات التي تعرض سجل التدقيق لجميع تحركات المخزون

الاستلام

وصول مخزون جديد إلى الموقع (مشتريات، عوائد من الميدان).

الحقول:

  • toSite - موقع الوجهة
  • resource - ما وصل
  • toVolume - رصيد بند المخزون الجديد بعد الاستلام
  • uom - وحدة القياس

مثال: وصول ١٠٠ متر من الكابلات إلى المستودع ١

النقل

تنتقل المخزونات بين المواقع (المستودع → العامل، العامل → موقع العمل الميداني).

الحقول:

  • fromSite - موقع المصدر
  • toSite - موقع الوجهة
  • resource - ما تم نقله
  • fromVolume - رصيد المصدر بعد النقل
  • toVolume - رصيد الوجهة بعد النقل
  • pickupCode - JWT تم مسحه ضوئيًا (في حالة النقل باستخدام رمز الاستجابة السريعة)
  • scannerUserId - من قام بمسح رمز الاستجابة السريعة
  • scanMethod - "self" (العامل) أو "staff" (موظفو المستودع)
  • scanLocation - إحداثيات GPS لمكان المسح

مثال: يلتقط العامل كابل بطول ١٠ أمتار عبر مسح رمز الاستجابة السريعة ٢

الاستهلاك

يؤدي العمل الميداني إلى استنفاد المخزون (يتم الإنشاء تلقائيًا عند تقديم التقرير).

الحقول:

  • fromSite - من أين تم استهلاك المواد (عادةً من موقع العامل الشخصي)
  • resource - ما تم استهلاكه
  • fromVolume - الرصيد المتبقي بعد الاستهلاك
  • reportId - رابط لتقرير العمل (لحساب الدفع)

مثال: يستخدم العامل كابل بطول ٨ أمتار لإنجاز المهمة ٣

التعديل

التصحيح اليدوي لمستويات المخزون (عمليات الجرد الدوري، التلف، الفقد).

الحقول:

  • stockItemId - عنصر المخزون الذي تم تعديله
  • resource - ما الذي تم تعديله
  • fromVolume - الرصيد السابق
  • toVolume - الرصيد الجديد
  • reason - التفسير المطلوب (على سبيل المثال، "تصحيح الجرد المادي"، "تلف أثناء النقل")

مثال: اكتشاف تباين خلال الجرد الدوري ٤

الاستلام بالمسح (Pickup)

جمع مواد مرتبطة بمهمة، يُنشَأ تلقائيًا عندما يمسح عامل رمز QR الخاص بمورد مهمة معينة.

تُسجَّل معاملة الاستلام بالمسح المورد الذي جُمع، والحجم، والموقع الذي أُخذ منه، والشخص الذي أجرى المسح (المستلم الفعلي)، مع رابط يعود إلى المهمة وسطر المورد المحدد داخلها (context: { taskId, taskResourceIdx }). يختلف الاستلام بالمسح عن النقل: النقل يحرّك المخزون بين المواقع بشكل عام، في حين أن الاستلام بالمسح هو نقل مرفق بسياق مهمة — يربط خصم المخزون مباشرةً ببند عمل مخطط محدد. يتيح رابط السياق الاستعلام عن "كم من هذا المورد جُمع لإنجاز المهمة X" عبر تجميع معاملات الاستلام بالمسح، بدلاً من تخزين مجموع متحرك على المهمة ذاتها.

رموز QR الخاصة بالاستلام بالمسح أحادية الاستخدام (يُرفض إعادة التشغيل برسالة خطأ تعارض). يمكن إبطال الرموز (يُعاد المخزون عبر معاملة return) أو إعادة توليدها (يُصدر رمز جديد ويُلغى القديم) بصورة مستقلة.

حقول المعاملات

مشتركة بين جميع الأنواع:

  • type - استلام، نقل، استهلاك، تعديل، استلام بالمسح (pickup)
  • resource - مرجع تعريف المورد
  • uom - وحدة القياس
  • createdAt - الطابع الزمني (يتم إنشاؤه تلقائيًا)
  • createdBy - المستخدم الذي بدأ العملية (يتم تسجيله تلقائيًا)
  • properties - JSON مرن للبيانات المخصصة

خاص بالنوع:

  • fromSite / toSite - نقاط نهاية الحركة
  • fromVolume / toVolume - تغييرات الرصيد
  • reportId - رابط لتقرير العمل (الاستهلاك)
  • pickupCode - JWT تم مسحه ضوئيًا (التحويلات المحمية)
  • scannerUserId - من قام بالمسح الضوئي (التحويلات)
  • scanMethod - الدفع الذاتي مقابل الدفع بمساعدة الموظفين
  • scanLocation - GPS وقت المسح
  • reason - التفسير (التعديلات)

ثبات المعاملات

لا يمكن تحريرها:

  • المعاملات هي للكتابة فقط
  • لا توجد عمليات تحديث أو حذف
  • يحافظ على سلامة سجل التدقيق

إجراء التصحيحات: ١. لا تحاول تعديل المعاملة الخاطئة ٢. أنشئ معاملة adjustment جديدة ٣. أدرج سببًا مفصلاً يوضح التصحيح ٤. تظل كلتا المعاملتين في السجل

مثال على مسار التصحيح: ٥

إنشاء المعاملات تلقائيًا

من تقديم التقرير

عندما يقدم العامل تقريرًا يحتوي على حقل consumedFrom: ١. يتحقق النظام من توفر المخزون لكل عنصر مخزون ٢. ينشئ معاملات استهلاك لكل مورد بشكل متزامن ٣. يربط المعاملات بالتقرير عبر reportId ٤. يستنفد كميات عناصر المخزون ٥. في حالة عدم كفاية المخزون → رفض التقرير أو المطالبة بالاستهلاك الجزئي

المزايا:

  • المخزون دقيق دائمًا (لا يمكن نسيان تسجيل الاستهلاك)
  • يتم تنفيذ التقرير والمعاملة معًا (بشكل متزامن)
  • حساب الدفع يعتمد على بيانات موثوقة

من مسح رمز الاستلام QR

عندما يقوم العامل بمسح رمز الاستلام QR الخاص بالمهمة: ١. التحقق من توقيع JWT وتاريخ انتهاء الصلاحية ٢. التحقق من أن الماسح الضوئي هو المستلم المصرح له أو لديه canFacilitatePickups ٣. التحقق من توفر المخزون في موقع المصدر ٤. إنشاء معاملة نقل تلقائيًا ٥. تسجيل هوية الماسح الضوئي والطريقة وموقع GPS

المزايا:

  • لا حاجة لإدخال المعاملات يدويًا
  • يثبت GPS التواجد الفعلي
  • يوضح سجل التدقيق من أذن بالنقل

إدخال المعاملات يدويًا باستخدام مسح رمز الاستجابة السريعة

بالنسبة للشحنات التي تصل إلى المواقع التي لا تحتوي فيها العناصر على رموز QR موجودة، يمكن للموظفين الميدانيين استخدام نموذج المعاملات اليدوي المزود بمسح QR مدمج لقبول المخزون بسرعة باستخدام دفتر مرجعي مادي لرموز QR الخاصة بالموارد.

إنشاء دليل مرجعي مادي للموارد

الإعداد الإداري (لمرة واحدة):

١. انتقل إلى الإدارة → رموز QR للموارد (/admin/resource-qr-codes) ٢. قم بالتصفية حسب نوع المورد إذا لزم الأمر (المواد، العمالة، المعدات) ٣. ابحث عن موارد محددة لإدراجها ٤. انقر على طباعة لإنشاء ورقة رموز QR قابلة للطباعة ٥. اطبع على ورق قياسي بحجم Letter/A٤ ٦. قم بتغليف الصفحات بالبلاستيك وتجليدها في كتاب مرجعي ٧. ضع الكتاب في رصيف الاستلام أو محطة المستودع

تنسيق رمز الاستجابة السريعة (QR): يحتوي كل رمز استجابة سريعة (QR) على بيانات JSON: ٦

سير العمل عبر الهاتف المحمول لاستلام الشحنات

عملية الموظفين الميدانيين:

١. افتح نموذج المعاملة اليدوية

  • انتقل إلى المخزون → المعاملات
  • انقر على زر "إضافة معاملة يدوية"
  • يتطلب إذن canFacilitatePickups

٢. تمكين الوضع الدفعي (اختياري ولكن موصى به)

  • قم بتشغيل مفتاح "وضع الدُفعات" في أعلى النموذج
  • يسمح بمسح وإدخال عناصر متعددة قبل الإرسال النهائي
  • يوفر الوقت عندما تحتوي الشحنة على ٥ عناصر مختلفة أو أكثر

٣. مسح رمز الاستجابة السريعة للمورد

  • انقر على زر المسح (رمز 📷) بجوار حقل اسم المورد
  • تفتح الكاميرا على الجهاز المحمول
  • وجّه الكاميرا نحو رمز الاستجابة السريعة من دفتر المراجع
  • يتم ملء بيانات QR تلقائيًا: اسم المورد، معرف المورد، وحدة القياس الافتراضية

٤. أدخل تفاصيل الكمية

  • حقل الحجم: أدخل الكمية المستلمة (على سبيل المثال، "٥٠")
  • حقل وحدة القياس: يتم ملؤه مسبقًا من QR، اضبطه إذا لزم الأمر (على سبيل المثال، "م" للمتر)
  • الموقع: اسحب وأسقط موقع الوجهة أو استخدم الموقع الحالي

٥. إضافة إلى الدفعة (إذا كان وضع الدفعة ممكّنًا)

  • انقر على زر "إضافة إلى الدفعة"
  • يظهر العنصر في قائمة الدفعة أدناه
  • يتم مسح النموذج للعنصر التالي
  • كرر الخطوات ٣-٥ لكل عنصر في الشحنة

٦. إرسال المعاملة (المعاملات)

  • الوضع الفردي: انقر على "إرسال" (ينشئ معاملة واحدة)
  • وضع الدفعة: انقر على "إرسال الدفعة (N عنصر)" (ينشئ N معاملة بشكل متزامن)
  • يظهر إشعار النجاح عدد العناصر التي تم قبولها
  • إذا فشلت أي عناصر، يبلغ النظام عن العدد ولكنه لا يعيد العناصر الأخرى

مثال على سير عمل الدفعة: ٧

التعامل مع الموارد غير المعروفة

إذا كانت الشحنة تحتوي على عناصر غير موجودة في كتاب المراجع:

١. اكتب اسم المورد يدويًا

  • أدخل الاسم في حقل "اسم المورد" (بدون مسح QR)
  • يبحث النظام عن المورد الموجود بالاسم
  • إذا لم يتم العثور عليه → يتم وضعه تلقائيًا في مورد "الاحتجاز/التجهيز"

٢. سير عمل الاحتجاز/التجهيز

  • تتضمن خصائص المعاملة originalResourceName (ما قمت بكتابته)
  • تنبيه منبثق: "لم يتم العثور على المورد. تم وضعه في مورد "الاحتجاز/التجهيز"
  • تم إنشاء عنصر المخزون بمورد "الاحتجاز/التجهيز"
  • لاحقًا: يقوم موظفو المكتب بتخصيصه للمورد المناسب (انظر تخصيص المخزون المجهز أدناه)

٣. مزايا التجهيز التلقائي

  • لا يحتاج الموظفون الميدانيون إلى انتظار موافقة المكتب
  • يتم قبول المخزون فعليًا وتتبعها على الفور
  • يتم تصنيف الموارد بشكل غير متزامن
  • لا توجد تأخيرات معوقة للشحنات العاجلة

ميزات الوضع الدفعي

جدول البنود:

  • يعرض جميع العناصر الممسوحة ضوئيًا قبل الإرسال
  • يعرض: اسم المورد، الحجم، وحدة القياس
  • إزالة العناصر الفردية باستخدام زر X
  • عرض واضح لما سيتم الالتزام به

الإرسال:

  • معالجة الدُفعات بشكل متكامل (كل شيء أو لا شيء حيثما أمكن)
  • يتم الإبلاغ عن فشل العناصر الفردية ولكن لا يتم حظر العناصر الأخرى
  • عدد العمليات الناجحة: "تم إنشاء ٥ معاملات بنجاح"
  • معالجة الفشل الجزئي: "فشل معالجة عنصرين"

تحسين الأداء على الأجهزة المحمولة:

  • زر مسح ضوئي كبير سهل الاستخدام باللمس
  • الوصول إلى الكاميرا مع زر تشغيل/إيقاف الفلاش
  • يعمل دون اتصال بالإنترنت باستخدام التخزين المؤقت لـ PWA
  • الحفظ التلقائي للدفعة في localStorage (يستمر بعد تحديث الصفحة)

تخصيص المخزون المؤقت

بعد قبول الموظفين الميدانيين للموارد غير المعروفة في "الاحتجاز/التجهيز":

١. انتقل إلى عناصر المخزون

  • قم بالتصفية حسب "الموقع: الحجز/التجهيز" (إذا تم تنفيذه)
  • ابحث عن العناصر التي تحتوي على isHoldingResource: true

٢. افتح نافذة تخصيص

  • انقر على زر "تخصيص المخزون المؤقت" في عنصر المخزون
  • يعرض: الحجم الحالي، الاسم الأصلي الذي أدخله الموظفون الميدانيون

٣. اختر المورد المناسب

  • الخيار أ: اسحب المورد الموجود من جدول الموارد
  • الخيار ب: قم بتشغيل "إنشاء مورد جديد" وأدخل التفاصيل
  • أدخل سبب التخصيص (على سبيل المثال، "تم تحديده على أنه كابل Cat٦A، وليس Cat٦")

٤. إرسال التخصيص

  • تحديثات تلقائية:
  • حقل مورد عنصر المخزون (المخزون → المورد المناسب)
  • إنشاء معاملة تعديل مع سبب التخصيص
  • الحفاظ على originalResourceName في خصائص المعاملة

المزايا:

  • عدم حظر القبول الميداني أبدًا
  • الحفاظ على سجل التدقيق من خلال التصنيف المكتبي
  • عدم "اختفاء" أي مخزون أثناء عملية الانتقال
  • الحفاظ على الملاحظات الأصلية للعاملين الميدانيين

عرض المعاملات

سجل المعاملات العام:

  • انتقل إلى المخزون → المعاملات
  • قم بالتصفية حسب النوع، النطاق الزمني، الموقع، المورد
  • قم بالتصدير للتسوية أو الامتثال

سجل عنصر المخزون:

  • انتقل إلى عنصر مخزون محدد
  • يعرض "سجل المعاملات" جميع الحركات التي تؤثر على هذا العنصر
  • تتبع النسب (من أين أتت المواد، وإلى أين ذهبت)

تقرير الاستهلاك:

  • انتقل إلى تقرير العمل
  • يرتبط قسم "المواد المستخدمة" بمعاملات الاستهلاك
  • تحقق مما تم استنفاده فعليًا من المخزون

نشاط الموقع:

  • انتقل إلى الموقع
  • يعرض "المعاملات الحديثة" الإيصالات والتحويلات والاستهلاك
  • راقب إنتاجية المستودع

حالات الاستخدام

تدقيق الامتثال

  • عرض جميع تحركات المواد الخاضعة للرقابة
  • إثبات سلسلة الحيازة (الاستلام → النقل → الاستهلاك)
  • تصدير سجل المعاملات لإعداد التقارير التنظيمية

منع الخسائر

  • مقارنة الاستلامات بالاستهلاك على مدار الوقت
  • تحديد التباينات التي تتطلب التحقيق
  • تتبع أنماط التعديل (التعديلات المتكررة = مشكلات محتملة)

حساب المدفوعات

  • ربط الاستهلاك بالتقارير عبر reportId
  • حساب تكاليف المواد للأعمال المنجزة
  • التحقق من استخدام العامل للمواد المخصصة (وليس المخزون الشخصي)

تسوية المخزون

  • مقارنة الأرصدة المستندة إلى المعاملات بالجرد الفعلي
  • تحديد حالات النقص أو أخطاء الجرد
  • إنشاء تعديلات لتصحيح التباينات

مسؤولية العامل

  • عرض سجل الاستلام والاستهلاك لكل عامل على حدة
  • تحديد من قام بمسح المخزون المحمي ضوئيًا
  • التحقق عبر GPS يوضح مكان نقل المواد

أفضل الممارسات

تضمين سبب التعديلات دائمًا:

  • "تصحيح الجرد المادي" أفضل من عدم ذكر سبب
  • "تم التخلص من المواد التالفة - عاصفة ٢٠٢٦-٠٢-٠٨" أفضل بكثير
  • يساعد المراجعين في المستقبل على فهم التصحيحات

استخدم أصغر أنواع المعاملات:

  • لا تستخدم التعديلات عندما يكون الاستلام/النقل مناسبًا
  • يجب أن تكون التعديلات استثناءً، وليست روتينية
  • يحافظ الاستلام/النقل على سياق أكثر ثراءً

التسوية المنتظمة:

  • أسبوعيًا: مراجعة التعديلات (يجب أن تكون نادرة)
  • شهريًا: الجرد الدوري للبنود الرئيسية في المخزون
  • ربع سنويًا: التسوية الكاملة للمستودع

الاستفادة من نظام تحديد المواقع العالمي (GPS) للتحويلات:

  • راجع scanLocation للمخزون المحمي
  • اكتشف الحالات الشاذة (امسح ضوئيًا على بعد ١٠٠ كم من المستودع)
  • التحقق من الحدود الجغرافية يمنع مشاركة رموز الاستجابة السريعة عن بُعد

مراقبة حجم المعاملات:

  • معدل تعديل مرتفع = مشاكل في العملية
  • استهلاك منخفض مع عمليات استلام عالية = اكتناز أو سرقة
  • عدم تطابق الإيصالات/الاستهلاك = مشاكل في توقع الطلب

أذونات المعاملات

إنشاء المعاملات:

  • transactionsCreate - يمكن إنشاء إيصالات وتعديلات
  • المعاملات التي يتم إنشاؤها تلقائيًا (من التقارير ومسح رموز QR) لا تتطلب إذنًا
  • يمكن للأذونات الخاصة بالموقع تحديد من يمكنه إنشاء الإيصالات في أي موقع

عرض المعاملات:

  • يمكن لجميع المستخدمين عرض المعاملات الخاصة بمخزونهم
  • يمكن لقيود الأدوار إخفاء المعاملات الخاصة بموارد/مواقع معينة
  • viewDeleted يسمح برؤية المعاملات المحذوفة مؤقتًا (في حالة تنفيذها)

لا توجد أذونات حذف:

  • لا يمكن لأي شخص حذف المعاملات
  • يحافظ على سلامة سجل التدقيق
  • يمكن لمسؤول قاعدة البيانات فقط الحذف (في حالات الطوارئ التشغيلية فقط)