📋 سجل التحديثات
v1.35.1 25-09-2026
  • تغيير🔴 الصفحة اتسمّت تاني — من warehouse-return.html لـPackage-Transfer-To-Warehouse.html، مطابقة حرفيًا لاسم ريبو الـ Worker المنفصل (نفس قاعدة Bosta-Orders-Shipped-Scanner.html في v1.34.0). ⚠️ الرابط القديم ما بقاش شغّال — حدّث أي بوكمارك على أجهزة المخزن.
v1.30.0 19-09-2026
  • تغيير🔴 الطابور بقى بيعرض الأوردرات اللي «موقع الشحنة» بتاعها = في المكتب بس. كان بيعرض كمان اللي مع المندوب واللي عهدته فاضية — والفاضي معناه «مش عارفين الطرد كان فين»، وقايمة مبنية على «مش عارفين» مش طابور شغل.
  • تغيير⛔ وده فلتر عرض مش شرط أهلية — الأوردر اللي عهدته فاضية أو «مع المندوب» بيتسكن ويتسجّل عادي، هو مش في القايمة وبس.
  • تغيير⚠️ والطابور هيفتح فاضي لحد ما «قسم تسليمات المكتب» يشتغل — هو الوحيد اللي بيكتب القيمة دي، ولسه ما اتنشرش. ورسالة القايمة الفاضية بتسمّي الشرط بدل ما تقول «مفيش طرود راجعة».
  • تغيير🔴 سقف استعلام الـ Worker اترفع من ٣٠٠ لـ١٬٠٠٠ لكل استعلام. الرقم القديم اتنسخ من أداة مصدرها حالة عابرة، وحالات الأداة دي (Returned/Cancelled) بتتراكم — فالسقف كان بيتضرب من أول يوم والطابور بيقول رقم أقل من الحقيقة.
  • تغييرعمود «الطرد فين دلوقتي» بقى اسمه «موقع الشحنة» — نفس الاسم في «قسم تسليمات المكتب» بالحرف، والمعنى ما اتغيّرش.
  • تغيير🔴 عمودا «آخر تحديث» و«الوقت منذ آخر تحديث» اتشالوا بالكامل، ومعاهم order.updatedAt من الـ Worker. ⚠️ والسبب: شوبيفاي مالهاش حقل بيقول «الطرد رجع إمتى»، وupdatedAt بيتحرّك مع أي تعديل — حتى كتابة الميتافيلد بتاعتنا. فكان تقريب بيتقري تسجيل، وعملية جماعية واحدة كانت بتخلّي صفوف كتير تقول نفس التاريخ.
  • تغييروترتيب الطابور بقى بالأقدم تغليفًا بدل آخر تحديث — نفس ترتيب «قسم تسليمات المكتب» بالحرف. وقت التغليف مش مثالي هنا، بس هو وقت مسجّل فعلاً بدل تقريب بيتحرّك لوحده.
v1.29.0 19-09-2026
  • تغيير🔴 الطابور بقى بأرضية تاريخ أوردر ثابتة: 01/04/2026. الأوردرات الأقدم من كده مش بتظهر في القايمة. ⚠️ والأرضية عرض بس — الأوردر الأقدم منها بيتسكن عادي والتسجيل بيتم، هو مش في القايمة وبس.
  • تغيير🔴 نافذة الـ٣٠ يوم المتحرّكة اتشالت. كانت بتفلتر بآخر تحديث، وكانت بتخفي الطرد الراجع من شهرين بالظبط لما يبقى منسي فعلاً — وهو الطرد اللي الأداة دي اتعملت عشانه.
  • جديدالسطر تحت عنوان الطابور بقى بيقول الأرضية بالتاريخ — والتاريخ جاي من رد الـ Worker مش مكتوب في الصفحة.
v1.28.0 19-09-2026
  • جديد🔴 قسم استلام المرتجعات — أداة جديدة بالكامل. بتسجّل رجوع الطرد للمخزن على custom.package_whereabouts_s1/_s2 بقيمة Warehouse، والسكان فوري: كل باركود بيتسجّل لوحده من غير دفعة ومن غير زرار تنفيذ.
  • جديدطابور «جاهز للرجوع للمخزن» — في الصفحة وفي صف خامس على الشاشة الرئيسية. الشروط: الزون قاهرة+جيزة أو شو روم · الحالة Returned أو Cancelled (S1 أو S2) · اتغلّف فعلاً · وعهدة الطرد لسه مش Warehouse.
  • تغيير🔴 الإلغاء هنا شرط أهلية — مش سبب رفض. في «قسم تسليمات المكتب» الأوردر الملغي بيترفض («قطع الشحنة ورجّع المنتجات على الرف»)؛ هنا ده بالظبط الطرد اللي الأداة اتعملت عشانه.
  • تغيير🔴 وعهدة الطرد مقلوبة كمان: Warehouse = «خلاص متعمل»، وOffice وCourier هما الحالتان الطبيعيتان (الطرد راجع من المكتب أو من إيد المندوب).
  • جديدنافذة زمنية ٣٠ يوم على الطابور — Returned وCancelled حالتان نهائيتان بتتراكم (بخلاف Ready العابرة)، ومن غير النافذة الاستعلام بيرجّع آلاف الصفوف. ⚠️ والنافذة عرض بس: الأوردر الأقدم منها بيتسكن عادي والـ Worker هو المرجع.
  • تغيير🔴 صف الاستبدال/الاسترجاع بيتفحص بوقت تغليف S2 (s2_packing_date_time) مش S1 — نفس درس أداة المكتب. ⚠️ ومعنى الشرط هنا أقوى: أوردر اتلغى قبل ما يتغلّف مفيهوش طرد أصلاً.
  • تغيير🔴 بوسطة خارج النطاق — مرتجعاتها ليها أداتها («قسم مرتجعات بوسطة»)، وpackage_whereabouts مش بيتتبع لطرودها أصلاً.
  • جديدشاشة تفاصيل قبل التسجيل للحالات الشاذة (الشحنة الأصلية ودورة الاستبدال الاتنين مرتجعين · طرد S2 راجع والشحنة الأصلية لسه مش Delivered · حالة بره القايمة المعتمدة) — بتكمّل بإقرار مش بتتمنع.
  • جديدتاب سجل العمليات — فلاتر server-side (نوع العملية · النتيجة · الطرد · الموظف · فترة · بحث) وصفحات وترتيب وتصدير XLSX.
ℹ️ عن الأداة — قسم استلام المرتجعات (مركز عمليات المخزن)
📋 وصف الأداة

الهدف: تسجيل رجوع الطرد للمخزن — الموظف بيسكن باركود الأوردر المرتجع أو الملغي، والأداة بتكتب custom.package_whereabouts_s1 (أو _s2 لدورة الاستبدال/الاسترجاع) بقيمة Warehouse.

ليه الأداة موجودة: «قسم تسليمات المكتب» بيكتب Office على الطرد الخارج — وكانت دي قيمة بلا طريق رجوع: الطرد اللي اترفض أو اتلغى بيرجع المخزن ومحدش بيسجّل رجوعه، فيفضل مكتوب عليه «في المكتب» للأبد. الأداة دي هي شبكة الأمان اللي بتقفل الدايرة.

المستخدمون المستهدفون: فريق المخزن — لحظة استلام الطرود الراجعة وترجيعها على الرف.

🔴 دي معكوس «قسم تسليمات المكتب» على نفس الحقل

تسليمات المكتباستلام المرتجعات (دي)
الحالة المؤهلةReadyReturned · Cancelled
الإلغاء🔴 سبب رفض🔴 شرط أهلية
العهدة المقبولة قبلWarehouse أو فاضيةOffice · Courier · فاضية
«خلاص متعمل»العهدة Officeالعهدة Warehouse
القيمة المكتوبةOfficeWarehouse

شروط الأهلية

  1. مش بوسطة — المندوب مش Bosta والزون مش Other_Regions. 🔴 مرتجعات بوسطة ليها أداتها («قسم مرتجعات بوسطة»)، وpackage_whereabouts مش بيتتبع لطرودها أصلاً.
  2. الزون قاهرة+جيزة أو شو روم — نفس نطاق أداة المكتب بالحرف.
  3. مرتجع أو ملغي — S1 = Returned أو Cancelled (أو ملغي على شوبيفاي نفسها) فالعهدة بتتكتب على _s1، أو S2 = Returned فبتتكتب على _s2.
  4. اتغلّف فعلاً — وقت تغليف مسجّل على ميتافيلد الماكينة بتاعتها: s1_packing_date_time لصف S1 و s2_packing_date_time لصف S2. ⚠️ أوردر اتلغى قبل ما يتغلّف مفيهوش طرد أصلاً — مفيش حاجة ترجع على الرف.
  5. عهدة الطرد مش Warehouse — Warehouse بترجّع «خلاص متعمل» (محايدة)، وOffice/Courier مقبولتين: دول بالظبط الطريقان اللي الطرد بيرجع منهم.

كيف تعمل — Workflow

  1. الدخول بيحصل مرة واحدة في الشاشة الرئيسية للهب — الصفحة دي مالهاش شاشة دخول.
  2. الطابور بيتحمّل تلقائيًا ويقول إيه المرتجع/الملغي اللي المفروض يرجع على الرف — آخر ٣٠ يوم.
  3. الموظف بيسكن باركود الأوردر — والتسجيل فوري: مفيش دفعة ومفيش زرار تنفيذ.
  4. النتيجة: نجاح = توست + الصف بيختفي من الطابور · خلاص متعمل / مرفوض = نافذة بالسبب · حالة شاذة = نافذة تفاصيل وإقرار قبل التسجيل.
  5. كل سكانة بتسيب صف واحد بالظبط في D1 — يا update يا rejected.

الـ Endpoints الرئيسية

actionالوصف
get_ready_to_warehouseالمرتجع/الملغي في آخر ٣٠ يوم (تلات استعلامات) بحقوله الخام — قراءة بحتة
scanقراءة الأوردر حيًّا + الحكم + metafieldsSet + صف D1
get_logs / get_logs_count / get_logs_exportسجل العمليات — فلاتر server-side (employees · types · results · machines · search · dateFrom/dateTo) + صفحات + ترتيب، والتصدير بيرجّع cap/total/truncated
get_employeesتعبئة فلتر الموظف في تاب السجل
diagفحص ذاتي بدون كتابة — المتغيرات (اسم وطول فقط) · OAuth · صلاحية write_orders · تعريف الميتافيلد الحيّ · D1 · تكلفة الاستعلام · الـ Origin
get_configبيرجّع WORKER_VERSION — الواجهة بتقارنه بـ min

⚙️ نتيجة كل سكانة — أربع حالات

الحالةمعناها
✓ تمالعهدة اتكتبت واتأكدت من رد شوبيفاي (Warehouse)
⚠ تم بتحذيراتكتبت، بس كان فيه حاجة محتاجة مراجعة والموظف أقرّ بيها
✗ فشلالنداء وصل لشوبيفاي واترفض — العهدة ما اتكتبتش
⏭ خلاص متعملالعهدة هي المستهدفة أصلاً (Warehouse) — لا نجاح ولا فشل ولا رفض: مفيش حاجة كانت مطلوبة. عدّاد مستقل ولون محايد
⛔ مرفوضاتوقف قبل أي محاولة كتابة (بوسطة · زون بره النطاق · لا مرتجع ولا ملغي · ما اتغلّفش) — الصف بيتسجّل بالسبب. ⚠️ الملغي مش هنا — هو مؤهل في الأداة دي
🔧 تشريح الكود

FEATURE MAP

  • shared/shell.js — الهوية والهيدر والإعدادات والتوست وحارس النسخة (نسخة واحدة مضمّنة للهب كله)
  • shared/shell.js §WAREHOUSE-GATE — 🔴 مصدر الأهلية الوحيد في الواجهة (wocWarehouseGate · wocWarehouseQueue). الصفحة دي والشاشة الرئيسية بينادوا نفس الدالة على نفس الرد. ⛔ وممنوع ينسخ حارس الإلغاء من §OFFICE-GATE — هناك رفض وهنا أهلية
  • §SCAN — سكانر بمهلة (١٥٠ms للسكانة · ٤٠٠ms للكتابة)، نفس قيم Orders-Packing-Checker.html بالحرف
  • §TOOL-JS::scanOrder — نداء scan فوري لكل باركود، ومعالجة الخمس نتايج
  • §TOOL-JS::outcomeModal — نافذة واحدة بأربع نغمات (مرفوض · خلاص متعمل · إقرار · فشل)، ومدخل واحد showOutcome
  • §TOOL-JS::session — جدول سكانات الجلسة + العدّادات
  • §WAREHOUSE-QUEUE-JS — الطابور بالتحديث التلقائي وحراسه التلاتة
  • §LOG-JS — القسم الموحّد: فلاتر multi-select + فترة سريعة + جدول + صفحات + تصدير
  • §LOG-JS::logParams — المصدر الوحيد لفلاتر التلات نداءات
  • §SHELL-JS::freezeOnScroll — قفل الهيدر وشريط التابات بعتبة مقيسة مش رقم ثابت
  • §SCAN::evaluate (Worker) — 🔴 الحارس الحقيقي: بيقرا الأوردر حيًّا وقت الضغطة
  • §SCAN::resolveOrder (Worker) — الرقم الطويل قراءة بمفتاح، والقصير بحث بمطابقة تامة على الاسم الراجع
  • checkWorkerVersion(PAGE_WORKERS) + wocRunDiag() (shell) — حارس النسخة وزرار 🩺 الفحص الذاتي

KEY VARIABLES

  • currentEmployee — { username, displayName } جاي من sessionStorage عبر requireSession()
  • TOOL_VERSION (shell) — نسخة الهب كله
  • WOC_WORKERS.warehouse.min (shell) — أقل نسخة Worker مقبولة. مالهاش أي علاقة بـ TOOL_VERSION، ولا بحد أداة المكتب
  • LS_SECRET = 'warehouse_ops_worker_secret' (shell) — 🔴 الأداة دي عضو في مجموعة warehouse_ops من أول يوم: مفيش سر قديم خاص بيها لأنها مالهاش نسخة مستقلة
  • WOC_API_TIMEOUT_MS (shell) — مهلة ٩٠ ثانية على كل نداء
  • D1: tool = "metafields_change" (سجل مشترك) + extra.sourceTool = "package_transfer_to_warehouse" · type = "update" أو "rejected". أحداث الدخول/الخروج تحت warehouse_ops_center (الهب)
  • 🔴 أي استعلام خط أساس على السجل ده لازم يفلتر على extra.sourceTool — من غيره بيعدّ صفوف أربع أدوات مع بعض (سكانرا بوسطة · تسليمات المكتب · دي)
  • extra.result — success/warning/error/rejected/already
  • extra.machine — S1 أو S2: أنهي طرد اتسجّل، مش حالة الأوردر
  • doneThisSession — الأوردر اللي اتسجّل في الجلسة دي بيتشال من الطابور فورًا؛ الشاشة لازم تتغيّر بعد النجاح

الـ Workers اللي الصفحة دي بتناديهم

—

NOTES

  • 🔴 الأداة دي مالهاش نسخة مستقلة بقرار — ريبو Package-Transfer-To-Warehouse فيه Worker وبس، والواجهة الوحيدة هي الصفحة دي.
  • 🔴 الأداة دي بتقفل فجوة G-17 — «الطرد المنسي في المكتب». قيمة Office كانت بلا طريق رجوع، فالطرد اللي اترفض أو اتلغى بيفضل مكتوب عليه «في المكتب» للأبد.
  • 🔴 الفلترة في الواجهة بقرار — package_whereabouts_s1 مش قابل للفلترة في بحث شوبيفاي: الفلتر عليه بيتجاهَل في صمت ويرجّع المتجر كله (١٠٬٠٠٠ صف — مقيس 15-09-2026). فالـ Worker بيجيب المرتجع/الملغي بس، والأهلية بتتحسب في §WAREHOUSE-GATE بتاع الـ shell — مصدر واحد للصفحة وللشاشة الرئيسية.
  • 🔴 نافذة الطابور ٣٠ يوم. Returned و Cancelled حالتان نهائيتان بتتراكم — كل مرتجع وكل ملغي في تاريخ المتجر بيطابق الفلتر، ومن غير النافذة الاستعلام بيرجّع آلاف الصفوف والطابور يقول رقم مالوش علاقة بالطرود اللي في إيد الموظف. ⚠️ والنافذة عرض بس — الأوردر الأقدم منها بيتسكن عادي والـ Worker بيكتب عليه.
  • ⚠️ الملغي على شوبيفاي نفسها مش في الطابور — الأوردر اللي عليه cancelledAt من غير manual_status = Cancelled مش بيطابق أي من التلات استعلامات (فلتر status:cancelled كان هيرجّع كل ملغيات تاريخ المتجر). وبيتسكن عادي — وده بالظبط معنى «القايمة عرض والـ Worker مرجع».
  • 🔴 الطابور مش حارس. الحارس الحقيقي في الـ Worker، وبيقرا الأوردر حيًّا وقت السكان — الجدول لقطة عمرها لحد ١٥ دقيقة، وحارس في الواجهة بس مش حارس.
  • ⚠️ الحقل لسه فاضي على أغلب الأوردرات — أداة التغليف هي اللي المفروض تكتب Warehouse وقت التغليف ولسه ما اتعدّلتش. عشان كده العهدة الفاضية مقبولة: الطرد راجع فعلاً، وإحنا مش عارفين هو كان فين. ✅ والأداة دي بتصلّح ده بنفسها — أول سكانة بتكتب Warehouse صراحةً.
  • ⚠️ أول أسبوع = تنضيف. الطابور هيفتح بمرتجعات وملغيات من أسابيع، وبعضها رجع الرف فعلاً من غير ما يتسجّل. ده متوقّع — القايمة بتنضّف نفسها مع أول دورة.
  • ⚠️ read_all_orders مش من صلاحيات التطبيق، والأداة دي أكتر واحدة معرّضة: بتقرا أوردرات مرتجعة وملغية وهي أقدم بطبيعتها. شوبيفاي بتخفي أي أوردر أقدم من ٦٠ يوم، والرسالة وقتها «الأوردر مش موجود على شوبيفاي» — وهي كاذبة تمامًا. بند في 🩺 الفحص الذاتي بيقولها بالاسم.
  • مفيش دفعة ومفيش زرار تنفيذ — السكان فوري. عشان كده مفيش CHUNK ولا MAX_BATCH في الأداة دي.
  • الأوردر اللي اتسجّل بيتشال من الطابور فورًا — الشاشة لازم تتغيّر بعد النجاح، وده الدرس اللي أنتج ٥٩ صف فشل كذّاب في أداة المرتجعات.
  • dateFrom/dateTo بيتقارنوا بالـ timestamp المخزّن (UTC) بينما العرض بتوقيت القاهرة — فرق الساعات ممكن يحط عملية بعد ٩ مساءً في يوم UTC اللي بعده. مقبول لفلتر بالأيام، ومكتوب هنا عشان مايتكتشفش كباج بعدين.
  • الـ Worker بيرجّع أسماء وأطوال المتغيرات في diag بس — مفيش قيمة أي سر بتتعرض.
—

📷 امسح باركود الأوردر الراجع

0 اتسجّل في الجلسة دي
🏭 جاهز للرجوع للمخزن
مرتجع أو ملغي · مسجّل إنه في المكتب · قاهرة+جيزة وشو روم
— أوردر
آخر تحديث لسه ما اتحدّثش
—
⏳ جاري الاستعلام عن الأوردرات برجاء الانتظار ...
▲
نوع العملية
تحديد الكل
النتيجة
تحديد الكل
الطرد
تحديد الكل
بحث برقم أوردر أو ملاحظة
🔍
فترة سريعة
اليوم✓
أمس✓
آخر 3 أيام✓
آخر 7 أيام✓
آخر 30 يوم✓
آخر 90 يوم✓
📅 شهر محدد‹
اختَر الشهر والسنة — يتطبّق الفلتر تلقائيًا بمجرد اختيار الاتنين. لسنة أقدم اختَر "سنة تانية..." واكتبها يدويًا.
الشهر الحالي✓
الشهر السابق✓
الربع الحالي✓
العام الحالي✓
العام السابق✓
من تاريخ
إلى تاريخ
الموظف
تحديد الكل
▲
النتائج: —
التاريخ الوقت الموظف رقم الأوردر الطرد من → إلى النتيجة السبب / ملاحظة
لا يوجد سجل بعد — اضغط تحديث