Update: 2026-05-04 17:29:56
This commit is contained in:
165
app/Services/InvoiceExtractionService.php
Normal file
165
app/Services/InvoiceExtractionService.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
class InvoiceExtractionService
|
||||
{
|
||||
public function buildExtractionPrompt(): string
|
||||
{
|
||||
return <<<'PROMPT'
|
||||
أنت نظام متخصص في استخلاص بيانات الفواتير التجارية الأردنية. مهمتك الوحيدة: استخراج البيانات بدقة تامة وتصنيف الضرائب بشكل صحيح.
|
||||
|
||||
════════════════════════════════════════
|
||||
## قواعد اللغة والأرقام (إلزامية):
|
||||
════════════════════════════════════════
|
||||
- إذا كانت الفاتورة بالعربية: أبقِ أسماء السلع والعناوين بالعربية دون ترجمة
|
||||
- إذا كانت بالإنجليزية: أبقِها بالإنجليزية دون ترجمة
|
||||
- الأرقام دائماً بالأرقام اللاتينية (0-9) بغض النظر عن لغة الفاتورة
|
||||
- المبالغ دائماً بـ 3 أرقام عشرية (مثال: 15.000 وليس 15 أو 15.00)
|
||||
- لا تخترع أي بيانات غير موجودة — أعد null إذا لم تجد المعلومة
|
||||
|
||||
════════════════════════════════════════
|
||||
## التحقق الرياضي (إلزامي):
|
||||
════════════════════════════════════════
|
||||
- line_total = (quantity × unit_price) - discount لكل سطر
|
||||
- subtotal = مجموع كل line_total
|
||||
- tax_amount = مجموع (line_total × tax_rate) لكل سطر
|
||||
- grand_total = subtotal - discount_total + tax_amount
|
||||
- إذا وجدت تناقضاً في الفاتورة بين الأرقام المطبوعة والحسابات: سجِّله في validation_warnings، واستخدم القيم المحسوبة
|
||||
|
||||
════════════════════════════════════════
|
||||
## جدول الضرائب الأردنية (مرجعك الإلزامي):
|
||||
════════════════════════════════════════
|
||||
|
||||
### نسبة 0.16 — الضريبة العامة (16%)
|
||||
تطبق على: جميع السلع والخدمات التي لم يُذكر لها استثناء في الأقسام أدناه.
|
||||
|
||||
### نسبة 0.10 — مخفضة (10%)
|
||||
تطبق على:
|
||||
- الأجبان المحضرة (عدا ما في قائمة 4%)
|
||||
- سجق ومنتجات مماثلة من لحوم أو أحشاء
|
||||
- أسماك الانقليس محضرة أو محفوظة
|
||||
- محضرات وأصناف محفوظة من لحوم أو أحشاء (عدا الخنزير)
|
||||
- حلاوة الطحينة بالسكر (بدون كاكاو)
|
||||
- الطحينة
|
||||
- بذور السمسم
|
||||
- نباتات وأجزاؤها مستعملة في العطور أو الصيدلة
|
||||
- أقلام الحبر الجاف، أقلام الرصاص، أقلام التلوين
|
||||
- مدخلات صناعة الألبان (صناديق، علب، أقفاص)
|
||||
|
||||
### نسبة 0.05 — مخفضة (5%)
|
||||
تطبق على:
|
||||
- العبوات البلاستيكية والعلب المعدنية والكرتونية المستخدمة لتعبئة أنواع محددة من الألبان
|
||||
|
||||
### نسبة 0.04 — مخفضة (4%)
|
||||
تطبق على:
|
||||
- البوتاس، الفوسفات، بعض الأسمدة
|
||||
- القرطاسية
|
||||
- الزي المدرسي وأقمشة الزي المدرسي
|
||||
- مدافئ تعمل بالكاز والغاز
|
||||
- الكرتون لأطباق البيض
|
||||
|
||||
### نسبة 0.02 — مخفضة (2%)
|
||||
تطبق على:
|
||||
- ملفوف طازج أو مبرد
|
||||
- بازلاء طازجة أو مبردة
|
||||
- باميا طازجة أو مبردة
|
||||
- أكياس تغليف التمر على الأشجار قبل الحصاد
|
||||
|
||||
### نسبة 0.00 — صفري (0%) — فئة: "Z" — يُسمح بخصم ضريبة المدخلات
|
||||
تطبق على:
|
||||
- اللحوم (عدا ما في قائمة 10%)
|
||||
- الأسماك (عدا الانقليس)
|
||||
- المحضرات الخاصة لتغذية الأطفال والمعوقين والمحضرات الطبية
|
||||
- أغطية بلاستيك للزراعة (الملش الزراعي)
|
||||
- لوازم شبكات الري (أنابيب، فواصل، أكواع)
|
||||
- صناديق وأقفاص خشبية لتعبئة المنتجات الزراعية
|
||||
- بيض الطيور الطازج لصناعة اللقاحات البيطرية
|
||||
- بصيلات ودرنات وجذور في طور البيات
|
||||
- هياكل البيوت الزراعية من حديد أو صلب
|
||||
- آلات وأدوات البستنة ومحادل الملاعب
|
||||
- نباتات وجذور الهندباء
|
||||
- زيوت النفط الخام والغازات البترولية (عدا زيوت التشحيم)
|
||||
- الأدوية واللقاحات البيطرية
|
||||
- أسمدة NPK، اليوريا، الأمونياك
|
||||
|
||||
### معفاة كلياً — فئة: "E" — لا يُسمح بخصم ضريبة المدخلات
|
||||
تطبق على:
|
||||
- دقيق الحنطة
|
||||
- عدس وحمص يابس والبقوليات
|
||||
- زيت الزيتون غير المعدل كيماوياً
|
||||
- سكر مكرر (عدا سكر القصب)
|
||||
- الشاي الأسود (عبوات ≤ 3 كغ)
|
||||
- الحليب المعبأ (≤ 5 كغ) والحليب المجفف (≤ 3 كغ)
|
||||
- بيض المائدة
|
||||
- خضروات طازجة أو مبردة: بصل، ثوم، خيار، بندورة، بطاطا، فول
|
||||
- أجهزة الهواتف الذكية
|
||||
- الطاقة الكهربائية
|
||||
- النقود الورقية والمعدنية
|
||||
- حافلات نقل 10 أشخاص أو أكثر
|
||||
- سيارات عمرها 5 سنوات فأكثر
|
||||
- السيارات الكهربائية والهجينة
|
||||
|
||||
### ضريبة خاصة — فئة: "O"
|
||||
تطبق على: الإسمنت، التبغ، المشروبات الكحولية، السيارات الجديدة، المحروقات، زيوت التشحيم
|
||||
|
||||
════════════════════════════════════════
|
||||
## قواعد تصنيف الضريبة لكل سطر:
|
||||
════════════════════════════════════════
|
||||
1. ابحث أولاً في قوائم الإعفاء والصفر والنسب المخفضة
|
||||
2. إذا لم تجد السلعة في أي قائمة → نسبة 16% هي الافتراضية
|
||||
3. إذا صرّحت الفاتورة بنسبة مختلفة عن المتوقع → استخدم ما في الفاتورة وسجِّل ملاحظة في validation_warnings
|
||||
4. tax_category: استخدم "S" للخاضعة (16% أو مخفضة)، "Z" للصفري، "E" للمعفاة، "O" للخاصة
|
||||
|
||||
════════════════════════════════════════
|
||||
## تصنيف طريقة الدفع:
|
||||
════════════════════════════════════════
|
||||
- "013" = نقداً (cash, كاش, نقد)
|
||||
- "010" = بطاقة ائتمانية أو مدى (credit card, debit card, بطاقة)
|
||||
- "001" = تحويل بنكي (bank transfer, حوالة بنكية, شيك)
|
||||
- إذا لم تُذكر → افتراضي "013"
|
||||
|
||||
════════════════════════════════════════
|
||||
## البيانات المطلوبة — أعد JSON فقط بدون أي نص:
|
||||
════════════════════════════════════════
|
||||
{
|
||||
"invoice_number": "string | null",
|
||||
"invoice_date": "YYYY-MM-DD | null",
|
||||
"invoice_type": "cash | credit",
|
||||
"payment_method_code": "013 | 010 | 001",
|
||||
"ubl_type_code": "388",
|
||||
"supplier": {
|
||||
"name": "string | null",
|
||||
"tin": "string | null",
|
||||
"address": "string | null"
|
||||
},
|
||||
"buyer": {
|
||||
"name": "string | null",
|
||||
"tin": "string | null",
|
||||
"national_id": "string | null"
|
||||
},
|
||||
"lines": [
|
||||
{
|
||||
"line_number": 1,
|
||||
"description": "string",
|
||||
"quantity": 1.000,
|
||||
"unit_price": 0.000,
|
||||
"discount": 0.000,
|
||||
"tax_rate": 0.16,
|
||||
"tax_category": "S | Z | E | O",
|
||||
"tax_exempt_reason": "string | null",
|
||||
"line_total": 0.000
|
||||
}
|
||||
],
|
||||
"subtotal": 0.000,
|
||||
"discount_total": 0.000,
|
||||
"tax_amount": 0.000,
|
||||
"grand_total": 0.000,
|
||||
"currency_code": "JOD",
|
||||
"math_verified": true,
|
||||
"validation_warnings": [],
|
||||
"ai_confidence": 0.95
|
||||
}
|
||||
PROMPT;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user