تحليل تابات الـ Collect و الـ Receive — هل شغّالة فعلاً وصح؟

مراجعة كاملة للتابات، البحث، نطاق التاريخ، والـ pagination في صفحتَي التجميع (Collect / collection-worklist) والاستقبال (Receive / reception) — بناءً على الكود الفعلي + اختبار حيّ للـ endpoints على الباك إند.

🗓️ 2026-06-09🧬 LIS — Collect / Receiveكود + اختبار حيّ

الملخص السريع (الحُكم)

المحورCollectReceiveملاحظة
التاباتشغّالة صحشغّالة صحكل تاب فلتر مستقل ومضبوط
البحث (نص)شغّالشغّالبس داخل نطاق التاريخ المحمّل (مش مطلق على كل الأيام)
البحث بالباركود (Scan)مطلقمطلقالسكان بيلاقي أي عينة في أي يوم/صفحة
نطاق التاريخ (من/إلى)موجودموجودهو آلية تحديد البيانات
الـ PaginationLoad-AllLoad-Allمفيش paginator أزرار صفحات — بيحمّل كل الصفحات داخل النطاق
حد الـ 25/صفحة (API)متعالَجمتعالَجfetchAllPages / endpoint الباك بيجيب كل الصفحات — مفيش فقدان بيانات

الخلاصة: التابات والبحث شغّالين صح. الـ«pagination» مش أزرار صفحات — هو نموذج «حدّد نطاق تاريخ → حمّل كل البيانات داخله»، وحد الـ25/صفحة بتاع الـAPI متعالَج تماماً فمفيش بيانات بتضيع. البحث النصّي محلّي (جوّه النطاق)، والسكان مطلق.

1 صفحة التجميع (Collect)

التابات (5)

التاببيعرضالمصدرالحالة
Pendingتيوبات لسه متجمّعتش (مش deferred ومش مكتملة)pendingCards() computedصح
Deferredالتيوبات المؤجّلة (pending فقط)deferredCards()صح
Cancelledالتيوبات الملغاةcancelledCards()صح
Sent outالمُرسلة لمعمل خارجي / outsourcedsentOutCards()صح
Historyسجلّ بتاريخ منفصلhistoryCards (تحميل مستقل)صح

كل تاب computed() بيفلتر cards() (المبنية من الطلبات + العينات). الفصل نظيف وكل تاب مستقل.

البحث + التاريخ + الـ Pagination

// التغذية: 4 حالات طلبات + العينات، وكلها fetchAllPages (مش صفحة واحدة) pending · sample_collected · in_progress · partial_result → fetchAllPages + /lis/samples → fetchAllPages (الـAPI بيرجّع 25 كحد أقصى، فلازم نجيب كل الصفحات)

2 صفحة الاستقبال (Receive)

التابات (3 + تابين فرعيين)

التاببيعرضالمصدرالحالة
To receive
+ فرعي: Internal / B2B
التيوبات حالتها collected (متجمّعة ومستنية استلام)toReceiveTubes()toReceiveInternal/B2bصح
Rejectedالتيوبات اللي فيها رفضrejectedTubes()صح
Historyالمستلَمة (delivered/received/completed)historyTubes()صح

فصل الـB2B في تاب فرعي مقصود — عشان الموظف مايستلمش عينة معمل خارجي بالغلط (الاستلام بالسكان بس للـB2B).

البحث + التاريخ + الـ Pagination

3 اختبار حيّ (الباك إند دلوقتي)

Receive — /lis/reception-worklist

رجّع 9 تيوبات (6 delivered + 3 pending) + counters. ✅ الـendpoint شغّال ويجمّع صح.

Collect — /lis/samples

total=12 · last_page=1 · per_page=25 (الحد). fetchAllPages بيتعامل معاه صح. ✅

ملاحظة: الـ«To receive» فاضي دلوقتي لأن مفيش تيوبات حالتها collected (الموجود pending أو delivered) — ده سلوك صح، مش عطل.

4 ملاحظات وتوصيات (اختياري)

① البحث النصّي محلّي (مش مطلق)

في Collect/Receive، البحث بالنص بيفلتر البيانات المحمّلة في نطاق التاريخ بس. لو دوّرت على مريض برّه النطاق، مش هيلاقيه (إلا بالسكان اللي مطلق). لو عايز بحث مطلق زي ما عملنا في الورك ليست، ده تحسين ممكن.

② مفيش paginator (أزرار صفحات)

النموذج الحالي: «حدّد نطاق → حمّل الكل». نضيف للنطاقات العادية، بس لو فتحت نطاق واسع جداً (شهور) هيحمّل كل البيانات مرة واحدة (أبطأ). لو محتاج تنقّل صفحات فعلي، ده إضافة مستقبلية.

✅ اللي شغّال صح

كل التابات تفلتر صح · البحث يطابق (رقم/اسم/MRN/كود/باركود) · السكان مطلق · نطاق التاريخ موجود · حد الـ25/صفحة متعالَج بالكامل (مفيش بيانات بتضيع).