التحدي
الشركات المصرية بتقدّم فواتيرها على بوابة الفاتورة الإلكترونية بتاعة مصلحة الضرايب، والبوابة متعملة عشان تبص على فاتورة واحدة في المرة. المحاسب اللي بيقفل شهر محتاج مئات: البيانات في شيت يوفّق بيه على الدفاتر، والـ PDF مأرشفة في مكان المراجع يلاقيها فيه.
عمل ده بالإيد يوم كامل من الدوس، والحتت اللي أكتر حاجة ممكن تتغلط فيها هي الحتت اللي بتفرق — إجماليات الضريبة المدفونة جوه ردود متداخلة، والإشعارات الدائنة اللي شكلها زي أي فاتورة عادية بس لازم تتطرح مش تتجمع.
الحل
فريقنا بنى إضافة كروم بتشتغل جوه جلسة المحاسب نفسها مش حواليها. بتقرا توكن التفويض من الجلسة المفتوحة على البوابة، فمفيش بيانات دخول منفصلة تتخزن، ولا باسورد يتسلّم لحد، ولا حاجة تحتاج تتزامن لما المستخدم يغيّر دخوله.
الشغل بيجري في service worker خلفي بـ Manifest V3. الاختيار ده هو اللي بيخلي التصدير بالجملة يستحمل الواقع: المهمة بتكمل والمستخدم بيعمل حاجة تانية، بدل ما تموت أول ما النافذة تفقد التركيز. ومؤشر التقدم بيتحقن في صفحة البوابة نفسها، فالعداد الشغال بيظهر في المكان اللي المستخدم أصلًا باصص فيه.
الاستخراج بيمشي على النقاط المقسّمة صفحات وبيفرد هياكل المُصدِر والمستلم وإجماليات الضريبة المتداخلة لأعمدة مسطحة في الشيت. وملفات الـ PDF بتتجمع بـ JSZip وبتترتب في مجلدات حسب سياق المشتري والبايع، فالأرشيف بيوصل مترتب أصلًا بدل مئات الملفات السايبة. والإشعارات الدائنة بتتعرف أثناء الاستخراج وحسابها بيتعكس، وده اللي بيخلي الإجماليات المصدّرة قابلة للتوفيق مع الدفاتر.
والتعامل مع بيانات ضريبية حقيقية طرح السؤال البديهي: إيه اللي عمره ما ينفع يتحفظ في المستودع؟ نسخ قاعدة البيانات اللي فيها بيانات شخصية ومفاتيح حسابات الخدمة مستبعدة صراحةً من المستودع.
النتايج
شهر كامل من سحب الفواتير بيتحول من يوم تنزيل يدوي لتصدير واحد بالجملة بيطلّع شيت إكسل قابل للتوفيق وأرشيف PDF مترتب. وعشان الإضافة راكبة على جلسة المستخدم القايمة أصلًا، فهي مش بتضيف مكان جديد تتخزن فيه بيانات دخول الضرايب.
والترخيص بيتحقق مقابل باك-إند Node صغير منشور على استضافة مُدارة، مع لوحة إدارة ورا توكن منفصل.


