# نظام بصمة الاحترافي - إدارة الموظفين والحضور والرواتب 📊

نظام ويب تفاعلي متكامل (HR System) لإدارة حضور وانصراف الموظفين واحتساب الرواتب والمستحقات والخصومات تلقائياً، مصمم خصيصاً ليناسب متطلباتك ومطابق تماماً للحسابات الحسابية الواردة في نموذج الإكسيل الخاص بك مع دعم إضافة وتعديل عدة موظفين.

## ✨ المميزات الرئيسية في الإصدار الاحترافي (2.0):
1. **دعم تعدد الموظفين (Multi-Employee):** 
   - إضافة وإدارة عقود رواتب لعدد غير محدود من الموظفين.
   - لكل موظف ملفه المالي والوظيفي الخاص به (الراتب الأساسي، عدد ساعات الدوام، وقت الحضور الرسمي، فترة السماح، والمضاعفات).
   - إمكانية التنقل الفوري بين الموظفين عبر قائمة منسدلة سريعة في الهيدر أو من صفحة "إدارة الموظفين".
2. **إدارة النسخ الاحتياطي (Backup & Restore):**
   - حفظ نسخة احتياطية من قاعدة البيانات بالكامل (كافة الموظفين وسجلات الحضور لجميع الشهور) وتنزيلها كملف `.json`.
   - إمكانية استيراد نسخة احتياطية في أي وقت لاستعادة البيانات أو نقلها لجهاز آخر بشكل كامل.
3. **حسابات آلية دقيقة ومطابقة:** 
   - احتساب ساعات العمل الفعلية لكل يوم بشكل تلقائي.
   - احتساب الإضافي تلقائياً (بالمعامل الافتراضي 1.5x) والذي قد يكون سالباً (خصم) إذا قلّت ساعات الدوام عن 8 ساعات، تماماً كما في الشيت الخاص بك.
   - احتساب التأخير تلقائياً بالدقائق والساعات (بخصم مضاعف 2x) في حال الحضور بعد وقت الحضور الرسمي وتخطي فترة السماح (مثلاً: 15 دقيقة).
   - احتساب خصومات أيام الغياب الكامل (يوم كامل من أجر اليوم الأساسي).
4. **شريط جانبي تفاعلي (RTL):** للتنقل السلس بين أقسام لوحة التحكم، سجل الحضور، كشف الرواتب، وإدارة الموظفين، والإعدادات.
5. **لوحة تحكم ذكية (Dashboard):** تعرض إحصائيات فورية ورسم بياني تفاعلي يوضح توزيع ساعات العمل والإضافي والتأخير طوال الشهر للموظف النشط.
6. **تخزين تلقائي محلي (LocalStorage):** يتم حفظ كافة البيانات والتعديلات والإعدادات تلقائياً في متصفحك دون الحاجة لاتصال بالإنترنت.
7. **طباعة كشف الراتب:** تصميم مخصص للطباعة بلمسة احترافية لاستخراج كشف مرتب الموظف تفصيلياً (مسير الرواتب) وتوقيعه.
8. **تصدير للـ Excel:** إمكانية تصدير سجل الشهر بالكامل لملف Excel CSV بترميز يدعم اللغة العربية بشكل سليم وبنقرة واحدة.
9. **دعم المظهر الداكن/الفاتح (Dark Mode/Light Mode):** بلمسة عصرية تناسب تفضيلاتك.

---

## 🚀 طريقة التشغيل والاستخدام:
1. افتح المجلد `برنامج بصمة 2` على سطح المكتب.
2. انقر نقراً مزدوجاً (Double Click) على الملف `index.html` ليفتح مباشرة في متصفحك المفضّل (Chrome, Edge, Firefox, Safari).
3. **للبدء السريع:**
   - ستجد بيانات الموظف الأول "**عمر الخطيب**" لشهر **يوليو 2026** محملة مسبقاً وتطابق تماماً الأرقام والحسابات والتواريخ والغيابات التي كانت في الصورة التي أرسلتها للتحقق المباشر من دقة البرنامج!
   - لإضافة موظفين جدد، انتقل إلى صفحة **إدارة الموظفين** واضغط على "**إضافة موظف جديد**".
   - للتعديل على حضور وانصراف أي يوم بالضغط على أيقونة التعديل 📝 بجانب اليوم في صفحة **سجل الحضور والانصراف**.
   - لعمل نسخ احتياطي، انتقل لصفحة **إعدادات النظام والنسخ** ثم اضغط على "**تصدير قاعدة البيانات بالكامل**".

---

## 📈 تفاصيل المعادلات المطبقة:
- **أجر اليوم** = الراتب الأساسي ÷ أيام العمل في الشهر (مثال: `10000 ÷ 22 = 454.55`)
- **أجر الساعة** = أجر اليوم ÷ ساعات العمل اليومية (مثال: `454.55 ÷ 8 = 56.82`)
- **ساعة التأخير** = أجر الساعة × 2.0 (معامل التأخير)
- **ساعة الإضافي** = أجر الساعة × 1.5 (معامل الإضافي)
- **ساعات العمل اليومي** = وقت الانصراف - وقت الحضور
- **الإضافي اليومي** = ساعات العمل الفعلي - 8 ساعات (ساعات العمل اليومية الرسمية)
- **التأخير اليومي** = وقت الحضور الفعلي - 11:00 AM (وقت الحضور الرسمي)
- **فترة السماح** = 15 دقيقة (يتم خصم التأخير بالكامل إذا تخطى الموظف الحضور بعد 11:15 AM، وإذا كان قبله لا يخصم شيء).

---

## ☁️ تهيئة قاعدة بيانات سوبابيز (Supabase Setup)

لربط البرنامج بقاعدة بيانات سحابية وحفظ بياناتك من الضياع ومزامنتها عبر الهواتف والكمبيوتر:
1. قم بإنشاء مشروع جديد مجاني على موقع [Supabase.com](https://supabase.com).
2. ادخل إلى قائمة **SQL Editor** من الشريط الجانبي في لوحة تحكم سوبابيز.

### 💡 في حال كنت قد أنشأت الجداول بالفعل وتريد فقط إضافة حقل البصمة:
انسخ هذا السطر وحده وشغّله في الـ SQL Editor:
```sql
ALTER TABLE employees ADD COLUMN IF NOT EXISTS fingerprint_registered boolean default false;
```

### 🆕 في حال كنت تؤسس الجداول لأول مرة:
انقر على **New query** والصق كود الاستعلام (SQL) التالي لإنشاء الجداول اللازمة بالكامل:

```sql
-- 1. جدول الموظفين
create table if not exists employees (
    id text primary key,
    name text not null,
    role text not null,
    basic_salary numeric default 10000,
    work_days integer default 22,
    daily_hours integer default 8,
    start_time text default '11:00',
    grace_period integer default 15,
    overtime_multiplier numeric default 1.5,
    delay_multiplier numeric default 2.0,
    fingerprint_registered boolean default false,
    created_at timestamp with time zone default timezone('utc'::text, now())
);

-- 2. جدول سجلات الحضور والرواتب
create table if not exists attendance_records (
    id uuid default gen_random_uuid() primary key,
    employee_id text references employees(id) on delete cascade,
    month text not null, -- YYYY-MM
    date text not null,  -- YYYY-MM-DD
    day_name text not null,
    status text not null, -- present, weekend, leave, absent
    checkin text,         -- HH:MM:SS
    checkout text,        -- HH:MM:SS
    created_at timestamp with time zone default timezone('utc'::text, now()),
    unique(employee_id, date)
);
```

3. اضغط على زر **Run** في سوبابيز لتنفيذ الاستعلام.
4. اذهب إلى **Project Settings ➡️ API** في سوبابيز وانسخ كلاً من:
   - **Project URL**
   - **anon public API Key**
5. افتح صفحة **إعدادات النظام والنسخ** في التطبيق والصقهما في قسم سوبابيز السحابي، ثم اضغط على **حفظ الإعدادات**. ستتغير الحالة فوراً إلى "متصل سحابياً 🟢".

---

## 📲 مستشعر البصمة البيومتري التفاعلي:
1. اضغط على زر **بصمة الموظف 📲** في الشريط الجانبي.
2. اختر اسم الموظف الذي ترغب في تسجيل دخوله أو خروجه من القائمة المنسدلة (مثالي لوضع شاشة تابلت عامة بمدخل الشركة).
3. اضغط بإصبعك **بشكل مستمر ودون رفع** على أيقونة البصمة الدائرية حتى يكتمل شريط الليزر الدائري ويتم التحقق.
4. بمجرد نجاح المسح:
   - سيتعرف النظام على بصمة الموظف فوراً ويقوم بتبديل لوحة التحكم إليه.
   - إذا لم يكن قد بصم دخول اليوم: سيتم تسجيل **حضور اليوم** بالوقت الفعلي الحالي.
   - إذا كان قد بصم حضوراً ولكنه لم يبصم انصرافاً: سيتم تسجيل **انصراف اليوم** بالوقت الفعلي الحالي.
   - يغلق الجهاز تلقائياً بعد 1.5 ثانية لإتاحة الفرصة للموظف التالي.

