العمل دون اتصال والعمليات في التطبيق
كيف تتصرف الردود المحفوظة في قائمة الانتظار ورفع الملفات والمهام الميدانية وخطوات المراجعة عند انتهاء الاشتراك في منتصف عملية الجمع، وكيف تُستعاد بعد التجديد.
الردود المحفوظة دون اتصال عبر فترة الانتهاء
هذا هو السيناريو الأكثر تكرارًا لدى الفرق الميدانية: يُنزَّل الاستبيان والاشتراك ساري، وتُجمَع الردود في الميدان، وعندما يعود الجهاز إلى الاتصال يكون اشتراك المؤسسة قد انتهى.
الضمان: لا يضيع أي عمل مجمَّع.
التسلسل الذي جرى التحقق منه:
- ينزّل الجهاز الاستبيان والاشتراك ساري.
- تُلتقَط الردود دون اتصال. ويحمل كل عنصر في قائمة الانتظار قيمة
SurveyVersionIdالخاصة به، وبصمة المحتوى عند الاقتضاء، وإجاباته، ومعرّفclientSubmissionId. - ينتهي الاشتراك.
- يعود الجهاز إلى الاتصال ويحاول المزامنة.
- يرفض الخادم الطلب بالرمز
errorCode 1001/SubscriptionExpired. - لا يُنشئ الخادم أي رد، ولا أي إجابات، ولا أي إنهاء لمهمة ميدانية — ولا يستهلك مفتاح منع التكرار.
- تجدّد المؤسسة اشتراكها.
- يعيد الجهاز إرسال الحمولة نفسها دون تغيير.
- يقبلها الخادم ويحفظها مرة واحدة بالضبط.
- وأي إعادة إرسال لاحقة للحمولة نفسها تُرجع النتيجة المعيارية «تم القبول مسبقًا» بالمعرّف نفسه. ولا يُنشأ أي تكرار.
مفتاح منع التكرار
مفتاح إرسال الرد هو clientSubmissionId.
وهو ليس clientUploadId، فذاك مفتاح إعادة المحاولة الخاص بـرفع الملفات، وهي عملية مختلفة لها قواعدها. والخلط بينهما يؤدي إما إلى ردود مكرّرة أو إلى ملفات ضائعة.
قواعد التطبيق عند الرمز 1001
افعل:
- احتفظ بالعنصر في قائمة الانتظار
- احتفظ بـ
clientSubmissionIdنفسه - احتفظ بقيم
SurveyVersionIdوبصمة المحتوى والإجابات كما التُقطت تمامًا - تراجَع تدريجيًا وأوقف إعادة المحاولة التلقائية
- اعرض حالة «مطلوب التجديد»
- أعد إرسال الحمولة نفسها بعد استعادة الخدمة
لا تفعل:
- حذف العنصر من قائمة الانتظار أو التخلص منه
- تعليمه كأنه تمت مزامنته بنجاح
- توليد
clientSubmissionIdجديد - إعادة بناء الحمولة أو إعادة تكوينها
- إخراج المستخدم من حسابه
نتيجة SubscriptionExpired قابلة لإعادة المحاولة وغير مدمّرة. وهي ليست فشلًا في التحقق من الصحة، ويجب ألّا تُعامَل معاملته أبدًا.

رفع الملفات
| الحالة | النتيجة |
|---|---|
| الاشتراك ساري ونوع الملف مسموح | ينجح الرفع، ويُنشأ سجل ملف واحد وملف مخزَّن واحد |
| منتهٍ، بتوكن صدر قبل الانتهاء | يُرفض بالرمز 1001 — بلا سجل ملف وبلا ملف مخزَّن |
| منتهٍ، بتوكن صدر حديثًا | يُرفض بالرمز 1001 — بلا سجل ملف وبلا ملف مخزَّن |
| بعد التجديد، بالتوكن نفسه الصادر قبل الانتهاء | ينجح الرفع فورًا |
ولا يترك الرفع المرفوض أثرًا في أي من الاتجاهين: لا سجلًا في قاعدة البيانات بلا ملف، ولا ملفًا بلا سجل.
تبقى مشكلات الملفات منفصلة عن مشكلات الاشتراك. فنوع ملف غير مدعوم، أو ملف تالف لا يطابق محتواه نوعه المعلن، أو سؤال لا يقبل الملفات، أو استبيان يخص مؤسسة أخرى — كلها تُرفض لأسبابها الخاصة وبرموزها الخاصة، ولا تُرفض أبدًا بوصفها SubscriptionExpired. وبالمثل، لا يُبلَّغ عن انتهاء اشتراك حقيقي على أنه مشكلة في الملف. ويجب ألّا يعرض التطبيق رفعًا مرفوضًا على أنه ناجح.
المهام الميدانية
| الحالة | القائمة والقراءة | الإنهاء |
|---|---|---|
| الاشتراك ساري | المهام المسنَدة ظاهرة | يتم الإنهاء مع تسجيل الوقت والمنفِّذ بشكل صحيح |
| ساري، لكن المهمة تخص جامع بيانات آخر | يُرفض، ولا يُكشف عن المهمة | لا ينطبق |
| منتهٍ | يُرفض بالرمز 1001 |
يُرفض بالرمز 1001 |
| بعد التجديد | تظهر من جديد | يتم الإنهاء بشكل طبيعي |
الضمان الأهم: لا يمكن أن يترك انتهاء الاشتراك مهمة ميدانية منجزة جزئيًا أو منجزة خطأً. فالمحاولة المرفوضة لا تضبط علامة الإنجاز ولا تسجّل وقت إنجاز ولا منفِّذًا، وتبقى المهمة مفتوحة ببساطة حتى تعود الخدمة.
ولا تتأثر حدود الإسناد وحدود المؤسسة بحالة الاشتراك. فجامع البيانات غير المُسنَدة إليه المهمة يُرفض طلبه سواء كان الاشتراك ساريًا أو لا، ولا يعرف شيئًا عن المهمة في الحالتين.
مسار المراجعة
سلسلة المراجعة هي:
الإرسال للمراجعة ← بدء المراجعة ← الإعادة للتصحيح ← إعادة الإرسال ← بدء المراجعة ← الاعتماد
| الحالة | السلوك |
|---|---|
| الاشتراك ساري | تعمل السلسلة كاملةً، والاعتماد يُنهي الرد. |
| منتهٍ | كل انتقال يُرفض بالرمز 1001، بما في ذلك الاعتماد. |
| بعد التجديد | تستأنف الانتقالات الصالحة من الحالة نفسها التي تُرك عليها الرد. |
وخطوات المراجِع مقيَّدة تمامًا كخطوات جامع البيانات، وهذا مقصود: فالاعتماد هو السبيل الوحيد لبلوغ الرد حالته المكتملة في مسار المراجعة، وترك إجراءات المراجِع مفتوحة يعني تمكين مؤسسة منتهية الاشتراك من إنهاء جمع العمل عبر مسار المراجعة — وهي بالضبط النتيجة التي وُجد الانتهاء لمنعها.
أما قراءة حالة دورة حياة الرد فغير مقيَّدة. فبإمكانك دائمًا معرفة موضع الرد، لكن لا يمكنك تحريكه.
ولا يترك الانتقال المرفوض خطوة جزئية: لا تغيير في الحالة، ولا زيادة في رقم المراجعة، ولا قيدًا في السجل، ولا إنهاءً لمهمة ميدانية.