<div dir="rtl">

## **كيفية عمل أسعار الصرف في نظام حساب الزكاة؟**

**الهدف:**

الزكاة هي ممارسة إسلامية تتمثل في التبرع بجزء من الثروة للجمعيات الخيرية. عند حساب الزكاة، قد تحتاج أحيانًا إلى التحويل بين عملات مختلفة (مثل، من الدولار الأمريكي إلى الريال السعودي). هذا الكود هو جزء من برنامج أكبر يساعد في إدارة عمليات تحويل العملات هذه.

تساعد الخوارزمية في تتبع كيفية تغير قيمة العملة (مثل الدولار واليورو والأصول وما إلى ذلك) مقارنة بعملتك المحلية بمرور الوقت. هذا مهم للزكاة لأنه يضمن حسابات دقيقة لثروتك بعملتك المحلية في الوقت الحالي.

**تصور الأمر كتسلسل زمني:**

* **الوقت أ، ب، ج:** هذه لحظات محددة قمت فيها بتسجيل سعر الصرف. فمثلا:
    * **الوقت أ:** 1 دولار أمريكي = 3.75 ريال سعودي
    * **الوقت ب:** 1 دولار أمريكي = 3.78 ريال سعودي
    * **الوقت ج:** 1 دولار أمريكي = 3.80 ريال سعودي

* **منطق الخوارزمية:**
    1. **أحدث سعر (ج):** إذا طلبت سعر الصرف دون تحديد وقت، فإن الخوارزمية تعطيك أحدث سعر لديها (الوقت ج في مثالنا).
    2. **السعر بين الأوقات:** إذا طلبت سعر الصرف في وقت محدد:
        * بين الوقت ب والوقت ج: ستحصل على السعر من الوقت ب.
        * بين الوقت أ والوقت ب: ستحصل على السعر من الوقت أ.
    3. **قبل الوقت أ:** إذا طلبت السعر قبل وجود أي سجلات، فإن الخوارزمية تفترض أن سعر الصرف هو 1: 1 بعملتك المحلية (1 دولار أمريكي = 1 ريال سعودي). هذا لأنه ليس لديه معلومات للمتابعة.

**لماذا هذا مهم للزكاة:**

* **العدالة:** يتم حساب الزكاة على ثروتك في وقت محدد. باستخدام سعر الصرف الصحيح لذلك الوقت، فإنك تضمن تقييمًا عادلاً ودقيقًا لأصولك. ويضمن الإنصاف من خلال حساب التقلبات في أسعار الصرف، خاصة إذا كنت قد حصلت على الأصل في وقت كان سعر الصرف مختلفًا فيه.
* **الدقة:** تتقلب قيم العملات. إذا كنت تستخدم سعر الصرف اليوم للأصول التي احتفظت بها منذ سنوات، فسيكون ذلك غير دقيق. هذه الخوارزمية تساعد في تجنب هذه المشكلة. يضمن استخدام سعر الصرف الصحيح أن يعكس حساب الزكاة بدقة قيمة أصولك بعملتك المحلية، مما يؤدي إلى تقييم عادل لالتزامك بالزكاة.
* **الشفافية:** توفر الخوارزمية الشفافية من خلال الإشارة بوضوح إلى سعر الصرف المستخدم في الحساب، مما يسمح لك بالتحقق من دقة تقييم الزكاة.

يتم حساب الزكاة غالبًا بناءً على قيمة الأصول بعملة معينة (مثل الذهب أو الفضة). لكن الناس قد يحتفظون بثرواتهم بعملات مختلفة. يضمن هذا الكود أن يستخدم حساب الزكاة أسعار الصرف الصحيحة للحصول على تقييم دقيق لثروة الشخص.

في الحالات التي يتم فيها استخدام خوارزمية الزكاة لأصول مثل السيارات أو المنازل أو المنتجات القابلة للتداول، يلعب سعر الصرف دورًا حاسمًا في تحديد قيمتها بعملتك المحلية.

**إليك كيفية عملها:**

1. **تقييم الأصول:**

* تتمثل الخطوة الأولى في تحديد قيمة الأصل بعملته الأصلية. فمثلا:
    * يمكن تقييم السيارة بمبلغ 20.000 دولار أمريكي.
    * قد يتم تقييم المنزل بمبلغ 300000 يورو.
    * قد تبلغ القيمة الإجمالية للمنتجات الموجودة على الرف 500000 ين ياباني.

2. **استرداد سعر الصرف:**

* تقوم الخوارزمية بعد ذلك بجلب سعر الصرف المناسب لتاريخ حساب الزكاة. هذا هو المكان الذي يأتي فيه مفهوم المخطط الزمني الذي ناقشناه سابقًا. إنه يضمن أنك تستخدم سعر الصرف الصحيح للوقت الذي امتلكت فيه الأصل أو حصلت عليه.

3. **التحويل إلى العملة المحلية:**

* تضرب الخوارزمية قيمة الأصل بعملته الأصلية في سعر الصرف الذي تم استرداده لحساب قيمته بعملتك المحلية. على سبيل المثال:
    * إذا كان سعر الصرف في تاريخ حساب الزكاة هو 1 دولار أمريكي = 3.75 ريال سعودي، فسيتم تقييم السيارة بمبلغ 20000 دولار أمريكي * 3.75 ريال سعودي / دولار أمريكي = 75000 ريال سعودي.

4. **حساب الزكاة:**

* بمجرد حصولك على قيمة الأصل بعملتك المحلية، يمكنك تطبيق قواعد حساب الزكاة القياسية بناءً على نوع الأصل.
    * بالنسبة للسيارات والمنازل المستخدمة للاستخدام الشخصي، لا تستحق الزكاة بشكل عام.
    * بالنسبة للأصول القابلة للتداول مثل المنتجات الموجودة على الرف، يتم حساب الزكاة عادةً كنسبة مئوية (غالبًا 2.5٪) من قيمتها.

5. **تطبيق أسعار الصرف:**
* تقوم الخوارزمية بحساب سعر الصرف تلقائيًا في الحالات التالية:
  * أثناء التحويل بين الحسابات.
  * أثناء التحقق من التزامات الزكاة للصناديق في كل حساب.
  * أثناء بناء أجزاء الدفع للقيم الجماعية المراد خصمها من الحسابات المستحقة على حسابات أخرى.
  * أثناء حساب الزكاة نفسها على جميع الصناديق داخل الحساب.

**الكود بعبارات بسيطة:**

الكود يفعل هذا بشكل أساسي:

1. **مخازن الأسعار:** يسجل سعر الصرف كلما قمت بتوفيره.
2. **يبحث عن الأسعار:** عندما تحتاج إلى سعر، فإنه يجد السعر الصحيح بناءً على الوقت الذي تحدده.
3. **يتعامل مع البيانات المفقودة:** إذا لم يكن لديه معدل لوقت محدد، فإنه يستخدم قيمة افتراضية معقولة.

**الغرض من الكود:**

يقوم هذا الجزء المحدد من الكود بشيئين رئيسيين:

1. **تسجيل أسعار الصرف:** يتيح لك تخزين معلومات حول مقدار قيمة عملة واحدة مقارنة بعملة أخرى في نقطة زمنية معينة.
2. **استرداد أسعار الصرف:** يتيح لك البحث عن سعر صرف عملة معينة في وقت محدد.

**كيف يعمل:**

1. **المعلمات (المدخلات):**
   - الحساب (`account`): اسم أو رمز الحساب الذي تتعامل معه (على سبيل المثال، "USD" للدولار الأمريكي).
   - تاريخ الإنشاء (`created`): التاريخ والوقت الذي كان فيه سعر الصرف صالحًا (إذا كنت تسجل سعرًا جديدًا).
   - معدل الصرف (`rate`): سعر الصرف الفعلي (على سبيل المثال، 1 دولار أمريكي = 3.75 ريال سعودي).
   - الوصف (`description`): أي معلومات إضافية حول سعر الصرف.

2. **الإجراءات:**
   - **إذا قمت بتوفير `معدل`:**
     - يتحقق الكود مما إذا كان معدلًا صالحًا (أكبر من الصفر).
     - يقوم بحفظ السعر والوقت وأي وصف في تاريخ الحساب.
   - **إذا لم تقم بتوفير `معدل`:**
     - يجد الكود أحدث سعر صرف صالح للتاريخ الذي تهتم به ويعيده.
     - إذا لم يكن هناك سعر صالح، فإنه يُرجع قيمة افتراضية (عادةً ما تعني صرف 1: 1).

**نقاط رئيسية:**

- يستخدم المتغير `_vault` لتخزين أسعار الصرف، ويعمل كنظام لحفظ السجلات بأمان.
- لديه وظيفة `_step`، مخصص لتتبع التغييرات أو التحديثات في النظام.
- خيار `debug` مخصص لاختبار الكود واستكشاف الأخطاء وإصلاحها.
</div>