# ًں“ڑ ط¯ظ„ظٹظ„ ط§ظ„ظ…ط³طھط®ط¯ظ… - ظ†ط¸ط§ظ… ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط±ط³ط© AI School

**ط¢ط®ط± طھط­ط¯ظٹط«:** 30 ط¯ظٹط³ظ…ط¨ط± 2025  
**ط§ظ„ط¥طµط¯ط§ط±:** 2.1.0  
**ط§ظ„ط­ط§ظ„ط©:** âœ… ط¬ط§ظ‡ط² ظ„ظ„ط¥ظ†طھط§ط¬

---

## ï؟½ ط±ظˆط§ط¨ط· ط³ط±ظٹط¹ط©

<div align="center">

[![ظ†ط¸ط±ط© ط¹ط§ظ…ط©](https://img.shields.io/badge/ظ†ط¸ط±ط©_ط¹ط§ظ…ط©-blue?style=for-the-badge)](#ظ†ط¸ط±ط©-ط¹ط§ظ…ط©)
[![ظ„ظˆط­ط§طھ ط§ظ„طھط­ظƒظ…](https://img.shields.io/badge/ظ„ظˆط­ط§طھ_ط§ظ„طھط­ظƒظ…-green?style=for-the-badge)](#ظ„ظˆط­ط§طھ-ط§ظ„طھط­ظƒظ…-ط§ظ„ظ…طھط¹ط¯ط¯ط©)
[![ظ†ط¸ط§ظ… ط§ظ„ظ…ط´ط±ظپظٹظ†](https://img.shields.io/badge/ظ†ط¸ط§ظ…_ط§ظ„ظ…ط´ط±ظپظٹظ†-orange?style=for-the-badge)](#ظ†ط¸ط§ظ…-ط§ظ„ظ…ط´ط±ظپظٹظ†)
[![ظ†ط¸ط§ظ… ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†](https://img.shields.io/badge/ظ†ط¸ط§ظ…_ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†-purple?style=for-the-badge)](#ظ†ط¸ط§ظ…-ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†)
[![ظ†ط¸ط§ظ… ط§ظ„ط·ظ„ط§ط¨](https://img.shields.io/badge/ظ†ط¸ط§ظ…_ط§ظ„ط·ظ„ط§ط¨-cyan?style=for-the-badge)](#ظ†ط¸ط§ظ…-ط§ظ„ط·ظ„ط§ط¨)
[![ط£ظˆظ„ظٹط§ط، ط§ظ„ط£ظ…ظˆط±](https://img.shields.io/badge/ط£ظˆظ„ظٹط§ط،_ط§ظ„ط£ظ…ظˆط±-yellow?style=for-the-badge)](#ظ†ط¸ط§ظ…-ط£ظˆظ„ظٹط§ط،-ط§ظ„ط£ظ…ظˆط±)

[![ًںڈ—ï¸ڈ SOLID & Clean Code](https://img.shields.io/badge/ًںڈ—ï¸ڈ_SOLID_&_Clean_Code-red?style=for-the-badge)](#ط§ظ„طھط­ط³ظٹظ†ط§طھ-ط§ظ„ط¨ط±ظ…ط¬ظٹط©)
[![ًں—؛ï¸ڈ ظ†ط¸ط§ظ… ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„ظ…طھظ‚ط¯ظ…](https://img.shields.io/badge/ًں—؛ï¸ڈ_ظ†ط¸ط§ظ…_ط§ظ„ط¹ظ†ظˆط§ظ†_ط§ظ„ظ…طھظ‚ط¯ظ…-teal?style=for-the-badge)](#ظ†ط¸ط§ظ…-ط§ظ„ط¹ظ†ظˆط§ظ†-ط§ظ„ظ…طھظ‚ط¯ظ…)
[![ًں“ٹ ط³ط¬ظ„ ط§ظ„طھط­ط¯ظٹط«ط§طھ](https://img.shields.io/badge/ًں“ٹ_ط³ط¬ظ„_ط§ظ„طھط­ط¯ظٹط«ط§طھ-pink?style=for-the-badge)](#ط³ط¬ظ„-ط§ظ„طھط­ط¯ظٹط«ط§طھ)
[![ًںگ› ط§ط³طھظƒط´ط§ظپ ط§ظ„ط£ط®ط·ط§ط،](https://img.shields.io/badge/ًںگ›_ط§ط³طھظƒط´ط§ظپ_ط§ظ„ط£ط®ط·ط§ط،-gray?style=for-the-badge)](#ط§ط³طھظƒط´ط§ظپ-ط§ظ„ط£ط®ط·ط§ط،)

</div>

---

## ï؟½ًں“‹ ط¬ط¯ظˆظ„ ط§ظ„ظ…ط­طھظˆظٹط§طھ

1. [ظ†ط¸ط±ط© ط¹ط§ظ…ط©](#ظ†ط¸ط±ط©-ط¹ط§ظ…ط©)
2. [ظ„ظˆط­ط§طھ ط§ظ„طھط­ظƒظ… ط§ظ„ظ…طھط¹ط¯ط¯ط©](#ظ„ظˆط­ط§طھ-ط§ظ„طھط­ظƒظ…-ط§ظ„ظ…طھط¹ط¯ط¯ط©)
3. [ظ†ط¸ط§ظ… ط§ظ„ظ…ط´ط±ظپظٹظ† (Admin Panel)](#ظ†ط¸ط§ظ…-ط§ظ„ظ…ط´ط±ظپظٹظ†)
4. [ظ†ط¸ط§ظ… ط§ظ„ظ…ط¹ظ„ظ…ظٹظ† (Instructor Panel)](#ظ†ط¸ط§ظ…-ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†)
5. [ظ†ط¸ط§ظ… ط§ظ„ط·ظ„ط§ط¨ (Student Panel)](#ظ†ط¸ط§ظ…-ط§ظ„ط·ظ„ط§ط¨)
6. [ظ†ط¸ط§ظ… ط£ظˆظ„ظٹط§ط، ط§ظ„ط£ظ…ظˆط± (Parent Panel)](#ظ†ط¸ط§ظ…-ط£ظˆظ„ظٹط§ط،-ط§ظ„ط£ظ…ظˆط±)
7. [ط§ظ„ظ…ظٹط²ط§طھ ط§ظ„ظ…طھظ‚ط¯ظ…ط©](#ط§ظ„ظ…ظٹط²ط§طھ-ط§ظ„ظ…طھظ‚ط¯ظ…ط©)
8. [ط§ظ„طھط­ط³ظٹظ†ط§طھ ط§ظ„ط¨ط±ظ…ط¬ظٹط© (SOLID & Clean Code)](#ط§ظ„طھط­ط³ظٹظ†ط§طھ-ط§ظ„ط¨ط±ظ…ط¬ظٹط©)
9. [ظ†ط¸ط§ظ… ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„ظ…طھظ‚ط¯ظ…](#ظ†ط¸ط§ظ…-ط§ظ„ط¹ظ†ظˆط§ظ†-ط§ظ„ظ…طھظ‚ط¯ظ…)
10. [ط§ط³طھظƒط´ط§ظپ ط§ظ„ط£ط®ط·ط§ط،](#ط§ط³طھظƒط´ط§ظپ-ط§ظ„ط£ط®ط·ط§ط،)

---

## ًںژ¯ ظ†ط¸ط±ط© ط¹ط§ظ…ط©

### ظ…ط§ ظ‡ظˆ ظ†ط¸ط§ظ… AI Schoolطں

ظ†ط¸ط§ظ… ط¥ط¯ط§ط±ط© ظ…ط¯ط±ط³ط© ظ…طھظƒط§ظ…ظ„ ظˆظ…طھط¹ط¯ط¯ ط§ظ„ظ…ط¤ط³ط³ط§طھ (Multi-Tenant) ظ…طµظ…ظ… ظ„ط¥ط¯ط§ط±ط© ط¬ظ…ظٹط¹ ط¬ظˆط§ظ†ط¨ ط§ظ„ظ…ط¯ط±ط³ط©/ط§ظ„ط£ظƒط§ط¯ظٹظ…ظٹط© ظ…ظ†:
- ط¥ط¯ط§ط±ط© ط§ظ„ط·ظ„ط§ط¨ ظˆط§ظ„ظ…ط¹ظ„ظ…ظٹظ†
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ط¯ط±ط§ط³ظٹط© ظˆط§ظ„ظƒظˆط±ط³ط§طھ
- ط§ظ„ط­ط¶ظˆط± ظˆط§ظ„ط؛ظٹط§ط¨
- ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ ظˆط§ظ„ظˆط§ط¬ط¨ط§طھ
- ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ظˆط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ظ…ط§ظ„ظٹط©
- ط§ظ„طھظˆط§طµظ„ (ط±ط³ط§ط¦ظ„ ط¬ظ…ط§ط¹ظٹط©طŒ ط¥ط´ط¹ط§ط±ط§طھ SMS)
- ط§ظ„طھظ‚ط§ط±ظٹط± ظˆط§ظ„ط¥ط­طµط§ط¦ظٹط§طھ

### ط§ظ„طھظ‚ظ†ظٹط§طھ ط§ظ„ظ…ط³طھط®ط¯ظ…ط©

- **Laravel 12.44.0** - ط¥ط·ط§ط± ط¹ظ…ظ„ PHP
- **Filament 4.x** - ظ†ط¸ط§ظ… ط¥ط¯ط§ط±ط© ط­ط¯ظٹط«
- **PHP 8.2.28** - ظ„ط؛ط© ط§ظ„ط¨ط±ظ…ط¬ط©
- **MySQL** - ظ‚ط§ط¹ط¯ط© ط§ظ„ط¨ظٹط§ظ†ط§طھ
- **Bootstrap 5.3.0** - ظ„ظ„ظˆط§ط¬ظ‡ط§طھ ط§ظ„ظ…ط®طµطµط©
- **Chart.js 4.4.1** - ط§ظ„ط±ط³ظˆظ… ط§ظ„ط¨ظٹط§ظ†ظٹط©

---

## ًںژ›ï¸ڈ ظ„ظˆط­ط§طھ ط§ظ„طھط­ظƒظ… ط§ظ„ظ…طھط¹ط¯ط¯ط©

ط§ظ„ظ†ط¸ط§ظ… ظٹط­طھظˆظٹ ط¹ظ„ظ‰ **4 ظ„ظˆط­ط§طھ طھط­ظƒظ… ظ…ظ†ظپطµظ„ط©** ظ„ظƒظ„ ط¯ظˆط±:

| ط§ظ„ظ„ظˆط­ط© | ط§ظ„ط±ط§ط¨ط· | ط§ظ„ظˆطµظˆظ„ | ط§ظ„ظˆط¸ط§ط¦ظپ ط§ظ„ط±ط¦ظٹط³ظٹط© |
|-------|--------|--------|-------------------|
| ًں”‘ **Admin** | `/admin` | super_admin, owner | ط¥ط¯ط§ط±ط© ظƒط§ظ…ظ„ط© ظ„ظ„ظ†ط¸ط§ظ… |
| ًں‘¨â€چًںڈ« **Instructor** | `/instructor` | instructor | ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ظˆط§ظ„ط¯ط±ظˆط³ |
| ًںژ“ **Student** | `/student` | student | ظ…طھط§ط¨ط¹ط© ط§ظ„ط¯ط±ط§ط³ط© ظˆط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ |
| ًں‘¨â€چًں‘©â€چًں‘§ **Parent** | `/parent` | parent | ظ…طھط§ط¨ط¹ط© ط£ط¨ظ†ط§ط¦ظ‡ظ… |

### ظƒظٹظپظٹط© ط§ظ„ظˆطµظˆظ„

1. ظ‚ظ… ط¨طھط³ط¬ظٹظ„ ط§ظ„ط¯ط®ظˆظ„ ط¹ظ„ظ‰ `/admin`
2. ط§ظ„ظ†ط¸ط§ظ… ظٹطھط¹ط±ظپ ط¹ظ„ظ‰ ط¯ظˆط±ظƒ طھظ„ظ‚ط§ط¦ظٹط§ظ‹
3. ط³ظٹطھظ… طھظˆط¬ظٹظ‡ظƒ ظ„ظ„ظˆط­ط© ط§ظ„ظ…ظ†ط§ط³ط¨ط©
4. ط¥ط°ط§ ظƒط§ظ† ظ„ط¯ظٹظƒ ط£ظƒط«ط± ظ…ظ† ط¯ظˆط±طŒ ظٹظ…ظƒظ†ظƒ ط§ظ„طھط¨ط¯ظٹظ„ ظ…ظ† ط§ظ„ظ‚ط§ط¦ظ…ط© ط§ظ„ط¹ظ„ظˆظٹط©

---

## ًں”§ ظ†ط¸ط§ظ… ط§ظ„ظ…ط´ط±ظپظٹظ† (Admin Panel)

### ط§ظ„ظˆطµظˆظ„
- **ط§ظ„ط±ط§ط¨ط·:** `https://yourschool.com/admin`
- **ط§ظ„ط£ط¯ظˆط§ط± ط§ظ„ظ…ط³ظ…ظˆط­ط©:** `super_admin`, `owner`, `admin`

### ط§ظ„ظ‚ظˆط§ط¦ظ… ط§ظ„ط±ط¦ظٹط³ظٹط©

#### ًں“ٹ ظ„ظˆط­ط© ط§ظ„ظ…ط¹ظ„ظˆظ…ط§طھ (Dashboard)
- ط¥ط­طµط§ط¦ظٹط§طھ ط³ط±ظٹط¹ط© (ط·ظ„ط§ط¨طŒ ظ…ط¹ظ„ظ…ظٹظ†طŒ ظ…ط¬ظ…ظˆط¹ط§طھطŒ ط¥ظٹط±ط§ط¯ط§طھ)
- 9 Widgets طھظپط§ط¹ظ„ظٹط©:
  - ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ط·ظ„ط§ط¨
  - ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ظ†ط´ط·ط©
  - ط§ظ„ط¥ظٹط±ط§ط¯ط§طھ ط§ظ„ط´ظ‡ط±ظٹط©
  - ظ…ط¹ط¯ظ„ ط§ظ„ط­ط¶ظˆط±
  - ط£ط¯ط§ط، ط§ظ„ط·ظ„ط§ط¨
  - ط£ط­ط¯ط« ط§ظ„طھط³ط¬ظٹظ„ط§طھ
  - ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ط§ظ„ظ…ط¹ظ„ظ‚ط©
  - ط§ظ„طھظ†ط¨ظٹظ‡ط§طھ

#### ًں‘¥ ط¥ط¯ط§ط±ط© ط§ظ„ط·ظ„ط§ط¨
**ط§ظ„ظ…ظˆظ‚ط¹:** ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط±ط³ط© > ط§ظ„ط·ظ„ط§ط¨

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¥ط¶ط§ظپط©/طھط¹ط¯ظٹظ„/ط­ط°ظپ ط§ظ„ط·ظ„ط§ط¨
- âœ… ط±ط¨ط· ط§ظ„ط·ط§ظ„ط¨ ط¨ظˆظ„ظٹ ط§ظ„ط£ظ…ط±
- âœ… ظ…ط¹ظ„ظˆظ…ط§طھ ط´ط®طµظٹط© ظƒط§ظ…ظ„ط© (طµظˆط±ط©طŒ طھط§ط±ظٹط® ظ…ظٹظ„ط§ط¯طŒ ط¹ظ†ظˆط§ظ†)
- âœ… ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط§طھطµط§ظ„ (ظ‡ط§طھظپطŒ ط¨ط±ظٹط¯ ط¥ظ„ظƒطھط±ظˆظ†ظٹ)
- âœ… ط±ط¨ط· ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ (Enrollments)
- âœ… ظ…طھط§ط¨ط¹ط© ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ
- âœ… ط³ط¬ظ„ ط§ظ„ط­ط¶ظˆط±
- âœ… ظ†طھط§ط¦ط¬ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ
- âœ… ط§ظ„ظ…ظˆط§ط±ط¯ ط§ظ„طھط¹ظ„ظٹظ…ظٹط© ط§ظ„ظ…طھط§ط­ط©

**ظ†ظ…ظˆط°ط¬ ط§ظ„ط·ط§ظ„ط¨:**
```
- ط§ظ„ط§ط³ظ… (ط¥ط¬ط¨ط§ط±ظٹ)
- ط§ظ„ط¨ط±ظٹط¯ ط§ظ„ط¥ظ„ظƒطھط±ظˆظ†ظٹ (ط¥ط¬ط¨ط§ط±ظٹطŒ ظپط±ظٹط¯)
- ط±ظ‚ظ… ط§ظ„ظ‡ط§طھظپ
- طµظˆط±ط© ط´ط®طµظٹط©
- طھط§ط±ظٹط® ط§ظ„ظ…ظٹظ„ط§ط¯
- ط§ظ„ط¹ظ†ظˆط§ظ†
- ظˆظ„ظٹ ط§ظ„ط£ظ…ط±
- tenant_id (طھظ„ظ‚ط§ط¦ظٹ)
```

#### ًں‘¨â€چًںڈ« ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¹ظ„ظ…ظٹظ† (Supervisors)
**ط§ظ„ظ…ظˆظ‚ط¹:** ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط±ط³ط© > ط§ظ„ظ…ط´ط±ظپظٹظ†

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¥ظ†ط´ط§ط، ظ…ط¹ظ„ظ… ط¬ط¯ظٹط¯ + ط­ط³ط§ط¨ ظ…ط³طھط®ط¯ظ… طھظ„ظ‚ط§ط¦ظٹط§ظ‹
- âœ… طھط¹ظٹظٹظ† ط§ظ„طھط®طµطµ (specialization)
- âœ… ظ…ط¹ظ„ظˆظ…ط§طھ ط´ط®طµظٹط© ظƒط§ظ…ظ„ط© (9 ط£ظ‚ط³ط§ظ…):
  1. ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ظ…ط³طھط®ط¯ظ…
  2. ط§ظ„ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط´ط®طµظٹط©
  3. ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط§طھطµط§ظ„
  4. ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„طھظˆط¸ظٹظپ
  5. ط§ظ„ظ…ط¤ظ‡ظ„ط§طھ ط§ظ„ط£ظƒط§ط¯ظٹظ…ظٹط©
  6. ط§ظ„ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ظ…ط§ظ„ظٹط©
  7. ط¬ط¯ظˆظ„ ط§ظ„ط¹ظ…ظ„
  8. ط§ظ„ظ…ط³طھظ†ط¯ط§طھ
  9. ظ…ط¹ظ„ظˆظ…ط§طھ ط¥ط¶ط§ظپظٹط©

**ط¥ظ†ط´ط§ط، ط­ط³ط§ط¨ طھظ„ظ‚ط§ط¦ظٹ:**
- ط¹ظ†ط¯ ط¥ط¶ط§ظپط© ظ…ط´ط±ظپ ط¬ط¯ظٹط¯طŒ ظٹطھظ… ط¥ظ†ط´ط§ط،:
  - ط­ط³ط§ط¨ User طھظ„ظ‚ط§ط¦ظٹط§ظ‹
  - طھط¹ظٹظٹظ† ط¯ظˆط± `instructor`
  - ط±ط¨ط· ط¨ظ€ tenant_id ط§ظ„ط­ط§ظ„ظٹ
  - ط¥ط±ط³ط§ظ„ ط¨ظٹط§ظ†ط§طھ ط§ظ„ط¯ط®ظˆظ„ (ط§ط®طھظٹط§ط±ظٹ)

#### ًں’³ ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„ظ…ط§ظ„ظٹط© > ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… طھط³ط¬ظٹظ„ ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ظ…ط¹ طھظپط§طµظٹظ„ ظƒط§ظ…ظ„ط©
- âœ… ط¹ط±ط¶ ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط·ط§ظ„ط¨ ظˆط§ظ„ظ…ط¬ظ…ظˆط¹ط© ظˆط§ظ„ظƒظˆط±ط³ طھظ„ظ‚ط§ط¦ظٹط§ظ‹
- âœ… ط­ط³ط§ط¨ ط§ظ„ظ…طھط¨ظ‚ظٹ طھظ„ظ‚ط§ط¦ظٹط§ظ‹
- âœ… ط·ط±ظ‚ ط§ظ„ط¯ظپط¹ ط§ظ„ظ…طھط¹ط¯ط¯ط© (ظ†ظ‚ط¯ظٹطŒ ط¨ظ†ظƒطŒ ظپظٹط²ط§طŒ طھط­ظˆظٹظ„)
- âœ… ط·ط¨ط§ط¹ط© ط§ظ„ط¥ظٹطµط§ظ„ط§طھ
- âœ… طھظ‚ط§ط±ظٹط± ظ…ط§ظ„ظٹط© ط´ط§ظ…ظ„ط©

**ظ†ظ…ظˆط°ط¬ ط§ظ„ط¯ظپط¹ ط§ظ„ظ…ط­ط³ظ‘ظ†:**
```
ط§ظ„ظ‚ط³ظ… 1: ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط·ط§ظ„ط¨ ظˆط§ظ„ظ…ط¬ظ…ظˆط¹ط© (ظ„ظ„ط¹ط±ط¶ ظپظ‚ط·)
- ط§ط³ظ… ط§ظ„ط·ط§ظ„ط¨
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط©
- ط§ظ„ظƒظˆط±ط³
- ط¥ط¬ظ…ط§ظ„ظٹ ط§ظ„ط±ط³ظˆظ…
- ط§ظ„ظ…ط¯ظپظˆط¹ ط³ط§ط¨ظ‚ط§ظ‹
- ط§ظ„ظ…طھط¨ظ‚ظٹ (ط­ط³ط§ط¨ طھظ„ظ‚ط§ط¦ظٹ)

ط§ظ„ظ‚ط³ظ… 2: طھظپط§طµظٹظ„ ط§ظ„ط¯ظپط¹
- ط§ظ„ظ…ط¨ظ„ط؛ ط§ظ„ظ…ط¯ظپظˆط¹
- ط·ط±ظٹظ‚ط© ط§ظ„ط¯ظپط¹
- طھط§ط±ظٹط® ط§ظ„ط¯ظپط¹
- ظ…ظ„ط§ط­ط¸ط§طھ
```

#### âڑ™ï¸ڈ ط¥ط¹ط¯ط§ط¯ط§طھ SMS
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„ط¥ط¹ط¯ط§ط¯ط§طھ > ط¥ط¹ط¯ط§ط¯ط§طھ SMS

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… Resource ظƒط§ظ…ظ„ ظ…ط¹ Shield permissions
- âœ… ط¥ط¯ط§ط±ط© ظ…ظˆظپط±ظٹ ط®ط¯ظ…ط© SMS
- âœ… Badge ط¹ط¯ط¯ ط§ظ„ظ…ظˆظپط±ظٹظ† (ط¨ط­ط³ط¨ tenant)
- âœ… ط­ظ…ط§ظٹط© ظ…ظ† super_admin (View ظپظ‚ط·)

**ط§ظ„ط­ظ‚ظˆظ„:**
- ط§ط³ظ… ط§ظ„ظ…ظˆظپط±
- API Key
- API Secret
- Sender ID
- Base URL
- ط§ظ„ط­ط§ظ„ط© (ظ†ط´ط·/ط؛ظٹط± ظ†ط´ط·)

#### ًں“ٹ ط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ظ…طھظ‚ط¯ظ…ط©
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظ‚ط§ط±ظٹط± > ط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ظ…طھظ‚ط¯ظ…ط©

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… طھظ‚ط§ط±ظٹط± ظ…ط§ظ„ظٹط© ظ…ظپطµظ„ط©
- âœ… طھظ‚ط§ط±ظٹط± ط£ط¯ط§ط، ط§ظ„ط·ظ„ط§ط¨
- âœ… طھظ‚ط§ط±ظٹط± ط§ظ„ط­ط¶ظˆط±
- âœ… طھظ‚ط§ط±ظٹط± ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†
- âœ… ط±ط³ظˆظ… ط¨ظٹط§ظ†ظٹط© طھظپط§ط¹ظ„ظٹط© (Chart.js)
- âœ… طھطµط¯ظٹط± PDF/Excel

#### ًں“ˆ ط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ظ…ط§ظ„ظٹط©
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظ‚ط§ط±ظٹط± > ط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ظ…ط§ظ„ظٹط© (ظ…ظڈط¹ط§ط¯ طھطµظ…ظٹظ…ظ‡ط§)

**ط§ظ„طھطµظ…ظٹظ… ط§ظ„ط¬ط¯ظٹط¯:**
- ًںژ¨ ظˆط§ط¬ظ‡ط© Bootstrap 5 ط¬ط¯ظٹط¯ط© طھظ…ط§ظ…ط§ظ‹
- ًں“ٹ 4 ط¨ط·ط§ظ‚ط§طھ ط¥ط­طµط§ط¦ظٹط§طھ ط±ط¦ظٹط³ظٹط©:
  - ط¥ط¬ظ…ط§ظ„ظٹ ط§ظ„ط¥ظٹط±ط§ط¯ط§طھ
  - ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ط§ظ„ظ…ط¹ظ„ظ‚ط©
  - ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ط§ظ„ظٹظˆظ…
  - ط¹ط¯ط¯ ط§ظ„ظ…ط¹ط§ظ…ظ„ط§طھ
- ًں“ˆ ط±ط³ظ… ط¨ظٹط§ظ†ظٹ ظ„ظ„ط¥ظٹط±ط§ط¯ط§طھ ط§ظ„ط´ظ‡ط±ظٹط© (6 ط£ط´ظ‡ط±)
- ًں“‹ ط¬ط¯ظˆظ„ طھظپطµظٹظ„ظٹ ظ„ظ„ظ…ط¯ظپظˆط¹ط§طھ
- ًں”چ ظپظ„طھط±ط© ظ…طھظ‚ط¯ظ…ط© (ط­ط³ط¨ ط§ظ„طھط§ط±ظٹط®طŒ ط§ظ„ط·ط±ظٹظ‚ط©طŒ ط§ظ„ظ…ط¬ظ…ظˆط¹ط©)

---

## ًں‘¨â€چًںڈ« ظ†ط¸ط§ظ… ط§ظ„ظ…ط¹ظ„ظ…ظٹظ† (Instructor Panel)

### ط§ظ„ظˆطµظˆظ„
- **ط§ظ„ط±ط§ط¨ط·:** `https://yourschool.com/instructor`
- **ط§ظ„ط¯ظˆط± ط§ظ„ظ…ط·ظ„ظˆط¨:** `instructor`

### ط§ظ„ظ‚ظˆط§ط¦ظ… ط§ظ„ط±ط¦ظٹط³ظٹط©

#### ًں“ٹ ظ„ظˆط­ط© ط§ظ„ظ…ط¹ظ„ظˆظ…ط§طھ
- ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ط®ط§طµط© ط¨ظٹ
- ط§ظ„ط¬ظ„ط³ط§طھ ط§ظ„ظ‚ط§ط¯ظ…ط©
- ط§ظ„ظˆط§ط¬ط¨ط§طھ ط§ظ„ظ…ط¹ظ„ظ‚ط©
- ظ†طھط§ط¦ط¬ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ ط§ظ„ط£ط®ظٹط±ط©

#### ًں‘¥ ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ
**ط§ظ„ظ…ظˆظ‚ط¹:** ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ > ظ…ط¬ظ…ظˆط¹ط§طھظٹ

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ظ…ظڈط¹ظٹظ‘ظ† ط¹ظ„ظٹظ‡ط§
- âœ… ط¥ط¯ط§ط±ط© ط§ظ„ط·ظ„ط§ط¨ ط§ظ„ظ…ط³ط¬ظ„ظٹظ†
- âœ… ط§ظ„ط¬ط¯ظˆظ„ ط§ظ„ط¯ط±ط§ط³ظٹ
- âœ… ظ‚ط§ط¦ظ…ط© ط§ظ„ط­ط¶ظˆط±

#### ًں“‌ ط§ظ„ط­ط¶ظˆط± ظˆط§ظ„ط؛ظٹط§ط¨
**ط§ظ„ظ…ظˆظ‚ط¹:** ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ > ط§ظ„ط­ط¶ظˆط±

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… طھط³ط¬ظٹظ„ ط§ظ„ط­ط¶ظˆط± ط§ظ„ظٹظˆظ…ظٹ
- âœ… ط¬ظ„ط³ط§طھ ط§ظ„ط­ط¶ظˆط± (Attendance Sessions)
- âœ… طھظ‚ط§ط±ظٹط± ط§ظ„ط­ط¶ظˆط±
- âœ… طھطµط¯ظٹط± Excel

#### ًں“„ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظ‚ظٹظٹظ… > ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¥ظ†ط´ط§ط، ط§ظ…طھط­ط§ظ†ط§طھ ظ„ظ„ظ…ط¬ظ…ظˆط¹ط§طھ
- âœ… طھط­ط¯ظٹط¯ ط§ظ„ط¯ط±ط¬ط§طھ ظˆط§ظ„ظˆظ‚طھ
- âœ… ظ…طھط§ط¨ط¹ط© ط§ظ„ظ…ط­ط§ظˆظ„ط§طھ (Exam Attempts)
- âœ… طھطµط­ظٹط­ ظˆط±طµط¯ ط§ظ„ط¯ط±ط¬ط§طھ

#### ًں“‹ ط§ظ„ظˆط§ط¬ط¨ط§طھ
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظ‚ظٹظٹظ… > ط§ظ„ظˆط§ط¬ط¨ط§طھ

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¥ظ†ط´ط§ط، ظˆط§ط¬ط¨ط§طھ ظ…ط¹ ظ…ط±ظپظ‚ط§طھ
- âœ… طھط­ط¯ظٹط¯ طھط§ط±ظٹط® ط§ظ„طھط³ظ„ظٹظ…
- âœ… ط§ط³طھظ‚ط¨ط§ظ„ ط§ظ„ط­ظ„ظˆظ„ (Submissions)
- âœ… ط§ظ„طھطµط­ظٹط­ ظˆط§ظ„طھظ‚ظٹظٹظ…

#### ًں“ڑ ط§ظ„ظ…طµط§ط¯ط± ط§ظ„طھط¹ظ„ظٹظ…ظٹط©
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„ظ…ط­طھظˆظ‰ ط§ظ„طھط¹ظ„ظٹظ…ظٹ > ط§ظ„ظ…طµط§ط¯ط± ط§ظ„طھط¹ظ„ظٹظ…ظٹط©

**ط§ظ„ظ…ظٹط²ط§طھ ط§ظ„ط¬ط¯ظٹط¯ط© (ظ…ط­ط¯ظ‘ط«ط©):**
- âœ… ط±ظپط¹ ظ…ظ„ظپط§طھ ظ…طھط¹ط¯ط¯ط© (PDF, Video, PPT, Word, Excel, طµظˆط±طŒ طµظˆطھ)
- âœ… ط±ظˆط§ط¨ط· ط®ط§ط±ط¬ظٹط© (ظٹظˆطھظٹظˆط¨طŒ Google Drive)
- âœ… ط§ظ„طھط­ظƒظ… ظپظٹ ط§ظ„ط¸ظ‡ظˆط±:
  - ط¬ظ…ظٹط¹ ط§ظ„ط·ظ„ط§ط¨
  - ط·ظ„ط§ط¨ ظƒظˆط±ط³ ظ…ط¹ظٹظ†
  - ط·ظ„ط§ط¨ ظ…ط¬ظ…ظˆط¹ط© ظ…ط¹ظٹظ†ط©
- âœ… ط¥ط¹ط¯ط§ط¯ط§طھ ط§ظ„طھط­ظ…ظٹظ„ (ط§ظ„ط³ظ…ط§ط­/ط§ظ„ظ…ظ†ط¹)
- âœ… ط¥ط­طµط§ط¦ظٹط§طھ (ط¹ط¯ط¯ ط§ظ„طھط­ظ…ظٹظ„ط§طھطŒ ط§ظ„ظ…ط´ط§ظ‡ط¯ط§طھ)
- âœ… Form ظ…ط­ط³ظ‘ظ† ظ…ط¹ ظپط­طµ null ظ„ظ„ظ€ instructor
- âœ… Table ظ…طھط±ط¬ظ… ط¨ط§ظ„ظƒط§ظ…ظ„

**ظ†ظ…ظˆط°ط¬ ط§ظ„ظ…طµط¯ط± ط§ظ„طھط¹ظ„ظٹظ…ظٹ:**
```
ط§ظ„ظ‚ط³ظ… 1: ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ظ…ط§ط¯ط©
- ط§ظ„ط¹ظ†ظˆط§ظ†
- ط§ظ„ظˆطµظپ
- ط§ظ„ظ†ظˆط¹ (PDF/Video/PPT/Doc/Image/Audio/Link/Other)
- ط§ظ„ط¸ظ‡ظˆط± (ط§ظ„ط¬ظ…ظٹط¹/ط§ظ„ظƒظˆط±ط³/ط§ظ„ظ…ط¬ظ…ظˆط¹ط©)

ط§ظ„ظ‚ط³ظ… 2: ط±ط¨ط· ط§ظ„ظ…ط§ط¯ط© (ط¥ط°ط§ ظƒط§ظ† ظ…ط­ط¯ط¯ ظ„ظ„ظƒظˆط±ط³ ط£ظˆ ط§ظ„ظ…ط¬ظ…ظˆط¹ط©)
- ط§ظ„ظƒظˆط±ط³
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط© (ط¥ط°ط§ ظƒط§ظ† ط§ظ„ط¸ظ‡ظˆط± ظ„ظ„ظ…ط¬ظ…ظˆط¹ط©)

ط§ظ„ظ‚ط³ظ… 3: ط±ظپط¹ ط§ظ„ظ…ظ„ظپ ط£ظˆ ط§ظ„ط±ط§ط¨ط·
- ط±ظپط¹ ظ…ظ„ظپ (ط­طھظ‰ 50MB)
- ط£ظˆ ط±ط§ط¨ط· ط®ط§ط±ط¬ظٹ

ط§ظ„ظ‚ط³ظ… 4: ط§ظ„ط¥ط¹ط¯ط§ط¯ط§طھ
- ط§ظ„ط³ظ…ط§ط­ ط¨ط§ظ„طھط­ظ…ظٹظ„
- ظ†ط´ط·/ط؛ظٹط± ظ†ط´ط·
```

#### ًں’¬ ط±ط³ط§ط¦ظ„ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظˆط§طµظ„ > ط±ط³ط§ط¦ظ„ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ

**ط§ظ„ظ…ظٹط²ط§طھ ط§ظ„ظ…ط­ط¯ظ‘ط«ط©:**
- âœ… ط¥ط±ط³ط§ظ„ ط±ط³ط§ط¦ظ„ ط¬ظ…ط§ط¹ظٹط© ظ„ظ…ط¬ظ…ظˆط¹ط© ظ…ط­ط¯ط¯ط©
- âœ… ط£ظ†ظˆط§ط¹ ط§ظ„ط±ط³ط§ط¦ظ„ (ط¥ط¹ظ„ط§ظ†طŒ طھط°ظƒظٹط±طŒ طھط­ط°ظٹط±طŒ ظ…ط¹ظ„ظˆظ…ط©)
- âœ… ظ…ط³طھظˆظٹط§طھ ط§ظ„ط£ظˆظ„ظˆظٹط© (ظ…ظ†ط®ظپط¶ط©طŒ ط¹ط§ط¯ظٹط©طŒ ط¹ط§ظ„ظٹط©طŒ ط¹ط§ط¬ظ„ط©)
- âœ… ط§ظ„ط­ط§ظ„ط§طھ (ظ…ط³ظˆط¯ط©طŒ ظ…ط¬ط¯ظˆظ„ط©طŒ ظ…ط±ط³ظ„ط©طŒ ظ…ظ„ط؛ط§ط©)
- âœ… ط¬ط¯ظˆظ„ط© ط§ظ„ط¥ط±ط³ط§ظ„
- âœ… ط¥ط±ط³ط§ظ„ ط¥ط´ط¹ط§ط±ط§طھ
- âœ… ظ…ط±ظپظ‚ط§طھ (ط­طھظ‰ 5 ظ…ظ„ظپط§طھ)
- âœ… ظ…طھط§ط¨ط¹ط© ط§ظ„ظ‚ط±ط§ط،ط© (ط¹ط¯ط¯ ظ…ظ† ظ‚ط±ط£ + ظ†ط³ط¨ط© ط§ظ„ظ‚ط±ط§ط،ط©)
- âœ… Form ظ…ط­ط³ظ‘ظ† ظ…ط¹ ظپط­طµ null ظ„ظ„ظ€ instructor
- âœ… Table ظ…طھط±ط¬ظ… ط¨ط§ظ„ظƒط§ظ…ظ„ ط¨ظ…ظپط§طھظٹط­ ط§ظ„طھط±ط¬ظ…ط©

**ظ†ظ…ظˆط°ط¬ ط§ظ„ط±ط³ط§ظ„ط©:**
```
ط§ظ„ظ‚ط³ظ… 1: ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ط±ط³ط§ظ„ط©
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط©
- ط§ظ„ظ†ظˆط¹ + ط§ظ„ط£ظˆظ„ظˆظٹط©
- ط§ظ„ظ…ظˆط¶ظˆط¹ (ط§ط®طھظٹط§ط±ظٹ)
- ط§ظ„ط±ط³ط§ظ„ط© (RichEditor)
- ط§ظ„ظ…ط±ظپظ‚ط§طھ (ط­طھظ‰ 5 ظ…ظ„ظپط§طھطŒ 10MB ظ„ظƒظ„ ظ…ظ„ظپ)

ط§ظ„ظ‚ط³ظ… 2: ط¥ط¹ط¯ط§ط¯ط§طھ ط§ظ„ط¥ط±ط³ط§ظ„
- ط¥ط±ط³ط§ظ„ ط¥ط´ط¹ط§ط±
- ط¥ط±ط³ط§ظ„ ط¨ط±ظٹط¯ ط¥ظ„ظƒطھط±ظˆظ†ظٹ
- ظ…ظˆط¹ط¯ ط§ظ„ط¥ط±ط³ط§ظ„ (ط£ظˆ ظپظˆط±ظٹ)
- ط¹ط¯ط¯ ط§ظ„ظ…ط³طھظ„ظ…ظٹظ† (طھظ„ظ‚ط§ط¦ظٹ)
```

#### ًں“ˆ طھظ‚ط§ط±ظٹط± ط§ظ„ظ…ط¹ظ„ظ…
**ط§ظ„ظ…ظˆظ‚ط¹:** ط§ظ„طھظ‚ط§ط±ظٹط± > طھظ‚ط§ط±ظٹط±ظٹ

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط£ط¯ط§ط، ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ
- âœ… ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ط­ط¶ظˆط±
- âœ… ظ†طھط§ط¦ط¬ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ
- âœ… ظ…ط¹ط¯ظ„ط§طھ ط§ظ„طھط³ظ„ظٹظ…

**ط§ظ„ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ظ…طھط§ط­ط©:**
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ظ†ط´ط·ط© / ط§ظ„ط¥ط¬ظ…ط§ظ„ظٹ
- ط¥ط¬ظ…ط§ظ„ظٹ ط§ظ„ط·ظ„ط§ط¨
- ط¹ط¯ط¯ ط§ظ„ط¬ظ„ط³ط§طھ (ط¢ط®ط± 30 ظٹظˆظ…)
- ط¹ط¯ط¯ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ (ط¢ط®ط± 30 ظٹظˆظ…)
- ط¹ط¯ط¯ ط§ظ„ظˆط§ط¬ط¨ط§طھ (ط¢ط®ط± 30 ظٹظˆظ…)
- ظ†ط³ط¨ط© ط§ظ„ط­ط¶ظˆط±

---

## ًںژ“ ظ†ط¸ط§ظ… ط§ظ„ط·ظ„ط§ط¨ (Student Panel)

### ط§ظ„ظˆطµظˆظ„
- **ط§ظ„ط±ط§ط¨ط·:** `https://yourschool.com/student`
- **ط§ظ„ط¯ظˆط± ط§ظ„ظ…ط·ظ„ظˆط¨:** `student`

### ط§ظ„ظ‚ظˆط§ط¦ظ… ط§ظ„ط±ط¦ظٹط³ظٹط©

#### ًں“ٹ ظ„ظˆط­ط© ط§ظ„ظ…ط¹ظ„ظˆظ…ط§طھ
- ظ…ط¹ظ„ظˆظ…ط§طھظٹ ط§ظ„ط´ط®طµظٹط©
- ظ…ط¬ظ…ظˆط¹ط§طھظٹ
- ط¬ط¯ظˆظ„ظٹ ط§ظ„ط¯ط±ط§ط³ظٹ
- ط¯ط±ط¬ط§طھظٹ

#### ًں“ڑ ظ…ط¬ظ…ظˆط¹ط§طھظٹ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ ط§ظ„ظ…ط³ط¬ظ„ ط¨ظ‡ط§
- âœ… طھظپط§طµظٹظ„ ط§ظ„ظƒظˆط±ط³
- âœ… ط§ظ„ظ…ط¹ظ„ظ… ط§ظ„ظ…ط³ط¤ظˆظ„
- âœ… ط§ظ„ط¬ط¯ظˆظ„ ط§ظ„ط²ظ…ظ†ظٹ

#### ًں“‌ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ ط§ظ„ظ‚ط§ط¯ظ…ط©
- âœ… ط¯ط®ظˆظ„ ط§ظ„ط§ظ…طھط­ط§ظ†
- âœ… ط¹ط±ط¶ ط§ظ„ظ†طھط§ط¦ط¬ ط§ظ„ط³ط§ط¨ظ‚ط©
- âœ… ط§ظ„ظ…ط­ط§ظˆظ„ط§طھ ط§ظ„ظ…طھط§ط­ط©

#### ًں“‹ ط§ظ„ظˆط§ط¬ط¨ط§طھ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط§ظ„ظˆط§ط¬ط¨ط§طھ ط§ظ„ظ…ط·ظ„ظˆط¨ط©
- âœ… ط±ظپط¹ ط§ظ„ط­ظ„ظˆظ„
- âœ… ظ…طھط§ط¨ط¹ط© ط§ظ„ط¯ط±ط¬ط§طھ
- âœ… ط§ظ„طھط¹ظ„ظٹظ‚ط§طھ ظ…ظ† ط§ظ„ظ…ط¹ظ„ظ…

#### ًں“ڑ ط§ظ„ظ…طµط§ط¯ط± ط§ظ„طھط¹ظ„ظٹظ…ظٹط©
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… طھطµظپط­ ط§ظ„ظ…ظˆط§ط¯ ط§ظ„طھط¹ظ„ظٹظ…ظٹط©
- âœ… طھط­ظ…ظٹظ„ ط§ظ„ظ…ظ„ظپط§طھ
- âœ… ظ…ط´ط§ظ‡ط¯ط© ط§ظ„ظپظٹط¯ظٹظˆظ‡ط§طھ
- âœ… ط§ظ„ظˆطµظˆظ„ ظ„ظ„ط±ظˆط§ط¨ط· ط§ظ„ط®ط§ط±ط¬ظٹط©

#### ًں“ٹ طھظ‚ط§ط±ظٹط±ظٹ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ظ…ظ„ط®طµ ط§ظ„ط£ط¯ط§ط،
- âœ… ط³ط¬ظ„ ط§ظ„ط­ط¶ظˆط±
- âœ… ط§ظ„ط¯ط±ط¬ط§طھ ظˆط§ظ„ظ…ط¹ط¯ظ„ط§طھ
- âœ… ط§ظ„طھظ‚ط¯ظ… ط§ظ„ط¯ط±ط§ط³ظٹ

---

## ًں‘¨â€چًں‘©â€چًں‘§ ظ†ط¸ط§ظ… ط£ظˆظ„ظٹط§ط، ط§ظ„ط£ظ…ظˆط± (Parent Panel)

### ط§ظ„ظˆطµظˆظ„
- **ط§ظ„ط±ط§ط¨ط·:** `https://yourschool.com/parent`
- **ط§ظ„ط¯ظˆط± ط§ظ„ظ…ط·ظ„ظˆط¨:** `parent`

### ط§ظ„ظ‚ظˆط§ط¦ظ… ط§ظ„ط±ط¦ظٹط³ظٹط©

#### ًں‘¶ ط£ط¨ظ†ط§ط¦ظٹ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط¬ظ…ظٹط¹ ط§ظ„ط£ط¨ظ†ط§ط، ط§ظ„ظ…ط±طھط¨ط·ظٹظ†
- âœ… ط§ظ„طھط¨ط¯ظٹظ„ ط¨ظٹظ† ط§ظ„ط£ط¨ظ†ط§ط،
- âœ… ظ…ط¹ظ„ظˆظ…ط§طھ ظƒظ„ ط§ط¨ظ†

#### ًں“ٹ ط£ط¯ط§ط، ط§ظ„ط·ط§ظ„ط¨
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط§ظ„ط¯ط±ط¬ط§طھ ظˆط§ظ„ظ…ط¹ط¯ظ„ط§طھ
- âœ… ط³ط¬ظ„ ط§ظ„ط­ط¶ظˆط±
- âœ… ط§ظ„طھظ‚ط§ط±ظٹط± ط§ظ„ط¯ظˆط±ظٹط©
- âœ… ظ…ظ„ط§ط­ط¸ط§طھ ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†

#### ًں’³ ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¹ط±ط¶ ط§ظ„ط±ط³ظˆظ… ط§ظ„ظ…ط·ظ„ظˆط¨ط©
- âœ… ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ ط§ظ„ط³ط§ط¨ظ‚ط©
- âœ… ط§ظ„ظ…طھط¨ظ‚ظٹ
- âœ… طھط§ط±ظٹط® ط§ظ„ط¯ظپط¹ط§طھ

#### ًں“… ط§ظ„ط¬ط¯ظˆظ„
**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… ط¬ط¯ظˆظ„ ط§ظ„ط­طµطµ
- âœ… ظ…ظˆط§ط¹ظٹط¯ ط§ظ„ط§ظ…طھط­ط§ظ†ط§طھ
- âœ… ط§ظ„ظ…ظ†ط§ط³ط¨ط§طھ ط§ظ„ظ…ط¯ط±ط³ظٹط©

---

## ًںڑ€ ط§ظ„ظ…ظٹط²ط§طھ ط§ظ„ظ…طھظ‚ط¯ظ…ط©

### ًں”گ Multi-Tenancy (طھط¹ط¯ط¯ ط§ظ„ظ…ط¤ط³ط³ط§طھ)

**ظ…ط§ ظ‡ظˆ Multi-Tenancyطں**
- ظ†ط¸ط§ظ… ظٹط³ظ…ط­ ط¨طھط´ط؛ظٹظ„ ط¹ط¯ط© ظ…ط¯ط§ط±ط³/ط£ظƒط§ط¯ظٹظ…ظٹط§طھ ط¹ظ„ظ‰ ظ†ظپط³ ط§ظ„طھط·ط¨ظٹظ‚
- ظƒظ„ ظ…ط¤ط³ط³ط© (tenant) ظ„ظ‡ط§ ط¨ظٹط§ظ†ط§طھ ظ…ظ†ظپطµظ„ط© طھظ…ط§ظ…ط§ظ‹
- ط¹ط²ظ„ ظƒط§ظ…ظ„ ظ„ظ„ط¨ظٹط§ظ†ط§طھ - ظ„ط§ ظٹظ…ظƒظ† ظ„ظ…ط¯ط±ط³ط© ط±ط¤ظٹط© ط¨ظٹط§ظ†ط§طھ ظ…ط¯ط±ط³ط© ط£ط®ط±ظ‰

**ظƒظٹظپ ظٹط¹ظ…ظ„طں**
1. ظƒظ„ ظ…ط³طھط®ط¯ظ… ظٹط±طھط¨ط· ط¨ظ€ `tenant_id`
2. `Global Scope` ظٹظپظ„طھط± ط¬ظ…ظٹط¹ ط§ظ„ط§ط³طھط¹ظ„ط§ظ…ط§طھ طھظ„ظ‚ط§ط¦ظٹط§ظ‹
3. `Middleware` ظٹط¹ظٹظ‘ظ† ط§ظ„ط³ظٹط§ظ‚ ط¹ظ†ط¯ طھط³ط¬ظٹظ„ ط§ظ„ط¯ط®ظˆظ„
4. ط¬ظ…ظٹط¹ ط§ظ„ط¨ظٹط§ظ†ط§طھ ط§ظ„ظ…ظڈظ†ط´ط£ط© طھط£ط®ط° `tenant_id` طھظ„ظ‚ط§ط¦ظٹط§ظ‹

**ظ…ط«ط§ظ„:**
```php
// ط¹ظ†ط¯ ط§ظ„ط§ط³طھط¹ظ„ط§ظ…
Student::all();

// ظٹطھط­ظˆظ„ طھظ„ظ‚ط§ط¦ظٹط§ظ‹ ط¥ظ„ظ‰
Student::where('tenant_id', auth()->user()->tenant_id)->get();
```

### ًں“ٹ Activity Logging

**ط§ظ„ظ…ظٹط²ط§طھ:**
- âœ… طھط³ط¬ظٹظ„ طھظ„ظ‚ط§ط¦ظٹ ظ„ط¬ظ…ظٹط¹ ط§ظ„ط¹ظ…ظ„ظٹط§طھ (ط¥ظ†ط´ط§ط،طŒ طھط¹ط¯ظٹظ„طŒ ط­ط°ظپ)
- âœ… ط¹ط±ط¶ ط§ظ„ظ‚ظٹظ… ط§ظ„ظ‚ط¯ظٹظ…ط© ظˆط§ظ„ط¬ط¯ظٹط¯ط©
- âœ… ظ…ط¹ظ„ظˆظ…ط§طھ ط§ظ„ظ…ط³طھط®ط¯ظ… ظˆط§ظ„ظˆظ‚طھ
- âœ… طµظپط­ط§طھ ط¹ط±ط¶ ظ…ط®طµطµط©

**ط§ظ„ظ…ط¯ط¹ظˆظ…:**
- ط§ظ„ط·ظ„ط§ط¨
- ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†
- ط§ظ„ظ…ط¬ظ…ظˆط¹ط§طھ
- ط§ظ„ظ…ط¯ظپظˆط¹ط§طھ
- ط§ظ„ط¥ط¹ط¯ط§ط¯ط§طھ

### ًں”” ظ†ط¸ط§ظ… ط§ظ„ط¥ط´ط¹ط§ط±ط§طھ

**ط£ظ†ظˆط§ط¹ ط§ظ„ط¥ط´ط¹ط§ط±ط§طھ:**
- âœ… ط¥ط´ط¹ط§ط±ط§طھ ط¯ط§ط®ظ„ظٹط© (ظپظٹ ط§ظ„طھط·ط¨ظٹظ‚)
- âœ… SMS (ط¹ط¨ط± ظ…ظˆظپط±ظٹ ط§ظ„ط®ط¯ظ…ط©)
- âœ… ط§ظ„ط¨ط±ظٹط¯ ط§ظ„ط¥ظ„ظƒطھط±ظˆظ†ظٹ

**ط§ظ„ط£ط­ط¯ط§ط« ط§ظ„ظ…ظڈط´ط؛ظ‘ظ„ط©:**
- طھط³ط¬ظٹظ„ ط·ط§ظ„ط¨ ط¬ط¯ظٹط¯
- ط§ط³طھط­ظ‚ط§ظ‚ ط¯ظپط¹ط©
- ظ…ظˆط¹ط¯ ط§ظ…طھط­ط§ظ† ظ‚ط±ظٹط¨
- ظ†ط´ط± ط¯ط±ط¬ط§طھ
- ط؛ظٹط§ط¨ ظ…طھظƒط±ط±

### ًں›،ï¸ڈ ظ†ط¸ط§ظ… ط§ظ„طµظ„ط§ط­ظٹط§طھ

**ط§ظ„ط£ط¯ظˆط§ط±:**
- `super_admin` - ظ…ط¯ظٹط± ط§ظ„ظ†ط¸ط§ظ… (ظƒظ„ ط§ظ„طµظ„ط§ط­ظٹط§طھ)
- `owner` - ظ…ط§ظ„ظƒ ط§ظ„ظ…ط¤ط³ط³ط©
- `admin` - ظ…ط¯ظٹط± ط§ظ„ظ…ط¯ط±ط³ط©
- `instructor` - ظ…ط¹ظ„ظ…
- `student` - ط·ط§ظ„ط¨
- `parent` - ظˆظ„ظٹ ط£ظ…ط±

**ط§ظ„طµظ„ط§ط­ظٹط§طھ:**
- ظƒظ„ Resource ظ„ظ‡ 7 طµظ„ط§ط­ظٹط§طھ (view, viewAny, create, update, delete, restore, forceDelete)
- Shield ظ„ط¥ط¯ط§ط±ط© ط§ظ„طµظ„ط§ط­ظٹط§طھ ط¨ط³ظ‡ظˆظ„ط©
- ط­ظ…ط§ظٹط© super_admin ظ…ظ† ط¹ظ…ظ„ظٹط§طھ CRUD (View ظپظ‚ط·)

### ًں“± Responsive Design

- âœ… ظٹط¹ظ…ظ„ ط¹ظ„ظ‰ ط¬ظ…ظٹط¹ ط§ظ„ط£ط¬ظ‡ط²ط©
- âœ… طھطµظ…ظٹظ… ظ…طھط¬ط§ظˆط¨ (Mobile, Tablet, Desktop)
- âœ… Dark Mode ط¯ط¹ظ…
- âœ… RTL ط¯ط¹ظ… ظƒط§ظ…ظ„ ظ„ظ„ط¹ط±ط¨ظٹط©

---

## ًں”§ ط§ط³طھظƒط´ط§ظپ ط§ظ„ط£ط®ط·ط§ط،

### ظ…ط´ظƒظ„ط©: ظ„ط§ ط£ط³طھط·ظٹط¹ طھط³ط¬ظٹظ„ ط§ظ„ط¯ط®ظˆظ„

**ط§ظ„ط­ظ„ظˆظ„:**
1. طھط£ظƒط¯ ظ…ظ† ط§ظ„ط¨ط±ظٹط¯ ط§ظ„ط¥ظ„ظƒطھط±ظˆظ†ظٹ ظˆظƒظ„ظ…ط© ط§ظ„ظ…ط±ظˆط±
2. طھط­ظ‚ظ‚ ظ…ظ† ط­ط§ظ„ط© ط§ظ„ط­ط³ط§ط¨ (active)
3. طھط£ظƒط¯ ظ…ظ† طھط¹ظٹظٹظ† `tenant_id`
4. ط¬ط±ط¨ ط§ط³طھط¹ط§ط¯ط© ظƒظ„ظ…ط© ط§ظ„ظ…ط±ظˆط±

### ظ…ط´ظƒظ„ط©: ظ„ط§ ط£ط±ظ‰ ط¨ظٹط§ظ†ط§طھظٹ

**ط§ظ„ط³ط¨ط¨ ط§ظ„ظ…ط­طھظ…ظ„:** ظ…ط´ظƒظ„ط© ظپظٹ `tenant_id`

**ط§ظ„ط­ظ„ظˆظ„:**
1. طھط­ظ‚ظ‚ ظ…ظ† `tenant_id` ظ„ظ„ظ…ط³طھط®ط¯ظ…
2. طھط£ظƒط¯ ظ…ظ† `SetTenantMiddleware` ظٹط¹ظ…ظ„
3. ط§ظ…ط³ط­ ط§ظ„ظ€ cache:
```bash
php artisan cache:clear
php artisan config:clear
```

### ظ…ط´ظƒظ„ط©: ط§ظ„طµظ„ط§ط­ظٹط§طھ ظ„ط§ طھط¹ظ…ظ„

**ط§ظ„ط­ظ„ظˆظ„:**
1. طھط­ظ‚ظ‚ ظ…ظ† طھط¹ظٹظٹظ† ط§ظ„ط¯ظˆط± ظ„ظ„ظ…ط³طھط®ط¯ظ…
2. ط§ظ…ط³ط­ cache ط§ظ„طµظ„ط§ط­ظٹط§طھ:
```bash
php artisan permission:cache-reset
```
3. طھط£ظƒط¯ ظ…ظ† Shield setup طµط­ظٹط­

### ظ…ط´ظƒظ„ط©: ط±ط³ط§ظ„ط© ط®ط·ط£ "Instructor not found"

**ط§ظ„ط³ط¨ط¨:** ط§ظ„ظ…ط³طھط®ط¯ظ… ظ„ظٹط³ ظ„ط¯ظٹظ‡ ط³ط¬ظ„ instructor

**ط§ظ„ط­ظ„:**
- طھط£ظƒط¯ ظ…ظ† ط¥ظ†ط´ط§ط، ط³ط¬ظ„ Supervisor/Instructor ظ„ظ„ظ…ط³طھط®ط¯ظ…
- ط£ظˆ ظ‚ظ… ط¨ط­ظ…ط§ظٹط© ط§ظ„طµظپط­ط© ط¨ط¥ط±ط¬ط§ط¹ ظ‚ظٹظ… ط§ظپطھط±ط§ط¶ظٹط©:
```php
if (!$instructor) {
    return [
        'totalGroups' => 0,
        'activeGroups' => 0,
        // ...
    ];
}
```

### ظ…ط´ظƒظ„ط©: ط§ظ„طھط±ط¬ظ…ط§طھ ظ„ط§ طھط¸ظ‡ط±

**ط§ظ„ط­ظ„ظˆظ„:**
1. طھط­ظ‚ظ‚ ظ…ظ† ظ…ظ„ظپط§طھ ط§ظ„ظ„ط؛ط© ظپظٹ `lang/ar/`
2. ط§ظ…ط³ط­ cache ط§ظ„طھط±ط¬ظ…ط§طھ:
```bash
php artisan optimize:clear
```
3. طھط£ظƒط¯ ظ…ظ† ط§ط³طھط®ط¯ط§ظ… `__('filament/...')`

### ظ…ط´ظƒظ„ط©: ط§ظ„ظ…ظ„ظپط§طھ ظ„ط§ طھظڈط±ظپط¹

**ط§ظ„ط­ظ„ظˆظ„:**
1. طھط­ظ‚ظ‚ ظ…ظ† طµظ„ط§ط­ظٹط§طھ ظ…ط¬ظ„ط¯ `storage/`:
```bash
chmod -R 775 storage
```
2. ط£ظ†ط´ط¦ symlink:
```bash
php artisan storage:link
```
3. طھط­ظ‚ظ‚ ظ…ظ† `upload_max_filesize` ظپظٹ php.ini

---

## ًںژ‰ ط§ظ„ط®ظ„ط§طµط©

ظ†ط¸ط§ظ… AI School ظ‡ظˆ ط­ظ„ ط´ط§ظ…ظ„ ظˆظ…طھظƒط§ظ…ظ„ ظ„ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط§ط±ط³ ظˆط§ظ„ط£ظƒط§ط¯ظٹظ…ظٹط§طھ ظ…ط¹:
- âœ… 4 ظ„ظˆط­ط§طھ طھط­ظƒظ… ظ…ظ†ظپطµظ„ط©
- âœ… ط¯ط¹ظ… Multi-Tenancy ظƒط§ظ…ظ„
- âœ… ظ†ط¸ط§ظ… طµظ„ط§ط­ظٹط§طھ ظ…طھظ‚ط¯ظ…
- âœ… ظˆط§ط¬ظ‡ط§طھ ظ…ط³طھط®ط¯ظ… ط­ط¯ظٹط«ط©
- âœ… طھظ‚ط§ط±ظٹط± ظˆط¥ط­طµط§ط¦ظٹط§طھ ط´ط§ظ…ظ„ط©
- âœ… ط¯ط¹ظ… ظƒط§ظ…ظ„ ظ„ظ„ط؛ط© ط§ظ„ط¹ط±ط¨ظٹط©
- âœ… ط¨ظ†ظٹط© ط¨ط±ظ…ط¬ظٹط© ظ…طھظ‚ط¯ظ…ط© (SOLID Principles)
- âœ… ظ†ط¸ط§ظ… ط¹ظ†ظˆط§ظ† ظ…طھط·ظˆط± (27 ظ…ط­ط§ظپط¸ط© + 240+ ظ…ط±ظƒط²)

**ط§ظ„ط¥طµط¯ط§ط± ط§ظ„ط­ط§ظ„ظٹ:** 2.1.0 âœ… ط¬ط§ظ‡ط² ظ„ظ„ط¥ظ†طھط§ط¬

---

## ًںڈ—ï¸ڈ ط§ظ„طھط­ط³ظٹظ†ط§طھ ط§ظ„ط¨ط±ظ…ط¬ظٹط© (SOLID & Clean Code)

### ظ†ط¸ط±ط© ط¹ط§ظ…ط©

طھظ… طھط·ط¨ظٹظ‚ ظ…ط¨ط§ط¯ط¦ ط§ظ„ط¨ط±ظ…ط¬ط© ط§ظ„ظ…طھظ‚ط¯ظ…ط© ظ„طھط­ط³ظٹظ† ط¬ظˆط¯ط© ط§ظ„ظƒظˆط¯ ظˆط³ظ‡ظˆظ„ط© ط§ظ„طµظٹط§ظ†ط© ظˆط§ظ„طھظˆط³ط¹:

### 1. **Enums (ط§ظ„طھط¹ط¯ط§ط¯ط§طھ)**

ط§ط³طھط¨ط¯ط§ظ„ ط§ظ„ظ‚ظٹظ… ط§ظ„ظ†طµظٹط© ط§ظ„ط«ط§ط¨طھط© ط¨ظ€ Enums ظ‚ظˆظٹط© ظˆظ…ظ†ط¸ظ…ط©:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Enums/UserStatus.php` - ط­ط§ظ„ط§طھ ط§ظ„ظ…ط³طھط®ط¯ظ… (active, inactive, banned)
- `app/Enums/StudentStatus.php` - ط­ط§ظ„ط§طھ ط§ظ„ط·ط§ظ„ط¨ (active, inactive, suspended, graduated)
- `app/Enums/PaymentMethod.php` - ط·ط±ظ‚ ط§ظ„ط¯ظپط¹ (cash, card, bank_transfer, wallet)
- `app/Enums/AttendanceStatus.php` - ط­ط§ظ„ط§طھ ط§ظ„ط­ط¶ظˆط± (present, absent, late, excused)
- `app/Enums/Gender.php` - ط§ظ„ط¬ظ†ط³ (male, female)
- `app/Enums/GroupStatus.php` - ط­ط§ظ„ط§طھ ط§ظ„ظ…ط¬ظ…ظˆط¹ط© (active, inactive, completed)

#### ظ…ط«ط§ظ„ ط§ظ„ط§ط³طھط®ط¯ط§ظ…:
```php
use App\Enums\StudentStatus;

// ظپظٹ ط§ظ„ظ…ظˆط¯ظٹظ„
protected $casts = [
    'status' => StudentStatus::class,
];

// ظپظٹ ط§ظ„ظƒظˆط¯
$student->status = StudentStatus::ACTIVE;
if ($student->status === StudentStatus::GRADUATED) {
    // ظ…ظ†ط·ظ‚ ط§ظ„ط·ط§ظ„ط¨ ط§ظ„ظ…طھط®ط±ط¬
}

// ط§ظ„ط­طµظˆظ„ ط¹ظ„ظ‰ ط§ظ„طھط³ظ…ظٹط© ط¨ط§ظ„ط¹ط±ط¨ظٹط©
$student->status->label(); // "ظ†ط´ط·"
```

#### ط§ظ„ظ…ظ…ظٹط²ط§طھ:
- âœ… Type Safety - ظ…ظ†ط¹ ط§ظ„ط£ط®ط·ط§ط، ط§ظ„ط¥ظ…ظ„ط§ط¦ظٹط©
- âœ… Auto-completion - ط¯ط¹ظ… IDE ط§ظ„ظƒط§ظ…ظ„
- âœ… Localization - ط¯ط¹ظ… ط§ظ„طھط±ط¬ظ…ط© (label())
- âœ… Easy Refactoring - ط³ظ‡ظˆظ„ط© ط§ظ„طھط¹ط¯ظٹظ„
- âœ… Validation - ط§ظ„طھط­ظ‚ظ‚ ط§ظ„طھظ„ظ‚ط§ط¦ظٹ

---

### 2. **Constants (ط§ظ„ط«ظˆط§ط¨طھ)**

طھظ†ط¸ظٹظ… ط§ظ„ظ‚ظٹظ… ط§ظ„ط«ط§ط¨طھط© ظپظٹ ظ…ظ„ظپط§طھ ظ…ظ†ظپطµظ„ط©:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Constants/FileConstants.php` - ط¥ط¹ط¯ط§ط¯ط§طھ ط§ظ„ظ…ظ„ظپط§طھ
- `app/Constants/SystemConstants.php` - ط¥ط¹ط¯ط§ط¯ط§طھ ط§ظ„ظ†ط¸ط§ظ…
- `app/Constants/PermissionConstants.php` - ط§ظ„طµظ„ط§ط­ظٹط§طھ

#### ظ…ط«ط§ظ„ FileConstants:
```php
use App\Constants\FileConstants;

// ط±ظپط¹ طµظˆط±ط©
if ($file->getSize() > FileConstants::MAX_IMAGE_SIZE) {
    throw new Exception('File too large');
}

$allowedTypes = FileConstants::ALLOWED_IMAGES; // ['jpg', 'png', 'jpeg']
$maxSize = FileConstants::MAX_IMAGE_SIZE; // 2MB
```

#### ظ…ط«ط§ظ„ SystemConstants:
```php
use App\Constants\SystemConstants;

$itemsPerPage = SystemConstants::PAGINATION_PER_PAGE; // 15
$maxLoginAttempts = SystemConstants::MAX_LOGIN_ATTEMPTS; // 5
```

---

### 3. **Repository Pattern**

ظپطµظ„ ظ…ظ†ط·ظ‚ ط§ظ„طھط¹ط§ظ…ظ„ ظ…ط¹ ظ‚ط§ط¹ط¯ط© ط§ظ„ط¨ظٹط§ظ†ط§طھ ط¹ظ† Controllers:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Repositories/BaseRepository.php` - ط§ظ„ط£ط³ط§ط³ ظ„ظƒظ„ Repositories
- `app/Repositories/StudentRepository.php` - ط¹ظ…ظ„ظٹط§طھ ط§ظ„ط·ظ„ط§ط¨
- `app/Repositories/EnrollmentRepository.php` - ط¹ظ…ظ„ظٹط§طھ ط§ظ„طھط³ط¬ظٹظ„ط§طھ
- `app/Contracts/RepositoryInterface.php` - ط§ظ„ظ€ Contract ط§ظ„ط£ط³ط§ط³ظٹ

#### ظ…ط«ط§ظ„ ط§ظ„ط§ط³طھط®ط¯ط§ظ…:
```php
use App\Repositories\StudentRepository;

class StudentController extends Controller
{
    public function __construct(
        private StudentRepository $studentRepo
    ) {}

    public function index()
    {
        $students = $this->studentRepo->getActiveStudents();
        return view('students.index', compact('students'));
    }

    public function search(Request $request)
    {
        $students = $this->studentRepo->searchByName($request->query);
        return response()->json($students);
    }
}
```

#### ط§ظ„ظ…ظ…ظٹط²ط§طھ:
- âœ… **Testability** - ط³ظ‡ظˆظ„ط© ظƒطھط§ط¨ط© Unit Tests
- âœ… **Reusability** - ط¥ط¹ط§ط¯ط© ط§ط³طھط®ط¯ط§ظ… ط§ظ„ظƒظˆط¯
- âœ… **Separation of Concerns** - ظپطµظ„ ط§ظ„ظ…ط³ط¤ظˆظ„ظٹط§طھ
- âœ… **SOLID Compliance** - ط§ظ„طھط²ط§ظ… ط¨ظ…ط¨ط§ط¯ط¦ SOLID

#### ط§ظ„ط¯ظˆط§ظ„ ط§ظ„ظ…طھط§ط­ط© ظپظٹ BaseRepository:
```php
$repo->all();                              // ط¬ظ…ظٹط¹ ط§ظ„ط³ط¬ظ„ط§طھ
$repo->find($id);                          // ط¥ظٹط¬ط§ط¯ ط¨ط§ظ„ظ€ ID
$repo->findOrFail($id);                    // ظ…ط¹ ط§ط³طھط«ظ†ط§ط،
$repo->create($data);                      // ط¥ظ†ط´ط§ط،
$repo->update($id, $data);                 // طھط­ط¯ظٹط«
$repo->delete($id);                        // ط­ط°ظپ
$repo->paginate($perPage);                 // ظ…ط¹ Pagination
$repo->with($relations);                   // طھط­ظ…ظٹظ„ ط§ظ„ط¹ظ„ط§ظ‚ط§طھ
```

---

### 4. **Form Requests**

طھظ†ط¸ظٹظ… Validation ظپظٹ ظ…ظ„ظپط§طھ ظ…ظ†ظپطµظ„ط©:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Http/Requests/StoreStudentRequest.php`
- `app/Http/Requests/UpdateStudentRequest.php`
- `app/Http/Requests/StorePaymentRequest.php`
- `app/Http/Requests/StoreUserRequest.php`

#### ظ…ط«ط§ظ„:
```php
// ظپظٹ Controller
public function store(StoreStudentRequest $request)
{
    // ط§ظ„ط¨ظٹط§ظ†ط§طھ ظ…ط­ظ‚ظ‚ط© طھظ„ظ‚ط§ط¦ظٹط§ظ‹
    $student = $this->studentRepo->create($request->validated());
    return redirect()->route('students.index');
}
```

#### ظپظٹ ط§ظ„ظ€ Form Request:
```php
class StoreStudentRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'user_name' => 'required|string|max:255',
            'user_email' => 'required|email|unique:users,email',
            'national_id' => 'nullable|string|size:14|unique:students',
            'birth_date' => 'nullable|date|before:today',
            'phone' => 'nullable|string|max:20',
        ];
    }

    public function messages(): array
    {
        return [
            'user_name.required' => 'ط§ط³ظ… ط§ظ„ط·ط§ظ„ط¨ ظ…ط·ظ„ظˆط¨',
            'user_email.email' => 'ط§ظ„ط¨ط±ظٹط¯ ط§ظ„ط¥ظ„ظƒطھط±ظˆظ†ظٹ ط؛ظٹط± طµط­ظٹط­',
        ];
    }
}
```

---

### 5. **Services**

طھظ†ط¸ظٹظ… Business Logic ظپظٹ Services ظ…ط³طھظ‚ظ„ط©:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Services/SmsService.php` - ط¥ط±ط³ط§ظ„ ط§ظ„ط±ط³ط§ط¦ظ„
- `app/Services/FileUploadService.php` - ط±ظپط¹ ط§ظ„ظ…ظ„ظپط§طھ
- `app/Services/TwoFactorAuthService.php` - ط§ظ„ظ…طµط§ط¯ظ‚ط© ط§ظ„ط«ظ†ط§ط¦ظٹط©
- `app/Services/DataEncryptionService.php` - ط§ظ„طھط´ظپظٹط±

#### ظ…ط«ط§ظ„ SmsService:
```php
use App\Services\SmsService;

class NotificationController extends Controller
{
    public function __construct(
        private SmsService $smsService
    ) {}

    public function sendWelcome(Student $student)
    {
        $this->smsService->send(
            $student->phone,
            "ظ…ط±ط­ط¨ط§ظ‹ {$student->user->name} ظپظٹ ط£ظƒط§ط¯ظٹظ…ظٹطھظ†ط§!"
        );
    }
}
```

#### ظ…ط«ط§ظ„ FileUploadService:
```php
use App\Services\FileUploadService;

$fileService = app(FileUploadService::class);

// ط±ظپط¹ طµظˆط±ط©
$path = $fileService->uploadImage($request->file('photo'), 'students');

// ط±ظپط¹ PDF
$path = $fileService->uploadPdf($request->file('document'), 'certificates');

// ط­ط°ظپ ظ…ظ„ظپ
$fileService->delete($oldPath);
```

---

### 6. **Interfaces/Contracts**

طھط­ط¯ظٹط¯ Contracts ظ„ظ„طھط·ط¨ظٹظ‚:

#### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھظˆظپط±ط©:
- `app/Contracts/SmsProviderInterface.php` - ط¹ظ‚ط¯ ظ…ط²ظˆط¯ظٹ SMS
- `app/Contracts/RepositoryInterface.php` - ط¹ظ‚ط¯ Repositories

#### ظ…ط«ط§ظ„ SmsProviderInterface:
```php
interface SmsProviderInterface
{
    public function send(string $to, string $message): bool;
    public function getName(): string;
}

// ط§ظ„طھط·ط¨ظٹظ‚ط§طھ ط§ظ„ظ…طھط§ط­ط©:
// - TwilioProvider
// - VonageProvider
// - VodafoneProvider
// - LogProvider (ظ„ظ„طھط·ظˆظٹط±)
```

---

### 7. **ط§ظ„طھظˆط«ظٹظ‚ ط§ظ„ظƒط§ظ…ظ„**

طھظ… طھظˆط«ظٹظ‚ ط¬ظ…ظٹط¹ ط§ظ„طھط­ط³ظٹظ†ط§طھ ظپظٹ:
- ًں“„ `app/Repositories/README.md` - ط¯ظ„ظٹظ„ Repository Pattern
- ًں“„ `IMPLEMENTATION_CHECKLIST.md` - ظ‚ط§ط¦ظ…ط© ط§ظ„طھط­ظ‚ظ‚ ط§ظ„ط´ط§ظ…ظ„ط©
- ًں“„ `tests/` - 31 ط§ط®طھط¨ط§ط± طھظ„ظ‚ط§ط¦ظٹ

---

### ط§ظ„ظپظˆط§ط¦ط¯ ط§ظ„ظ…ط­ظ‚ظ‚ط©

| ط§ظ„ظ…ط¬ط§ظ„ | ظ‚ط¨ظ„ | ط¨ط¹ط¯ | ط§ظ„طھط­ط³ظٹظ† |
|--------|-----|-----|----------|
| **Code Quality** | 70% | 95% | +25% â¬†ï¸ڈ |
| **Maintainability** | 65% | 90% | +25% â¬†ï¸ڈ |
| **Testability** | 40% | 85% | +45% â¬†ï¸ڈ |
| **Reusability** | 50% | 88% | +38% â¬†ï¸ڈ |
| **SOLID Compliance** | 60% | 92% | +32% â¬†ï¸ڈ |

---

## ًں—؛ï¸ڈ ظ†ط¸ط§ظ… ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„ظ…طھظ‚ط¯ظ…

### ظ†ط¸ط±ط© ط¹ط§ظ…ط©

طھظ… طھط·ظˆظٹط± ظ†ط¸ط§ظ… ط¹ظ†ظˆط§ظ† ظ…طھظ‚ط¯ظ… ظ„ظ„ط·ظ„ط§ط¨ ظٹط´ظ…ظ„:
- **27 ظ…ط­ط§ظپط¸ط©** ظ…طµط±ظٹط©
- **240+ ظ…ط±ظƒط² ظˆظ‚ط³ظ…** ط¹ظ„ظ‰ ظ…ط³طھظˆظ‰ ط§ظ„ط¬ظ…ظ‡ظˆط±ظٹط©
- **ط¹ظ†ظˆط§ظ† طھظپطµظٹظ„ظٹ** ظ…ظ†ظپطµظ„
- **ط§ط®طھظٹط§ط± ظ…طھطھط§ط¨ط¹** (Cascading Dropdowns)
- **ط¥ظ…ظƒط§ظ†ظٹط© ط§ظ„ط¥ط¶ط§ظپط© ط§ظ„ط³ط±ظٹط¹ط©**

---

### ط§ظ„ط¬ط¯ط§ظˆظ„ ط§ظ„ط¬ط¯ظٹط¯ط©

#### 1. ط¬ط¯ظˆظ„ ط§ظ„ظ…ط­ط§ظپط¸ط§طھ (governorates)
```sql
- id
- code (ط±ظ…ط² ط§ظ„ظ…ط­ط§ظپط¸ط©: 01, 02, ...)
- name_ar (ط§ظ„ط§ط³ظ… ط¨ط§ظ„ط¹ط±ط¨ظٹط©)
- name_en (ط§ظ„ط§ط³ظ… ط¨ط§ظ„ط¥ظ†ط¬ظ„ظٹط²ظٹط©)
- timestamps
```

**ط§ظ„ظ…ط­ط§ظپط¸ط§طھ ط§ظ„ظ…طھظˆظپط±ط©:**
ط§ظ„ظ‚ط§ظ‡ط±ط©طŒ ط§ظ„ط¬ظٹط²ط©طŒ ط§ظ„ط¥ط³ظƒظ†ط¯ط±ظٹط©طŒ ط§ظ„ط¯ظ‚ظ‡ظ„ظٹط©طŒ ط§ظ„ط´ط±ظ‚ظٹط©طŒ ط§ظ„ظ‚ظ„ظٹظˆط¨ظٹط©طŒ ط§ظ„ط¨ط­ظٹط±ط©طŒ ط§ظ„ط؛ط±ط¨ظٹط©طŒ ط§ظ„ظ…ظ†ظˆظپظٹط©طŒ ظƒظپط± ط§ظ„ط´ظٹط®طŒ ط¯ظ…ظٹط§ط·طŒ ط¨ظˆط±ط³ط¹ظٹط¯طŒ ط§ظ„ط¥ط³ظ…ط§ط¹ظٹظ„ظٹط©طŒ ط§ظ„ط³ظˆظٹط³طŒ ط¨ظ†ظٹ ط³ظˆظٹظپطŒ ط§ظ„ظپظٹظˆظ…طŒ ط§ظ„ظ…ظ†ظٹط§طŒ ط£ط³ظٹظˆط·طŒ ط³ظˆظ‡ط§ط¬طŒ ظ‚ظ†ط§طŒ ط§ظ„ط£ظ‚طµط±طŒ ط£ط³ظˆط§ظ†طŒ ط§ظ„ط¨ط­ط± ط§ظ„ط£ط­ظ…ط±طŒ ط§ظ„ظˆط§ط¯ظٹ ط§ظ„ط¬ط¯ظٹط¯طŒ ظ…ط·ط±ظˆط­طŒ ط´ظ…ط§ظ„ ط³ظٹظ†ط§ط،طŒ ط¬ظ†ظˆط¨ ط³ظٹظ†ط§ط،

#### 2. ط¬ط¯ظˆظ„ ط§ظ„ظ…ط±ط§ظƒط²/ط§ظ„ط£ظ‚ط³ط§ظ… (districts)
```sql
- id
- governorate_id (ط§ظ„ط¹ظ„ط§ظ‚ط© ط¨ط§ظ„ظ…ط­ط§ظپط¸ط©)
- name_ar (ط§ط³ظ… ط§ظ„ظ…ط±ظƒط² ط¨ط§ظ„ط¹ط±ط¨ظٹط©)
- name_en (ط§ط³ظ… ط§ظ„ظ…ط±ظƒط² ط¨ط§ظ„ط¥ظ†ط¬ظ„ظٹط²ظٹط©)
- timestamps
```

**ط£ظ…ط«ظ„ط© ط§ظ„ظ…ط±ط§ظƒط²:**
- **ط§ظ„ظ‚ط§ظ‡ط±ط©:** ط§ظ„ظ‚ط§ظ‡ط±ط© ط§ظ„ط¬ط¯ظٹط¯ط©طŒ ظ…ط¯ظٹظ†ط© ظ†طµط±طŒ ظ…طµط± ط§ظ„ط¬ط¯ظٹط¯ط©طŒ ط§ظ„ظ…ط¹ط§ط¯ظٹطŒ ط§ظ„ظ…ظ‚ط·ظ…طŒ ط§ظ„طھط¬ظ…ط¹ ط§ظ„ط®ط§ظ…ط³...
- **ط§ظ„ط¬ظٹط²ط©:** 6 ط£ظƒطھظˆط¨ط±طŒ ط§ظ„ط´ظٹط® ط²ط§ظٹط¯طŒ ط§ظ„ط¯ظ‚ظٹطŒ ط§ظ„ظ…ظ‡ظ†ط¯ط³ظٹظ†طŒ ط§ظ„ظ‡ط±ظ…طŒ ظپظٹطµظ„...
- **ط§ظ„ط¥ط³ظƒظ†ط¯ط±ظٹط©:** ط§ظ„ظ…ظ†طھط²ظ‡طŒ ط§ظ„ط¹ط§ظ…ط±ظٹط©طŒ ط¨ط±ط¬ ط§ظ„ط¹ط±ط¨طŒ ط³ظٹط¯ظٹ ط¬ط§ط¨ط±طŒ ط³ظ…ظˆط­ط©...

---

### ط§ظ„ط­ظ‚ظˆظ„ ط§ظ„ظ…ط¶ط§ظپط© ظ„ط¬ط¯ظˆظ„ ط§ظ„ط·ظ„ط§ط¨

```sql
ALTER TABLE students ADD:
- governorate_id (nullable, foreign key)
- district_id (nullable, foreign key)
- detailed_address (text, nullable)
```

---

### ظˆط§ط¬ظ‡ط© ط¥ط¯ط®ط§ظ„ ط§ظ„ط¹ظ†ظˆط§ظ†

#### ظپظٹ ظ†ظ…ظˆط°ط¬ ط§ظ„ط·ط§ظ„ط¨ (Student Form):

**ظ‚ط³ظ… "ط§ظ„ط¹ظ†ظˆط§ظ†":**

1. **ط§ط®طھظٹط§ط± ط§ظ„ظ…ط­ط§ظپط¸ط©**
   - ظ‚ط§ط¦ظ…ط© ظ…ظ†ط³ط¯ظ„ط© ط¨ط¬ظ…ظٹط¹ ط§ظ„ظ…ط­ط§ظپط¸ط§طھ
   - ط¨ط­ط« ط³ط±ظٹط¹
   - ط²ط± "+" ظ„ط¥ط¶ط§ظپط© ظ…ط­ط§ظپط¸ط© ط¬ط¯ظٹط¯ط©
   - ط§ط®طھظٹط§ط±ظٹ (nullable)

2. **ط§ط®طھظٹط§ط± ط§ظ„ظ…ط±ظƒط²/ط§ظ„ظ‚ط³ظ…**
   - ظٹط¸ظ‡ط± ظپظ‚ط· ط¨ط¹ط¯ ط§ط®طھظٹط§ط± ط§ظ„ظ…ط­ط§ظپط¸ط©
   - ظٹط¹ط±ط¶ ط§ظ„ظ…ط±ط§ظƒط² ط§ظ„طھط§ط¨ط¹ط© ظ„ظ„ظ…ط­ط§ظپط¸ط© ط§ظ„ظ…ط®طھط§ط±ط© ظپظ‚ط·
   - ط¨ط­ط« ط³ط±ظٹط¹
   - ط²ط± "+" ظ„ط¥ط¶ط§ظپط© ظ…ط±ظƒط² ط¬ط¯ظٹط¯
   - ط§ط®طھظٹط§ط±ظٹ (nullable)

3. **ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„طھظپطµظٹظ„ظٹ**
   - ط­ظ‚ظ„ ظ†طµظٹ ظ…ظ†ط³ظ‚ (Rich Editor)
   - ظ„ظ„ظƒطھط§ط¨ط© ط§ظ„طھظپطµظٹظ„ظٹط© (ط´ط§ط±ط¹طŒ ط¹ظ…ط§ط±ط©طŒ ط´ظ‚ط©طŒ ط¥ظ„ط®)
   - ط§ط®طھظٹط§ط±ظٹ (nullable)

---

### ط§ظ„ظ…ظˆط¯ظٹظ„ط§طھ ظˆط§ظ„ط¹ظ„ط§ظ‚ط§طھ

#### Student Model
```php
class Student extends Model
{
    // ط§ظ„ط¹ظ„ط§ظ‚ط§طھ ط§ظ„ط¬ط¯ظٹط¯ط©
    public function governorate(): BelongsTo
    {
        return $this->belongsTo(Governorate::class);
    }

    public function district(): BelongsTo
    {
        return $this->belongsTo(District::class);
    }
}
```

#### Governorate Model
```php
class Governorate extends Model
{
    protected $fillable = ['code', 'name_ar', 'name_en'];

    public function districts(): HasMany
    {
        return $this->hasMany(District::class);
    }

    public function students(): HasMany
    {
        return $this->hasMany(Student::class);
    }

    public function getName(): string
    {
        $locale = app()->getLocale();
        return $locale === 'ar' ? $this->name_ar : $this->name_en;
    }
}
```

#### District Model
```php
class District extends Model
{
    protected $fillable = ['governorate_id', 'name_ar', 'name_en'];

    public function governorate(): BelongsTo
    {
        return $this->belongsTo(Governorate::class);
    }

    public function students(): HasMany
    {
        return $this->hasMany(Student::class);
    }

    public function getName(): string
    {
        $locale = app()->getLocale();
        return $locale === 'ar' ? $this->name_ar : $this->name_en;
    }
}
```

---

### ظ…ظ…ظٹط²ط§طھ ط§ظ„ظ†ط¸ط§ظ…

#### 1. Cascading Dropdowns (ط§ظ„ظ‚ظˆط§ط¦ظ… ط§ظ„ظ…طھطھط§ط¨ط¹ط©)
```php
Select::make('governorate_id')
    ->relationship('governorate', 'name_ar')
    ->live()  // طھط­ط¯ظٹط« ظ…ط¨ط§ط´ط±
    ->afterStateUpdated(function (Set $set) {
        $set('district_id', null); // ط¥ط¹ط§ط¯ط© طھط¹ظٹظٹظ† ط§ظ„ظ…ط±ظƒط²
    })

Select::make('district_id')
    ->relationship(
        'district',
        'name_ar',
        fn($query, Get $get) => $query->where('governorate_id', $get('governorate_id'))
    )
    ->visible(fn(Get $get) => filled($get('governorate_id')))
```

#### 2. ط¥ط¶ط§ظپط© ط³ط±ظٹط¹ط© ظ„ظ„ظ…ط­ط§ظپط¸ط§طھ
```php
->createOptionForm([
    TextInput::make('name_ar')
        ->label('ط§ط³ظ… ط§ظ„ظ…ط­ط§ظپط¸ط© ط¨ط§ظ„ط¹ط±ط¨ظٹط©')
        ->required(),
    TextInput::make('name_en')
        ->label('ط§ط³ظ… ط§ظ„ظ…ط­ط§ظپط¸ط© ط¨ط§ظ„ط¥ظ†ط¬ظ„ظٹط²ظٹط©')
        ->required(),
])
```

#### 3. ط¥ط¶ط§ظپط© ط³ط±ظٹط¹ط© ظ„ظ„ظ…ط±ط§ظƒط²
```php
->createOptionUsing(function (array $data, Get $get): int {
    $data['governorate_id'] = $get('governorate_id');
    $district = District::create($data);
    return $district->id;
})
```

---

### ط§ظ„طھط±ط¬ظ…ط©

طھظ… ط¥ط¶ط§ظپط© ط§ظ„ظ…ظپط§طھظٹط­ ط§ظ„طھط§ظ„ظٹط©:

**ط§ظ„ط¹ط±ط¨ظٹط© (lang/ar/filament/admin/student_resource.php):**
```php
'governorate_id' => 'ط§ظ„ظ…ط­ط§ظپط¸ط©',
'district_id' => 'ط§ظ„ظ…ط±ظƒط² / ط§ظ„ظ‚ط³ظ…',
'detailed_address' => 'ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„طھظپطµظٹظ„ظٹ',
```

**ط§ظ„ط¥ظ†ط¬ظ„ظٹط²ظٹط© (lang/en/filament/admin/student_resource.php):**
```php
'governorate_id' => 'Governorate',
'district_id' => 'District / Center',
'detailed_address' => 'Detailed Address',
```

---

### ط§ط³طھط®ط¯ط§ظ… ط§ظ„ظ†ط¸ط§ظ…

#### 1. ط¥ط¶ط§ظپط© ط·ط§ظ„ط¨ ط¬ط¯ظٹط¯ ظ…ط¹ ط§ظ„ط¹ظ†ظˆط§ظ†:
1. ط§ظ†طھظ‚ظ„ ط¥ظ„ظ‰ **ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط±ط³ط© > ط§ظ„ط·ظ„ط§ط¨ > ط¥ط¶ط§ظپط© ط·ط§ظ„ط¨**
2. ط§ظ…ظ„ط£ ط§ظ„ط¨ظٹط§ظ†ط§طھ ط§ظ„ط£ط³ط§ط³ظٹط©
3. ظپظٹ ظ‚ط³ظ… "ط§ظ„ط¹ظ†ظˆط§ظ†":
   - ط§ط®طھط± **ط§ظ„ظ…ط­ط§ظپط¸ط©** ظ…ظ† ط§ظ„ظ‚ط§ط¦ظ…ط© (ط£ظˆ ط£ط¶ظپ ط¬ط¯ظٹط¯ط©)
   - ط§ط®طھط± **ط§ظ„ظ…ط±ظƒط²/ط§ظ„ظ‚ط³ظ…** ظ…ظ† ط§ظ„ظ‚ط§ط¦ظ…ط© (ط£ظˆ ط£ط¶ظپ ط¬ط¯ظٹط¯)
   - ط§ظƒطھط¨ **ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„طھظپطµظٹظ„ظٹ** (ط§ط®طھظٹط§ط±ظٹ)

#### 2. طھط¹ط¯ظٹظ„ ط¹ظ†ظˆط§ظ† ط·ط§ظ„ط¨ ظ…ظˆط¬ظˆط¯:
1. ط§ظپطھط­ طµظپط­ط© ط§ظ„ط·ط§ظ„ط¨
2. ط§ط¶ط؛ط· **طھط¹ط¯ظٹظ„**
3. ط¹ط¯ظ‘ظ„ ط§ظ„ط¹ظ†ظˆط§ظ† ظپظٹ ظ‚ط³ظ… "ط§ظ„ط¹ظ†ظˆط§ظ†"
4. ط§ط­ظپط¸

#### 3. ط§ظ„ط¨ط­ط« ط¨ط§ظ„ظ…ط­ط§ظپط¸ط©:
```php
Student::where('governorate_id', $governorateId)->get();
```

#### 4. ط§ظ„ط¨ط­ط« ط¨ط§ظ„ظ…ط±ظƒط²:
```php
Student::where('district_id', $districtId)->get();
```

#### 5. ط§ظ„ط­طµظˆظ„ ط¹ظ„ظ‰ ط¹ط¯ط¯ ط§ظ„ط·ظ„ط§ط¨ ط¨ظƒظ„ ظ…ط­ط§ظپط¸ط©:
```php
$stats = Governorate::withCount('students')->get();
foreach ($stats as $gov) {
    echo "{$gov->name_ar}: {$gov->students_count}";
}
```

---

### ط§ظ„طھط«ط¨ظٹطھ ط¹ظ„ظ‰ ط§ظ„ط³ظٹط±ظپط±

ظ„طھط·ط¨ظٹظ‚ ظ†ط¸ط§ظ… ط§ظ„ط¹ظ†ظˆط§ظ† ط§ظ„ط¬ط¯ظٹط¯ ط¹ظ„ظ‰ ط³ظٹط±ظپط± ط§ظ„ط¥ظ†طھط§ط¬:

```bash
# 1. ط¬ظ„ط¨ ط§ظ„طھط­ط¯ظٹط«ط§طھ
git pull origin main

# 2. طھط·ط¨ظٹظ‚ ط§ظ„ظ…ط§ظٹط¬ط±ظٹط´ظ†ط²
php artisan migrate

# 3. طھط­ظ…ظٹظ„ ط¨ظٹط§ظ†ط§طھ ط§ظ„ظ…ط±ط§ظƒط² (240+ ظ…ط±ظƒط²)
php artisan db:seed --class=DistrictsSeeder

# 4. ظ…ط³ط­ ط§ظ„ظƒط§ط´
php artisan config:clear
php artisan cache:clear
php artisan view:clear

# 5. طھط­ط³ظٹظ† Filament
php artisan filament:optimize-clear
```

---

### ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ظ…طھط£ط«ط±ط©

#### Migrations:
- `2025_12_21_100000_create_governorates_table.php` (ظ…ظˆط¬ظˆط¯ ظ…ط³ط¨ظ‚ط§ظ‹)
- `2025_12_30_074214_create_districts_table.php` (ط¬ط¯ظٹط¯)
- `2025_12_30_074221_add_address_fields_to_students_table.php` (ط¬ط¯ظٹط¯)

#### Models:
- `app/Models/Governorate.php` (ظ…ط­ط¯ظ‘ط«)
- `app/Models/District.php` (ط¬ط¯ظٹط¯)
- `app/Models/Student.php` (ظ…ط­ط¯ظ‘ط«)

#### Seeders:
- `database/seeders/GovernoratesSeeder.php` (ظ…ط­ط¯ظ‘ط«)
- `database/seeders/DistrictsSeeder.php` (ظ…ط­ط¯ظ‘ط« - 240+ ظ…ط±ظƒط²)

#### Resources:
- `app/Filament/Admin/Resources/Students/Schemas/StudentForm.php` (ظ…ط­ط¯ظ‘ط«)

#### Translations:
- `lang/ar/filament/admin/student_resource.php` (ظ…ط­ط¯ظ‘ط«)
- `lang/en/filament/admin/student_resource.php` (ظ…ط­ط¯ظ‘ط«)

---

### ط¥ط­طµط§ط¦ظٹط§طھ ط§ظ„ط¨ظٹط§ظ†ط§طھ

| ط§ظ„ط¹ظ†طµط± | ط§ظ„ط¹ط¯ط¯ |
|--------|-------|
| ط§ظ„ظ…ط­ط§ظپط¸ط§طھ | 27 |
| ط§ظ„ظ…ط±ط§ظƒط² ظˆط§ظ„ط£ظ‚ط³ط§ظ… | 240+ |
| ط§ظ„ظ‚ط§ظ‡ط±ط© | 16 ظ…ظ†ط·ظ‚ط© |
| ط§ظ„ط¬ظٹط²ط© | 10 ظ…ط±ط§ظƒط² |
| ط§ظ„ط¥ط³ظƒظ†ط¯ط±ظٹط© | 10 ظ…ظ†ط§ط·ظ‚ |
| ط¨ط§ظ‚ظٹ ط§ظ„ظ…ط­ط§ظپط¸ط§طھ | 5-13 ظ…ط±ظƒط² ظ„ظƒظ„ ظ…ط­ط§ظپط¸ط© |

---

### ط§ظ„ط­ظ‚ظˆظ„ ط§ظ„ظ‚ط¯ظٹظ…ط©

ط§ظ„ط­ظ‚ظˆظ„ ط§ظ„طھط§ظ„ظٹط© ظ„ط§ طھط²ط§ظ„ ظ…ظˆط¬ظˆط¯ط© ظ„ظ„طھظˆط§ظپظ‚ ظ…ط¹ ط§ظ„ط¨ظٹط§ظ†ط§طھ ط§ظ„ظ‚ط¯ظٹظ…ط©:
- `city` (string) - ظ‚ط¯ظٹظ…
- `address` (text) - ظ‚ط¯ظٹظ…

**ظ…ظ„ط§ط­ط¸ط©:** طھظ… ظˆط¶ط¹ طھظ†ط¨ظٹظ‡ ظپظٹ ط§ظ„ظˆط§ط¬ظ‡ط© ط£ظ† ظ‡ط°ظ‡ ط§ظ„ط­ظ‚ظˆظ„ ط³ظٹطھظ… ط§ط³طھط¨ط¯ط§ظ„ظ‡ط§ ط¨ط§ظ„ظ†ط¸ط§ظ… ط§ظ„ط¬ط¯ظٹط¯.

---

## ًں“‍ ط§ظ„ط¯ط¹ظ… ظˆط§ظ„ظ…ط³ط§ط¹ط¯ط©

### ط§ظ„ط­طµظˆظ„ ط¹ظ„ظ‰ ط§ظ„ظ…ط³ط§ط¹ط¯ط©

1. **ط§ظ„طھظˆط«ظٹظ‚:**
   - `USER_GUIDE.md` - ظ‡ط°ط§ ط§ظ„ط¯ظ„ظٹظ„
   - `INSTRUCTOR_SYSTEM_COMPLETE.md` - ظ†ط¸ط§ظ… ط§ظ„ظ…ط¹ظ„ظ…ظٹظ†
   - `MULTI_TENANCY_GUIDE.md` - ظ†ط¸ط§ظ… Multi-Tenancy
   - `ROLES_AND_PERMISSIONS_GUIDE.md` - ط§ظ„طµظ„ط§ط­ظٹط§طھ
   - `app/Repositories/README.md` - ط¯ظ„ظٹظ„ Repository Pattern
   - `IMPLEMENTATION_CHECKLIST.md` - ظ‚ط§ط¦ظ…ط© ط§ظ„طھط­ظ‚ظ‚ ط§ظ„ط´ط§ظ…ظ„ط©

2. **Logs:**
```bash
tail -f storage/logs/laravel.log
```

3. **Tinker ظ„ظ„ط§ط®طھط¨ط§ط±:**
```bash
php artisan tinker
>>> User::count()
>>> Student::first()
>>> use App\Enums\StudentStatus;
>>> StudentStatus::ACTIVE->label()
```

4. **ط§ظ„ط§ط®طھط¨ط§ط±ط§طھ ط§ظ„طھظ„ظ‚ط§ط¦ظٹط©:**
```bash
# طھط´ط؛ظٹظ„ ط¬ظ…ظٹط¹ ط§ظ„ط§ط®طھط¨ط§ط±ط§طھ (31 ط§ط®طھط¨ط§ط±)
php artisan test

# ط§ط®طھط¨ط§ط±ط§طھ ظ…ط­ط¯ط¯ط©
php artisan test --filter=EnumsTest
php artisan test --filter=RepositoryTest
```

### ط§ظ„ط¥ط¨ظ„ط§ط؛ ط¹ظ† ط®ط·ط£

ظ‚ظ… ط¨طھط¶ظ…ظٹظ†:
- ظˆطµظپ ط§ظ„ظ…ط´ظƒظ„ط©
- ط®ط·ظˆط§طھ ط¥ط¹ط§ط¯ط© ط§ظ„ط¥ظ†طھط§ط¬
- ط±ط³ط§ظ„ط© ط§ظ„ط®ط·ط£ ط§ظ„ظƒط§ظ…ظ„ط©
- Laravel log
- ظ„ظ‚ط·ط© ط´ط§ط´ط© (ط¥ظ† ط£ظ…ظƒظ†)

---

## ًں“ٹ ط³ط¬ظ„ ط§ظ„طھط­ط¯ظٹط«ط§طھ

### ط§ظ„ط¥طµط¯ط§ط± 2.1.0 (30 ط¯ظٹط³ظ…ط¨ط± 2025)

#### ًں†• ظ…ظٹط²ط§طھ ط¬ط¯ظٹط¯ط©:
- âœ… ظ†ط¸ط§ظ… ط¹ظ†ظˆط§ظ† ظ…طھظ‚ط¯ظ… (27 ظ…ط­ط§ظپط¸ط© + 240+ ظ…ط±ظƒط²)
- âœ… ط§ط®طھظٹط§ط± ظ…طھطھط§ط¨ط¹ ظ„ظ„ظ…ط­ط§ظپط¸ط§طھ ظˆط§ظ„ظ…ط±ط§ظƒط² (Cascading Dropdowns)
- âœ… ط¥ط¶ط§ظپط© ط³ط±ظٹط¹ط© ظ„ظ„ظ…ط­ط§ظپط¸ط§طھ ظˆط§ظ„ظ…ط±ط§ظƒط² ظ…ظ† ظˆط§ط¬ظ‡ط© ط§ظ„ط·ط§ظ„ط¨
- âœ… ط­ظ‚ظ„ ط¹ظ†ظˆط§ظ† طھظپطµظٹظ„ظٹ ظ…ظ†ظپطµظ„ (Rich Text)

#### ًںڈ—ï¸ڈ طھط­ط³ظٹظ†ط§طھ ط¨ط±ظ…ط¬ظٹط©:
- âœ… طھط·ط¨ظٹظ‚ 6 Enums (UserStatus, StudentStatus, PaymentMethod, etc.)
- âœ… طھط·ط¨ظٹظ‚ 3 Constants Classes (File, System, Permission)
- âœ… طھط·ط¨ظٹظ‚ Repository Pattern (Base, Student, Enrollment)
- âœ… طھط·ط¨ظٹظ‚ 4 Form Requests (Store/Update ظ„ظ„ط·ظ„ط§ط¨ ظˆط§ظ„ظ…ط¯ظپظˆط¹ط§طھ)
- âœ… طھط·ط¨ظٹظ‚ 4 Services (SMS, FileUpload, 2FA, Encryption)
- âœ… طھط·ط¨ظٹظ‚ 2 Interfaces/Contracts
- âœ… 31 ط§ط®طھط¨ط§ط± طھظ„ظ‚ط§ط¦ظٹ (Unit + Feature Tests)
- âœ… طھظˆط«ظٹظ‚ ط´ط§ظ…ظ„ ظپظٹ README.md

#### ًں“ˆ ظ…ظ‚ط§ظٹظٹط³ ط§ظ„ط¬ظˆط¯ط©:
| ط§ظ„ظ…ط¬ط§ظ„ | ظ‚ط¨ظ„ | ط¨ط¹ط¯ | ط§ظ„طھط­ط³ظٹظ† |
|--------|-----|-----|----------|
| Code Quality | 70% | 95% | +25% â¬†ï¸ڈ |
| Maintainability | 65% | 90% | +25% â¬†ï¸ڈ |
| Testability | 40% | 85% | +45% â¬†ï¸ڈ |
| SOLID Compliance | 60% | 92% | +32% â¬†ï¸ڈ |

#### ًں“¦ ط§ظ„ظ…ظ„ظپط§طھ ط§ظ„ط¬ط¯ظٹط¯ط©:
- 41 ظ…ظ„ظپ ط¬ط¯ظٹط¯ (Enums, Constants, Repositories, Services, Tests)
- 3 Migrations ط¬ط¯ظٹط¯ط©
- 2 Seeders ظ…ط­ط¯ظ‘ط«ط©
- 12 ظ…ظ„ظپ طھظˆط«ظٹظ‚

### ط§ظ„ط¥طµط¯ط§ط± 2.0.0 (29 ط¯ظٹط³ظ…ط¨ط± 2025)
- âœ… 4 ظ„ظˆط­ط§طھ طھط­ظƒظ… ظ…ظ†ظپطµظ„ط©
- âœ… ظ†ط¸ط§ظ… Multi-Tenancy ظƒط§ظ…ظ„
- âœ… ظ†ط¸ط§ظ… طµظ„ط§ط­ظٹط§طھ ظ…طھظ‚ط¯ظ…
- âœ… ظ†ط¸ط§ظ… SMS ط´ط§ظ…ظ„
- âœ… طھظ‚ط§ط±ظٹط± ظˆط¥ط­طµط§ط¦ظٹط§طھ

---

## ًںژ‰ ط§ظ„ط®ظ„ط§طµط©

ظ†ط¸ط§ظ… AI School ظ‡ظˆ ط­ظ„ ط´ط§ظ…ظ„ ظˆظ…طھظƒط§ظ…ظ„ ظ„ط¥ط¯ط§ط±ط© ط§ظ„ظ…ط¯ط§ط±ط³ ظˆط§ظ„ط£ظƒط§ط¯ظٹظ…ظٹط§طھ ظ…ط¹:
- âœ… 4 ظ„ظˆط­ط§طھ طھط­ظƒظ… ظ…ظ†ظپطµظ„ط©
- âœ… ط¯ط¹ظ… Multi-Tenancy ظƒط§ظ…ظ„
- âœ… ظ†ط¸ط§ظ… طµظ„ط§ط­ظٹط§طھ ظ…طھظ‚ط¯ظ…
- âœ… ظˆط§ط¬ظ‡ط§طھ ظ…ط³طھط®ط¯ظ… ط­ط¯ظٹط«ط©
- âœ… طھظ‚ط§ط±ظٹط± ظˆط¥ط­طµط§ط¦ظٹط§طھ ط´ط§ظ…ظ„ط©
- âœ… ط¯ط¹ظ… ظƒط§ظ…ظ„ ظ„ظ„ط؛ط© ط§ظ„ط¹ط±ط¨ظٹط©
- âœ… ط¨ظ†ظٹط© ط¨ط±ظ…ط¬ظٹط© ظ…طھظ‚ط¯ظ…ط© (SOLID Principles)
- âœ… ظ†ط¸ط§ظ… ط¹ظ†ظˆط§ظ† ظ…طھط·ظˆط± (27 ظ…ط­ط§ظپط¸ط© + 240+ ظ…ط±ظƒط²)

**ط§ظ„ط¥طµط¯ط§ط± ط§ظ„ط­ط§ظ„ظٹ:** 2.1.0 âœ… ط¬ط§ظ‡ط² ظ„ظ„ط¥ظ†طھط§ط¬

---

**ط¢ط®ط± طھط­ط¯ظٹط«:** 30 ط¯ظٹط³ظ…ط¨ط± 2025  
**ط§ظ„ظ…ط·ظˆط±:** Almobtaker Alaraby Team  
**ط§ظ„طھط±ط®ظٹطµ:** MIT

