# ERD

المخطط التالي يصف الجداول المنفذة في Migrations. توجد قيود Foreign Key على العلاقات المباشرة، وتُفرض مطابقة `tenant_id` أيضًا في الخدمات والسياسات. يتركز سجل الرسالة الأصلي مشفرًا؛ النص المعروض هو `body_redacted`.

## الحسابات والأجهزة والمرسلون

```mermaid
erDiagram
  TENANTS ||--o{ USERS : contains
  TENANTS ||--o{ DEVICES : owns
  SENDERS ||--o{ SENDER_TENANT_ACCESS : granted
  TENANTS ||--o{ SENDER_TENANT_ACCESS : allows
  USERS ||--o{ EMPLOYEE_SENDER_PERMISSIONS : receives
  SENDERS ||--o{ EMPLOYEE_SENDER_PERMISSIONS : scoped
  TENANTS ||--o{ CONVERSATIONS : groups
  SENDERS ||--o{ CONVERSATIONS : identifies
  TENANTS ||--o{ WEBHOOK_RECEIPTS : receives
  DEVICES ||--o{ WEBHOOK_RECEIPTS : authenticates
  TENANTS ||--o{ UNKNOWN_SENDER_INBOX : quarantines
  DEVICES ||--o{ UNKNOWN_SENDER_INBOX : originated
```

`users.role` هو `super_admin`, `admin`, أو `employee`. `users.permissions` يخزن صلاحيات حساب العميل الإضافية؛ أما صلاحيات الموظف على المرسل فتوجد في `employee_sender_permissions` وتُراجع على الخادم.

## المحادثات والمعالجة والأقسام

```mermaid
erDiagram
  CONVERSATIONS ||--o{ MESSAGES : contains
  SENDERS ||--o{ MESSAGES : sends
  DEVICES ||--o{ MESSAGES : ingests
  WEBHOOK_RECEIPTS ||--o{ MESSAGES : source
  MESSAGES ||--o{ MESSAGE_ASSIGNMENTS : assigned
  USERS ||--o{ MESSAGE_ASSIGNMENTS : handles
  MESSAGES ||--o{ MESSAGE_STATUS_EVENTS : records
  MESSAGES ||--o{ NOTES : annotates
  NOTES ||--o{ ATTACHMENTS : includes
  MESSAGE_STATUS_EVENTS ||--o{ ATTACHMENTS : reason_audio
  TENANTS ||--o{ DEPARTMENTS : owns
  DEPARTMENTS ||--o{ DEPARTMENT_MEMBERS : includes
  USERS ||--o{ DEPARTMENT_MEMBERS : belongs
  MESSAGES ||--o{ MESSAGE_DEPARTMENT_REFERRALS : referred
  DEPARTMENTS ||--o{ MESSAGE_DEPARTMENT_REFERRALS : receives
```

## الإعداد والتشغيل والتدقيق

| الجدول | الاستخدام |
|---|---|
| `telegram_global_settings` | Bot Token عام مشفر |
| `tenant_telegram_settings` | Chat ID وأحداث ومرسلون لكل عميل، القيم السرية مشفرة |
| `telegram_delivery_attempts` | idempotency ومحاولات الإرسال ونتيجته |
| `exports` | طلبات التصدير وحالتها ومسار مؤقت محمي ووقت الانتهاء |
| `backup_settings`, `backup_runs` | تفضيلات النسخ ونتيجة كل تشغيل |
| `tenant_activity_logs` | إجراءات المستخدمين داخل العميل |
| `super_admin_security_logs` | تدقيق مستقل لمدير المنصة، لا تظهره مسارات العميل |
| `notifications` | إشعارات داخلية مرتبطة بمستخدم |
| `two_factor_secrets` | سر TOTP مشفر وأكواد استعادة مستقبلية |
| `jobs`, `failed_jobs` | قاعدة الطابور القياسية لـLaravel |

### الفهارس المهمة

- `conversations`: Unique على `(tenant_id, sender_id)` وفهرس آخر رسالة.
- `messages`: فهرس `(tenant_id, status, received_at)` و`(conversation_id, received_at)`، وFull-text على النص المنقح في MySQL/MariaDB مع fallback للاختبارات.
- `message_assignments`: فهرس `(tenant_id, user_id, active)`.
- `webhook_receipts`: Unique على `(device_id, idempotency_key)`.
- `message_department_referrals`: فهرس `(tenant_id, department_id, status)`.
