انتقل إلى المحتوى

التقنيات

كل تقنية مستخدمة في Saha Doküman

فيما يلي التقنيات المستخدمة في كل طبقة من طبقات التطبيق، بالإصدارات التي تعمل فعليًا ودورها في Saha Doküman. لم نضف شيئًا لتطويل القائمة.

الإصدارات مأخوذة من سجلات حزم المشروع. وهي الإصدارات المثبّتة فعليًا، وصور Docker مثبّتة على إصدار محدد كذلك.

الخادم

الواجهة البرمجية وحدة نشر واحدة على .NET 10، مكتوبة بـ Minimal API بلا controllers.

التقنيةالإصداردورها في Saha Doküman
.NET / C#10 (SDK 10.0.300)كل جانب الخادم مكتوب بـ C# على .NET 10، ببناء يفحص القيم الفارغة ويعدّ التحذيرات أخطاء.
ASP.NET Core Minimal APIs10.0كل نقطة نهاية Minimal API معرَّفة في ملف واحد لكل مجلد ميزة؛ ولا تُستخدم controllers.
Microsoft.AspNetCore.OpenApi10.0.13يولّد عقد الواجهة البرمجية بصيغة OpenAPI 3.1؛ وتُكتب نماذج الويب والجوال وفقه.
Scalar.AspNetCore2.18.0يوفّر واجهة مرجعية تفاعلية لتجربة الواجهة البرمجية أثناء التطوير (معطّلة في الإنتاج).
JWT Bearer10.0.13يتحقق من رموز الوصول؛ وتتبدّل رموز التحديث عند كل استخدام. لا تُوضع الأدوار في الرمز، بل تُقرأ من محرك الصلاحيات عند كل طلب.
PasswordHasher10.0تُخزَّن كلمات المرور كبصمات أنشأها PasswordHasher في ASP.NET Core؛ ولا تُحفظ كلمة مرور صريحة.
Rate limiting10.0حدود طلبات لكل IP ولكل مستخدم على تسجيل الدخول والمسارات الحساسة؛ ومحاولات التخمين تقفل الحساب.
Entity Framework Core10.0.13طبقة الربط بين الكائنات والجداول للوصول إلى البيانات وترحيلات المخطط.
Npgsql EF Core provider10.0.3مزوّد PostgreSQL لـ EF Core؛ يستخدم أنواع PostgreSQL وفهارسه الخاصة.
Markdig1.4.1يُخزَّن محتوى الصفحات بصيغة Markdown مقيَّدة؛ ويتحقق Markdig منه على شجرة البنية ويحوّله إلى نص عادي للبحث.
SkiaSharp4.153.1تُفك كل صورة مرفوعة وتُعاد ترميزها: تُحذف بيانات الموقع وEXIF، ويُحدَّد الحجم، وتُنشأ صورة مصغّرة.
DocumentFormat.OpenXml3.5.1يستورد ملفات Word، ويستخرج نص البحث من ملفات Word وExcel وPowerPoint، ويقرأ قالب استيراد المستخدمين من Excel.
PdfPig0.1.16يستخرج نص البحث من ملفات PDF ويحتفظ بأرقام الصفحات للاستشهاد. يعمل في عملية فرعية منفصلة لعزل الملفات التالفة.
Serilog4.3.1يكتب ملفات سجل منظَّمة؛ وتُخفى الرموز وكلمات المرور وقيم سلسلة الاستعلام قبل وصولها إلى السجل.
MailKit4.18.1يرسل صندوق بريد المنصة الصادر عبر SMTP: رابط تعيين كلمة مرور مدير الشركة الجديد وتذكيرات تجديد الاشتراك.
TimeProvider.NET 10كل قراءات الوقت تمر عبر TimeProvider؛ وفي الاختبارات يُتحكَّم بالوقت بساعة وهمية مع احترام دقة الميكروثانية في قاعدة البيانات.

البيانات والبحث

كل المحتوى والسجلات وفهرس البحث في PostgreSQL؛ ولا حاجة إلى خادم بحث منفصل.

التقنيةالإصداردورها في Saha Doküman
PostgreSQL18.6مخزن البيانات الوحيد للصفحات والإصدارات والسجلات وفهرس البحث ومقتطفات المعرفة وسجل التدقيق؛ ويُنشأ العنقود بترتيب تركي (ICU tr-TR).
tsvector + GINيعتمد البحث النصي الكامل على أعمدة tsvector بفهارس GIN؛ ويُبنى المتجه في C# بقواعد الكلمات نفسها المستخدمة في الاستعلام.
TurkishNormalizerيوحّد الحروف التركية والعربية بجدول صريح يحافظ على الطول؛ وتوحيد البحث يجري على الخادم فقط.
ArabicWordsيحلّل أشكال الكلمات العربية (مثل أداة التعريف) فيجد البحث الكلمة حتى بلا «ال».
Advisory locksأقفال تطبيق على مستوى المعاملة تنظّم الأعمال المتزامنة كالنشر والفهرسة.
xmin concurrencyتُكتشف التعديلات المتزامنة بعمود xmin في PostgreSQL (تزامن تفاؤلي) بدل الكتابة فوقها بصمت.
Append-only ledgersأحداث النشر وسجلات فحص المساهمة للإضافة فقط؛ وصلاحيات دور التشغيل في قاعدة البيانات لا تشمل التحديث والحذف.

الذكاء الاصطناعي وRAG

البحث الدلالي يعمل محليًا؛ وتوليد الإجابات اختياري ولا يستخدم إلا المقتطفات المسموحة.

التقنيةالإصداردورها في Saha Doküman
Ollama0.35.1يشغّل نموذج التضمين محليًا على الخادم؛ وهو على الشبكة الداخلية فقط وبلا منفذ منشور.
bge-m31024 dim.نموذج تضمين متعدد اللغات (ومنها التركية) ينتج متجهًا من 1024 بُعدًا لكل مقتطف معرفة.
Microsoft.Extensions.AI10.10.0طبقة تجريد لمولّد التضمين: Ollama في الإنتاج ومولّد وهمي حتمي في الاختبارات.
OllamaSharp5.5.0العميل الذي يربط تجريد Microsoft.Extensions.AI بخادم Ollama المحلي.
System.Numerics.Tensors10.0.13حاصل ضرب نقطي وحساب معايير بتسريع SIMD لفهرس المتجهات في الذاكرة؛ ويُطبَّق مرشّح الصلاحيات قبل التقييم.
Hybrid retrieval + RRFتُدمج أفضل 40 نتيجة من البحث المتجهي والنصي بدمج الرتب التبادلي (RRF)؛ ويُعطى مقتطف القاعدة دفعة صغيرة.
Anthropic C# SDK12.58.0حزمة C# الرسمية لإنتاج إجابات المساعد عبر Claude API كتدفق؛ وأنواع الأخطاء وإعادة المحاولة معرَّفة بأنواع.
claude-sonnet-5-5default modelالنموذج الافتراضي claude-sonnet-5-5؛ ويُضبط النموذج ومستوى الجهد من الإعدادات، ويُقرأ مفتاح API من الإعدادات أو مخزن الأسرار فقط.
Citations + prompt cachingتُرسل المقتطفات ككتل مستندات مع تفعيل الاستشهادات، فترتبط كل عبارة بكتلة مصدرها؛ ويُخزَّن موجّه النظام مؤقتًا.
ModelContextProtocol.AspNetCore2.2.0خادم MCP للقراءة فقط على /mcp بحزمة MCP الرسمية لـ C#، بأدوات search_documentation وget_page وlist_rules.
Retrieval APIPOST /api/rag/retrieve للأنظمة الخارجية: يعيد مقتطفات مع النص وعنوان الاستشهاد ومعرّف الكتلة والإصدار وسجل المصدر كاملًا.
Personal access tokensمفاتيح وصول شخصية بنطاق وانتهاء وإمكانية إلغاء؛ تُخزَّن بصمتها فقط، وكل استدعاء يعمل بصلاحيات صاحبه.

الويب

واجهة الويب للتطبيق، تُبنى بأنواع مولَّدة من عقد الواجهة البرمجية.

التقنيةالإصداردورها في Saha Doküman
React19.3.1واجهة الويب مكتوبة بمكوّنات React 19 الدالّية وhooks.
TypeScript5.9.3مشروع الويب مكتوب بـ TypeScript الصارم؛ وتُولَّد أنواع الواجهة البرمجية من العقد.
Vite8.3.4أداة البناء وخادم التطوير لتطبيق الويب؛ ويمرّر الواجهة البرمجية محليًا.
Tailwind CSS4.3.3تُنسَّق الواجهة بـ Tailwind 4؛ وتحافظ الفئات المنطقية على جاهزية التخطيط من اليمين إلى اليسار للعربية.
React Router7.18.4توجيه الصفحات في تطبيق الويب.
TanStack Query5.104.3يخزّن حالة الخادم (القوائم والصفحات والصلاحيات) مؤقتًا ويدير إعادة الجلب والإلغاء.
openapi-fetch0.17.0عميل صغير آمن الأنواع يستدعي الواجهة البرمجية بأنواع OpenAPI.
openapi-typescript7.13.0يولّد أنواع TypeScript من عقد docs/openapi.json؛ ويفشل البناء عند تغيّر العقد.
TipTap + @tiptap/markdown3.32.0محرك النص المنسّق لمحرر الكتل؛ يقرأ المحتوى ويكتبه بصيغة Markdown.
react-markdown + remark-gfm10.1.0 / 4.0.1يعرض المحتوى بأمان (لا يُقبل HTML خام أبدًا)؛ مع دعم جداول GFM وقوائم المهام.
dnd-kit6.3.1 / 10.0.0يعيد ترتيب الكتل بالسحب والإفلات.
lucide-react1.59.0مجموعة أيقونات الواجهة.
sonner2.0.8يعرض ردود الفعل مثل «تم الحفظ» أو «تم الإرسال» كإشعارات منبثقة.
diff9.0.0يحسب الفرق بين إصدارين في سجل الإصدارات.

الجوال

قاعدة شيفرة واحدة لـ Android وiOS؛ وتعمل على الويب أيضًا لاختبارات الدخان.

التقنيةالإصداردورها في Saha Doküman
Flutter / Dart3.41.9 / 3.11يبني تطبيق Android وiOS من قاعدة شيفرة واحدة (Flutter 3.41 وDart 3.11).
flutter_riverpod3.3.2إدارة الحالة بـ Notifier وAsyncNotifier وProvider؛ بلا توليد شيفرة.
go_router17.5.0توجيه الصفحات التصريحي لتطبيق الجوال.
dio5.11.1عميل HTTP الوحيد، مع معترِض مصادقة يجدّد الرمز في تدفق واحد.
flutter_secure_storage11.2.0يحفظ رموز الجلسة في المخزن الآمن لنظام التشغيل (Keychain / Keystore).
flutter_markdown_plus1.0.12يعرض محتوى الصفحة بصيغة Markdown خلف مكوّن AppMarkdown واحد.
image_picker / file_picker1.2.4 / 13.1.0اختيار الصور والملفات؛ وتُرسل الملفات المرفوعة كبايتات (MultipartFile.fromBytes).
url_launcher6.3.3يفتح كتل الروابط والعناوين الخارجية في المتصفح.
flutter_localizations + intl0.20.2التوطين وتنسيقات التاريخ والأرقام للواجهة التركية والعربية (من اليمين إلى اليسار) والإنجليزية.
shared_preferences2.5.6يحفظ تفضيلات المستخدم غير السرية.

البنية التحتية والتشغيل

يعمل sahadoc.com على خادم Linux واحد بـ Docker؛ ولكل شركة قاعدة بياناتها وحاوية خدمتها.

التقنيةالإصداردورها في Saha Doküman
Docker + Composeحزمة الإنتاج معرَّفة بـ Docker Compose: PostgreSQL وOllama والواجهة البرمجية حاويات منفصلة؛ وقاعدة البيانات وOllama على الشبكة الداخلية فقط.
nginx1.24ينهي TLS ويحوّل www إلى النطاق الأساسي؛ ويكتب ترويسات X-Forwarded بنفسه، ولا يتضمن سجل الوصول سلسلة الاستعلام ولا ترويسة Authorization.
Let's Encryptشهادات TLS مجانية؛ وتُصدر شهادة شاملة (wildcard) للنطاقات الفرعية للشركات بالتحقق عبر DNS.
Multi-tenant hostingفي SaaS تعمل كل شركة بقاعدة بياناتها ومجلد ملفاتها وحاوية تبعياتها؛ والمفاتيح المشتقة لكل شركة تجعل رمز شركة بلا قيمة عند أخرى.
Backup + restoreتُنسخ قاعدة البيانات والملفات احتياطيًا معًا، ويحافظ سكربت الاستعادة على هذا الترابط.
Verification jobsمهام تتحقق من سلسلة السجل وسلامة الملفات؛ وفي SaaS تمر على قواعد بيانات كل الشركات.
Structured logsملفات سجل منظَّمة تدور يوميًا وخالية من القيم السرية؛ وسجلات الحاويات محدودة الحجم.

الجودة

تُتحقق الصلاحيات والخصوصية بالاختبارات وبتدقيق هجومي معًا.

التقنيةالإصداردورها في Saha Doküman
xUnit v22.9.3إطار اختبارات الخادم (الإصدار 2).
Shouldly4.3.0تأكيدات مقروءة؛ ولا تُستخدم FluentAssertions وMoq عمدًا.
NSubstitute6.2.0يحاكي التبعيات في اختبارات الوحدة.
Respawn7.0.0يعيد تهيئة قاعدة البيانات بسرعة بين اختبارات التكامل؛ ولكل مجموعة اختبارات قاعدة بياناتها.
ASP.NET Core test host10.0.13يختبر الواجهة البرمجية من البداية إلى النهاية في الذاكرة على PostgreSQL حقيقية.
FakeTimeProvider10.11.0يختبر السلوك المرتبط بالوقت (التذكيرات ومدد الجلسات) بشكل حتمي.
Persona x endpoint matrixجدول شخصية × نقطة نهاية لكل نقطة نهاية: يجب أن يحصل غير المخوَّل على 404، وتُضاف كل نقطة جديدة إلى الجدول.
OpenAPI snapshot + JSON samplesوثيقة OpenAPI اختبار لقطة؛ وتغذي عيّنات JSON اختبارات العملاء؛ ويُغيَّر العقد عن قصد.
Vitest5.0.5مشغّل اختبارات الويب.
Testing Library (React)16.3.3يختبر المكوّنات كما يراها المستخدم.
MSW3.0.3يحاكي الواجهة البرمجية على مستوى الشبكة في اختبارات الويب.
flutter_test + mocktail1.0.5اختبارات وحدة وواجهات للجوال؛ وتُختبر النماذج بملفات JSON في docs/samples.
Red-team auditتُفحص كل قناة تسريب (البحث والملفات والإشعارات والمساعد والواجهة البرمجية وMCP) بأشخاص غير مخوَّلين، وتُختبر سيناريوهات سحب الصلاحية.

رحلة الطلب

عندما يبحث مستخدم أو يسأل المساعد يحدث ما يلي بالترتيب.

  1. العميل

    يرسل تطبيق الويب أو الجوال (أو أداة خارجية عبر MCP) طلب HTTPS.

  2. nginx

    ينتهي TLS هنا؛ وتُكتب ترويسات عنوان العميل والبروتوكول بشكل موثوق.

  3. الهوية والحدود

    يُتحقق من الرمز، وتُطبَّق حدود الطلبات، وتُحدَّد الشركة (من النطاق الفرعي في SaaS).

  4. الصلاحيات

    يحدد محرك الصلاحيات ما يحق للمستخدم رؤيته؛ وكل ما لا يظهر هو 404.

  5. البيانات والبحث

    تُجلب مرشحات البحث النصي والمتجهي من PostgreSQL وتُصفّى بحسب الصلاحية.

  6. الذكاء الاصطناعي (اختياري)

    تُفحص المقتطفات المسموحة المختارة مرة أخرى؛ وإذا كان مفعّلًا يكتب Claude الإجابة مع المصادر.

  7. الاستجابة

    تعود النتيجة إلى العميل ومعها معلومات المصدر، دون أن تُخزَّن مؤقتًا في أي طبقة وسيطة.

  1. العملاء

    • تطبيق الويب — React 19
    • تطبيق الجوال — Flutter · Android / iOS
    • ذكاء اصطناعي خارجي — MCP · مفتاح وصول
  2. تطبيق Saha Doküman واحد

    • واجهة Saha Doküman — محرك الصلاحيات · ‎.NET 10
    • المساعد (RAG) — بحث هجين + إعادة فحص
    • عامل التضمين — في الخلفية
  3. البيانات والذكاء الاصطناعي

    • PostgreSQL 18 — المحتوى · الإصدارات · السجل · مقتطفات المعرفة والمتجهات
    • Ollama · bge-m3 — تضمين محلي
    • Claude API — Anthropic · اختياري

رحلة المعلومة

من لحظة كتابتها إلى لحظة العثور عليها: لكل خطوة صاحب، وعلى الطريق أربع نقاط تحقق.

  1. الإضافة

    • مسودة

      تُكتب في تطبيق الويب أو الجوال، أو من قالب، أو تُستورد من Word.

    • فحص المساهمة

      تدقيق لغوي وفحص للمعلومات المشابهة. إن كانت المعلومة موجودة فستراها أولًا.

      قبل الحفظ

  2. الموافقة

    • طلب تغيير

      تذهب المساهمة مع ملاحظتها إلى مسؤول القسم.

    • الموافقة

      يراجعها المسؤول ويصحّحها عند الحاجة، ثم يوافق عليها أو يرفضها.

      قبل النشر

  3. النشر

    • خدمة نشر واحدة

      يُكتب الإصدار الجديد ومعه من أضافه ومن نشره.

    • السجل

      للإضافة فقط ومترابط بسلسلة بصمات (hash)، فلا يمكن إعادة كتابته.

  4. الفهرسة

    • فهرس البحث

      يُحدَّث فورًا، جاهزًا للبحث بالتركية والعربية والإنجليزية.

    • مقتطفات المعرفة

      تتحول الأقسام والقواعد والجداول وصفحات الملفات إلى مقتطفات قصيرة تحتفظ بمصدرها.

    • متجهات محلية

      تُحسب المتجهات على الخادم باستخدام Ollama؛ ولا يخرج النص.

  5. البحث والإجابة

    • البحث

      الصفحات التي يحق لك رؤيتها فقط؛ المخفية لا تظهر ولا حتى كرقم.

      تصفية بالصلاحيات

    • المساعد

      تُدمج نتائج البحث الدلالي والنصي؛ وإن فعّلته الشركة تذهب المقتطفات المسموحة فقط إلى Claude وتُذكر مصادرها في الإجابة.

      تحقق ثانٍ

    • أدوات ذكاء اصطناعي أخرى

      عبر MCP بمفتاح وصول شخصي، وبالصلاحيات نفسها.

      تحقق ثانٍ

أربع نقاط تحقق على الطريق

  1. قبل الحفظكل إضافة وتعديل يمر بفحص المساهمة.
  2. قبل النشرلا يُنشر تغيير المساهم إلا بعد موافقة المسؤول.
  3. تصفية بالصلاحياتكل نتيجة وكل مقتطف يُصفّى حسب صلاحيات المستخدم.
  4. تحقق ثانٍيُفحص كل مقتطف مرة أخرى قبل أن يذهب إلى الذكاء الاصطناعي.

هل لديك سؤال تقني؟

لنراجع معًا البنية والتثبيت وتدقيق الأمان.

انتقل إلى شركتك

اكتب رمز شركتك وسننقلك إلى عنوان شركتك في Saha Doküman.

إذا كنت لا تعرف الرمز فاسأل مسؤول شركتك.