English

سياسة الخصوصية

نافذة اعتبارًا من: [FOUNDER FILL — YYYY-MM-DD]

آخر تحديث: [FOUNDER FILL — YYYY-MM-DD]

الإصدار: 1

توضّح هذه السياسة كيف تقوم منصة PlanooAI ("نحن" / "المنصة") بجمع البيانات الشخصية واستخدامها والاحتفاظ بها وحمايتها. السياسة مرتكزة على الشيفرة الفعلية التي تشغّل المنتج؛ يمكن التحقق من كل بند فيها بمراجعة ملف المصدر المرفق به. لا نَعِد بما لا نفعله اليوم. وإذا كنا نفعل شيئًا قد لا يتوقعه المستخدم، فإننا نُفصح عنه.


1. من نحن

  • المُتحكم في البيانات: [FOUNDER FILL — اسم الكيان القانوني المسجّل في المملكة]
  • رقم السجل التجاري (CR): [FOUNDER FILL]
  • عنوان المقر المسجّل: [FOUNDER FILL]
  • مسؤول حماية البيانات (DPO): [FOUNDER FILL — الاسم + جهة الاتصال، أو

"لم يُعيَّن مسؤول حماية بيانات؛ نحن تحت العتبة الرقابية التي يحددها نظام حماية البيانات الشخصية"]

  • الاختصاص الأساسي: المملكة العربية السعودية.
  • الجهة التنظيمية: الهيئة السعودية للبيانات والذكاء الاصطناعي (SDAIA)

بموجب نظام حماية البيانات الشخصية (PDPL).


2. البيانات التي نجمعها

نجمع فقط ما يحتاجه المنتج للعمل. كل فئة أدناه تُقابل جداول وحقول محددة في الشيفرة.

2.1 بيانات الحساب

  • البريد الإلكتروني، الاسم، الدور، اللغة المفضّلة (ar / en)، رقم الجوال

الاختياري، وكلمة المرور (مُشفّرة بـ bcrypt؛ لا تُخزَّن أبدًا بصيغتها النصية) — انظر apps/api/models.py:32 (فئة User) ودالة التشفير apps/api/auth.py:66 (hash_password).

  • حالة قفل الحساب (failed_login_count، locked_until) لإحباط محاولات

التخمين فقط.

2.2 بيانات المنظمة

  • اسم المنظمة، القطاع، الدولة، عدد الموظفين، إضافة إلى حقول الهوية

الاستراتيجية التي يجمعها معالج التخطيط (الرؤية، الرسالة، القيم، شرائح العملاء، الأولويات الاستراتيجية، إلخ) — انظر apps/api/models.py:84 (فئة Organization).

  • لا تجمع المنصة بيانات مالية على مستوى الأفراد. الإيرادات، عند ذكرها،

تكون مُجمَّعة في شرائح.

2.3 بيانات الجلسة

  • رموز الجلسة وتجديد الجلسة تُسلَّم كملفات تعريف ارتباط **HttpOnly +

Secure + SameSite** (planoo_access، planoo_refresh) حتى لا يقرأها هجوم XSS — انظر apps/api/token_utils.py:64 (set_auth_cookies).

  • رموز المصادقة الثنائية (MFA) تُخزَّن مُجزّأة بـ HMAC-SHA256؛ الرمز

النصي لا يُحفَظ أبدًا — انظر apps/api/token_utils.py:43 (hash_code) والمقارنة بزمن ثابت في apps/api/auth.py:1331.

  • رموز التجديد تُدوَّر مع كل تجديد، مع رصد لإعادة الاستخدام: أي رمز

يُقدَّم خارج نافذة الـ 30 ثانية يُلغي العائلة بأكملها — انظر apps/api/auth.py:1939.

2.4 البيانات التشغيلية

  • قيم مؤشرات الأداء، خطوط الأساس، الأهداف، حالة المشاريع، تعيينات

الملكية، سجل المراجعة.

  • سجل المراجعة يحفظ نوع الحدث (مثلاً ai.generation،

legal.privacy_updated) إضافة إلى معرّف المنظمة والمستخدم؛ لا يحفظ محتوى الرسائل ولا حمولات الطلبات — انظر apps/api/models.py:559 (فئة AuditLog).

2.5 بيانات الدفع

  • بيانات نية الدفع من Moyasar (مرجع البوابة، المبلغ، العملة، الحالة) —

انظر apps/api/billing.py:409 (POST /v1/billing/checkout-intents).

  • **أرقام البطاقات (PAN) ورموز CVC وتواريخ الانتهاء لا تمسّ بنيتنا

التحتية إطلاقًا.** نموذج Moyasar المُستضاف يجمع البطاقة مباشرةً من العميل ولا يُعيد إلينا سوى مرجع مُرمَّز. ثم نتحقق من حالة الدفع عبر وَبهوك موقَّع من البوابة في apps/api/billing.py:620 (POST /v1/billing/webhooks/moyasar)، وهو المرجع الوحيد لتغييرات حالة الفاتورة.

2.6 بيانات التواصل

  • رموز الاستخدام لمرة واحدة تُرسَل عبر SMS (Taqnyat / Unifonic / Twilio

حسب اختيار المشغّل — انظر KNOWN_SMS_ENDPOINTS في apps/api/integrations.py:299) أو عبر البريد الإلكتروني (مُرحّل SMTP مُهيّأ لكل بيئة).

  • محتوى رسائل OTP وإعادة تعيين كلمة المرور لا يُسجَّل أبدًا؛ ما

يُسجَّل هو البيئة والقناة ووجهة الإرسال فقط، مع تعليق صريح بحذف الرمز — انظر apps/api/otp_delivery.py:38 (send_otp_code).

2.7 بيانات القياس

  • نسجّل بيانات وصفية للطلبات والامتدادات (المسار، حالة الاستجابة، المدة)

لأغراض المراقبة والتتبع — انظر apps/api/observability.py:1 و apps/api/tracing.py:1.

  • لا نُفعِّل التقاط محتوى الطلب أو الترويسات في أدوات OpenTelemetry،

لذا لا تدخل ترويسات المصادقة أو ملفات تعريف الارتباط أو الحمولات أيّ امتداد — انظر التعليق الصريح في apps/api/tracing.py:23.

  • كل سطر سجلّ يمرّ بمُنقّي يُزيل السلاسل التي تبدأ بـ password،

secret، token، authorization قبل أن يُكتب.


3. ما نُرسله إلى مزوّدي الذكاء الاصطناعي

سلسلة توليد الذكاء الاصطناعي (SWOT، PESTEL، الأهداف، KPIs، التوصيات) تستدعي نموذج لغة من مزوّد خارجي. ما يصل إلى المزوّد محصور بقائمة سماح صريحة في الشيفرة.

3.1 ما يمكن أن يغادر بنيتنا التحتية

  • حقول ملف المنظمة المُدرَجة بالسماح (SafeOrganizationProfile في

apps/api/ai_models.py:156): - *المستوى 1 — الهوية الاستراتيجية:* الرؤية، الرسالة، القيم، نموذج العمل، شرائح العملاء، الأولويات الاستراتيجية. - *المستوى 2 — الحقائق الهيكلية:* القطاع، القطاع الفرعي، الدولة (ISO-2)، شريحة عدد الموظفين، شريحة سنة التأسيس، شريحة الإيرادات، الأسواق المخدومة. - *المستوى 3 — تفاصيل تشغيلية:* الموقع التنافسي، قنوات التوزيع، البيئة التنظيمية، وجود رؤية ورسالة.

  • سياق المنظمة المُجمّع — أسماء الأقسام مع *أعداد الموظفين فقط* (لا

بيانات على مستوى الأفراد)، شرائح تحقّق نتائج الدورة السابقة، عَدّ هيكل الخطة (عدد التوجهات، الأهداف، النتائج الرئيسية). المصدر: apps/api/ai_endpoints.py:_get_organization_context.

  • حزمة السياق الإقليمي — معلومات عامة عن البيئة التشغيلية في

المملكة ودول الخليج (برامج رؤية 2030، الزكاة والضريبة، نظام حماية البيانات الشخصية، تراخيص ساما، وغيرها). ليست بيانات عملاء.

3.2 ما يُحظَر عن المزوّد

  • أسماء الأشخاص، البُرد الإلكترونية، أرقام الجوال، معرّفات المستخدمين.
  • قوائم العملاء، قوائم الشركاء، قوائم التوزيع.
  • legal_name للمنظمة — مستبعَد عمدًا حتى لا يجلب النموذج معرفة

خارجية (أخبار، قضايا) عن الشركة بالاسم.

  • حقول summary، customer_reach، expansion_planned،

other_considerations، target_age، target_gender.

تنفيذ الحظر بطبقتين:

  1. *تنقية المدخل:* SafeOrganizationProfile يستخدم

extra="ignore"؛ أي حقل خارج قائمة السماح يُسقَط قبل توليد البرومبت. أي قيمة على شكل بريد أو رقم جوال في حقل مسموح بها تُرفَض على مستوى المخطّط (HTTP 422).

  1. *تنقية المخرج:* استجابات النموذج تمر عبر scrub_output في

apps/api/ai_runtime.py:scrub_output قبل الحفظ. تُحجَب أنماط البريد والجوال وقائمة الأسماء المحظورة.

عقد منع تسرّب البيانات الشخصية مَحمي باختبار CI: apps/api/tests/test_ai_pii_redaction.py.

3.3 المزوّد الفعال

المزوّد الفعّال قابل لتهيئة المشغّل من إعدادات المنصة. الافتراضي اليوم لكل بيئة:

البيئةالمزوّد الافتراضيالمنطقة
التطوير / المحليOpenAI أو Gemini (اختيار المشغّل)الولايات المتحدة (OpenAI) / الاتحاد الأوروبي (Gemini)
التشغيل التجريبيOpenAIالولايات المتحدة
الإنتاج[FOUNDER FILL — OpenAI / Gemini / HUMAIN]حسب المزوّد

AIProvider.HUMAIN (نموذج اللغة السيادي السعودي، مُستضاف في المملكة) مُهيَّأ كفتحة مشتريات في apps/api/ai_runtime.py وسيكون الافتراضي عند استقرار واجهته العامة. عند اختيار HUMAIN، تُختصر إفصاحات النقل العابر للحدود في الفقرة 6 إلى لا يوجد نقل عابر للحدود.


4. الأسس القانونية للمعالجة (المادة 5 من نظام حماية البيانات الشخصية)

النشاطالأساس القانوني
إنشاء حسابك وتشغيله، وتنفيذ خطتك الاستراتيجيةتنفيذ العقد
إصدار فواتير ZATCA متوافقة، وحفظ سجلات المراجعة لأغراض التفتيشالتزام نظامي
رصد محاولات تسجيل الدخول التخمينية، حد المرور المسيء، رفض وجهات وَبهوك مشبوهةالمصلحة المشروعة
إرسال البيانات لمزوّد ذكاء اصطناعي خارج المملكة (الفقرة 6)الموافقة الصريحة، تُجمَع عند التسجيل عبر مربع الموافقة في صفحة RegisterPage وAcceptInvitePage

5. المعالجون الفرعيون

نعتمد على مجموعة محددة من المعالجين الخارجيين. القائمة الحالية موجودة في الشيفرة: انظر المعالجين الفرعيين للجدول الرسمي (المزوّد، الغرض، البيانات المشتركة، المنطقة، المصدر في الشيفرة). تحديث تلك القائمة هو تحديث وثائقي ولا يُعيد إصدار سياسة الخصوصية.


6. النقل عابر الحدود (المادة 29 من نظام حماية البيانات الشخصية)

عندما يختار المشغّل مزوّد ذكاء اصطناعي خارج المملكة (OpenAI في الولايات المتحدة، Gemini في الولايات المتحدة/الاتحاد الأوروبي)، فإن إرسال حقول السياق المسموح بها إلى ذلك المزوّد يُعدّ نقلًا عابرًا للحدود. نعتمد على موافقتك الصريحة عند التسجيل (المادة 29(2)(د)) كأساس قانوني لهذا النقل. مربع الموافقة في نموذج التسجيل يحيل إلى هذه السياسة وإلى قائمة المعالجين الفرعيين؛ إرسال النموذج دون تحديد المربع يُرفَض على الخادم.

نقاط أخرى للنقل عابر الحدود:

  • Twilio (الولايات المتحدة) لإرسال رمز OTP عبر SMS عند تهيئة SMS.

رقم الجوال + الرمز فقط.

  • Moyasar مقرّها المملكة؛ بيانات الدفع لا تغادر المملكة.
  • **مُرحّل SMTP، التخزين الكائني، Postgres، Redis، مجمّع

OpenTelemetry** — هذه نقاط نهاية يوفّرها المشغّل؛ موقعها يعتمد على النشر.

إذا حوّل المشغّل المزوّد الافتراضي إلى HUMAIN (نموذج اللغة السيادي المُستضاف في المملكة)، توقف النقل العابر للحدود لسياق المنظمة على تلك البيئة، ويُنشَر إخطار داخل التطبيق.


7. مدد الاحتفاظ

نحتفظ بالبيانات الشخصية فقط لمدة لازمة للغرض الذي جُمعت لأجله. الجدول الزمني المُلزم بحسب الفئة:

فئة البياناتالمدةالمصدر
ملف الحسابطوال عمر الحساب، ثم 90 يومًا بعد الإنهاء لأغراض التصديرالفقرة 8.5 أدناه
رموز الجلسة والتجديدحتى تسجيل الخروج، الإلغاء اليدوي، أو انتهاء صلاحية الرمز (أيها أسبق)apps/api/auth.py:1939
سجلات المراجعة3 سنوات، ثم تُؤرشَف إلى تخزين باردإصلاح SEC-06 المفتوح؛ هذه المدة الآن مُعلنَة ومُطبَّقة
نتائج مهام الذكاء الاصطناعي (ai_jobs.result)90 يومًا من الإكمال، ثم تُحذَف نهائيًاهذا الـ PR (المُنظّف في الفقرة §13 يفرض المدة)
الخطط الاستراتيجية، سجل KPIsطوال عمر الاشتراك + 90 يومًا بعد الإنهاء لأغراض التصديرالفقرة 8.5 أدناه
النسخ الاحتياطية (PG + تخزين كائني)لقطات مُشفّرة 30 يومًا، خارج الموقع، مع تحقّق المجموع الاختباريdocs/runbooks/backup_restore.md (P0-4)؛ اختبار ذاتي في scripts/backup_restore_selftest.sh

8. حقوقك (المواد 9 إلى 13 من نظام حماية البيانات الشخصية)

أنت — صاحب البيانات — لك الحق في:

  1. الاطلاع على بياناتك الشخصية لدينا (المادة 9).
  2. التصحيح عند عدم الدقة (المادة 10).
  3. المحو مع مراعاة الالتزامات النظامية كحفظ فواتير ZATCA

(المادة 11).

  1. النقل إلى مُتحكم آخر بصيغة مُهيكلة قابلة للقراءة آليًا

(المادة 12).

  1. الاعتراض على المعالجة المبنية على المصلحة المشروعة (المادة 13).
  2. التقييد أثناء النزاع المفتوح (المادة 13).
  3. سحب الموافقة في أي وقت، بما في ذلك موافقة النقل العابر للحدود

في الفقرة 6؛ السحب يُوقف ميزات الذكاء الاصطناعي حتى يختار المشغّل مزوّدًا داخل المملكة.

  1. تقديم شكوى إلى الهيئة السعودية للبيانات والذكاء الاصطناعي

(SDAIA) إذا لم نُحلّ الأمر خلال 30 يومًا.

8.5 كيفية ممارسة هذه الحقوق

عبر البريد [email protected]. نستجيب خلال 30 يومًا تقويميًا (الحد المعياري لنظام حماية البيانات الشخصية). للقضايا غير المتعلقة بالخصوصية، [email protected].

عند إنهاء حسابك وعدم تصدير بياناتك خلال 90 يومًا، تُحذَف خطّتك الاستراتيجية وسجل KPIs ونتائج مهام الذكاء الاصطناعي نهائيًا في عمليات يومية متعاقبة. النسخ الاحتياطية تَنقضي خلال 30 يومًا بعد ذلك.


9. تدابير الأمن

ما يلي قائمة غير حصرية بالضوابط المُنفَّذة فعليًا في الشيفرة اليوم:

  • الأسرار مُخزَّنة مُشفّرة بـ Fernet بمفتاح رئيسي لكل نشر — انظر

apps/api/secrets_crypto.py (الأعمدة المُشفّرة تشمل مفتاح مزوّد الذكاء الاصطناعي، كلمة مرور SMTP، مفتاح SMS، اعتمادات S3).

  • مصادقة عبر ملفات تعريف ارتباط HttpOnly + Secure + SameSite —

انظر apps/api/token_utils.py:64 (set_auth_cookies).

  • كلمات المرور مُشفَّرة بـ bcrypt بأملاح فردية — انظر

apps/api/auth.py:66.

  • رموز MFA مُجزّأة بـ HMAC-SHA256، تُقارَن بزمن ثابت — انظر

apps/api/token_utils.py:43 والمقارنة في apps/api/auth.py:1331.

  • TLS 1.2 / 1.3 عند الحافة مع شيفرات ECDHE، HSTS preloaded،

ترويسات X-Frame-Options، X-Content-Type-Options، Referrer- Policy، Permissions-Policy، COOP — انظر nginx/production.conf.

  • رموز التجديد تُدوَّر مع كل تجديد مع رصد إعادة الاستخدام

(_REFRESH_REUSE_GRACE_SECONDS = 30؛ رمز مُعاد خارج النافذة يُلغي العائلة بأكملها) — انظر apps/api/auth.py:1939.

  • تُتحقَّق الملفات المرفوعة عبر البايتات السحرية قبل الحفظ؛ أي

امتداد مزوَّر يُرفَض — انظر apps/api/storage.py:84 (_verify_magic_bytes). الأنواع المسموح بها لكل فئة رفع مُثبَّتة (ALLOWED_REPORT_TYPES، ALLOWED_AVATAR_TYPES، ALLOWED_LOGO_TYPES).

  • وجهات الوَبهوك الصادرة مُثبَّتة DNS مع حماية SSRF؛ المضيف الذي

يُحلّ إلى عنوان خاص أو محلي يُرفَض عند الإدراج وعند التسليم — انظر apps/api/webhooks.py:187 (_resolve_webhook_target) و إعادة التحليل عند التسليم (apps/api/webhooks.py:439).

  • البيانات الشخصية مُنقّاة قبل كل استدعاء للنموذج اللغوي عبر

قائمة السماح للمدخل + معالج السياق المُجمّع، ومُعاد تنقيتها في المخرج — انظر الفقرة 3 أعلاه و apps/api/ai_endpoints.py:_get_organization_context. حماية CI: apps/api/tests/test_ai_pii_redaction.py.

  • حماية الحساب من التخمين — عدادات لكل حساب ولكل IP في Redis؛

تفشل مُغلَقة عند عدم توفر Redis.

  • **النسخ الاحتياطية مُشفَّرة، خارج الموقع، مع تحقّق مجموع اختباري،

واختبار استعادة دوري** يفشل CI إن لم تُستعاد نسخة — انظر scripts/backup_restore_selftest.sh ومُلحَق التشغيل في docs/runbooks/backup_restore.md.

هذه القائمة غير حصرية. وضعنا الأمني يتطوّر مع كل إصدار؛ ما يُذكر هنا هو الضوابط التي لا نتراجع عنها دون إخطار.


10. ملفات تعريف الارتباط

المنصة بأقل قدر من ملفات تعريف الارتباط. نستخدم:

  • planoo_access وplanoo_refresh — ملفات أصل لمصادقة، HttpOnly +

Secure + SameSite.

لا نضع أي ملفات تعريف ارتباط طرف ثالث لأغراض التتبع، ولا أي ملفات تحليلية ما لم يقم المشغّل بنشر مجمّع OpenTelemetry الاختياري ويفعّل وسوم التحليل؛ وحتى عند ذلك، يستقبل المُجمّع فقط بيانات وصفية غير شخصية (المسار، الحالة، المدة).

لا نعرض شريط موافقة لملفات تعريف الارتباط لأننا لا نضع أي ملفات تتطلّب موافقة.


11. القاصرون

الخدمة لمن أعمارهم 18 سنة فأكثر. تُنشَأ الحسابات على أساس أن المستخدم بلغ السن القانونية ولديه أهلية لإبرام اتفاق ملزم. لا نجمع بيانات شخصية عمدًا من القاصرين.


12. تعديلات السياسة

للتغييرات الجوهرية:

  1. نحدّث تاريخَي "نافذة اعتبارًا من" و"آخر تحديث" أعلاه.
  2. نزيد قيمة الإصدار.
  3. نُؤرشف الإصدار السابق تحت docs/legal/archive/v{N}/.
  4. نُخطِر كل حساب نشط عبر البريد ولافتة داخل التطبيق قبل **30 يومًا

على الأقل** من نفاذ التغيير.

  1. نكتب سجلًا في المراجعة:

AuditLog(event_type="legal.privacy_updated") عند النشر.

التغييرات غير الجوهرية (تصحيحات إملائية، إصلاح روابط، تحديث استشهادات الشيفرة) تُذكَر في سجل التغييرات أدناه ولا تُزيد رقم الإصدار.


13. التواصل والشكاوى

طلبات حقوق صاحب البيانات، الإفصاحات الأمنية، وأسئلة الخصوصية:

  • البريد: [email protected]
  • نافذة الاستجابة: 30 يومًا تقويميًا.

للشكاوى غير المُحَلّة، يمكنك التصعيد إلى:

  • الهيئة السعودية للبيانات والذكاء الاصطناعي (SDAIA) — الجهة

الرقابية لنظام حماية البيانات الشخصية في المملكة.

للدعم العام: [email protected].


14. تاريخ النفاذ

هذه السياسة سارية اعتبارًا من [FOUNDER FILL — YYYY-MM-DD].


*انظر أيضًا:*