تخطَّ إلى المحتوى

ما وراء الابتكار. ما وراء الحدود. نحو الأثر.

اللغة
المظهر

الإيصال الذي لا يمكن حذفه

يفرض القانون الضريبي الألماني توقيع كل معاملة في نقطة البيع وحفظها عشر سنوات. لا حذف البتة. وهذه الجملة وحدها حسمت من تصميم قاعدة البيانات أكثر مما حسمه أي متطلب وظيفي.

الكاتب
تاريخ النشر
زمن القراءة
٤دقيقة

أغلب أعمال الامتثال أوراق تسير بمحاذاة البرمجيات. أما قانون نقاط البيع الألماني فليس كذلك؛ إنه يمتد إلى بنية قاعدة البيانات ويعيد ترتيبها.

القاعدة نفسها قصيرة: كل معاملة عند نقطة البيع يجب أن يوقّعها جهاز أمان تقني معتمد — يُعرف بـ TSE — وأن يبقى السجل الموقَّع عشر سنوات، متاحًا لمصلحة الضرائب بصيغة تصدير محددة متى طلبته.

أعد قراءتها بعين المهندس: لا يوجد حذف.

ماذا يفعل "لا حذف" بالتصميم

خذ أمرًا اعتياديًا: معاملة اختبارية. لكل نظام وضع تجريبي، ولكل مطوّر مرة مرّر فيها طلبًا اختباريًا عبر بيئة الإنتاج ليتأكد أن الأمر يعمل.

افعل ذلك هنا فيبقى الطلب الاختباري في السجل الضريبي عشر سنوات. ليس أمرًا محرجًا فحسب، بل دائمًا. لا يمكن إزالته، لأن جوهر عمل الجهاز أن شيئًا لا يُزال.

لذلك يتوقف الفصل بين الاختبار والإنتاج عن كونه عُرفًا ويصير بنية. في هذا النظام يعلن الجهاز بيئته: اختبارية أو حيّة، ويجعل قيد CHECK مع فهرس فريد جزئي قاعدةَ "جهاز حيّ واحد فقط في كل وقت" ضمانةً تفرضها قاعدة البيانات. ليست سطرًا في دليل التشغيل، ولا عادة حسنة، بل أمرًا سترفض قاعدة البيانات السماح به.

هذا هو الفارق الذي تصنعه العشر سنوات. عادةً تكتب القيد الذي يمسك الخطأ؛ أما هنا فتكتب القيد الذي يمسك العقد كاملًا.

ابنِ المخطط من المواصفة لا من الذاكرة

للحمولة الضريبية مخطط، وهذا المخطط منشور. والعميل البرمجي هنا يبنيه من المواصفة التي تقدّمها الواجهة نفسها، لا مما يتذكره أحدهم عن أسماء الحقول.

يبدو هذا تدقيقًا زائدًا حتى تنظر في البديل: مطوّر يقرأ المواصفة مرة، ويكتب ما علق في ذهنه، ثم يشحن العمل. تنجح الاختبارات، لأنها كُتبت من الذاكرة ذاتها. ويسقط العمل عند التدقيق، بعد سنوات، على نحو يتعذّر على أحد تفسيره حينها.

تفاصيل لا يعلّمها إلا الإنتاج

وهذه واحدة تستحق ثمن التذكرة.

يعود ختم توقيت التوقيع من الجهاز بالصيغة التي تعلنها وحدة الأمان — وهذه خاصية للوحدة نفسها، لا ثابت في المعيار. الوحدة المستخدمة هنا تُبلّغ بصيغة unixTime: ثوانٍ منذ بداية الحقبة، كرقم. ووحدة أخرى مضبوطة على نحو مختلف قد ترسل نصًا بصيغة ISO.

لذلك يقبل الكود الصيغتين. ولا أحد يصمم هذا مسبقًا؛ إنما تتعلمه أول مرة يُختم فيها إيصال بتاريخ في عام ١٩٧٠، ثم تدوّن سبب ذلك في الملف نفسه، كي لا يأتي من بعدك فيبسّطه مشكورًا فيعيد الخطأ.

اكتب للمدقّق لا لمجموعة الاختبارات

يحمل التصدير شهادة وحدة الأمان ومفتاحها العام. لا لأن الصيغة تطلب ملء حقل، بل ليتمكن المدقّق من التحقق من التواقيع دون اتصال، مقابل جذور موثوقة، ودون أن يطلب من النظام محل التدقيق أن يزكّي نفسه.

أغفلها، فيصير التحقق من التوقيع ارتهانًا بالشيء الذي تتحقق منه. الصيغة تسمح بذلك، أما الغاية من العمل فلا.

وهذا المبدأ يشكّل التصدير كله. إنه حزمة من ست عشرة جدولًا بالترتيب الذي تعتمده المصلحة — البيانات الأساسية، ثم الإقفال اليومي، ثم السجلات المفردة — وحين يتعذّر تجميعها تُفصح عن السبب. نسبة ضريبة غير مثبّتة، أو رمز ضريبي غير مربوط، أو رقم ضريبي ناقص: كلٌّ منها يصير مشكلة مسجّلة في النتيجة، لا استثناءً يتفجّر في مكان أعلى. ومهمة المُستدعي أن يسجّل المحاولة الفاشلة لا أن ينهار عندها. فالتصدير الذي يفشل بصمت أسوأ من الذي يفشل.

ولماذا لا تخص هذه المسألة ألمانيا وحدها

نؤدي العمل نفسه مع منظومة الفاتورة الإلكترونية في مصر، ومع هيئة الزكاة والضريبة والجمارك في السعودية. تختلف الصيغ، وتختلف الجهات، وتختلف المواعيد.

ولا يختلف الانضباط. فحيثما بقي السجل بعد زوال البرنامج الذي أنتجه، صار السجل هو المنتج — وصار على الشفرة التي تكتبه أن تكون مقروءة لمن سيقرؤها بعد سنوات، في خضم نقاش، وأنت لست في الغرفة لتشرح.

تحدّث إلينا عن مشروع حسّاس للامتثال

كل المقالات

في هذه الصفحة

وأين يقف نظامك من هذا؟

تشرح المقالة كيف يعمل شيء ما، لكنها لا تقول ما يعنيه ذلك للنظام الذي تُشغّله بالفعل. ثلاثون دقيقة مع مهندس لا مع مندوب مبيعات، وبلا سلسلة متابعات.