مراجعة كاملة للتابات، البحث، نطاق التاريخ، والـ pagination في صفحتَي التجميع (Collect / collection-worklist) والاستقبال (Receive / reception) — بناءً على الكود الفعلي + اختبار حيّ للـ endpoints على الباك إند.
| المحور | Collect | Receive | ملاحظة |
|---|---|---|---|
| التابات | شغّالة صح | شغّالة صح | كل تاب فلتر مستقل ومضبوط |
| البحث (نص) | شغّال | شغّال | بس داخل نطاق التاريخ المحمّل (مش مطلق على كل الأيام) |
| البحث بالباركود (Scan) | مطلق | مطلق | السكان بيلاقي أي عينة في أي يوم/صفحة |
| نطاق التاريخ (من/إلى) | موجود | موجود | هو آلية تحديد البيانات |
| الـ Pagination | Load-All | Load-All | مفيش paginator أزرار صفحات — بيحمّل كل الصفحات داخل النطاق |
| حد الـ 25/صفحة (API) | متعالَج | متعالَج | fetchAllPages / endpoint الباك بيجيب كل الصفحات — مفيش فقدان بيانات |
الخلاصة: التابات والبحث شغّالين صح. الـ«pagination» مش أزرار صفحات — هو نموذج «حدّد نطاق تاريخ → حمّل كل البيانات داخله»، وحد الـ25/صفحة بتاع الـAPI متعالَج تماماً فمفيش بيانات بتضيع. البحث النصّي محلّي (جوّه النطاق)، والسكان مطلق.
| التاب | بيعرض | المصدر | الحالة |
|---|---|---|---|
| Pending | تيوبات لسه متجمّعتش (مش deferred ومش مكتملة) | pendingCards() computed | صح |
| Deferred | التيوبات المؤجّلة (pending فقط) | deferredCards() | صح |
| Cancelled | التيوبات الملغاة | cancelledCards() | صح |
| Sent out | المُرسلة لمعمل خارجي / outsourced | sentOutCards() | صح |
| History | سجلّ بتاريخ منفصل | historyCards (تحميل مستقل) | صح |
كل تاب computed() بيفلتر cards() (المبنية من الطلبات + العينات). الفصل نظيف وكل تاب مستقل.
searchQuery + cardMatchesQuery بيطابق (رقم الطلب · اسم المريض · MRN · أكواد التحاليل · الباركود) على كل التابات. شغّال — بس على البيانات المحمّلة (نطاق التاريخ).selectedDate + selectedDateEnd (من/إلى) + historyDate لتاب الـHistory. موجودfetchAllPages() — بيقرا meta.last_page من صفحة 1 ثم يجيب باقي الصفحات بالتوازي ويدمجهم. مفيش paginator UI — بيحمّل كل البيانات داخل النطاق. Load-All| التاب | بيعرض | المصدر | الحالة |
|---|---|---|---|
| To receive + فرعي: Internal / B2B | التيوبات حالتها collected (متجمّعة ومستنية استلام) | toReceiveTubes() → toReceiveInternal/B2b | صح |
| Rejected | التيوبات اللي فيها رفض | rejectedTubes() | صح |
| History | المستلَمة (delivered/received/completed) | historyTubes() | صح |
فصل الـB2B في تاب فرعي مقصود — عشان الموظف مايستلمش عينة معمل خارجي بالغلط (الاستلام بالسكان بس للـB2B).
searchQuery + matches() على كل التابات. شغّال (محلّي على النطاق).lookupAndReceiveByBarcode — لو الباركود مش في المحمّل، بيعمل بحث على السيرفر ويستلم. مطلق (أي يوم/صفحة)dateFrom / dateTo. موجود/lis/reception-worklist) بيرجّع كل التيوبات في النطاق مجمّعة من الباك (مفيش صفحات). البديل (client) listAllByFilter بيجيب كل الصفحات. Load-All/lis/reception-worklistرجّع 9 تيوبات (6 delivered + 3 pending) + counters. ✅ الـendpoint شغّال ويجمّع صح.
/lis/samplestotal=12 · last_page=1 · per_page=25 (الحد). fetchAllPages بيتعامل معاه صح. ✅
ملاحظة: الـ«To receive» فاضي دلوقتي لأن مفيش تيوبات حالتها collected (الموجود pending أو delivered) — ده سلوك صح، مش عطل.
في Collect/Receive، البحث بالنص بيفلتر البيانات المحمّلة في نطاق التاريخ بس. لو دوّرت على مريض برّه النطاق، مش هيلاقيه (إلا بالسكان اللي مطلق). لو عايز بحث مطلق زي ما عملنا في الورك ليست، ده تحسين ممكن.
النموذج الحالي: «حدّد نطاق → حمّل الكل». نضيف للنطاقات العادية، بس لو فتحت نطاق واسع جداً (شهور) هيحمّل كل البيانات مرة واحدة (أبطأ). لو محتاج تنقّل صفحات فعلي، ده إضافة مستقبلية.
كل التابات تفلتر صح · البحث يطابق (رقم/اسم/MRN/كود/باركود) · السكان مطلق · نطاق التاريخ موجود · حد الـ25/صفحة متعالَج بالكامل (مفيش بيانات بتضيع).