دلوقتي مفيش جدول صريح يربط الـ
sample بالـ
investigations اللي عليها. النظام بيستنتج الرابطة من ٣ آليات مختلفة (section، specimen_type، deferred JSON). ده بيخلي:
- تأجيل تحليل واحد من panel = بيرجع البنل كله بدل التحليل ده
- Aliquot يفترض إن كل tests القسم في الـ child الواحد
- الـ FE يضطر يـ "يخمن" بـ
filterBillableTests + panel parent inference
- الـ result creation listener يحسب الـ investigations يدوياً من الـ section
CREATE TABLE lab_sample_investigations (
id BIGINT PK,
lab_sample_id BIGINT FK → lab_samples,
lab_investigation_id BIGINT FK → lab_investigations,
lab_request_investigation_id BIGINT FK → lab_request_investigations (NULLABLE),
status ENUM('pending','collected','rejected','deferred','recollected'),
deferred_reason TEXT NULL,
rejection_reason TEXT NULL,
created_at, updated_at, deleted_at,
UNIQUE(lab_sample_id, lab_investigation_id, deleted_at)
)
كل sample بقى متضمن قائمة
صريحة بالـ tests اللي عليها. صفر inference.
| الـ Action | قبل (الحالي) | بعد (الجديد) |
| Create initial sample |
sample بدون investigations؛ يستنتج من section |
إنشاء sample + إنشاء rows في sample_investigations لكل تحليل تابع له |
| Aliquot |
group by section في الـ FE/listener |
قسم الـ sample_investigations على الـ children |
| Defer test |
sample جديد is_deferred=true + JSON |
sample جديد + نقل الـ row للسامبل الجديد بـ status='deferred' |
| Recollect |
sample جديد + overload JSON كـ "scoped" |
sample جديد + نقل الـ rows بـ status='pending' |
| Collect |
sample.status = collected |
sample.status + كل sample_investigations → 'collected' |
| Create results (listener) |
يحسب الـ investigations من section_id/specimen_type |
قراءة مباشرة من sample.investigations |
| FE Display tube codes |
filterBillableTests + panel logic معقد |
قراءة مباشرة من sample.investigations |