مقالات
من غيّر هذا؟ سجل التغييرات الذي لا يطلبه أحد إلا حين يلزم
الشاشة تعرض السعر الجديد وحده، لا القديم ولا صاحبه. ما يجب أن يحمله سجل التغيير، وكيف تبدأ سجلًا في نظام لم يعرف السجل.
- audit
- data
- operations
تغيّر سعر، وظهرت تسوية مخزون، وأُلغيت فاتورة، والشاشة لا تعرض إلا القيمة الجديدة: لا قبل ولا اسم ولا وقت ولا سبب. سجل التغييرات هو ما يجيب عن سؤال «من غيّر هذا؟»، وهو من أرخص ما يُبنى في نظام تجاري وأغلى ما يُفتقد. وليس سجلًا تقنيًا للمطوّر، ومعاملته على هذا النحو هي سبب السؤال الذي يُطرح دائمًا بعد فوات الأوان.
ما الذي يجب أن يحمله سجل التغيير؟
خمسة أشياء، ونقص أي واحد منها يحوّل الأربعة الباقية إلى زينة.
- من: هوية تُفضي إلى شخص، لا حساب يتقاسمه عدة أشخاص.
- متى: ساعة الخادم، بتوقيت واحد، تُكتب لحظة التغيير، لا ساعة المتصفح.
- ما الذي تغيّر: الحقل، والقيمة قبل، والقيمة بعد. لا نسخة من السجل، فالنسخة تقول كيف يبدو الآن لا ما الذي تحرك.
- لماذا: السبب الذي يذكره إنسان حين يكون التغيير قرارًا: خصم، أو تسوية، أو إلغاء.
- على أي سجل: المستند ونسخته، والطريق الذي جاء منه التغيير: هذه الشاشة، أو استيراد، أو ربط بنظام آخر.
لماذا يحدد «من» قيمة السجل كله؟
لأن الحساب المشترك يجعل كل بند صحيحًا عن حساب ولا يفيد شيئًا عن المؤسسة. «غيّر admin سعر التوصيل عند الرابعة والربع» جملة لا تستطيع التصرف على أساسها: لا تصحح سلوكًا، ولا تدافع عن التغيير أمام عميل، ولا تسلّم السجل إلى مدقق.
وحسابات الأنظمة تفشل بالطريقة نفسها بهدوء أكبر. حين تكتب عمليات الاستيراد وربط شركة التوصيل ومهمة الليل كلها باسم «system»، يصبح كل تغيير جماعي متطابقًا، ويبقى السؤال الوحيد المفيد — أي مصدر حرّك هذا الرقم؟ — بلا جواب. سمِّ كل حساب بمصدره: «استيراد: قائمة أسعار المورّد»، «توصيل: ملف المرتجعات».
ما الفرق بين سجل لتشخيص عطل وسجل للاحتجاج؟
سجل الأخطاء موجود لمن كتب الشيفرة هذا الأسبوع. وسجل التغيير موجود لشخص خارج الفريق بعد سنة. هما ليسا الشيء نفسه.
| سجل الأخطاء | سجل التغيير | |
|---|---|---|
| السؤال الذي يجيب عنه | لماذا فشل هذا الطلب | من غيّر سعر هذه الفاتورة |
| من يقرأه | مطوّر، في غضون أيام | مالك، أو عميل، أو مدقق |
| كم يعيش | أيام ثم يُدوَّر ويُمحى | ما دام السجل الذي يصفه |
| ما يجوز عليه | الحذف والتعديل والاقتطاع | الإضافة فقط، دون تغيير |
وسجل يُحفظ أربعة عشر يومًا لا يجيب عن سؤال يخص شهر مارس، وسجل تغيير يستطيع المدير الذي يغيّر السعر أن يعدّله بنفسه لا يثبت شيئًا.
ماذا تفعل بالسجلات القديمة التي لا سجل لها؟
ابدأ السجل اليوم، وارسم الحدّ بصدق. فإعادة بناء سنة ماضية من الذاكرة أسوأ من الفراغ، لأنها تنتج سجلًا واثقًا وخاطئًا.
وثلاثة أمور تنجح. املأ القديم فقط حيث يثبت مستند القيمة: فاتورة مطبوعة، أو وصل تسليم موقّع، أو تسلسل أرقام غير منقطع. واطبع تاريخ بدء السجل أعلى التقارير التي تغطي الفترة السابقة، فيكون الفراغ ظاهرًا لا مكتشفًا لاحقًا. وأضف حقل ملاحظة إلى شاشات التسويات اليدوية، فيحمل كل تصحيح من اليوم فصاعدًا سببًا.
وحين يصل خلاف حول سجل قديم، يكون الجواب الصادق قصيرًا: النظام لم يحفظه، وهذا ما تقوله الورقة، وهذا هو التاريخ الذي يبدأ منه الحفظ.
لماذا يكلفك السجل الذي لا يقرأه أحد أكثر مما يوفر؟
تكلفتان، ولا واحدة منهما مساحة التخزين. الأولى التغطية: سجل يغطي ثلاث جداول من خمسة يعني أن كل خلاف سيسقط على الجدولين الناقصين، وأن كل طريق كتابة جديد — استيراد، أو سكربت يُشغَّل يوم جمعة، أو أداة إدارة — ثغرة ما لم يُضف إليه السجل عن قصد.
والثانية وهم الرقابة. سجل لا يسأله أحد لم يمنع تغييرًا قط ولم يحسم خلافًا. والذي يحوّله إلى رقابة شاشة يفتحها إنسان: آخر خمسين تغييرًا على الأسعار، وتسويات المخزون هذا الشهر، والفواتير الملغاة الأسبوع الماضي — بالاسم والسبب والقيمة قبل وبعد في سطر واحد. وسؤال واحد في اجتماع شهري يبقي هذه الشاشة حيّة، وهو الشيء الوحيد الذي يجعل الكتابة تستحق.
كيف تضيف سجلًا إلى نظام لا يملكه؟
- اختر الجداول التي تحمل المال والمخزون والسعر وهوية العميل والحالة. سجل على قاعدة البيانات كلها مشروع كامل، وعلى هذه أسبوع.
- اكتب الأسئلة التي ستحتاج إلى الإجابة عنها، مأخوذة من خلافات وقعت فعلًا العام الماضي، لا من التخيّل.
- سجّل التغيير في المعاملة نفسها التي يجري فيها التغيير. فإن أمكن كتابة السجل دون التغيير، أو التغيير دون السجل، فسيكون أحدهما ناقصًا في اليوم الذي يهم.
- احفظ القيمة قبل وبعد لكل حقل، مع معرّف السجل. فنسخة الصف تجيب عن سؤال آخر.
- اطلب سببًا حين يتخذ إنسان قرارًا: خصم، أو تسوية، أو إلغاء. واعرض قائمة قصيرة مع نص حر؛ فالسبب المطلوب عند كل ضغطة مفتاح يصبح «حسنًا» في كل سطر.
- أغلق جدول السجل أمام التعديل والحذف للجميع، بما فيهم المدير.
- ابنِ شاشة واحدة بثلاثة مرشحات — بالشخص، وبالسجل، وبالفترة — وافتحها مع من سيستعملها قبل أن تعدّ العمل منتهيًا.
- أثبته: غيّر سعرًا في سجل تجريبي، ثم ابحث عن البند الذي يذكرك أنت والقيمة القديمة والجديدة.
أين يخطئ هذا النهج
- التطبيق وحده هو الذي يكتب. ثم ينفّذ الدعم إصلاحًا مباشرًا في قاعدة البيانات، فيبقى أثر التغيير الأكثر إثارة للشك في الشهر بلا بند. كل طريق كتابة محسوب، بما فيه الاستيراد والسكربتات.
- السجل يحفظ الصف الجديد ويسميه تاريخًا. لا يستطيع أن يقول ما الذي تغيّر، فيستمر الخلاف الذي بُني من أجله.
- الأوقات تأتي من الجهاز. حاسوبان بساعتين مختلفتين يرتّبان الأمسية نفسها بترتيبين.
- بيانات شخصية تتراكم في السجل إلى الأبد. رقم هاتف أو جزء من بطاقة يُنسخ إلى جدول لا ينظفه أحد يعيش أطول من السجل الذي يصفه. وما يجوز الاحتفاظ به ومدة ذلك أمر يحدده مدققك لا نحن؛ ننفّذ ما يحدده.
- سجل يغطي الأسعار ولا يغطي المخزون. التسوية هي حيث يظهر الفرق غير المفسّر، وهي المكان الذي طُلب السجل من أجله.
ما لا يغطيه هذا المقال
هذا ليس نسخًا احتياطيًا: الاستعادة تعيد حالة لحظة وتمحو ما بينها من تاريخ، وهو عكس ما يحتاجه خلاف. وليس سجل أمنيًا كذلك؛ محاولات الدخول الفاشلة والطلبات المرفوضة وتغيير الصلاحيات سجل آخر بقارئ آخر. ولا شيء هنا يثبت أن سجلك كامل؛ لا يثبت ذلك إلا اختبار على كل طريق كتابة.
نبني أنظمة تحفظ «قبل» و«بعد» لكل تغيير يفعله إنسان، وشاشة واحدة يفتحها المسؤول يوم الاثنين فيرى من لمس سعرًا.
خدمات في هذا المقال
مقالات
مقالات ذات صلة.
من يحق له ماذا: الأدوار والصلاحيات التي يحتاجها أي نظام
حساب إداري مشترك أو أربعون دورًا لا يفهمها أحد: النتيجة واحدة. الأسئلة الأربعة التي تجيب عنها كل صلاحية، والاختبار الذي يحسم الأمر.
- permissions
- security
- operations
نظامان وعميل واحد: من يملك السجل الصحيح؟
حين يقبل نظامان تعديل العميل نفسه يبدو كل منهما صحيحا ولا يكون. كيف تحدد مالكا لكل سجل، وماذا يجب أن يجيب الربط.
- integration
- data
- operations
لماذا لا يطابق جرد المخزون النظام؟
لا يطابق الجرد النظام لأن مكانين يقبلان حركة المخزون ولا يملك أي منهما الرقم. ما يجب تسجيله، وبماذا تبدأ.
- inventory
- erp
- operations
ابدأ مشروعًا
لديك شيء تريد بناءه؟
ملخص قصير يكفي. تحصل على نطاق مكتوب وسعر ثابت قبل أن يبدأ أي شيء.
