النت قطع وأنت بتحصّل؟ وضع عدم الاتصال في أريج معمول عشان اللحظة دي — بس بحد واضح: ده وضع عدم اتصال خفيف، مش نظام يشتغل بالكامل أوفلاين. بتشوف نسخة محفوظة من المشتركين والفواتير المفتوحة، والدفعات بتتزامن لما النت يرجع، بقواعد بتمنع التكرار وبتحوّل أي حالة مشكوك فيها لتعارض يراجعه إنسان — مش بتتطبق تلقائيًا. الدليل ده هيشرح الصفحتين اللي بتشوفهم بعينك، وبعدها المزامنة والتعارضات وصفًا نصيًا فقط، لأنها بلا صفحة عرض.

الخطوة 1: افتح وضع عدم الاتصال من القائمة الجانبية
من القائمة الجانبية على يمين لوحة التحكم، اضغط وضع عدم الاتصال — هتفتح صفحة /offline/subscribers بعنوان «📴 وضع عدم الاتصال». انتبه: الصفحة بتتفتح من القائمة نفسها، مش من داخل صفحة المشتركين العادية. والقراءة مسموحة لأي مستخدم مسجّل دخول، لكن المزامنة وحل التعارضات لصاحب الحساب والشريك بس (الخطوة 6). ولو مش لاقي القائمة، راجع دليل لوحة التحكم.
الخطوة 2: اقرأ شريط الحالة وبدّل بين التبويبين
أعلى الصفحة، تحت العنوان مباشرة، تبويبان: المشتركون (النشط في الصورة الأولى) والفواتير المفتوحة. وتحتهما شريط حالة مكتوب فيه «متصل — البيانات محدثة حتى: ...» مع نقطة خضراء — التاريخ والوقت بعده هو آخر تحديث للنسخة المحفوظة. قبل ما تعتمد على أي رقم، بص على السطر ده الأول.
الخطوة 3: صفحة المشتركين — ابحث واقرأ البطاقة صح
في تبويب المشتركون، فوق البطاقات حقل بحث مكتوب فيه «ابحث بالاسم أو رقم الموبايل...» — اكتب الاسم أو الرقم وهيتصفّى العرض على المطابق بس. وكل بطاقة فيها: الاسم؛ الباقة ودورة الدفع (من 1 إلى 30، أو من 15 إلى 15، أو من 1 إلى 15، أو من 15 إلى 30)؛ رقم الموبايل (مغطى في الصورة المنشورة حمايةً للبيانات التجريبية)؛ مدفوع / متبقي؛ وشريحة مدفوع بالأخضر لو مفيش متبقي، أو غير مدفوع بالأحمر لو فيه مبلغ متبقي.
الخطوة 4: صفحة الفواتير المفتوحة — 4 بطاقات في اللقطة، وفواتير غير المدفوعة بس
اضغط تبويب الفواتير المفتوحة — هتفتح صفحة /offline/invoices، وفي الصورة الثانية 4 بطاقات فواتير مفتوحة. وكل بطاقة فيها: اسم المشترك؛ «فاتورة #... - October 2026» (رقم الفاتورة وشهر الفوترة، بالصيغة دي بالظبط)؛ الإجمالي / مدفوع / متبقي؛ وشريحة غير مدفوع بالأحمر — لأن التبويب ده بيعرض الفواتير المفتوحة بس (غير مدفوعة أو مدفوعة جزئيًا)؛ الفاتورة المدفوعة بالكامل مش بتظهر هنا أصلًا.

الخطوة 5: إيه اللي بتخزنه النسخة المحفوظة (وصف نصي — اللقطة الخام JSON مش منشورة)
النسخة بتتجهز من نقطة /offline/snapshot — ودي نقطة بيانات JSON مش صفحة عرض، فمفيش لقطة منشورة لها هنا. بترجع: وقت السيرفر؛ المشتركين (الاسم والموبايل والواتساب والباقة والدورة وحالة الدفع والمدفوع والمتبقي)؛ الفواتير المفتوحة فقط (المشترك والفترة والإجمالي والمدفوع والحالة وآخر تحديث)؛ والباقات (الاسم والسعر)؛ مع إجمالي المشتركين وعلامة القص عند سقف 5000 مشترك. فلو حسابك أكبر، النسخة مش هتضمهم كلهم. وملحوظة أمان: النقطة بترجع رمزًا تقنيًا (csrf token) — متشاركوش مع حد أبدًا، ولا يظهر في أي لقطة هنا.
الخطوة 6: المزامنة والتعارضات — كيف تُطبَّق الدفعة، وإمتى تتحول لتعارض (وصف نصي فقط)
تنبيه صريح: خطوة إضافة دفعة إلى الطابور من غير اتصال وصف نصي فقط في هذا الدليل — لم تُثبت لقطة حية لها داخل متصفح حقيقي، فلا توجد لقطة منشورة لها. وقواعد المزامنة بتمشي بالترتيب ده عند تفريغ الطابور (POST /offline/payments/sync) بعد رجوع الاتصال: الطابور مصفوفة من 1 إلى 100 دفعة، كل دفعة فيها معرّف فريد (client_uuid) إجباري، ورقم الفاتورة، وحالة الدفع (مدفوعة / جزئية / غير مدفوعة)، والمبلغ المدفوع، وقيم الأساس (base_amount_paid وbase_updated_at). والدفعة المكررة لا تُطبَّق أبدًا مرتين (نفس client_uuid يُتجاهل). وفاتورة مش معروفة أو مش بتاعتك = تعارض (not_found). وتغيّر مبلغ الفاتورة أو وقت تحديثها من وقت النسخة = تعارض (state_changed). وغير كده، الدفعة بتتطبق زي الدفع العادي: الجزئي بمبلغ صفر بيتحول لغير مدفوعة، والكامل بيظبط المبلغ على إجمالي الفاتورة، والفاتورة والمشترك بيتحدثوا معًا في معاملة واحدة مع صف منع التكرار.
والتعارضات من نقطة /offline/conflicts — برضه نقطة بيانات JSON مش صفحة عرض، فوصفها نصي فقط وبلا لقطة. وكل تعارض فيه: رقم الفاتورة والمشترك والفترة والحالة والمبلغ المطلوبان ومبلغ الأساس والمبلغ الحالي والسبب ووقت الإنشاء. وحل التعارض (POST /offline/conflicts/{sync}/resolve) بيعلّم الصف كمُحلّ فقط — والتعارضات لا تُطبَّق تلقائيًا أبدًا. وفي اللقطة التجريبية، كانت قائمة التعارضات فارغة [] — بيانات حساب تجريبي، مش أرقام القارئ. والمزامنة وحل التعارضات لصاحب الحساب والشريك فقط — حساب المشاهدة بياخد خطأ 403 ورسالة «حساب مشاهدة فقط — لا يمكنك تنفيذ هذا الإجراء.»
صندوق «لو تهت»: أشهر مكانين العملاء بيتوهوا فيهم هنا
- فتحت /offline/snapshot أو /offline/conflicts ومستني صفحة: مش هتلاقي صفحة — النقطتان دول بيرجعوا بيانات JSON خام، مش واجهة. ارجع للصفحتين اللي ليهم عرض: /offline/subscribers و/offline/invoices.
- بتدوّر على فاتورة مدفوعة بالكامل في الفواتير المفتوحة: مش هتلاقيها — التبويب ده للفواتير المفتوحة بس (غير مدفوعة أو جزئية). الفاتورة المقفولة خرجت من القائمة، ودليلها هو دليل المحاسبة والفوترة والتقرير المالي.
خطأ شائع: التعامل مع وضع عدم الاتصال على إنه «يشتغل بالكامل أوفلاين»
أشهر غلطة: حد يفتكر إن وضع عدم الاتصال معناه يشتغل كل حاجة من غير نت وكل حاجة هتتزامن لوحدها — فيسجّل دفعات من غير ما يبص على «محدثة حتى»، ويفاجأ بتعارضات عشان الفواتير اتغيرت في غيابه. التصحيح: ده وضع عدم اتصال خفيف — بص على آخر تحديث قبل ما تعتمد على أي رقم، وراجع التعارضات أول ما النت يرجع.
أسئلة شائعة
هل وضع عدم الاتصال بيشتغل بالكامل من غير نت؟
لأ — ده وضع عدم اتصال خفيف: بتشوف نسخة محفوظة من المشتركين والفواتير المفتوحة، والدفعات بتتزامن لما الاتصال يرجع، بقواعد منع التكرار والتعارضات اللي فوق.
لو اتبعتت نفس الدفعة مرتين — هتتسجل مرتين؟
لأ — المعرّف الفريد (client_uuid) بيمنع إعادة التطبيق: الدفعة المكررة لا تُطبَّق أبدًا مرتين.
ليه دفعة اتحولت لتعارض بدل ما تتسجل؟
لسببين بس: فاتورة مش معروفة أو مش بتاعتك (not_found)، أو حالة الفاتورة اتغيرت من وقت النسخة (state_changed). والتعارض بيستنى مراجعتك، ومش بيتطبق لوحده.
أنا حسابي مشاهدة فقط — أقدر أزامن الدفعات؟
لأ — المزامنة وحل التعارضات لصاحب الحساب والشريك فقط، وحساب المشاهدة بياخد خطأ 403 ورسالة «حساب مشاهدة فقط — لا يمكنك تنفيذ هذا الإجراء.» — لكنه يشوف الصفحتين عادي.
بعد وضع عدم الاتصال، راجع دليل لوحة التحكم، ودليل هوم 4G بالتفصيل، وكل شروحات الاستخدام في دليل الاستخدام، وشوف المميزات والأسعار، واطلب المساعدة من مركز المساعدة — وجرّب أريج مجانًا من صفحة التسجيل.