مصمم باك اند وامان وداتابيز ( المشروع جزء فقط للباك اند)

تفاصيل المشروع

أولًا: الـ Tech Stack المطلوب (إلزامي)

على الباك إند الالتزام بالتقنيات التالية:

NestJS (الإطار الرئيسي للـ Backend)

PostgreSQL كقاعدة بيانات رئيسية

pgvector لتخزين الـ Embeddings الخاصة بالنصوص القانونية

Prisma ORM

Schema + Migrations

Multi-Tenant Structure

Redis لـ:

Rate Limiting

Locks

Queues (BullMQ)

Meilisearch كمحرّك بحث سريع للكلمات

LLM Integration (OpenAI / Gemini أو بديل موثوق) لـ:

تحليل القضايا

التلخيص

حساب نسبة النجاح

توليد العقود والإنذارات والأسئلة

خدمة OCR مثل AWS Textract أو بديل

Payment Gateway (Stripe / Tap / MyFatoorah / PayPal… حسب البلد)

File Storage (S3 أو ما يعادلها)

? ثانيًا: الأدوار الرئيسية في المنصّة وما يحتاجه الباك إند

1) الطالب (Student)

يجب توفير APIs لـ:

تلخيص القوانين:

إدخال نص / مادة قانونية → تلخيص + نقاط أساسية

تلخيص الكتب:

تقسيم بحسب الكتاب / الفصل / الباب

إرجاع ملخّص لكل جزء

مولّد أسئلة الامتحانات:

اختيار مادة / موضوع / مستوى صعوبة

إرجاع أسئلة (MCQ / Essay)

مولّد عقود بسيطة للتدريب

مع نظام اشتراك خاص بالطلاب (خطة Student).

2) المحامي (Lawyer)

يجب توفير APIs لـ:

رفع الملفات (قضايا، عقود، مستندات)

PDF / صورة

تخزين الملف + ربطه بقضية

OCR + استخراج النص:

تمرير الملف إلى خدمة OCR

تنظيف النص (Cleaning)

تخزين النص في قاعدة البيانات

تحليل القضية (Case Analysis):

إدخال / ربط نص القضية

استخراج:

الأطراف (Parties)

التواريخ (Dates)

المبالغ (Amounts)

المواد القانونية المحتملة

تلخيص القضية (Summary)

تقييم المخاطر

حساب نسبة النجاح (Success Probability)

اقتراح استراتيجية قانونية مبدئية

مولّد العقود (Contract Generator):

إدخال معطيات (أطراف، مدة، نوع عقد…إلخ)

توليد نص عقد كامل

حفظ العقد في النظام

مولّد الإنذارات (Legal Notices):

إدخال بيانات الأمام / المدين / سبب الإنذار

توليد إنذار جاهز

مكتبة المعرفة (Knowledge Library):

البحث في القوانين والأحكام السابقة

ربط مع RAG + Meilisearch

API للاستشارات (Consultation API):

المحامي يرسل استفسار قانوني → AI يرد ضمن إطار قانوني (حسب الموارد المتوفرة في RAG)

3) مكاتب المحاماة (Law Firm – Multi-Tenant)

يجب أن يدعم الباك إند:

هيكلية Multi-Tenant:

كل مكتب له:

محامون

قضاياه

عقوده

إنذاراته

اشتراكه الخاص

عزل كامل بين بيانات مكتب وآخر (Tenant Isolation)

إدارة المحامين داخل المكتب:

إضافة / حذف / تعطيل محامي

تعيين أدوار (Admin / Lawyer / Intern)

نظام الصلاحيات (Permissions System):

من يقدر يشوف ماذا؟ (قضايا، عقود، تقارير…)

لوحة تحكم للمكتب (Firm Analytics):

عدد القضايا

القضايا حسب الحالة

أداء المحامين

العقود المولدة

الإنذارات المرسلة

مكتبة قوالب مشتركة (Shared Templates):

قوالب عقود وإنذارات مشتركة على مستوى المكتب

4) النظام ككل (Admin / Platform Level)

إدارة المستخدمين (Students / Lawyers / Firms)

إدارة الخطط والأسعار

مراقبة الاستهلاك (عدد الطلبات – استدعاءات AI – OCR – إلخ)

Logs و Monitoring

? ثالثًا: الـ Database – ما المطلوب تنفيذه بالضبط

1) الجداول الأساسية (Core Entities)

يجب تصميم قاعدة البيانات بحيث تحتوي على الأقل على الجداول التالية:

Users

id, name, email, password_hash, role (student, lawyer, firm_admin, super_admin), language, status…

Firms

id, name, country, subscription_id, tenant_id…

Lawyers

id, user_id, firm_id, specialization, signature, status…

Students

id, user_id, university, level…

Cases

id, firm_id (أو lawyer_id لو محامي فردي), title, description, status, case_type, court, jurisdiction, created_at, updated_at…

CaseFiles

id, case_id, file_path, file_type, ocr_status, uploaded_by…

ExtractedEntities

id, case_id, entity_type (party/date/amount/article…), value, metadata…

LegalDocuments (القضايا، الأحكام… إذا لزم)

LegalBooks

id, title, author, type, source…

LegalArticles / LegalTexts

id, book_id or law_source, article_number, text…

Embeddings

id, object_type (case, law, book…), object_id, embedding_vector (pgvector), metadata…

Contracts

id, firm_id or lawyer_id, case_id (optional), type, content, status…

Notices

id, firm_id or lawyer_id, case_id (optional), type, content, status…

Templates

id, owner_type (system / firm / lawyer), template_type (contract/notice), content, language…

Payments

id, user_id or firm_id, amount, currency, provider, status, transaction_id…

Subscriptions

id, owner_type (student/lawyer/firm), plan_type, start_date, end_date, status…

Analytics / Events (optional لكن مفضل)

id, user_id, action_type, object_type, object_id, metadata, created_at…

2) Multi-Tenant Structure

كل سجل متعلق بمكتب يجب أن يحتوي:

firm_id أو tenant_id

منع أي Query بدون فلتر على tenant_id في طبقة الـ Service

إعداد Prisma بحيث يدعم:

Middleware تضيف tenant_id تلقائيًا حسب المستخدم

3) الـ Indexes والأداء

إضافة Indexes على:

user_id

firm_id

case_id

status

created_at

Index خاص للبحث في النصوص (Meilisearch + pgvector)

Optimized queries للقضايا والبحث

4) Migrations & Seeding

بناء Prisma Schema واضحة

إعداد Migrations منظمة

Seeding:

بعض القوانين/النصوص التجريبية

خطط الاشتراكات

مستخدم Admin أولي

? رابعًا: الذكاء الاصطناعي (AI + RAG + Embeddings)

المطلوب من الباك إند:

RAG Pipeline:

إنشاء Embeddings للنصوص القانونية (كتب، قوانين، أحكام)

تخزينها في pgvector

API لاسترجاع أقرب النصوص ذات الصلة (Semantic Search)

Case Analysis API:

إدخال نص القضية / ربطه بالملف

Query لـ RAG لإحضار مواد قانونية مشابهة

إرسال Prompt متكامل للـ LLM:

نص القضية

المواد القانونية ذات الصلة

استقبال نتيجة تحتوي:

تلخيص

أطراف

تواريخ

مبالغ

مواد قانونية

نسبة نجاح

المخاطر

Contract Generation API:

إدخال بيانات الطرفين والمعطيات

توليد نص العقد

Notice Generation API

Exam Questions Generator

إدخال موضوع / نص مواد قانونية → أسئلة

كل هذه الـ APIs يجب أن تكون:

موثقة (Swagger أو ما يعادله)

بجسم Request/Response واضح (JSON)

? خامسًا: ملفّات و OCR

المطلوب من الباك إند:

API لرفع الملفات:

يرسل Frontend الملف → Storage (S3 مثلاً)

تخزين Metadata في DB

Job / Queue لمعالجة OCR:

استخدام BullMQ + Redis

إرسال الملف لخدمة OCR

استقبال النص الخام

تنظيف وتخزين النص في جدول خاص مرتبط بالملف/القضية

ربط ناتج الـ OCR مع:

Case Analysis

Legal Search

AI Assistant عند فتح القضية

? سادسًا: الدفع والاشتراكات (Payment & Billing)

المطلوب:

دمج مع بوابة دفع:

إنشاء Payment Session

استقبال Webhooks وتأكيد الدفع

إدارة خطط:

Student Plan

Lawyer Plan

Firm Plan

منطق التفعيل:

بعد الدفع → تفعيل الاشتراك

عند انتهاء الاشتراك أو فشل الدفع → إيقاف بعض المزايا

ربط الاشتراك بالمستخدم / المكتب:

حقول في Users / Firms تربط بالـ Subscription

? سابعًا: السيكيورتي (Security) – ما يجب تطبيقه إلزاميًا

1) Authentication & Authorization

تسجيل الدخول عبر:

Email + Password (حالياً)

تشفير كلمات المرور:

Bcrypt أو Argon2

استخدام:

JWT Access + Refresh Tokens

حماية الـ Endpoints:

Guards في NestJS لكل Role

Decorators مثل @Roles('lawyer', 'firm_admin')

2) Role-Based Access Control (RBAC)

أدوار النظام:

student

lawyer

firm_admin

super_admin

لكل دور:

APIs مسموح بها

حقول يمكنه الوصول لها

3) Rate Limiting

تفعيل Rate Limit عبر Redis:

على IP / User ID / Token

لمنع الإساءة للـ AI وOCR والبحث

4) Data Validation

استعمال DTOs + Validation Pipes في NestJS

منع أي بيانات غير متوقعة

5) Tenant Isolation

إلزامًا:

لا يمكن لمحامي مكتب A رؤية بيانات مكتب B

كل Query على DB يمر عبر Layer تحقّق من:

user.tenant_id == record.tenant_id

6) Logs & Audit

تسجيل:

عمليات تسجيل الدخول/الخروج

التعديلات على القضايا

عمليات الدفع

7) Best Practices عامة

كل الاتصال عبر HTTPS

عدم إرجاع رسائل خطأ تكشف تفاصيل داخلية

منع رفع أنواع ملفات غير مسموحة

فحص حجم الملف

? ثامنًا: متطلبات عامة إضافية للمنصّة

دعم لغتين (عربي / إنجليزي) على مستوى البيانات:

النصوص القانونية (إذا توفر أكثر من لغة)

العقود والإنذارات يمكن توليدها بالعربي والإنجليزي

APIs منظّمة وواضحة للـ Frontend:

لكل شاشة في الـ Dashboard، يجب أن يكون Backend عنده Endpoints داعمة:

شاشات الطالب (ملخّصات، أسئلة)

شاشات المحامي (قضايا، رفع ملفات، تحليل، عقود، إنذارات)

شاشات المكتب (المحامين، القضايا، الإحصائيات، القوالب)

Documentation:

Swagger / Postman Collection للمبرمج الفرونت

تقدم للمشروع

العروض المقدمة

أنا Full Stack Developer بخبرة قوية في NestJS PostgreSQL Prisma Redis pgvector Meilisearch BullMQ وبناء أنظمة Multi-Tenant عالية الاعتمادية. قادرة على تنفيذ كام...

السلام عليكم،اخي علي معك محمد من المغرب مبرمج مهندس Full-Stack متخصص ببناء أنظمة backend قوية وآمنة. خبرتي في هذا المشروع: - NestJS PostgreSQL (الملائم تماما لـ...

قبولك لهذا العرض يعتبر اتفاقاً بينك وبين المستقل وسيبقى موقع مستقل وسيطاً بينكما حتى تسليم المشروع. لن تتمكن من تغيير العرض أو إلغائه لاحقًا لذلك تأكد من اختيارك للعرض المناسب باتّباع النصائح التالية:

  • راجع صفحة حساب المستقل الذي اخترته واطّلع على أعماله السابقة
  • إن كانت هناك تفاصيل غير مذكورة في المشروع، فتواصل مع المستقل وأخبره بها أولًا
  • بإمكانك أن تتواصل مع المستقل وتسأله عن أية أمور تحتاجها
  • احرص دائمًا على إبقاء التواصل مع المستقل داخل الموقع قدر الإمكان وذلك لضمان حقوقك
  • لا تتردد من التواصل معنا ان احتجت لأي مساعدة، نحن نحب مساعدتك!

المستقل غير متاح لاستلام مشاريع، يمكنك ارسال تنبيه له لقبول العرض وإعادة المحاولة بعد بضعة ساعات، أو اختيار عرضاً من مستقل آخر.