AJ360 · Engagement → Creative · RQ2690

تقرير تدفق المهام
والإنتاجية للكرييتف

ما بنيناه تقنياً، وكيف ترتبط الجداول، ولماذا نثق بالأرقام
الطلب: RQ2690 | Build (Monthly) Task Flow and Productivity Report
القاعدة: AJ360 | Creative
التاريخ: 12 أكتوبر 2026
01 · The Ask

ما الذي طُلب، وبأي قيود عملنا

المطلوب

  • سجل لكل مهمة، يُجمَّع حسب الفريق وحسب نوع المهمة: العدد وزمن الإنجاز
  • زمن الانتظار قبل وصول المهمة للكرييتف بأيام العمل
  • لوحة للمدير: الحمل مقابل السعة لكل فريق
  • الفترة يختارها المستخدم، والفرق ديناميكية لا تُكتب في الكود
  • السعة حسب منهجية الطلب: FTE × hours/day × days/week

القيود التي التزمنا بها

  • AJ360 | Ingest للقراءة فقط: لا حقول ولا أتمتة ولا كتابة
  • Engagement لا نثقل عليها: اخترنا فقط الحقول التي تظهر في Views المزامنة
  • كل الحسابات Formula / Rollup بدل السكربتات
  • الأتمتة تستخدم Field IDs لا الأسماء
  • أيام العمل لكل فريق على حدة، يحددها مدير الكرييتف
  • كل رقم يُطابَق بحساب مستقل عبر الـ API قبل اعتماده
RQ269002
02 · Architecture

المعمارية: من المصدر إلى لوحة المدير

المصدر يبقى في Engagement، ويُزامَن عبر Views مفلترة إلى Creative. كل الحسابات تجري محلياً في Creative.

AJ360 | Ingest للقراءة فقط · لم نلمسها AJ360 | Engagement المصدر · لا تعديل على الجداول Tasks View: Tasks - Creative Base Tasks Status History View: History - Creative Base Airtable Sync Created ≥ 1/6/2025 4 حالات كرييتف فقط AJ360 | Creative قاعدة العمل · كل الحسابات هنا Tasks - Creative Base مزامَن + 27 حقلاً محلياً History - Creative Base 23,460 حدث Local Teams أيام العمل · السعة AJ360 Collaborators المنتجون ↔ الفرق 3 Automations ربط الأحداث بالمهام · ربط المنتجين (جديد / متغير) Interface Creative Productivity 1. Teams 2. Task Type 3. Dashboard
RQ269003
03 · Sync Layer

طبقة المزامنة: نأخذ ما نحتاجه فقط

VIEW 1 Tasks - Creative Base

  • فلتر: Created ≥ 1/6/2025
  • 16 حقلاً أصلياً: Task ID، Eng. Task Type، Task Status، Video/Design Status، Video/Design Producer، Created، Publish Date…
  • 5,934 مهمة حالياً

VIEW 2 History - Creative Base

  • فلتر: Action Time ≥ 1/6/2025
  • الحالة واحدة من: 2. Cr. In Progress · 2. Cr. ReWork · 3. Review Output · 4. Ready to Schedule
  • 23,460 حدثاً · الحقول: Task Status, Task ID, Collaborator, Action Time, Action

لماذا هذا التصميم؟

  • الحقول المزامَنة للقراءة فقط ولا يتغير نوعها. لذلك كل حساب يجري في حقل محلي فوق الجدول المزامَن.
  • Sync linked tables = OFF: لا نسحب جداول إضافية، والربط نبنيه محلياً.
  • لم نضف أي حقل إلى جداول Engagement نفسها، فقط اخترنا ما يظهر في الـ View.

قاعدة تشغيلية

يجب أن يبقى تاريخ البداية نفسه في الـ View-ين. لو اختلفا، تظهر أحداث بلا مهام أو مهام بلا أحداث، فتسقط من التقرير.

RQ269004
04 · Data Model

العلاقات بين الجداول

Tasks - Creative Base ◆ TASK ID (key: TSK…) ◆ Eng. Task Type → link ◆ Producers → link (N:M) ◆ History - Creative Base ← 1:N Σ Actual Start · Actual Delivery Σ Cycle · Wait · Review Rounds Σ Std Hours · Executor Team · Calc Flag History - Creative Base ◆ Task Status · Action Time ◆ Task ID (changes with type) ƒ TSK = REGEX_EXTRACT(Task ID) ◆ Tasks → link (single) N : 1 عبر TSK Task Type - Eng. ◆ Std Video Hours ◆ Std Design Hours مرجع الساعات المعيارية N : 1 AJ360 Collaborators ◆ Name (= producer text) ◆ Local Teams (Member / Lead) ⌕ Team Working Days ◆ Tasks - Creative Base ← N:M N : M Producers Local Teams ◆ Lead · Members · Status ◆ Working Days · Hours per Day ƒ Weekly Capacity (Hours) N : M Σ ƒ ⌕ = حقول محسوبة محلياً في Creative الإطار الذهبي = جداول أضفنا إليها حقول RQ2690
RQ269005
05 · Task Lifecycle

رحلة المهمة: من أين تأتي كل قيمة زمنية

كل مقياس يُستخرج من سجل الأحداث (History)، وليس من حالة المهمة الحالية. هكذا نعرف متى حدث كل شيء.

Created إنشاء المهمة 2. Cr. In Progress Actual Start MIN · أول إرسال للكرييتف 2. Cr. ReWork Review Rounds COUNT · مرات الإرجاع ↺ قد تتكرر 3. Review Output Actual Delivery آخر تسليم صالح 4. Ready to Schedule بديل إن قُفز فوق Review Output Wait (Work Days) انتظار بأيام عمل الفريق Cycle Time (Hours) ساعات تقويمية · من التسليم للكرييتف إلى التسليم النهائي
RQ269006
06 · Event Linking

ربط 23 ألف حدث بمهامها

PROBLEM المشكلة

Task ID في سجل الأحداث يتغير حين يتغير نوع المهمة، فالربط بالنص الكامل فشل مع 227 حدثاً. ولصق الروابط يدوياً يتوقف عند حد معين من الصفوف.

SOLUTION الحل

  • حقل TSK = REGEX_EXTRACT({Task ID}, "TSK[0-9]+")، وهو مفتاح ثابت لا يتغير
  • أتمتة RQ2690 | Link Event to Task: تبحث عن المهمة بـ TSK وتربط الحدث بها
  • تعمل تلقائياً على كل حدث جديد يصل بالمزامنة
حالة ربط الأحداث 23,190 مرتبط · 98.8% 270 غير مرتبط · 1.2% أحداث لمهام أُنشئت قبل 1/6/2025، فهي خارج النطاق عمداً النتيجة: كل مهمة داخل النطاق لها سجلها الكامل
RQ269007
07 · Time Fields

حقول الزمن: Rollups مشروطة بدل السكربتات

Fieldالحساب من Historyالمعنى
Actual StartMIN · In Progressأول إرسال للكرييتف
Last Creative EventMAX · In Progress / ReWorkآخر مرة كانت عند الكرييتف
Last Review OutputMAX · Review Outputآخر تسليم للمراجعة
Last ReadyMAX · Ready to Scheduleبديل للتسليم
Last ReworkMAX · ReWorkآخر إرجاع
Review RoundsCOUNT · ReWorkعدد جولات التعديل

منطق Actual Delivery

IF( Last Review Output AND NOT before Last Creative Event, → Last Review Output, IF( Last Ready after Last Creative Event, → Last Ready )) // otherwise BLANK = not delivered yet

لا يُحسب تسليم إذا عادت المهمة للكرييتف بعده. وأضفنا Ready to Schedule لأن 112 مهمة منشورة قفزت فوق Review Output، فكانت ستُصنَّف خطأً كـ Rework.

RQ269008
08 · Data Validity

Calc Flag: أي مهمة تدخل التقرير؟

كل مهمة تحصل على تصنيف واحد من 7 تصنيفات. فقط OK · Ready for reporting يدخل في المؤشرات، والباقي يظهر في قسم جودة البيانات.

OK · Ready for reporting 5,148 · 86.8% No Start · لم يصل للكرييتف 559 · 9.4% Cancelled · أُلغيت قبل التسليم 109 In Progress · لم يُسلَّم بعد 43 Back to Brief · عاد للتحرير 40 No Standard 28 · Rework 7 35

ترتيب الشروط

  • لا يوجد Actual Start ← No Start
  • لا يوجد Actual Delivery ← Cancelled / Back to Brief / Rework / In Progress
  • نوع بلا ساعات معيارية ← No Standard
  • غير ذلك ← OK

درس تقني

الـ Formula التي تُخرج قيمة على شكل Single Select تسقط بصمت للقيمة الافتراضية إذا لم يطابق النص اسم الخيار حرفياً. اكتشفنا ذلك مع 149 مهمة وصححناه.

RQ2690 · الأرقام على كامل النطاق منذ 1/6/202509
09 · Producers → Teams

من اسم المنتج إلى الفريق المنفّذ

Video / Design Producer نص مزامَن من Engagement ƒ Producer Names Producers رابط بالأتمتة New + Changed Teams (Member / Lead) Rollup بلا تكرار ARRAYUNIQUE + COMPACT Executor Team · Team Status الفريق المنفّذ وحالة النسب OK / Unassigned / No Producer

حالة نسب المهام لفرق · كل النطاق

1,306 3,200 1,428 OK · منسوبة لفريق Unassigned Team · منتج بلا فريق No Producer · لا يوجد اسم منتج، أغلبها من 2025

ما تعنيه هذه الأرقام

  • 4,506 / 4,506 اسم منتج طابق شخصاً في Collaborators، بلا أي استثناء
  • المشكلة ليست في الربط، بل أن منتجين كثيرين غير مسجلين في Local Teams
  • بيانات المنتجين موثوقة من مايو 2026 فقط
  • الحل إداري: يضيفهم مدير الكرييتف لفرقهم، فتتحدث كل الأرقام تلقائياً
RQ269010
10 · Dynamic Working Days

الانتظار بأيام عمل كل فريق

الدالة الجاهزة WORKDAY_DIFF تفترض أن العطلة السبت والأحد. لذلك بنينا معادلة تقرأ أيام عمل الفريق نفسه من Local Teams.

مثال: طلب يوم الخميس، وصل للكرييتف يوم الأحد

الخميسإنشاء الطلب الجمعةعطلة · لا تُحسب السبتعطلة · لا تُحسب الأحد+1 يوم عمل Wait (Work Days) = 1 فريق يعمل من الأحد إلى الخميس

كيف تعمل المعادلة

  • Wait Span (Days): عدد الأيام التقويمية بتوقيت قطر
  • Start Weekday: يوم الأسبوع لتاريخ الإنشاء (0 = الأحد)
  • لكل يوم من الأيام السبعة: إن كان من أيام عمل الفريق، نعدّ كم مرة وقع داخل الفترة
  • تغيير أيام عمل فريق في Local Teams يعيد حساب كل مهامه فوراً

طابقنا المعادلة على 1,306 مهمة بحساب مستقل: 0 اختلاف.

RQ269011
11 · Load vs Capacity

الحمل والسعة: نفس الوحدة على الطرفين

LOAD الحمل = Std Hours

Std Hours = Std Video Hours if Video ≠ 0. Not Needed + Std Design Hours if Design ≠ 0. Not Needed

الساعات المعيارية تأتي من نوع المهمة، وتُحسب فقط للمسارات المطلوبة فعلاً.

CAPACITY السعة

Weekly Capacity = Members × Hours/Day × |Working Days| // Active teams only Period Capacity = Weekly ÷ |Working Days| × working days of team in range

إعداد الفرق الحالي

TeamMembersDaysh/dayWeekly
Engagement Creative3أحد ← خميس8120 h
App Artwork2أحد ← خميس880 h
السعة الأسبوعية (ساعة) Engagement Creative 120 App Artwork 80

القائد غير محسوب في السعة لأن Members Count يعدّ الأعضاء فقط. هذا قرار يمكن مراجعته مع مدير الكرييتف.

RQ269012
12 · Automations

ثلاث أتمتات فقط، وكلها بـ Field IDs

حدث جديد بالمزامنةTask ID: TSK48211-PR-Reel استخراج TSKTSK48211 البحث عن المهمةTASK ID = TSK48211 · max 1 ارتبط الحدث بالمهمةتتحدث الـ Rollups فوراً
AutomationTriggerAction
RQ2690 | Link Event to Taskحدث جديد في History: رابط Tasks فارغ وحقل TSK ممتلئيبحث في Tasks عن TASK ID = TSK ثم يملأ رابط Tasks
RQ2690 | Link Producers – Newمهمة فيها Producer Names ورابط Producers فارغيملأ Producers من Producer Names بمطابقة الاسم
RQ2690 | Link Producers – Changedعند تعديل Video Producer أو Design Producer فقطيعيد ملء Producers من Producer Names

تجنّب الحلقة اللانهائية

أتمتة Changed تراقب حقلي المنتج فقط، فتحديثها لـ Producers لا يطلقها مرة أخرى.

ملء السجلات القديمة

للسجلات الموجودة استخدمنا حيلة تغيير الفورميولا إلى "" ثم إرجاعها، فتطابق الشرط من جديد وتعمل عليها الأتمتة.

RQ269013
13 · Manager Dashboard

لوحة المدير: 15 سبتمبر ← 12 أكتوبر 2026

مهام مسلَّمة (OK)
217
داخل الفترة
وسيط زمن الإنجاز
28.3h
من التسليم للكرييتف ← التسليم
وسيط الانتظار
1.0day
بأيام عمل الفريق
نسبة الـ Rework
49.8%
108 من 217 عادت مرة واحدة على الأقل
ساعات معيارية
1,026.5h
مجموع الحمل المسلَّم

الحمل مقابل السعة

Engagement Creative 95.4% · Healthy الحمل 458 ساعة · السعة 480 ساعة · 69 مهمة App Artwork 0% · No tasks الحمل 0 ساعة · السعة 320 ساعة Unassigned No capacity 568.5 h · 148 tasks

الخط العمودي يمثّل السعة الكاملة

قواعد اللوحة

  • فلتر التاريخ على Actual Delivery بتوقيت قطر
  • تدخل المؤشرات مهام OK فقط
  • الوسيط لا المتوسط، واستبعاد ما فوق 720 ساعة
  • 5 أقسام: KPIs · الأنواع · السعة · المنتجون · جودة البيانات
  • بُنيت كـ Omni Custom Element لأن واجهات Airtable لا تحسب الوسيط ولا النسب بين جدولين
RQ269014
14 · Verification

لماذا نثق بالأرقام: تحقق مستقل في كل طبقة

ما تحققنا منهالنطاقالنتيجة
Rollups البداية والتسليم والجولاتكل المهام 0 اختلاف
منطق Actual Deliveryكل المهام 0 اختلاف
ربط المنتجين بالأشخاص4,506 4,506 / 4,506
Wait Span · Weekday · Work Days1,306 0 اختلاف
السعة الأسبوعيةفريقان 120 h · 80 h
كل أرقام لوحة المدير15/9 ← 12/10 تطابق تام

ما أمسكه التحقق

النسخة الأولى من اللوحة، التي ولّدها الذكاء الاصطناعي (Omni)، كانت تقرأ 5 حقول خاطئة: تاريخ النشر بدل التسليم، والانتظار بدل زمن الإنجاز، والسعة بدل جولات المراجعة… فأظهرت استفادة 1439%.

كتبنا الكود يدوياً بأرقام حقول ثابتة، مع رسالة خطأ صريحة إن لم يستطع العنصر قراءة أي حقل، بدل أرقام خاطئة صامتة.

توثيق

كل حقل أنشأناه (36 حقلاً) يحمل Description يشرح ما يحسبه ومصدره ومن يستخدمه، ويبدأ بـ RQ2690 |.

RQ269015
15 · Honest Limits

ما تقيسه الأرقام، وما لا تقيسه

حدود يجب ذكرها مع كل تقرير

  • Actual Start = لحظة إرسال المهمة للكرييتف، لا لحظة بدء العمل
  • زمن الإنجاز ساعات تقويمية، وليس ساعات جهد. لا يوجد في النظام تسجيل لساعات العمل
  • لا يوجد توقيت منفصل لمسار الفيديو والديزاين: 97–98% من حالات "4. Delivered" تضعها أتمتة لحظة Review Output
  • بيانات المنتجين موثوقة من مايو 2026
  • الوسيط هو المؤشر الصحيح: هناك 51 مهمة تجاوز زمنها 720 ساعة

توصيات لتحسين القياس

  • إضافة حالة "Started" يضعها المنفّذ عند البدء الفعلي، فنفصل الانتظار في الطابور عن العمل
  • إلزام تعبئة Video/Design Status عند الإرسال للكرييتف (121 مهمة وصلت بلا مسار)
  • تسجيل كل المنتجين في Local Teams (فيها حالياً فريقان فقط)
  • توقيت مستقل لكل مسار إن احتاجت الإدارة مقارنة الفيديو بالديزاين
RQ269016
16 · Next Steps

المتبقي للتسليم

BUSINESS على إدارة الكرييتف

  • إضافة المنتجين غير المنسوبين لفرقهم: mahmoud shams, Ali Arslan, Baran Yildiz, Muhammed Ali, Mustafa Taha… (68% من حمل الفترة بلا فريق)
  • توضيح عمل App Artwork: لم تُسجَّل لهم أي مهمة في الفترة
  • قراءة نسبة الـ Rework (49.8%) كمؤشر جودة، لا كخطأ حساب
  • قرار: هل يُحسب قائد الفريق ضمن السعة؟

TECH تقني

  • نشر صفحة 3. Dashboard بعد المراجعة
  • دقة رقم واحد بعد الفاصلة لـ Wait / Cycle / Std Hours
  • حذف 4 حقول تجريبية غير مستخدمة (موسومة في وصفها)
  • إبقاء تاريخ البداية متطابقاً في الـ View-ين
  • إلغاء التوكنات المؤقتة التي استُخدمت للتحقق
RQ269017
17 · Inventory

الحصيلة التقنية

View مزامنة
2
من Engagement، بلا تعديل على جداولها
حقول محلية موثقة
36
Rollup · Formula · Lookup · Link
أتمتات
3
ربط الأحداث والمنتجين
لوحة مدير
1
5 أقسام · مطابقة 100%
0 سكربت · 0 كتابة على Ingest · 0 حقل جديد في جداول Engagement