أداة تحليل الإيصالات — عرض توضيحي (Automate Your Work)
أداة سطر أوامر بلغة Python تحوّل مجلداً من صور الإيصالات والفواتير إلى تقرير محاسبي عربي منظم، باستخدام رؤية Gemini. جزء من عرض "أتمتة عملك الحالي" في ورشة رقميّون.
1. ما هي هذه الأداة
هل مللت من إدخال بيانات الفواتير والإيصالات يدوياً؟ هذه الأداة هي الحل البرمجي الذكي لمشكلتك اليومية. تقوم الأداة بقراءة مجلد كامل يحتوي على صور الإيصالات والفواتير، وتحويلها تلقائياً وبلمح البصر إلى تقرير مالي منظم باللغة العربية. بالاعتماد على نموذج الرؤية (Vision) من Gemini، تستخرج الأداة اسم المتجر، وتاريخ الفاتورة، والعناصر التفصيلية، والمجموع الفرعي، والضرائب، والمبلغ الإجمالي من كل صورة دون الحاجة لكتابة حرف واحد بيدك.
النتيجة النهائية التي ستحصل عليها هي تقرير مالي احترافي يُحفظ في ملفين: ملف Excel ذكي باسم output/تقرير_الإيصالات.xlsx، وصفحة ويب تفاعلية باسم output/تقرير_الإيصالات.html. كلا الملفين يدعمان الكتابة من اليمين إلى اليسار (RTL) بشكل كامل، ويحتويان على جداول مجمعة وتلقائية للمجاميع حسب المتجر وحسب فئة المصروفات لتسهيل عملية المحاسبة وإدارة ميزانيتك.
2. الإعداد
لقد قمنا بإعداد وتجهيز كافة المتطلبات مسبقاً قبل الورشة لضمان سير العمل بسلاسة، ولكن إذا كنت ترغب في إعادة تشغيل الأداة بنفسك لاحقاً على جهازك، فإليك الخطوات البسيطة (وهي مطلوبة لمرة واحدة فقط):
أولاً، تفعيل البيئة الافتراضية الخاصة بالمشروع:
.venv\Scripts\activate
(أو source .venv/bin/activate إذا كنت تستخدم نظام ماك أو لينكس)
ثانياً، تثبيت المكتبات البرمجية المطلوبة:
pip install -r requirements.txt
مفتاح Gemini API يُقرأ تلقائياً من prototypes/.env (المتغير GEMINI_API_KEY) — لا حاجة لإدخاله يدوياً.
3. أوامر العرض المباشر
أثناء الشرح المباشر أمام الحضور، لديك خياران لتشغيل الأداة واستعراض قوتها:
- الوضع الحي (Live Mode): للاتصال المباشر بنموذج Gemini عبر الإنترنت ومعالجة الصور في الوقت الفعلي. يستغرق الأمر من 5 إلى 10 ثوانٍ فقط لمعالجة 8 صور بالكامل. شغّل الأمر التالي:
python analyze.py samples/
- الوضع المحلي المحفوظ (Cached/Offline Mode): هذا الوضع هو شبكة الأمان الخاصة بك في حال كان اتصال الإنترنت في قاعة التدريب غير مستقر أو بطيئاً. ستقوم الأداة بقراءة النتائج المحفوظة مسبقاً فوراً وبدون أي استهلاك للإنترنت:
python analyze.py samples/ --cached
بعد اكتمال التشغيل في أي من الوضعين، ستجد التقارير الجاهزة بانتظارك مباشرة في المجلد المخصص للمخرجات:
- تقرير Excel التفاعلي:
output/تقرير_الإيصالات.xlsx - تقرير HTML الأنيق:
output/تقرير_الإيصالات.html
نصيحة للعرض المباشر: جرّب الوضع الحي أولاً إن كانت الشبكة جيدة — وإن تعثر الاتصال أو تأخر لأي سبب، انتقل فوراً إلى --cached دون أي إحراج؛ فالنتيجة النهائية على الشاشة متطابقة تماماً.
4. ماذا تقول أثناء العرض
بينما يتم تشغيل الأمر في نظام الطرفية (Terminal)، يمكنك مخاطبة الحضور بهذا الأسلوب الودي والقريب:
"الآن، كما تلاحظون على الشاشة، الأداة تقوم بقراءة 8 إيصالات وصور فواتير مختلفة تماماً قمنا بالتقاطها بهواتفنا. لدينا هنا فاتورة مطعم، وإيصال سوبرماركت، وفاتورة صيدلية، وورقة مشتريات من محل قطع غيار ومواد بناء، وإيصال شحن رصيد هاتف، وحتى فاتورة خدمات. تلاحظون أن الأداة تقوم الآن بفحص كل صورة بدقة، وتستخرج اسم الجهة، والتاريخ، والتفاصيل، والضرائب، والمجموع النهائي، دون أن نضطر لكتابة رقم واحد يدوياً. هذا هو سحر الأتمتة الحقيقي!"
وبمجرد أن يفتح تقرير HTML في المتصفح أمامهم، وجّه أنظارهم للتالي:
"انظروا معي إلى هذه النتيجة! التقرير مفتوح تلقائياً وبتنسيق كامل من اليمين إلى اليسار ليناسب لغتنا العربية. لاحظوا كيف تم تجميع المصاريف تلقائياً بناءً على اسم المتجر، وكيف صُنّفت بدقة حسب نوع المصروف (مطعم، سوبر ماركت، صيدلية، قطع غيار، اتصالات، خدمات). والأهم من ذلك كله، دقة الأرقام؛ فكل عملية جمع صحيحة ومطابقة تماماً (المجموع الفرعي زائد الضريبة يساوي الإجمالي) لكل إيصال على حدة."
5. كيف تكيّف هذه الأداة لعملك
السر الكبير هنا هو أن هذه البنية البرمجية (قراءة الصور ← استخراج البيانات المهيكلة ← إنتاج تقرير Excel و HTML) ليست حكراً على الفواتير والإيصالات فحسب! يمكنك تطبيق نفس الفكرة بالضبط على أي عملية ورقية تستهلك وقتك في عملك أو مشروعك. إليك بعض الأفكار العملية:
- الموارد البشرية وكشوف الحضور: التقط صوراً لكشوف الحضور والانصراف الموقعة يدوياً أو دفاتر الدوام، ودع النموذج يستخرج الساعات ويصنع لك كشفاً جاهزاً لكل موظف.
- إدارة المخازن والجرد: صوّر كشوفات الجرد اليدوية أو سندات استلام البضائع من الموردين، لتحصل على تقرير مخزون رقمي منظم وتلقائي بالكميات والأنواع.
- سندات الشحن والتوصيل: صوّر سندات التوصيل الموقعة من الزبائن أو السائقين، لتستخرج إجمالي المبالغ والطلبات المستلمة مقسمة حسب السائق، أو خط السير، أو العميل.
- مطالبات ومصروفات الموظفين: بدلاً من مراجعة الحسابات اليدوية المملة، يرفع الموظفون صور إيصالاتهم، وتستخرج الأداة تقريراً فورياً ومصنفاً للقسم المالي لاعتماده.
تذكر دائماً الفكرة الجوهرية: الشيء الوحيد الذي يتغير بين كل هذه التطبيقات المختلفة هو صياغة "التوجيه" (Prompt) المكتوب للنموذج — أي تحديد البيانات التي تريد استخراجها من الصورة — بينما يظل هيكل الأداة البرمجية بالكامل (قراءة الصور، التخزين المؤقت، بناء ملفات Excel و HTML) كما هو دون تغيير. راجع PROMPTS.md لترى التوجيه المستخدم هنا بالتفصيل وكيفية تعديله. كتابة توجيه ذكي + كود بسيط = أتمتة كاملة لأعمالك الورقية.
6. لماذا هذا المثال بالذات
بُنيت هذه الأداة كإجابة عملية ومباشرة على سؤال طرحه أحد المسجّلين في هذه الورشة، وهو مهندس أنظمة سأل تحديداً كيف يمكنه أتمتة عمله اليومي. هذا المشروع نموذج حي وقابل للتعديل يوضّح كيف يمكن لتوجيه واضح لنموذج ذكاء اصطناعي، مع سكربت بسيط، أن ينهي عبء إدخال البيانات المتكرر — وينطبق الأمر على أي عمل ورقي روتيني، كما في القسم السابق.
7. الموثوقية
تعتمد الأداة على نظام تخزين مؤقت (Caching). عند استخراج بيانات أي صورة بنجاح، تُحفظ النتيجة فوراً كملف JSON في مجلد cache/. هذا يعني أن إعادة تشغيل الأداة لا تستهلك رصيداً جديداً من واجهة برمجة التطبيقات للصور التي عولجت مسبقاً. كما أن خيار --cached يتيح تشغيل الأداة بالكامل دون اتصال بالإنترنت، وهو خيارنا الآمن كخطة بديلة لنجاح العرض المباشر أمام الجمهور مهما كانت ظروف الشبكة.
Reference (English)
- Run:
python analyze.py <folder>(live, calls Gemini) orpython analyze.py <folder> --cached(offline, instant, readscache/*.json). - Model:
gemini-3.1-flash-lite(override with--model). Per-image timeout: 20s. Falls back to cache on any error; degrades to a labeled placeholder row if no cache exists. - Outputs:
output/تقرير_الإيصالات.xlsx(4 sheets: receipts, totals by vendor, totals by category, line-item detail) andoutput/تقرير_الإيصالات.html(single page, RTL, brand-styled). - Credentials:
GEMINI_API_KEYread fromprototypes/.env, never printed or logged. - See
PROMPTS.mdfor the extraction prompt and the reasoning behind it.