zoneId مش بالاسم (الاسم بيتكرر بين المدن)، والـ Worker بيتحقق إنه في مدينة الرفع ومش كل مناطقه مقفولة — ولو لأ بيوقف الصف.B1 Factories (10th of Ramadan) — B1 مصانع (العاشر من رمضان)) كانت بتتلف على تلات سطور والقراءة تبقى تخمين. ✅ وده كمان بيلغي خطر الخروج برّه النافذة من أصله: العرض = عرض الصف بالظبط.districtId وبوسطة بتحطّ الزون لوحدها منه.overflow:hidden (لتقويس الأركان) فكان بياكل نُص اللوحة — الموظف يفتح قايمة المنطقة ويشوف صفين ونُص. تقويس الأركان اتنقل للخانات الطرفية نفسها. ⚠️ باج بصري بحت: مفيش خطأ ومفيش سلوك بيتغيّر، عشان كده فيه اختبار بيحرس السطر ده تحديدًا.G-02، والزون بياخد هب محدد وكود G-08 — يعني تحويلة أقل. السلّم بقى منطقة ← زون ← محافظة، والنزول بيحصل لما اللي فوقه يترفض بس.-200 كانت بتتحوّل لـ«حصّل منه 200». دلوقتي بتبقى صفر، والتسوية مكتبية.نجاح 6 · فشل 0) بنفس حجم أي بادج تانية في الصفحة، فالرقم اللي بيقول إن فيه صف فشل أو «تم جزئيًا» كان بيتقرا كأنه وسم عادي. دلوقتي خمس مربعات: الإجمالي · نجاح · تحذير · فشل · اتخطّى. ⚠️ والصفر بيفضل رمادي — التلوين للقيمة اللي فيها شغل فعلًا، عشان «فشل 0» مايخليش شاشة كلها نجاح تبان فيها فشل.RESULT_STATS) — الإجمالي كان مكتوب في خانة لوحده والتفاصيل في خانة تانية، فكان ممكن تتضاف حالة جديدة وتتحسب في الإجمالي من غير ما يبقى ليها مربع.📍 بالمنطقة (مطابقة مؤكدة) بقت 📍 عنوان مظبوط — في الفلتر والعمود والتصدير مع بعض (مصدر واحد).✓ تم بقت ✓ نجاح — في النافذة وفي تصدير النتيجة. «تم» كانت بتتلخبط مع «⚠ تم جزئيًا»، واللي بينهم شحنة بفلوس حقيقية.📍 اختر المنطقة — #12345 — حالة العنوان: 🏙️ بالمحافظة بس. الشرح الطويل بقى على الـ hover على البادج، والقيمة نفسها هي اللي في العمود والفلتر بالحرف.دورة واحدة (أخضر) · تحذير بالبرتقالي · ⛔ موقوف بالأحمر. وتحته اسم الدورة ومعاه «من كام دورة» لو الأوردر عليه أكتر من دورة. قبل كده الخلية كانت بتقول اسم الدورة بس، فالأوردر اللي عدّى بتلات دورات كان شكله زي اللي ليه دورة واحدة.CYCLE_OVERLAP_OPEN) للموظف. دلوقتي بتعرض «أكتر من دورة مفتوحة»، والقيمة اللي وقّفت الصف بتبان تحتها — والكود نفسه فاضل في الـ tooltip عشان التتبع مع الدعم.CYCLE_OVERLAP_OPEN: …. دلوقتي التلاتة بيقروا من نفس المصدر — الموظف بيقرا نفس الجملة في الجدول وفي النافذة وفي تصدير النتايج. الكود الخام فاضل في الـ tooltip وفي سجل D1.--danger / --success، اتنقلوا مع كود الدمج)، فكانوا بيطلعوا بلون عادي. اللون هو الإشارة نفسها هنا: المبلغ السالب معناه بوسطة بتدفع للعميل عند الباب.status_2_r_e = In-Return/Ready وcustom.printing_time_s2 على طول بعد الشحنة. الاتنين اتشالوا: الانتقال بيحصل عند الطباعة مش عند الرفع، وتقديم الحالة من هنا بيكسر بوابة الطباعة. دلوقتي الرفع بيكتب رقم التتبع والتاج بس — نفس الشحن العادي بالحرف. (اتمسك على أول شحنة استبدال حية، بطلب أحمد.)Bosta-Return-Exchange-Exporter اتنقلت هنا بالكامل. فوق الفلاتر فيه مبدّل نوع الرفع: 🚚 شحن عادي · ↩️ استرجاع · 🔄 استبدال. كل وضع ليه استعلامه وأعمدته ونوع الشحنة بتاعه عند بوسطة (10 · 25 · 30).custom.bosta_tracking_number وقف، وبدله custom.bosta_tracking_number_s1 للشحنة العادية وcustom.bosta_tracking_number_s2 للاسترجاع/الاستبدال. الميتافيلد القديم لسه بيتقرا عشان الشحنات اللي اترفعت قبل كده تفضل باينة «مرفوعة» — بس مابيتكتبش تاني.Bosta_Uploaded_S1 للشحن وBosta_Uploaded_S2 للاسترجاع/الاستبدال. تاج واحد للاتنين كان معناه إن أوردر أول ما يتعمل له استرجاع يبان «مرفوع» في شاشة الشحن، والعكس.custom.courier. بتتأكد إنه Bosta بالفعل قبل ما تعمل الشحنة، والأوردر اللي كوريَره حاجة تانية بيتوقف برسالة. شحنة الاسترجاع بتسحب من عند العميل — فالسؤال هنا «هو ده مندوبنا أصلاً؟» مش «خليه مندوبنا».cityId بتاعها مش موجودة عند بوسطة كان بيرمي استثناء بيقفل القايمة بالكامل. دلوقتي بيوقف الصف ده لوحده برسالة بتسمّي السبب («كتالوج بوسطة اتغيّر») بدل ما يتدهور لـ«مفيش مطابقة منطقة» — اللي كان معناه شحنة على مدينة غلط.+20 12 71043044) وكانت بتتبعت زي ما هي.fmtNum.برج العرب الجديده - احياء…). الزون هو اللي بيحسم المدينة، فاسمه بيتعرض كامل دلوقتي.المنطقة 01 (العبور)) محدش بيكتبها، لكن الزون اسمه «العبور» وهو اللي العميل كاتبه. دلوقتي أوردرات العبور بتطلع 🟠 Cairo؟ ومعاها اقتراح جاهز بضغطة واحدة بدل «المحافظة بس» صامتة.🟠 Cairo؟) بدل «المدينة مشكوك فيها» العامة — تعرف من الجدول من غير ما تفتح.كفر الشيخ مركز قلين كانت بتترفع على Kafr ElSheikh بدل Qalin، وبعلامة خضرا ✅. الترجيح دلوقتي: المنطقة اللي اسمها اسم المحافظة بتتأخّر · خانة المدينة تغلب خانة العنوان · التطابق الكامل يغلب الجزئي · والطول بيفصل بس لو الأقصر جوّه الأطول (مدينة نصر / نصر).المنصورة / اجا) بقت غامضة بدل ما الأطول يكسب — ضغطة زيادة من الموظف أرخص من شحنة في فرع غلط.white-space بوزن أعلى كانت بتلغي اللف). دلوقتي بيلف وبيتقص على سطرين، والنص الكامل على الـ hover وفي النافذة وفي تصدير XLSX.الهدف: كل شحنات بوسطة من مكان واحد. بديل زرار Send to Bosta بتاع بلجن بوسطة على شوبيفاي للشحن العادي، وبديل أداة Bosta-Return-Exchange-Exporter بالكامل للاسترجاع والاستبدال (اتدمجت هنا في v2.0.0).
المستخدمون المستهدفون: فريق العمليات / المخزن.
حدود الأداة: شغلها بيخلص عند الرفع. متابعة حالة الشحنة بعد كده مش من شغلها — ولا الطباعة، ولا تقديم مرحلة الأوردر (custom.manual_status مبتتلمسش، وcustom.zone مبتتكتبش أبدًا).
| الوضع | نوع بوسطة | الأوردرات اللي بتظهر | بيكتب إيه بعد النجاح |
|---|---|---|---|
| 🚚 شحن عادي | 10 | custom.zone = Other_Regions · created_at >= 2026-08-01 · custom.manual_status = Confirmed أو Confirmed + Edit |
custom.courier = Bosta · custom.bosta_tracking_number_s1 · تاج Bosta_Uploaded_S1 |
| ↩️ استرجاع | 25 (CRP) | custom.status_2_r_e = Confirmed + RETURN و custom.courier = Bosta |
custom.bosta_tracking_number_s2 · تاج Bosta_Uploaded_S2 |
| 🔄 استبدال | 30 | custom.status_2_r_e = Confirmed + EXCHANGE و custom.courier = Bosta |
نفس الاسترجاع بالظبط |
🔴 الرفع مابيحركش حالة الأوردر — في التلات أوضاع. الانتقال بيحصل عند الطباعة مش عند الرفع، وتقديم الحالة من هنا بيكسر بوابة الطباعة. الشحن العادي كان كده من أول يوم، والاسترجاع/الاستبدال اتظبطوا عليه في v2.0.1 (كانوا بيكتبوا status_2_r_e وprinting_time_s2 وقت الرفع). ⚠️ الاستثناء الوحيد هو مسار الإكسيل: هناك الشحنة بتتعمل من داشبورد بوسطة بالإيد، فنافذة «تحديث الحالة» خطوة منفصلة الموظف بيضغطها بنفسه.
🔴 في الاسترجاع والاستبدال الأداة مابتكتبش custom.courier. بتتأكد إنه Bosta بالفعل قبل الشحنة، والأوردر اللي كوريَره حاجة تانية بيتوقف برسالة. شحنة الاسترجاع بتسحب من عند العميل — فالسؤال «هو ده مندوبنا أصلاً؟» مش «خليه مندوبنا».
🔴 المبلغ في الاسترجاع/الاستبدال ليه اتجاه. السالب معناه بوسطة بتدفع للعميل عند الباب، وبيتعرض «↩ استرداد» بالأحمر. حد بوسطة للاسترداد ٢٠٠٠ جنيه — واللي فوقه بيتقص، والقص بيتعلّم بعلامة ✂ والباقي مكتوب (بيتسوّى مكتبيًا).
🔴 كل رقم في صف الاسترجاع/الاستبدال متحسب من الدورة المفتوحة الواحدة. الأوردر ممكن يكون عدّى بأكتر من دورة، والحساب من كلهم كان بيشحن قطع رجعت المخزن خلاص. الأوردر اللي دورته مش واضحة (أكتر من دورة مفتوحة · مفيش دورة · استبدال بلا قطع خارجة) بيتوقف ومعاه السبب — مش بيترفع بتخمين.
📄 تصدير ملف بوسطة (Excel) لسه موجود في وضعي الاسترجاع والاستبدال كـخطة بديلة — لو عقد بوسطة اتغيّر أو المفتاح مش متاح أو الـ API رفض أوردر، المخزن مايقفش. المسار ده مالوش رقم تتبع (الشحنة بتتعمل من داشبورد بوسطة بالإيد)، وهو الوحيد اللي بيحدّث الحالة — عبر نافذة تأكيد منفصلة بـchecklist.
📍 اسم منطقة = المطابقة نجحت والشحنة هتترفع بالمنطقة · 🗺️ اسم زون = محافظة اتلغت إداريًا وبتتبعت كزون · ❓ N احتمالات = المطابقة غامضة والاحتمالات مثبّتة فوق قايمة النافذة · 🟠 المدينة مشكوك فيها = مفيش مطابقة جوه مدينة الجدول والعنوان طابق منطقة في مدينة تانية · 🏙️ المحافظة بس = مفيش مطابقة، الشحنة بتترفع على المحافظة وبتدخل مسار العناوين غير الواضحة عند بوسطة (مش فشل). الشرح كامل على الـ hover، وعمود حالة العنوان جنبه بيكرّر نفس التصنيف بنص فلتر حالة العنوان بالحرف — نفس الاسم ونفس القيمة في الفلتر والعمود وعنوان نافذة اختيار المنطقة.المنطقة 01 (العبور) محدش بيكتبها، لكن الزون اسمه «العبور». الاقتراح بيطلع جاهز، والضغطة بتظبّط المدينة وتقصّر القايمة على مناطق الزون بس. ⚠️ الزون بيحسم المدينة مش المنطقة — فيه مناطق كتير واختيار واحدة تخمين.city وخانة address1، فدمجهم في العرض بيخفي الخانة اللي المطابقة اتبنت عليها. وحالة العنوان بقت في عنوان النافذة نفسه (📍 اختر المنطقة — #12345 — حالة العنوان: …) والشرح الكامل على الـ hover عليها.| الحالة | معناها |
|---|---|
| ✓ نجاح | الشحنة اترفعت واتأكدت، والكتابة على شوبيفاي تمت |
| ⚠ تم جزئيًا | الشحنة موجودة فعلًا على بوسطة، بس حاجة بعدها ما تمّتش (الكتابة على شوبيفاي مثلًا). متعيدش الرفع — هتعمل شحنة مكررة |
| ✗ فشل | الشحنة ما اترفعتش، والسبب معروض |
| ⏭️ اتخطّى | الأوردر مرفوع قبل كده ومفيش تأكيد صريح |
| action | الوصف |
|---|---|
get_orders | الأوردرات المؤهَّلة + خطة العنوان لكل أوردر + حارس الفلتر |
get_districts | من غير cityId: قايمة كل مدن بوسطة (لمنتقي المدينة) · مع cityId: مناطق المدينة (متاحة للتسليم فقط) |
upload | رفع دفعة (٢٥ أوردر كحد أقصى) + الكتابة على شوبيفاي + السجل |
diag | فحص ذاتي بدون أي كتابة |
get_config | نسخة الـ Worker — لحارس النسخة |
get_logs · get_logs_count · get_logs_export | سجل العمليات |
§CONFIG — WORKER_URL · LS_SECRET · apiGet/apiPost/apiRequest · orderLink()§SHELL-JS — الإعدادات · النسخة · التوست · الوقت · حارس نسخة الـ Worker · الفحص الذاتي · Freeze on Scroll§AUTH-JS — Universal D1 Auth (check_employee / register_pin / verify_employee / log_logout)§TOOL-JS::filters — سجل الـ multi-select الموحّد للجدولين (owner بيوجّه التغيير للجدول الصح)§TOOL-JS::dateFilter — مصنع فلتر التاريخ (نسخة للجدول الرئيسي وواحدة للسجل، بنفس السلوك)§TOOL-JS::table — الفلترة والترتيب والعرض والتحديد§TOOL-JS::district — نافذة اختيار المنطقة والمدينة يدويًا · الاحتمالات المثبّتة · اقتراحات المدن والزونات · قصر القايمة على زون (effCity · chooseCity · chooseCrossCity · chooseZone · zoneSuggestRow · dpZoneFilter)§TOOL-JS::upload — التأكيد على المكرر · الرفع على دفعات · لوحة النتائج§LOG-JS — logParams · pagination · تصدير XLSX + بانر التقصّcurrentEmployee — { username, displayName } في الذاكرة فقط، مش في التخزينLS_SECRET = 'bosta_orders_upload_worker_secret' — المفتاح الوحيد المخزَّنTOOL_VERSION — مصدر واحد لرقم نسخة الواجهةMIN_WORKER_VERSION — أقل نسخة Worker الواجهة دي بتشتغل معاها (مالهاش علاقة بـ TOOL_VERSION)UPLOAD_CHUNK = 10 — حجم الدفعة من الواجهة (الـ Worker سقفه ٢٥)allRows · selected · districtOverride — بيانات الجدول والتحديد والاختيار اليدويConfirmed + عدّ Confirmed + Edit مش بيساوي العدّ المدمج — بلّغ فورًا، والأداة بتفضل شغّالة على الاستعلام المدمج.ecommoda-constants §3.5 بتوقف رفع الصف بتاعها برسالة صريحة — مفيش تخمين.city تغلب address1 ← التطابق الكامل يغلب الجزئي ← الطول بيفصل بس عند الاحتواء (مدينة نصر / نصر). مطابقتين منفصلتين = غموض معلَن، مش اختيار بالطول.مدينة السادات · قلين) وبتفشل لما يكون تسمية مركّبة محدش بيكتبها (العبور - المنطقة 05). عشان كده أوردرات العبور بتقع على «المحافظة بس». الزون معروض دلوقتي عشان نقرر إزاي نعالجها.UPLOAD_CHUNK صف. لو دفعة كاملة ما وصلتش للـ Worker، صفوفها بتتعرض بحالة «فشل» مع رسالة صريحة إن حالتها مش معروفة ولازم تتراجع على بوسطة قبل إعادة المحاولة.| رقم الأوردر | النتيجة | رقم التتبع | العقد | المدينة | المنطقة المبعوتة | ما تم فعليًا | السبب / التحذير | إجراء |
|---|
| التاريخ | الوقت | الموظف | نوع العملية | رقم الأوردر | النتيجة | رقم التتبع | العقد | المنطقة | ملاحظات |
|---|