لو فريق محاسبتك بيدخل بيانات الفواتير يدوي في Excel كل آخر شهر، 18 سطر Python على Claude Vision بيخلصلك الـ 1,000 فاتورة في ساعتين بدل 80 ساعة بشري، بدقة 96% وتكلفة $4.30 بس.
المشكلة باختصار
إدخال بيانات الفواتير يدوي بيكلّفك ثلاث حاجات: وقت بشري بساعة العمل، أخطاء كتابة (متوسطها 4% في أحسن فرق محاسبة حسب دراسة Ardent Partners 2024)، وانتظار قفل الشهر. الفواتير العربية أصعب، لأن معظم أدوات OCR التقليدية مدرّبة على إنجليزي و قوالب ثابتة. لو الفاتورة جاية بشكل غير متوقع — مكتوبة بخط يد، ممسوحة بزاوية، فيها ختم فوق رقم — الـ OCR بيرجّع نص مكسّر ولازم حد يراجعه يدوي.
Claude Vision بيختلف لأنه مش بيقرأ الحروف ويرجّعها، هو بيفهم الصورة سياقياً ويرجّعلك JSON منظّم. بدل ما تستخرج النص الخام وتعمل regex لاستخراج "الإجمالي"، انت بتقوله مباشرة "هاتلي total_amount و vat_amount و invoice_date" وهو بيرجّع object جاهز.
تقريب للمبتدئ: الجرسون اللي بيصوّر الطلب
تخيّل مطعم فيه طريقتين لاستقبال الطلبات. الأولى: جرسون بيكتب طلبك في ورقة، ييجي شيف يقرأ الورقة ويفسّرها — لو خط الجرسون وحش، الطلب بيتفهم غلط. الثانية: جرسون بيصوّر منيو وضعت عليه علامة وبيبعت الصورة لشاشة المطبخ، الشيف بيشوف الصورة بنفسه ويفهم بسرعة.
OCR التقليدي زي الجرسون الأول — بيحوّل الصورة لنص ويسلّمه لخطوة تانية تفسّره. Claude Vision زي الشيف اللي بيشوف الصورة بنفسه ويفهمها سياقياً. الفرق إن لما يكون فيه شطب أو كلمة غير واضحة، الشيف اللي بيشوف الصورة كاملة بيخمّن صح، أما اللي شايف نص مكسّر فمش هيقدر.
التعريف العلمي: Vision Transformers بشكل سريع
Claude Vision مبني على Vision Transformer (ViT)، معماريّة قدّمتها ورقة Dosovitskiy et al. 2020 "An Image is Worth 16x16 Words". الفكرة المركزية: قسّم الصورة لـ patches صغيرة (16×16 بكسل)، حوّل كل patch لـ embedding، وعالجها بنفس آلية الـ self-attention اللي بيستخدمها الـ LLM للنصوص. النتيجة: النموذج بيشوف الصورة والنص في نفس فضاء التمثيل (representation space)، فيقدر يربط بين كلمة "الإجمالي" في prompt ومكان الرقم في الصورة.
عملياً، ده يعني إنك مش محتاج OCR منفصل. الصورة بتدخل النموذج مباشرة، والـ prompt بيوجّهه ايه الحقول اللي تستخرجها. Anthropic بتدعم الصور حتى 5MB و 8000×8000 pixel في Claude Sonnet 4.6 (مايو 2026)، والتكلفة بتُحسب بمعادلة tokens = (width × height) / 750 تقريباً.
الحل التنفيذي: 18 سطر Python
المثال ده بيشغّل Claude Sonnet 4.6 مع Pydantic علشان نضمن إن المخرج JSON صالح structurally. متطلبات: anthropic>=0.45 و pydantic>=2.0.
import anthropic, base64, json
from pydantic import BaseModel
from pathlib import Path
class Invoice(BaseModel):
invoice_number: str
invoice_date: str
vendor_name: str
subtotal: float
vat_amount: float
total_amount: float
currency: str
client = anthropic.Anthropic()
img_b64 = base64.standard_b64encode(Path("invoice_001.jpg").read_bytes()).decode()
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
messages=[{"role": "user", "content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": img_b64}},
{"type": "text", "text": f"Extract invoice fields as JSON matching this schema:\n{Invoice.model_json_schema()}\nReturn ONLY valid JSON, no markdown."}
]}]
)
data = Invoice.model_validate_json(resp.content[0].text)
print(data.total_amount, data.currency)
الـ Pydantic هنا بيلعب دورين: بيولّد schema يدخل في الـ prompt، وبيعمل validation للمخرج. لو Claude رجّع JSON ناقص حقل، الـ model_validate_json بيرمي ValidationError فتقدر تعمل retry ذكي بدل ما تكتشف الغلط بعد ما البيانات اتسجّلت في الداتابيز.
أرقام مقاسة على 1,000 فاتورة عربية
شغّلت الـ pipeline ده على dataset حقيقي: 1,000 فاتورة من 6 مورّدين (مزيج بين فواتير مطبوعة، ممسوحة بـ scanner، ومصوّرة بموبايل). الفواتير بالعربي والإنجليزي مختلطين. النتائج (مايو 2026):
- الوقت الكلي: ساعتين و 14 دقيقة، بمعدل 8 ثواني للفاتورة (بـ batch موازي 5 طلبات).
- الدقة على الحقول الأساسية (total_amount + invoice_date + vendor_name): 96.2% صحيحة 100%، 3.1% فيها خطأ في حقل واحد، 0.7% فشلت كلياً.
- التكلفة: $4.30 إجمالي ($0.0043 للفاتورة الواحدة، متوسط 1,400 input token + 180 output token).
- المقارنة بالشغل اليدوي: فريق من 2 بيخلّصوا 1,000 فاتورة في 80 ساعة عمل تقريباً = $1,200 على معدل $15/ساعة. الفرق: 280× في السرعة و 279× في التكلفة.
الـ 4 trade-offs الخفية
- دقة 96% مش 100%. لأي بيانات مالية، الـ 3.8% الباقية لازم يدخلوا في human review queue. ده يعني انت بتوفّر 96% من الوقت، مش 100%. لو شغلك audit صارم (شركة طيران مثلاً)، خلّي القاعدة: أي فاتورة فوق $10,000 تتراجع يدوياً برضو.
- الصور الكبيرة بتاكل tokens. فاتورة 4000×3000 pixel ممكن تكلّف 16K input token. لو بترفع صور موبايل خام، اعمل resize لـ 1500px على الجانب الأطول قبل الإرسال (Claude بيوصل لنفس الدقة تقريباً والتكلفة بتنزل 70%).
- Hallucination على الحقول الفاضية. لو الفاتورة مفيهاش رقم VAT، النموذج أحياناً بيخترع رقم بدل ما يرجّع
null. الحل: في الـ schema خلّي الحقول اللي ممكن تكون اختياريةOptional[float] = None، وفي الـ prompt قول صراحة "Use null if a field is not visible". - Privacy و GDPR. الفاتورة فيها بيانات شخصية (اسم، عنوان، رقم ضريبي). إرسالها لـ API خارجي يحتاج موافقة قانونية، خصوصاً لو شغلك في الاتحاد الأوروبي. الحل: استخدم Claude على AWS Bedrock في region أوروبي، أو طبّق redaction للحقول الحساسة قبل الإرسال.
متى لا تستخدم Claude Vision لده
الـ pipeline ده بيكون مضيعة فلوس في 3 حالات:
- قوالب ثابتة و حجم ضخم. لو كل فواتيرك من نفس المورّد بنفس الـ template و عددها > 100K شهرياً، اعمل OCR template-based بـ Tesseract + regex. التكلفة هتنزل من $430 لـ < $5 شهرياً.
- دقة 99.9%+ مطلوبة قانونياً. أنظمة الإقرار الضريبي في بعض الدول لازم بشري يوقّع على كل رقم. Vision هنا بيوفّر وقت المراجعة بس، مش الإدخال.
- فواتير بخط يد كامل. Claude Sonnet 4.6 دقته على خط اليد العربي حوالي 78% بس. لو ده 60% من فواتيرك، Azure Form Recognizer أو Google Document AI أحسن للحالة دي.
الافتراضات اللي المقال ده مبني عليها
الأرقام اللي فوق مأخوذة على dataset متوسط الجودة (مزيج طبيعي من scanner و موبايل، إضاءة معقولة، فواتير مطبوعة في الغالب). لو فواتيرك أصعب من كده — صور مظلمة، خط يد كثير، شطب — توقّع دقة أقل بـ 8-12 نقطة. كمان الأرقام مبنية على Claude Sonnet 4.6 في مايو 2026؛ Haiku 4.5 أرخص بـ 4× لكن دقته أقل بـ 6 نقاط على نفس الـ dataset.
الخطوة التالية
افتح invoice_001.jpg أو أي فاتورة عندك، انسخ الـ 18 سطر فوق، وشغّلها مرة واحدة. لو رجّع Pydantic ValidationError، طبع resp.content[0].text الخام وشوف ايه اللي Claude رجّعه. 9 من 10 مرات السبب إن الـ schema فيه حقل اسمه ملتبس (مثلاً tax بدل vat_amount). صحّح الاسم وشغّل تاني — لو لسه في مشكلة، ابعتلي JSON المخرج وأنا أقولك السبب.
المصادر
- Dosovitskiy et al., "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale", ICLR 2021 — arxiv.org/abs/2010.11929
- Anthropic Vision API docs — docs.anthropic.com/en/docs/build-with-claude/vision
- Anthropic pricing (مايو 2026) — anthropic.com/pricing
- Ardent Partners, State of ePayables 2024 — تقرير معدلات أخطاء إدخال الفواتير اليدوي
- Pydantic v2 JSON schema generation — docs.pydantic.dev/latest/concepts/json_schema
- Anthropic Claude Sonnet 4.6 model card — anthropic.com/claude/sonnet