توثيق الموديولز
إدارة الموديول
صفحات الإدارة، الصلاحيات، سير العمل.
مكتمل
أسطح admin للتغطية تَعيش تحت لوحة Founder Account (دور admin) وتَتبع خط أنابيب صارم: طابور → مسوَّدة → فحص حقائق → نشر. خط الأنابيب مُسَوَّر عند كل خطوة — لا اختصار من المسوَّدة إلى النشر، لا نشر بدون موافقة فحص-الحقائق-المحرِّر-الثاني.
طابور التغطية
- مُملوء تلقائياً من CalendarEvents بـ coverageEligible=true + coverageStatus='planned'. مفروز بـ startDate الفعالية (الأحدث ماضي أولاً، لأن التغطية ما-بعد-الفعالية).
- لكل صفّ: عنوان الفعالية الوالد + التاريخ + الدولة + الفئة + المحرّر المُعَيَّن (لو موجود) + الحالة (مُخَطَّط / مُسَوَّد / فحص-حقائق / منشور).
- الفعل: "Create draft" يَفتح محرّر المسودَّة مُمَلَّأً مُسبَقاً بـ metadata الفعالية الوالد + bodyHtml فارغ.
محرّر المسودَّة
- النموذج يُرآة الواجهة CoverageArticle — 15 حقل. الحقول bilingual تَعرض إدخالات EN | AR جنباً إلى جنب.
- منتقي parentEventId: بحث type-ahead عبر CalendarEvents حيث coverageEligible=true. الفعالية المختارة تُرسَم كشريحة غير-قابلة-للإزالة — كل مقالة تغطية تَحتاج والداً.
- منتقي kind: toggle بـ 5 أزرار. التبديل إلى sponsor-spotlight يُدرج تلقائياً شريط الإفصاح في bodyHtml + يَطلب تعريف الراعي.
- محرّر rich-text لـ bodyHtml.en + .ar: WYSIWYG مع قائمة tag مسموحة (h2-h4، p، ul/ol، blockquote، figure، a، em، strong، code). الناتج HTML مُعَقَّم مُخَزَّن لـ bodyHtml.
- منتقيات الإشارة: بحث type-ahead عبر المؤسّسين / الشركات / الفرص / الملفات. كل اختيار يُرسَم كشريحة قابلة-للإزالة مع معاينة.
- فعل الحفظ يَحفظ المسودَّة (publishedAt يَبقى null). readingTimeMinutes مُحتسَب تلقائياً من عدد كلمات bodyHtml.en عند كل حفظ.
فحص الحقائق + النشر
- المُسَوِّد يَنقر "Submit for fact-check". الحالة تَنقلب إلى 'fact-check' ومحرّر ثانٍ (أيّ شخص بدور admin ما عدا المُسَوِّد) يَحصل على إشعار.
- فاحص الحقائق يَسير عبر 3 بوّابات مع شريط فحص صريح (أسماء entities مُتحقَّق منها / ادّعاءات كمّية مُستنَدة المصدر / اقتباسات مؤكَّدة). الـ 3 يجب أن تُفحَص.
- عند الموافقة: publishedAt يُضبط على now؛ الحالة تَنقلب إلى 'published'؛ parentEvent.coverageStatus تَنقلب تلقائياً إلى 'covered'؛ المقالة تَنشط + شرائط البحث العكسي على entities مُتَّصلة تَضيء.
- عند الرفض: الحالة تَنقلب إلى 'drafting' + ملاحظة رفض تُرفَق بالمسودَّة. المُسَوِّد يُراجع ويُعيد التقديم.
