الخطوة ١ — إنشاء الـ Request
الـ request اتعمل بـ TSH كـ outsourced (external_lab_id = 1) + Lipid Panel internal.
الخطوة ٢ — التجميع
اتعمل sample 22 = 260526EVM3P9 للـ TSH (external) + sample 23 = 26052631DJCC-BIO للـ Lipid (internal). الـ pivot rows اتعملت: pivot #44 (TSH على sample 22) بـ status=pending.
الخطوة ٣ — الاستلام في الـ Lab
الـ technician عمل scan لـ 260526EVM3P9 → sample 22 → status=delivered. الـ GenerateResultsOnSampleReceived listener اشتغل وأنشأ LabResult #13 للـ TSH بـ status=pending.
⚠️ ملاحظة: الـ pivot row 44 transitioned to status=received.
الخطوة ٤ — الرفض من Reception History
المستخدم فتح Reception → History → اختار TSH → ضغط رفض → اختار سبب.
POST /samples/22/reject +
investigation_ids=[17] اشتغل:
- الـ pivot row 44 تم تحديث الـ status من received إلى rejected ✓
- الـ sample 22.status فضل
delivered (المتوقع — partial rejection)
- ❌ الـ LabResult #13 (TSH على sample 22) فضل pending — لم يتغير
الخطوة ٥ — Recollect من الـ Requests page
المستخدم فتح
/lab/requests، شاف ايكونة الرفض الحمراء، ضغط عليها، اختار TSH، ضغط Recollect.
POST /requests/10/recollect +
source=rejected, investigation_ids=[17] اشتغل:
- اتعمل sample جديد رقم 24 =
SMP-2026-05-00109 بـ notes='Recollected from rejected samples'
- اتعمل pivot row جديد #45 (TSH على sample 24) بـ status=pending
- الـ pivot row 44 (rejected) اتمسحت (soft-deleted)
الخطوة ٦ — الاستلام الجديد + المشكلة الفعلية
sample 24 ظهر في
/lab/reception → To Receive، الـ technician استلمها → status=delivered. الـ pivot row 45 transition من pending → collected → received.
الـ
GenerateResultsOnSampleReceived listener اشتغل، شاف الـ pivot row 45 (received) — وحاول ينشئ
LabResult لـ TSH على sample 24...
❌ لكن الـ existence check وجد LabResult #13 موجود بالفعل (الـ original المرفوض)
الكود الحالي:
$existing = LabResult::query()
->where('lab_request_id', $request->id)
->where('lab_request_investigation_id', $pivot->lab_request_investigation_id)
->first();
if ($existing) {
if ($existing->sample_id !== $sample->id) {
$existing->update(['sample_id' => $sample->id]); // ← يعمل re-bind
}
continue;
}
الـ listener عمل
re-bind للـ LabResult #13 من sample 22 إلى sample 24. الـ result نفسها
pending — فضلت قابلة للإدخال.