🧾 طباعة فاتورة العميل — التصميم النهائي

LIS Customer Tax Invoice — مُحدّث بعد ردودك · الباك إند للضريبة جاهز فعلاً · الشغل المتبقّي فرونت إند غالبًا

📅 2026-05-30 (مُحدّث) 💰 ضريبة 15% لغير السعوديين — جاهزة بالباك إند ✅ 🖨️ حراري / A4 / A5 — يتحدد من السيتنج 🌐 لغة الفاتورة: عربي / إنجليزي / الاتنين 🔳 QR شكلي الآن — امتثال كامل لاحقًا
أهم تحديث بعد الفحص: اكتشفت إن الباك إند بيحسب الضريبة بالفعل بنفس قاعدتك بالظبط — LabInvoice::recalculateTotals() بيطبّق 15% على غير السعودي (والسعودي/غير المحدّد = صفر)، والـ B2B (معمل خارجي) دايمًا بضريبة. النسبة من إعداد lis.vat_rate_percentage (افتراضي 15، متزرّع فعلاً). يعني مفيش شغل باك إند للضريبة — الشغل المتبقّي كله تقريبًا فرونت إند (الطباعة + الإعدادات).

0 ردودك — والقرارات المعتمدة

السؤالردّكالقرار في التصميم
س1 — الضريبة «بناخد 15% على أي واحد غير سعودي زي ما هو موجود في الريكوست، يظهر في الفاتورة» VAT 15% للمريض غير السعودي فقط (الجنسية من الريكوست). جاهزة بالباك إند ✅. النسبة قابلة للتعديل من السيتنج.
س2 — جهة التعاقد «اختياري» حقل اختياري — يظهر لو موجود (طبيب/تأمين/عيادة)، ويتساب فاضي لو مفيش.
س3 — شكل الطباعة «هنفعّل من السيتنج أنهي اللي تشتغل» إعداد الشكل الافتراضي في السيتنج (حراري 80mm / A4 / A5) + إمكانية طباعة الشكل الآخر وقت الطباعة.
س4 — الـ QR «دلوقتي شكل بس، لسه هنعمل امتثال كامل» QR شكلي الآن (يتولّد في الفرونت بمكتبة qrcode الموجودة). الامتثال الكامل (ربط بالهيئة/فاتورة إلكترونية) مرحلة لاحقة.
س5 — اللغة «في السيتنج اختيار: عربي بس / إنجليزي بس / الاتنين» إعداد لغة الفاتورة بـ 3 خيارات. الافتراضي «الاتنين» (ثنائي زي النموذج).
س6 — الرقم الضريبي «ممكن يتدخل في المستقبل» التصميم يتعامل معاه بمرونة: يظهر لو موجود، ويتخفي لو فاضي. (شرط لصلاحية الفاتورة لاحقًا.)

1 قاعدة الضريبة (جاهزة بالباك إند) — مثال سعودي مقابل غير سعودي

الضريبة بتتحدد أوتوماتيك حسب جنسية المريض في الريكوست. مفيش إدخال يدوي. ده الفرق العملي بنفس التحاليل:

🟢 مريض سعودي — بدون ضريبة

التحليلالسعرالضريبةالإجمالي
CK-MB40.0040.00
Troponin I100.00100.00
الإجمالي140.00
عمود الضريبة بيختفي تلقائيًا · tax_applies=false

🔵 مريض غير سعودي — ضريبة 15%

التحليلالسعرض 15%الإجمالي
CK-MB40.006.0046.00
Troponin I100.0015.00115.00
الإجمالي + ض 21.0021.00161.00
عمود الضريبة يظهر · tax_applies=true · tax_rate_percent=15
تفاصيل تقنية مؤكّدة من الكود:
  • الضريبة تُضاف فوق السعر (exclusive): total = (السعر − الخصم) + الضريبة.
  • الشرط: vatApplies = B2B أو (المريض غير سعودي) · السعودي/غير المحدّد = صفر.
  • النسبة: إعداد lis.vat_rate_percentage (افتراضي 15) — متزرّع فعلاً، هنوفّر له خانة تعديل في السيتنج.
  • الـ Resource بيرجّع tax_applies + tax_rate_percent + tax_amount — الفرونت يرسم بس.
  • ملاحظة بسيطة: الـ tax_amount محسوب على مستوى الفاتورة (إجمالي). قيمة ضريبة كل بند في الجدول الفرونت يشتقها = (سعر−خصم) × النسبة.

2 الشكل النهائي — نموذجان (A4 ضريبية + حرارية 80mm)

دول مرسومين بنفس بيانات النموذج المُرسل لمريض غير سعودي (4 تحاليل · 140 بدون ضريبة · 21 ضريبة · 161 الإجمالي). الشكل والّلغة بيتحددوا من السيتنج.

🅰️ فاتورة A4 / A5 ضريبية (jsPDF) — ثنائية اللغة (الافتراضي)
فاتورة ضريبة مبسطة — Simplified Tax Invoice
QR (شكلي)
رقم التسجيل الضريبي / VAT Reg.: (يظهر لما يتدخل)
المملكة العربية السعودية — جدة
رقم الفاتورةLIS-INV-2026-00042
Invoice No.LIS-INV-2026-00042
تاريخ الفاتورة30/05/2026 07:48م
Date30/05/2026 07:48PM
اسم المريضأيمن سعد عبدالله
PatientAyman Saad Abdullah
رقم العميلMRN-000026
Patient No.MRN-000026
الجنسيةغير سعودي
NationalityNon-Saudi
الفرعجدة - النزهة
BranchJeddah Al Nozha
مالوصف
Description
السعر
Price
خصم
Disc.
الخاضع
Taxable
%
VAT
الضريبة
VAT
الإجمالي
Total
1Creatine Kinase MB (CK-MB)
الكرياتين كيناز
40.000.0040.0015%6.0046.00
2Troponin I
تروبونين الأول
100.000.00100.0015%15.00115.00
3SMS Notification0.000.000.0015%0.000.00
المجموع (بدون ضريبة) — Total excl. VAT
140.00
قيمة الخصم — Discount
0.00
إجمالي الخاضع للضريبة — Taxable
140.00
إجمالي ض.ق.م — Total VAT (15%)
21.00
الإجمالي شامل الضريبة — Total with VAT
161.00
موعد استلام النتيجة: 31/05/2026 09:00م — Result ready 31/05/2026
مستند تم إنشاؤه آليًا ولا يتطلب توقيع — System generated, no signature required · صفحة 1 من 1
🌡️ إيصال حراري 80mm (HTML) — سريع للكاشير
بلاك سيركل — Black Circle
معمل تحاليل طبية
جدة - النزهة | 0540369899

فاتورة ضريبة مبسطة
Simplified Tax Invoice

رقم:LIS-INV-2026-00042
التاريخ:30/05/2026 07:48م
المريض:أيمن سعد
الكود:MRN-000026
الجنسية:غير سعودي

الصنفالإجمالي
CK-MB46.00
Troponin I115.00
SMS0.00

المجموع بدون ضريبة140.00
الخصم0.00
ض.ق.م 15%21.00
الإجمالي161.00 ر.س

المدفوع161.00
المتبقي0.00
QR (شكلي)

موعد النتيجة: 31/05 09:00م
شكرًا لزيارتكم — Thank you
ملاحظة: لو المريض سعودي، نفس الفاتورة بتطلع بدون عمود الضريبة وبدون صف ض.ق.م — تلقائيًا حسب tax_applies. واللغة (عربي/إنجليزي/الاتنين) بتتحكم في الأعمدة المعروضة.

3 تبويب جديد في إعدادات المعمل: «الفاتورة والطباعة»

كل التحكم في تبويب واحد جوه إعدادات المعمل الموجودة، يتخزّن عبر PUT /lis/lab-info تحت مفتاح lis.invoice_print (ما عدا نسبة الضريبة اللي ليها مفتاحها lis.vat_rate_percentage الموجود):

أ) شكل ولغة الطباعة

الإعدادالخيارات
الشكل الافتراضي س3حراري 80mm · A4 · A5
لغة الفاتورة س5عربي فقط · إنجليزي فقط · الاتنين (افتراضي)
طباعة تلقائية بعد الدفع✔ / ✘
عدد النسخ1 / 2 (نسخة العميل + المعمل)

ب) الضريبة جاهزة بالباك إند — UI تعديل فقط

الإعدادالقيمةملاحظة
نسبة الضريبة15%تعديل lis.vat_rate_percentage الموجود
القاعدة (للعرض فقط)غير سعودي / B2B → ضريبةمطبّقة أوتوماتيك — مفيش إدخال يدوي

ج) العدّادات (الترقيم) — إعادة استخدام موديل Sequence

الإعدادمثال
البادئة (prefix)LIS-INV-
عدد الخانات / تضمين السنة-الشهر00042 · 2026/05
إعادة التصفير / عدّاد لكل فرعسنوي/شهري/أبدًا · per_branch
التبويب يعرض إعدادات العدّاد أو يربط مباشرة لشاشة Sequences الموجودة — من غير اختراع ترقيم جديد.

د) البيانات الظاهرة — توجلات إظهار/إخفاء (زي إعدادات الباركود)

4 الـ QR — شكلي الآن، امتثال كامل لاحقًا س4

حسب ردّك «شكل بس دلوقتي» — هنرسم QR يحتوي بيانات الفاتورة الأساسية بصيغة TLV (نفس بنية ZATCA) يتولّد في الفرونت بمكتبة qrcode الموجودة، من غير ربط أو رفع للهيئة:

الحقلالمصدر
اسم البائعcompany.name
الرقم الضريبيcompany.tax_number (يُترك فاضي لو مش موجود)
الطابع الزمنيinvoice.created_at
الإجمالي شامل الضريبةinvoice.total
إجمالي الضريبةinvoice.tax_amount
المرحلة اللاحقة (امتثال كامل): توليد الـ QR موقّع في الباك إند، فاتورة إلكترونية XML، ربط Fatoora/ZATCA، وأرشفة. مش ضمن الشغل الحالي — هنفتحها كـ Phase 2 لما تطلبوا.

5 خطة التنفيذ (الباك إند شبه جاهز)

🔧 الباك إند (hotfix/features) — الحد الأدنى

  • جاهز حساب الضريبة حسب الجنسية + B2B — مفيش شغل.
  • جاهز tax_applies / tax_rate_percent / tax_amount في الـ Resource.
  • جاهز إعداد lis.vat_rate_percentage متزرّع.
  • BE-1 (صغير) حفظ إعداد lis.invoice_print (شكل/لغة/توجلات/نصوص) — غالبًا يتعمل عبر lab-info اللي بيعمل auto-create للمفاتيح، يعني ممكن من غير باك إند أصلاً.
النتيجة: غالبًا صفر تغييرات باك إند (أو تذكرة صغيرة جدًا لو احتجنا مفتاح إعداد مخصّص). لو حصل أي تعديل BE → تذكرة + PR + «PR review» لأحمد.

🎨 الفرونت إند (fix/doctor-revamp) — الشغل الأساسي

  • FE-1 تبويب «الفاتورة والطباعة» في إعدادات المعمل (شكل + لغة + نسبة ضريبة + توجلات + نصوص).
  • FE-2 lis-tax-invoice.service: A4/A5 (jsPDF — نمط lis-report-pdf) + حراري 80mm (HTML — نمط pos-receipt)، يقرأ tax_applies ويخفي عمود الضريبة للسعودي.
  • FE-3 دعم لغة الفاتورة (عربي/إنجليزي/الاتنين) في التخطيط والأعمدة.
  • FE-4 زر «طباعة فاتورة» في شاشة الفواتير + بعد الدفع في الـ wizard (يحترم الشكل الافتراضي + اختيار الآخر).
  • FE-5 رسم QR شكلي (TLV) من بيانات الفاتورة + الشركة.
  • FE-6 بناء + نشر على moonui + تأكيد بالمتصفح (سعودي وغير سعودي).

6 تأكيدات بسيطة قبل ما أبدأ التنفيذ

ت1: الشكل الافتراضي للكاشير = حراري 80mm، و A4 عند الطلب — أبدأ بالافتراضي ده؟ (تقدر تغيّره من السيتنج).
ت2: لغة الفاتورة الافتراضية = الاتنين (عربي + إنجليزي زي النموذج)؟
ت3: «جهة التعاقد» الاختيارية لما تظهر — مصدرها الطبيب المحوِّل ولو فيه تأمين اسم شركة التأمين؟ (وإلا تتساب فاضية).
ت4: أبدأ التنفيذ على طول (فرونت إند بالكامل) بعد تأكيدك، من غير انتظار باك إند — صح؟