مصدر واحد · إعدادات لما يظهر ويختفي · إنجليزي بالكامل · البانل باسمه فقط · موحّد في كل المراحل (B2B / الطلبات / التجميع / الاستلام)
الباركود (ملصق العينة 50×25مم) يُطبع حاليًا من أكثر من مكان وكل مكان يبني الملصق بطريقته، فتظهر اختلافات بين الطلبات والتجميع والـ B2B. المطلوب:
LisBarcodeLabeService ترسم الملصق 50×25مم
عبر drawLabelV2() (jsPDF + JsBarcode). إذًا طبقة الرسم ليست المشكلة.
LabelDataV2) بنفسها وبمنطق مختلف،
وصفحة الطلبات ما زالت تستخدم الصيغة القديمة الأقل اكتمالًا.
| المكان | الطريقة المستخدمة | كيف يبني الملصق | الحالة |
|---|---|---|---|
صفحة الطلبات lis-requests | printLabels (قديمة) | inline — بدون MRN ولا اسم EN/AR ولا العمر ولا الطبيب | ناقص / قديم |
ويزارد الطلب request-wizard-v2 | printLabelsV2 | inline — منطق بانل خاص به | مكرر |
التجميع samples | printLabelsV2 | inline — توسعة بانل محلية | مكرر |
قائمة التجميع collection-worklist | printLabelsV2 | inline — من tubes | مكرر |
الاستلام specimen-receiving | printLabelsV2 | inline — ملصق لكل عينة فرعية | مكرر |
بوابة B2B client-request-detail / requests | printLabelsV2 | builder منفصل buildPortalBarcodeLabels — شكل بيانات مختلف | مصدر منفصل |
كارت المريض lis-patient-card.service | خدمة منفصلة | كارت تعريف المريض (ليس ملصق عينة) | خارج النطاق |
core.barcode_auto_generate وlis.require_sample_barcode — لا علاقة لهما بمحتوى الملصق.عند التجميع، الطلب يُقسَّم إلى عينة أم (Main) + عينات فرعية حسب القسم/نوع العينة. الفرعي = نفس رقم الأم + لاحقة للقسم/العينة:
| النوع | مثال (من LR-2026-00172) | قسم | الأب | الطباعة المطلوبة |
|---|---|---|---|---|
| رئيسي (Main) | 260529XEAZBE | — | — | لا يُطبع — لا قيمة له |
| فرعي (Sectional) | 260529XEAZBE-URI-S4 | Urinalysis | الأم | يُطبع |
| فرعي (Sectional) | 260529XEAZBE-URI-S | Urinalysis | الأم | يُطبع |
-URI / -HEM / -BIO…) اختصار القسم/العينة. نطبع الفرعي فقط لأن كل تيوب فعلي موجَّه لقسم، أما الرئيسي فلا قيمة له. وعند تعدّد عينات فرعية يكون لكل واحدة مسلسل مختلف.260529XEAZBE + طفلان …-URI-S4 و…-URI-S.=4 وواحد بدونه) — يبدو تكرارًا.نفس فكرة توحيد التقارير التي نفّذناها: مُحرِّك واحد + طبقة بناء واحدة + إعدادات واحدة، وكل الشاشات تستدعيها.
buildSampleLabels(samples, settings) تأخذ عينات الطلب + الإعدادات وتُنتج LabelDataV2[] بقاعدة واحدة للبانل واللغة والحقول. كل الشاشات (الطلبات، الويزارد، التجميع، الاستلام، B2B) تستدعيها بدل البناء المحلي.drawLabelV2 يُعاد ضبطه ليقرأ الإعدادات (ماذا يظهر/يختفي، الحجم، الخط الإنجليزي الإلزامي).lis.barcode_config (JSON) وتُقرأ/تُحفظ عبر مسار /lis/lab-info (نفس صلاحية lis.settings التي يملكها موظفو المعمل) — مصدر واحد متاح للجميع بلا صلاحيات إضافية.printLabels القديمة إلى المصدر الموحّد فتتطابق مع باقي الشاشات.صفحة «إعدادات ملصق الباركود» (ضمن إعدادات المعمل) فيها مفاتيح تشغيل/إيقاف لكل حقل، مع الافتراضي المقترح:
| الحقل على الملصق | المفتاح | افتراضي | ملاحظة |
|---|---|---|---|
| اسم المريض (إنجليزي) | show_patient_name | ظاهر | إنجليزي أولًا |
| رقم الملف MRN | show_mrn | ظاهر | |
| النوع + العمر | show_gender_age | ظاهر | M/F + 42Y 3M |
| التاريخ/الوقت | show_datetime | ظاهر | |
| شارة الأولوية (STAT/URG) | show_priority | ظاهر | |
| أكواد التحاليل (البانل باسمه) | show_tests | ظاهر | اسم البانل فقط |
| نوع العينة + القسم | show_specimen_section | ظاهر | |
| رقم الطلب | show_request_no | ظاهر | |
| اسم الطبيب | show_doctor | مخفي | اختياري |
| الرقم القابل للقراءة أسفل الباركود | show_barcode_text | ظاهر |
| الإعداد | المفتاح | القيمة / الخيارات |
|---|---|---|
| مقاس الملصق | label_size | 50×25مم (موصى به / افتراضي) · 40×20مم · 38×25مم · مخصّص (عرض×ارتفاع) |
| نوع الباركود (Symbology) | symbology | CODE128 (افتراضي) · CODE39 · EAN-13 · ITF — خطّي فقط، بدون QR |
| عدد النسخ الافتراضي | default_copies | 1 |
| إنجليزي بالكامل | english_only | مُفعّل دائمًا (مُلزَم) |
| اسم البانل فقط | panel_name_only | مُفعّل دائمًا (مُلزَم) |
| الباركود الفرعي فقط | sectional_only | مُفعّل دائمًا (مُلزَم) |
بحثت في كل الكود عن كل زر/حدث يطبع باركود فعلًا. القائمة الكاملة (8 مواضع في 6 شاشات):
| الشاشة / الموضع | الملف:السطر | المفتاح | افتراضي |
|---|---|---|---|
| صفحة الطلبات — زر الطباعة | lis-requests:783 | print_at_requests | نعم |
| صفحة الطلبات — طباعة المؤجّل/الجزئي | lis-requests:723 | print_at_requests_deferred | نعم |
| ويزارد إنشاء الطلب — بعد الإنشاء | request-wizard-v2:1254 | print_at_wizard | نعم |
| التجميع (Samples) — مفرد + دفعة | lis-samples:844/864 | print_at_collection | نعم |
| قائمة التجميع — طباعة تلقائية عند التجميع | collection-worklist:1497 | auto_print_on_collect | نعم |
| قائمة التجميع — إعادة طباعة يدوية | collection-worklist:1217/1306 | print_at_collection_worklist | نعم |
| استلام العينات (Reception) | specimen-receiving:600/603 | print_at_reception | نعم |
| بوابة B2B — قائمة الطلبات | client-requests:76 | print_at_b2b_portal | نعم |
| بوابة B2B — تفاصيل الطلب | client-request-detail:96 |
print_at_kanban = لا). أبرز خيار هو «الطباعة التلقائية عند التجميع» — كثير من المعامل تفضّل إيقافها لتفادي ملصقات زائدة. عند الإيقاف يختفي/يتعطّل الزر، وكلها تقرأ نفس الإعداد من المصدر الموحّد.● كل حقل قابل للإظهار/الإخفاء من الإعدادات الباركود إنجليزي بالكامل «CBC, LIPID» = أسماء بانل فقط (بدون WBC/HGB…)
كلها تمرّ على نفس buildSampleLabels() + نفس الإعدادات → ملصق متطابق في كل مرحلة.
lis.barcode_config (JSON) + قراءته/حفظه عبر /lis/lab-info (صلاحية lis.settings).buildSampleLabels(samples, settings) — قاعدة واحدة للبانل/اللغة/الحقول.drawLabelV2 ليحترم الإعدادات (إظهار/إخفاء + الحجم + إنجليزي إلزامي).patient-card) خارج هذا النطاق — نتركه كما هو الآن؟-URI-S4 بنوع عينة و-URI-S بدون) — هل المطلوب تيوب واحد فقط لكل قسم (نُزيل التكرار ونراجع منطق القسمة في الـ Backend)، أم فعلًا تيوبان مقصودان؟