⬢ تقرير فني — للعرض الإداري

منظومة طباعة تقارير المختبر:
دراسة معمّقة لفجوات القوالب وخطة التوحيد

تحليل سطر-بسطر لكل محركات الطباعة وقوالب التقرير الستة (Classic والقوالب الحديثة الخمسة)، بهدف واحد: أي قالب يختاره المعمل يجب أن يطبّق نفس القواعد ونفس الأختام دون استثناء.

📅 التاريخ: 10 يونيو 2026 🧪 النطاق: Moon ERP — وحدة LIS 🔍 المنهجية: 4 مسارات تحليل متوازية + مراجعة Codex مستقلة 📁 الدليل: كل نتيجة موثّقة بالملف ورقم السطر
4
محركات طباعة منفصلة تعمل بالتوازي
6
قوالب تقرير متاحة للمعمل
17
مشكلة موثّقة (4 حرجة / 7 كبيرة / 6 ثانوية)
0
إعداد فعّال من مجموعة ReportSettings (إظهار QR/التوقيع/السابقة/النصوص)
51
ملاحظة دليلية خام دُمجت في 17 مشكلة
1

الملخص التنفيذي

Executive Summary

المنظومة لا تملك محرك طباعة واحداً بقواعد واحدة — بل أربعة محركات مستقلة تتباعد عن بعضها مع كل تعديل: محرك Classic (jsPDF)، محرك القوالب الحديثة الخمسة (HTML)، خط مكرر كامل في Print Queue، ومحرك رابع على الخادم (DomPDF) لتنزيلات البوابات والبريد. النتيجة العملية: نفس الطلب يطبع بمحتوى مختلف حسب الشاشة التي طُبع منها.

تصحيح جوهري للفرضية الأولية: كان الافتراض أن القالب الرئيسي (Classic) هو الذي ينقصه ما في القوالب الفرعية. التتبع أثبت العكس في معظم المحاور: Classic هو الأكثر التزاماً (يرسم ختم وتوقيع الفرع، يطبع التعليقات، يحترم إعدادات الهيدر وترتيب أقسام الهيستو) — بينما القوالب الحديثة الخمسة لا ترسم ختم الفرع إطلاقاً، و4 منها لا ترسم توقيع الفرع (قالب Document يرسمه لكن ينسبه خطأً للطبيب)، وتفقد جميعها كل التعليقات. ومع ذلك توجد فجوات بالاتجاهين (ألوان الأعلام مثلاً ملوّنة في الحديثة ومطفأة في Classic). التوحيد المطلوب إذن من الاتجاهين نحو عقد واحد.
القرار المعتمد (وُجّهت به الخطة أدناه): قالب Classic هو المرجع الرسمي لقواعد التقرير. كل قالب آخر يجب أن يطبّق قواعد Classic نفسها — الأختام والتوقيعات، التعليقات، إعدادات الهيدر، ترتيب الهيستو، وسلامة الترقيم — ويحتفظ بهويته البصرية فقط. وكل إعدادات الطباعة تُدار حصرياً من صفحة إعدادات المعمل وتكون فعّالة فعلياً في كل القوالب وكل مسارات الطباعة، مع إضافة إعدادات جديدة للصفحة كلما لزم.

أخطر ما كشفته الدراسة ليس الأختام: قالبان حديثان يقصّان بيانات مطبوعة بصمت عندما يطول القسم عن صفحة واحدة، ومجموعة إعدادات ReportSettings كاملةً (إظهار QR والتوقيع والنتائج السابقة ونصوص الهيدر/الفوتر والترخيص) ديكورية — لا يصل منها إعداد واحد إلى أي ورقة مطبوعة (بينما إعدادات حقول الهيدر وتنسيق التعليقات تعمل في بعض القوالب فقط — تفصيلها في المشاكل 8 و10)، ومسار الموظفين قد يطبع نتائج غير معتمدة بينما تطبع البوابات المعتمد فقط.

2

الوضع الحالي — خريطة المحركات الأربعة

Current Architecture

محرك Classic القالب الرئيسي

  • jsPDF — ‏1,365 سطراً، ترقيم صفحات حقيقي
  • ✅ ختم + توقيع الفرع، التعليقات، إعدادات الهيدر، ترتيب الهيستو
  • ❌ يتجاهل كائن ReportSettings بالكامل، بلا QR، أعلام أبيض/أسود
يُستدعى من: النتائج، الطلبات، الفحص، البوابتين، Print Queue

محرك HTML 5 قوالب حديثة

  • Editorial · Bento · Monochrome · Spectrum · Document
  • ✅ تصميم عصري، أعلام ملوّنة
  • ❌ لا يستقبل الإعدادات أصلاً، 4 قوالب بلا ختم/توقيع، صفر تعليقات، قصّ صفحات
يُستدعى من: مسار الموظفين فقط عند اختيار قالب حديث

‏Print Queue خط مكرر

  • تجاوز كامل للموصّل المركزي — تجهيز بيانات خاص به
  • ❌ دائماً Classic، بلا أختام، بلا فلتر الإخفاء، يقرأ مفاتيح إعدادات وهمية
يُستدعى من: شاشة الطباعة الجماعية

محرك الخادم DomPDF — رابع

  • ‏Blade views خاصة بمفاتيح إعدادات خاصة
  • ❌ بلا قوالب، بلا أختام، بلا QR
يُستدعى من: تنزيل تقرير البوابات + بريد النشر
الخلاصة المعمارية: «قواعد التقرير» معرّفة اليوم في 4 أماكن مختلفة بأربع نسخ متضاربة. أي إصلاح موضعي سيُعيد إنتاج الانحراف خلال شهور — الحل الجذري في القسم 5.
3

مصفوفة المقارنة — الميزة × القالب

Feature × Template Matrix
مدعوم كاملاً جزئي / به خلل غير مدعوم
الميزة / القاعدةClassic
الرئيسي
EditorialBentoMonochromeSpectrumDocument
ختم الفرع (الختم الرسمي)
توقيع الفرع
توقيع الطبيب المعتمد
رمز QR
إعدادات إظهار/إخفاء حقول الهيدر
تعليقات النتائج (سطر/ثابت/عام)
ترتيب أقسام الهيستوباثولوجي المخصص
ألوان أعلام النتائج الشاذة H/L/C
ترقيم صفحات صحيح بلا قصّ بيانات
النتائج السابقة (للمقارنة)
نصوص هيدر/فوتر من الإعدادات + الترخيص
المزرعة (Culture) بجدول الحساسية كاملاً
عدم طباعة شارة «Verified» لنتائج غير معتمدة
ملاحظة على عمود Document في صف الترقيم: ◐ تعني أنه لا يقصّ البيانات لكنه يطبع بلا ترقيم صفحات أو فوتر — نمط فشل مختلف عن قصّ Editorial/Spectrum.
المسارات الموازية أسوأ من القوالب نفسها: Print Queue يطبع Classic بدون ختم وتوقيع أصلاً، والبوابتان (المريض + B2B) مثبّتتان على Classic وتتجاهلان قالب المعمل المختار وكل إعدادات الهيدر.
4

المشاكل بالتفصيل والحلول

Problems & Fixes — with line-level evidence
حرجة

1 — الأختام والتوقيعات غير موحّدة: 4 قوالب حديثة تطبع صناديق ختم فارغةجهد متوسط

صورة ختم الفرع لا يرسمها أي قالب حديث (الصندوق المطبوع فارغ شكلياً)، وصورة التوقيع يرسمها قالب Document وحده — وينسبها خطأً للطبيب الاستشاري بينما هي توقيع الفرع. محرك Classic يرسم الاثنين لكن بقصّ أبعاد مستقل يشوّه نسبة الصورة، ويتجاهل إعداد التعطيل تماماً. وتوقيع الطبيب يُجلب من قاعدة البيانات ولا يرسمه أي محرك.
lis-html-report.service.ts:376,540,685,861lis-html-report.service.ts:1015-1016lis-report-pdf.service.ts:1286-1301lis-report-pdf.service.ts:1294-1296
الحل: كتلة توقيع/ختم واحدة مشتركة (partial) تُحقن في القوالب الخمسة وتستخدم نفس صور Classic بنفس قواعد الإظهار، مع تصحيح تسمية Document وحساب الأبعاد بنسبة محفوظة، ورسم توقيع الطبيب عند توفره.
حرجة

2 — قصّ بيانات مطبوعة بصمت في قالبَي Editorial وSpectrumجهد متوسط

القالبان يفرضان overflow:hidden على الصفحة: أي قسم نتائجه أطول من ورقة A4 واحدة تُحذف بقيته من المطبوع دون أي تحذير — فقدان بيانات طبية فعلي. وبقية القوالب ليست سليمة: Bento وMonochrome يفيضان للصفحة التالية دون تكرار الهيدر وقد يتصادمان مع الفوتر، وأرقام الصفحات تَعُدّ الأقسام لا الصفحات الفيزيائية، وDocument يتدفق صحيحاً لكنه بلا ترقيم صفحات أو فوتر أصلاً.
lis-html-report.service.ts:252,713lis-html-report.service.ts:88
الحل: إزالة القصّ والاعتماد على CSS Paged Media (break-inside avoid للصفوف + تكرار الهيدر)، وترقيم صفحات بعداد الطباعة الفعلي.
حرجة

3 — كل التعليقات تختفي من القوالب الحديثة الخمسةجهد متوسط

ثلاث قنوات تعليقات يطبعها Classic — تعليق النتيجة على السطر، التعليق الثابت للتحليل، والتعليق العام للتقرير — لا تملك أي موضع رسم في القوالب الخمسة. تعليق طبي مكتوب على نتيجة قد يكون فارقاً في التفسير، وضياعه حسب «شكل» القالب خلل سلامة وليس خلل تجميل.
lis-report-pdf.service.ts:1031-1045,1219-1256lis-print-report.service.ts:484-493
الحل: توحيد رسم التعليقات الثلاثة كجزء من «عقد القالب» الإلزامي (قسم 5) وتطبيق إعدادات تنسيق التعليق printCommentConfig في المحركين.
حرجة

4 — اختلاف قاعدة «ما الذي يُطبع»: نتائج غير معتمدة تصل للورقجهد صغير

مسار الموظفين يطبع النتائج بحالة entered (لم تُعتمد بعد) بينما البوابتان وPrint Queue تطبع released فقط — نفس الطلب يطبع محتوى مختلفاً حسب الشاشة. والأخطر: قالبا Bento وSpectrum يطبعان شارة «Verified» خضراء ثابتة حتى فوق النتائج غير المعتمدة.
lis-print-report.service.ts:97-99lis-html-report.service.ts:479,834lis-report-section-builder.ts:45
الحل: سياسة اعتماد واحدة معلنة (released-only افتراضياً + خيار مسودة بعلامة مائية «DRAFT» صريحة)، وربط شارة Verified بحالة النتيجة الفعلية.
كبيرة

5 — شاشة إعدادات التقرير بالكامل بلا أثر (Dead Settings)جهد متوسط

كائن الإعدادات ReportSettings (إظهار QR، إظهار التوقيع، النتائج السابقة، نص الهيدر/الفوتر، الترخيص، الوضع) لا يُقرأ ولا مرة داخل محرك Classic، ومحرك HTML لا يستقبله أصلاً في توقيع الدالة، والموصّل المركزي يثبّت القيم hardcoded بدل قراءتها من الخادم، وPrint Queue يقرأ مفاتيح lis_report_* تأكدنا بفحص شامل لمستودع الخادم أنها غير معرّفة فيه إطلاقاً (قيم لن تصل أبداً).
lis-report-pdf.service.ts:370-375,461lis-html-report.service.ts:13-18lis-print-report.service.ts:573-581lis-print-queue.component.ts:482-505
الحل: تمرير ReportSettings فعلياً للمحركين وتفعيل كل علم، وقراءة القيم من مفاتيح الخادم الصحيحة، وحذف المفاتيح الوهمية.
كبيرة

6 — Print Queue خط أنابيب مكرر يتجاوز كل القواعدجهد متوسط

شاشة الطباعة الجماعية لا تمر على الموصّل المركزي: تجهيز بيانات خاص بها، دائماً Classic مهما كان قالب المعمل، بدون صور الختم والتوقيع، بدون إعدادات الهيدر، وبدون فلتر hide_from_print — أي أن أعضاء الباقات المخفيين عمداً يُطبعون من هذه الشاشة.
lis-print-queue.component.ts:244,261-278,377-407lis-print-report.service.ts:589-615
الحل: إعادة توجيه Print Queue إلى الموصّل المركزي نفسه (حذف الخط المكرر بالكامل) — يرث تلقائياً الأختام والقالب والفلاتر.
كبيرة

7 — البوابتان تتجاهلان قالب المعمل وقواعد العرضجهد متوسط

بوابة المريض وبوابة B2B مثبّتتان على Classic مهما اختار المعمل، ومجهّز بيانات البوابات يفتقد: المدى المرجعي المطابق للجنس/العمر، التفسير النصي للنتائج الرقمية، وكل التعليقات — فتقرير البوابة قد يعرض مدى مرجعياً مختلفاً عن تقرير الموظفين لنفس النتيجة.
pp-print.service.ts:53-71client-report-print.service.ts:52-69lis-report-section-builder.ts:89,98-105lis-print-report.service.ts:742-782
الحل: توحيد مجهّز البيانات (نفس دوال المطابقة للجنس/العمر والتعليقات) واحترام قالب المعمل في البوابتين.
كبيرة

8 — إعدادات حقول الهيدر تعمل في قالبين فقط من ستةجهد صغير

مصفوفة إظهار/إخفاء حقول المريض الـ 12 (موثّقة بأنها «تنطبق على كل القوالب») يحترمها Classic وDocument فقط لأنهما يستخدمان الدالة المشتركة — الأربعة الباقون يثبّتون كتلة مريض من 5 حقول، فيفقدون الهوية الوطنية والفرع وتبديل «العيادة المحوِّلة» لطلبات B2B.
lis-report-pdf.service.ts:924lis-html-report.service.ts:1075lis-html-report.service.ts:328-339,484-498,639-648,822-838
الحل: إلزام القوالب الأربعة باستهلاك buildHeaderFields() المشتركة نفسها — الدالة موجودة وجاهزة.
كبيرة

9 — زر التنزيل ينكسر مع القوالب الحديثة (خطأ كاذب للمستخدم)جهد صغير

عند اختيار قالب حديث، دالة التوليد تطبع نافذة HTML «كأثر جانبي» ثم ترجع null — فتعرض شاشتا النتائج والمعاينة رسالة «لا توجد نتائج قابلة للطباعة» رغم أن الطباعة تمت، ويتعطل تنزيل PDF كلياً للقوالب الحديثة. كما يفشل فتح النافذة بصمت إذا حُظرت النوافذ المنبثقة.
lis-print-report.service.ts:648-684lis-results.component.ts:1544-1546lis-html-report.service.ts:20-21
الحل: فصل «طباعة» عن «توليد مستند» في الواجهة البرمجية، وإرجاع حالة نجاح صادقة، ومعالجة حظر النوافذ برسالة واضحة.
كبيرة

10 — ترتيب أقسام الهيستوباثولوجي المخصص يعمل في Classic فقطجهد صغير

ميزة ترتيب أقسام تقرير الهيستو (المسلَّمة حديثاً على مستوى القالب النسيجي) يحترمها Classic، بينما القوالب الحديثة — بما فيها Document المخصص أصلاً للهيستو — تثبّت الترتيب hardcoded.
lis-report-pdf.service.ts:401-405,628-646lis-html-report.service.ts:215-219,943-948
الحل: تمرير histoSectionOrder لمحرك HTML وتطبيقه في richBlocks وDocument.
كبيرة

11 — محرك خادم رابع (DomPDF) بقواعد رابعةجهد كبير

تنزيل التقرير من البوابات وبريد النشر يولَّدان على الخادم بقوالب Blade مستقلة لها مفاتيح إعدادات خاصة، بلا قوالب ولا أختام ولا QR — نسخة رابعة من الحقيقة تتباعد باستمرار.
Modules/LIS/app/Services/LabReportPdfService.php:12-38
الحل: (ضمن المرحلة الهيكلية) توليد PDF الخادم من نفس HTML القوالب الموحّدة بدل Blade مستقلة.
ثانوية

12 — QR والنتائج السابقة: ميزتان معلنتان غير موجودتين في أي محركجهد متوسط

إعداد «إظهار QR» موجود والمكتبة غير مستوردة في أي محرك؛ و«النتائج السابقة» تُجمع من الخادم ولا يرسمها أي قالب (لا عمود Previous في جدول Classic أصلاً).
lis-report-pdf.service.ts:984-990,126lis-print-report.service.ts:317,433
الحل: تنفيذ الميزتين مرة واحدة في الطبقة المشتركة أو إزالة إعداداتهما من الشاشة مؤقتاً (عدم إيهام المستخدم).
ثانوية

13 — القيمة الافتراضية للقالب من الخادم غير صالحةجهد صغير

الخادم يزرع lis.report_template = 'default' وهي قيمة لا تطابق أي قالب؛ ومحرك HTML يسقط للقالب Editorial وليس Classic عند قيمة مجهولة — معمل جديد قد يطبع بقالب لم يختره أحد.
LabSettingDefinitionSeeder.php:467-470lis-html-report.service.ts:46
الحل: توحيد الافتراضي على classic في الزارع والـ fallback.
ثانوية

14 — فلتر إخفاء أعضاء الباقة يعمل في مسار واحد من أربعةجهد صغير

hide_from_print مطبق في موصّل الموظفين فقط — Print Queue والبوابتان قد يطبعون أعضاء أخفاهم المعمل عمداً.
lis-print-report.service.ts:127-134lis-print-queue.component.ts:377-407
الحل: نقل الفلتر لطبقة تجهيز البيانات المشتركة (يحلّه توحيد المسارات تلقائياً).
ثانوية

15 — العربية في Classic: عريض غير مسجّل وتسميات إنجليزية ثابتةجهد صغير

خط NotoSansArabic مسجّل بوزن عادي فقط — طلب Bold للتعليقات العربية يفشل بصمت؛ وكل تسميات حقول الهيدر إنجليزية ثابتة حتى في التقارير العربية (مع خطأ إملائي «Reffering No.»)، والترخيص وهاتف/بريد المعمل لا تُطبع رغم توفرها.
lis-report-pdf.service.ts:338,516-518lis-report-pdf.service.ts:87-98lis-report-pdf.service.ts:204-211
الحل: تسجيل الوزن العريض، وتعريب التسميات وفق لغة التقرير، وإضافة الترخيص وقنوات الاتصال للهيدر/الفوتر.
ثانوية

16 — تفاصيل المزرعة (Culture): حقل disk_zone لا يُطبع + خطر تصادم مع الفوترجهد صغير

عمود قطر التثبيط في جدول الحساسية يرسمه قالب Document وحده؛ وفي Classic كتلة المزرعة بلا حارس تجاوز صفحة — قد تتصادم مع منطقة التوقيع، وقالبا الجهتين يستخدمان مكوّني عرض مزرعة مختلفين كلياً (انحراف نسخ-لصق).
lis-report-pdf.service.ts:664-684,764-773,173lis-html-report.service.ts:963-964,180
الحل: مكوّن مزرعة واحد مشترك بعمود disk_zone وحارس تجاوز.
ثانوية

17 — هشاشة بيئة الطباعة: خطوط من الإنترنت وقت الطباعةجهد صغير

القوالب الحديثة تحمّل خطوط Google من الإنترنت لحظة الطباعة — انقطاع الشبكة أو حجبها يطبع بخط بديل مكسور للعربية.
lis-html-report.service.ts:245,388,557,703
الحل: تضمين الخطوط محلياً ضمن أصول التطبيق (نفس ما يفعله Classic بخط مضمّن).
5

خطة العلاج — ثلاث مراحل

Remediation Roadmap
المرحلة 1

مطابقة القوالب الخمسة لمرجع Classic

⏱ أسبوع عمل واحد · يعالج: 1، 2، 3، 4، 8، 10، 13
  • كتلة ختم/توقيع موحّدة من Classic تُحقن في القوالب الخمسة (نفس الصور ونفس قواعد الإظهار) + تصحيح تسمية Document ونِسب الأبعاد
  • التعليقات الثلاثة كما يطبعها Classic (سطر/ثابت/عام) في كل قالب
  • القوالب الأربعة تستهلك buildHeaderFields المشتركة — إعدادات حقول الهيدر تسري على الجميع كما في Classic
  • ترتيب أقسام الهيستو المخصص في القوالب الخمسة كما في Classic
  • إصلاح الترقيم: إزالة قصّ Editorial/Spectrum، تكرار الهيدر في Bento/Monochrome، ترقيم وفوتر لـ Document
  • سياسة released-only موحّدة + علامة DRAFT + ربط شارة Verified بالحالة + إصلاح خطأ التنزيل الكاذب وافتراضي القالب = classic
المرحلة 2

صفحة إعدادات واحدة — فعّالة في كل شيء

⏱ أسبوعان · يعالج: 5، 6، 7، 12، 14
  • تفعيل ReportSettings فعلياً: قراءة كل الأعلام من صفحة إعدادات المعمل وتمريرها للمحركين وتطبيقها (إظهار التوقيع/الختم، نصوص الهيدر والفوتر، الترخيص) + حذف المفاتيح الوهمية
  • إضافة الإعدادات الناقصة للصفحة: مفتاح ختم/توقيع لكل قالب، QR (مع تنفيذه)، النتائج السابقة، سياسة المسودة DRAFT، لغة تسميات الهيدر
  • Print Queue والبوابتان عبر الموصّل المركزي الواحد — نفس الإعدادات ونفس قواعد Classic تسري على كل مسار طباعة بلا استثناء
  • توحيد مجهّز البيانات (مدى الجنس/العمر، hide_from_print، التفسير النصي) لكل المسارات
المرحلة 3

تقنين قواعد Classic كعقد إلزامي

⏱ 3–4 أسابيع · يعالج: 9، 11، 15–17 ويمنع الانحراف مستقبلاً
  • Template Contract = قواعد Classic مكتوبة كواجهة إلزامية (بيانات + إعدادات) — لا يُقبل قالب جديد أو تعديل لا يستوفيها
  • توليد PDF الخادم (تنزيلات البوابات والبريد) من نفس قوالب الواجهة — إنهاء محرك DomPDF المستقل ومفاتيحه الخاصة
  • اختبارات Snapshot لكل قالب × كل نوع نتيجة، مرجعها مخرجات Classic — أي انحراف جديد يكسر البناء آلياً
  • استكمالات Classic نفسه: تعريب تسميات الهيدر، الخط العربي العريض، الترخيص وقنوات الاتصال، توقيع الطبيب، عمود disk_zone

قرار تقني مؤجَّل (لا يغيّر الخطة): توحيد تقنية العرض لاحقاً

بعد اكتمال المراحل الثلاث تصبح إعادة بناء Classic بتقنية HTML الموحّدة خياراً وجيهاً لإنهاء ازدواجية المحركات نهائياً — بشرط واحد غير قابل للتفاوض: قواعد Classic تبقى هي المرجع، والعقد المُقنَّن في المرحلة 3 هو الضامن. تنفيذه قبل ذلك سيكرّر الفجوات الحالية في تقنية جديدة.

✓ مع إعادة البناء

  • محرك عرض واحد = إصلاح واحد يسري على الجميع
  • HTML/CSS أسهل صيانة بكثير من إحداثيات jsPDF اليدوية
  • نفس الناتج للطباعة والمعاينة وPDF الخادم

⚠ المخاطر الواجب إدارتها

  • ترقيم صفحات HTML يتطلب إتقان CSS Paged Media (نقطة ضعف القوالب الحالية)
  • Classic هو الأكثر استخداماً — يلزم تطابق بصري مدقّق قبل التبديل
  • توليد PDF بالخادم يحتاج بديلاً عن DomPDF يجيد العربية (مثل Browsershot)
6

منهجية الدراسة والتحقق

Methodology & Verification

🔬 4 مسارات تحليل متوازية

محلل مستقل لكل محور: محرك Classic، القوالب الخمسة، طبقة التوصيل والإعدادات (واجهة وخادماً)، ومسار رابع عدائي بنى مصفوفة الفجوات وتحقق من المحاور الأخرى بشكل مستقل.

📍 دليل سطري لكل نتيجة

كل فجوة موثّقة بالملف ورقم السطر — لا استنتاجات من التعليقات أو الوثائق، بل من تتبّع الكود الفعلي (~4,300 سطر عبر 11 ملفاً أساسياً). المسارات الأربعة سجّلت 51 ملاحظة دليلية خام (14+10+15+12) دُمجت بعد إزالة التكرار في 17 مشكلة.

🛡 مراجعة Codex مستقلة

خضعت النتائج لمراجعة نموذج مستقل (Codex) للتحقق من دقة الأدلة وعدالة التصنيف قبل اعتماد التقرير.

📐 قاعدة التقييم

المعيار الواحد: «أي قالب يختاره المعمل يجب أن يطبّق نفس القواعد ونفس الأختام» — كل انحراف عن هذا المعيار سُجّل مشكلة بخطورة وجهد وحل مقترح.