خطة عمل العملات المتعددة

✳️ أولًا: توضيح شامل حول التعامل بين العملات والتقارير


🧾 1. الشراء بأي عملة؟

  • كل عملية شراء تسجّل بالعملة التي تمت بها فعليًا (عملة المورد أو الدفع).
  • ممكن تاجر في الأردن يشتري من تركيا بالليرة التركية.

📌 إذن:

فاتورة الشراء = تُخزن بعملة “الليرة” في هذه الحالة.


💰 2. البيع بأي عملة؟

  • يتم البيع حسب عملة الفرع الذي ينفذ العملية.
  • كل فرع مرتبط بعملة تشغيلية (functional currency)، مثلاً:
    • فرع الأردن → JOD
    • فرع تركيا → TRY
    • فرع دبي → AED

📌 إذن:

فواتير البيع = تُخزن بعملة الفرع مباشرة.


📊 3. التقارير بأي عملة؟

  • كل العمليات (شراء/بيع/مصاريف…) تُسجّل بعملتها الخاصة.
  • ثم عند استخراج التقرير، يتم تحويل جميع القيم إلى عملة رئيسية موحدة (مثلاً USD أو JOD).

⬅️ يتم ذلك باستخدام جدول أسعار صرف محفوظ فيه التاريخ والسعر.


🔁 4. فرق سعر الصرف بين وقت العملية ووقت التقرير؟

مثال:

  • قبضت 1000 ليرة تركية بتاريخ 1 يناير، وكان سعر الصرف = 30 → تساوي 33.33 USD
  • في التقرير السنوي بتاريخ 30 يونيو، سعر الصرف صار = 40 → نفس 1000 ليرة = 25 USD

🎯 النظام يقوم بـ تحويل حسب السعر في وقت العملية الفعلية، مش السعر الحالي.

📌 إذن:

الأرباح والخسائر تُحسب بدقة حسب سعر الصرف المسجّل وقت العملية (وليس حسب تقرير اليوم).

🔒 هذا يمنع التضليل المالي.


✅ الآن: خطة العمل الكاملة خطوة بخطوة


🔹 المرحلة 1: البنية الأساسية – العملات

  1. أضف عمود currency_code في جدول branches
    • كل فرع يعمل بعملة تشغيله الخاصة.
  2. أنشئ جدول currencies يحتوي على كل العملات الأساسية:
    • currency_code مثل USD, JOD, TRY
    • name_ar, symbol, decimal_places, …
  3. أنشئ جدول exchange_rates لتسجيل أسعار الصرف اليومية:
    • currency_code, base_currency, rate, date

🔹 المرحلة 2: أسعار البيع حسب الفرع

  1. أنشئ جدول branch_product_prices:
    • branch_id, product_id, sale_price, min_sale_price
  2. عند عرض المنتج داخل الفاتورة:
    • يتم جلب السعر من branch_product_prices حسب الفرع المختار.
  3. لو ما في سعر خاص للفرع؟
    • يرجع النظام للسعر العام من warehouses_products.

🔹 المرحلة 3: تسجيل العمليات

  1. تعديل فواتير البيع والشراء لتحتوي:
    • currency_code
    • exchange_rate_at_time
  2. عند إنشاء أي عملية مالية:
    • يتم أخذ العملة من الفرع (أو المورد).
    • يتم جلب سعر الصرف الحالي وحفظه مع العملية.

🔹 المرحلة 4: حركة النقد والخزائن

  1. الخزائن المرتبطة بكل فرع تعمل بنفس عملة الفرع.
    • cash_boxes يجب أن تحتوي على currency_code.
  2. عند التحويل بين خزنتين بعملتين مختلفتين:
    • يتم تسجيل العملية بسعر صرف لحظي محفوظ.
  3. cash_transactions يسجل دائمًا العملة وقيمتها المحولة (إن وجدت).

🔹 المرحلة 5: التقارير المالية الموحدة

  1. التقرير الشهري/السنوي يكون على مستوى vendor.
  2. عند جمع البيانات من عدة فروع أو بعملات مختلفة:
  • يتم تحويل القيم إلى base_currency حسب exchange_rate_at_time المسجل في كل عملية.
  1. تُعرض تفاصيل التحويل داخل التقرير (لتوضيح الفروقات في الصرف إن وُجدت).

🔹 المرحلة 6: الإعدادات والمرونة

  1. يُسمح لكل تاجر بتحديد:
  • base_currency (عملة التقارير).
  • إمكانية السماح بعملات متعددة أو لا.
  1. واجهة تغيير أسعار البيع لكل فرع يجب أن تكون بسيطة وسريعة.

✅ مثال واقعي داخل النظام:

  • فرع اسطنبول (TRY) اشترى منتجات بـ 1000 ليرة (TRY)
  • سجلنا سعر الصرف: 1 USD = 30 TRY
    → النظام يحفظ الفاتورة بالليرة، ويحسب تكلفتها بـ 33.33 USD
  • بعد شهرين، سعر الصرف صار 40
    → عند مراجعة التقارير، ما نعيد الحساب، نعرض الفاتورة بقيمتها الأصلية حسب وقتها (33.33 USD)





خطة تنفيذ نظام العملات المتعددة وأسعار البيع حسب الفروع


🟢 المرحلة 1: التحضير البنيوي

1. ربط كل فرع بعملة

  • تعديل جدول branches: إضافة عمود currency_code (مثل JOD, USD, TRY).
  • في حال لم يتم تحديد عملة للفرع، يعتمد على vendors.currency_code مؤقتًا كخيار fallback.

2. جدول العملات

  • إنشاء جدول currencies:
    • currency_code, name_ar, symbol, decimal_places, status

3. جدول أسعار الصرف

  • إنشاء جدول exchange_rates:
    • currency_code, base_currency, exchange_rate, rate_date

4. ربط الخزينة بالعملة

  • تعديل جدول cash_boxes: إضافة currency_code لتحديد عملة الخزنة.

🟡 المرحلة 2: إدارة الأسعار حسب الفروع

5. إنشاء جدول branch_product_prices

  • الأعمدة: branch_id, product_id, sale_price, min_sale_price
  • هذا هو الجدول المركزي الذي يُخزن سعر البيع لكل منتج في كل فرع.

6. تعديل شاشة تعديل المنتج

  • إضافة تبويب لعرض/تعديل الأسعار حسب الفروع مباشرة.

🟠 المرحلة 3: المعالجة أثناء العمليات

7. تعديل فواتير البيع

  • إضافة الأعمدة:
    • currency_code (عملة الفاتورة)
    • exchange_rate_at_time (لحفظ سعر الصرف وقت البيع)

8. تعديل منطق إنشاء الفاتورة

  • عند اختيار الفرع، يتم تلقائيًا:
    • تحديد العملة من الفرع
    • جلب سعر البيع من branch_product_prices
    • تسجيل سعر الصرف من exchange_rates

9. تعديل عمليات الشراء (إن وجدت)

  • نفس المنطق أعلاه ينطبق على الشراء، ويُخزن العملة المستخدمة وقت الشراء.

🔵 المرحلة 4: النقد والتحويلات

10. عند التحويل بين خزائن بعملات مختلفة

  • يجب تسجيل العملية بسعر الصرف في تلك اللحظة.
  • تُحسب الفرق في القيمة عند التحويل وتسجل كـ “فرق صرف”.

11. تعديل cash_transactions

  • إضافة currency_code, exchange_rate_used, original_amount لتوثيق كل عملية.

🔴 المرحلة 5: التقارير الذكية

12. إعداد العملة الأساسية للتقارير

  • يتم تحديد base_currency في إعدادات النظام (مثلاً USD).

13. توليد التقارير:

  • يتم تحويل كل العمليات إلى العملة الأساسية حسب exchange_rate_at_time المخزّن.
  • يجب توفير خيارين:
    • عرض الأرقام حسب العملة الأصلية للعملية.
    • أو توحيد الأرقام وعرضها بالعملة الأساسية.

14. التقارير تشمل:

  • تقارير المبيعات
  • الأرباح
  • النقدية بالخزائن
  • حركة المنتجات
  • الجرد

🟣 المرحلة 6: الواجهات والإعدادات

15. إنشاء الصفحات التالية:

الصفحةالوظيفة
currencies_list.phpإدارة العملات
exchange_rates.phpأسعار الصرف
branch_prices.phpأسعار المنتجات لكل فرع
branch_currency_settings.phpإعداد العملة لكل فرع

16. أزرار القائمة (أضفتها سابقًا)

  • يتم ربط هذه الصفحات مباشرة مع الأزرار:
phpCopyEdit<li class="load_new_panel_page" data-page="currencies_list" data-target="middle">إدارة العملات</li>
<li class="load_new_panel_page" data-page="exchange_rates" data-target="middle">أسعار الصرف</li>
<li class="load_new_panel_page" data-page="branch_prices" data-target="middle">أسعار البيع حسب الفروع</li>
<li class="load_new_panel_page" data-page="branch_currency_settings" data-target="middle">عملة كل فرع</li>

📌 ملحوظات ختامية:

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