التحدي
مزرعة ١٢٠٠ فدان مش بيزنس واحد. البساتين والمحاصيل اليومية والثروة الحيوانية وتأجير الأراضي والمعمل، كل واحد فيهم بيكسب وبيصرف بطريقة مختلفة، والسؤال الوحيد اللي بيفرق: مين فيهم بيكسب فلوس فعلًا.
الإجابة على ده عادةً معناها لخبطة آخر الشهر: نشاط الغيط متسجّل في مكان، والتكاليف في مكان تاني، والمحاسب بيوفّق بينهم بعد ما أي قرار كان ممكن يتغير بوقت طويل. والأوحش إن حسابات الزراعة مليانة كميات مش بتتقسم صح — تقسيم علف، وسولار متوزّع على قطاعات، ومياه. والفلوس لو اتحسبت بأرقام عشرية عايمة بتزوغ، والدفتر اللي بيزوغ محدش بيثق فيه.
الحل
فريقنا بنى دفتر الأستاذ الأول، على .NET 10 مع ABP Framework كوحدة واحدة مقسّمة بطبقات DDD. الدفتر هو العمود الفقري اللي كل موديول بعده بيرحّل عليه، فالمخازن والمعدات والثروة الحيوانية والمعمل والموارد البشرية والمبيعات بقوا إخوات بيعتمدوا على عقوده المعلنة بس، وعمرهم ما بيمدوا إيدهم في جداوله.
وتلات قواعد اتعاملنا معاها كخطوط حمرا، ومتطبقة في النطاق نفسه مش في
قايمة مراجعة. الفلوس بتتخزن كعشري مضبوط بدقة numeric(28,8) وعمرها ما
بتتقرّب — وبيتعرض جنبها رقم صحيح مشتق للناس اللي عايزة رقم مدوّر، من
غير ما الرقم المخزّن يفقد دقته. والقيود المزدوجة لازم تتوازن على
الكسور المضبوطة دي أو بتترفض. والقيد المرحّل عمره ما بيتعدل؛ التصحيح
بيبقى قيد جديد عكسي مربوط بيه، فسجل المراجعة بيحفظ إيه اللي كان
معروف وإمتى اتغير.
والحتة اللي بتطلّع الإجابة الأساسية هي قيد: كل سطر في القيد لازم يشيل مركز تكلفة نشط. القاعدة الواحدة دي هي اللي بتخلي الأرباح والخسائر لكل قطاع تطلع من الدفتر ببلاش بدل ما تتجمّع بالإيد كل شهر.
وتعدد المستأجرين والصلاحيات حسب الدور وسجل المراجعة جايين من ABP بدل ما يتبنوا من الأول — المزرعة هي أول مستأجر، مش الوحيد المقصود.
النتايج
المرحلة الأولى بتسلّم العمود الفقري المالي: دفتر أستاذ بمراكز تكلفة بيطلّع الأرباح والخسائر لكل قطاع من القيود المرحّلة مباشرة. وعشان كل حركة في الغيط بتنزل على الدفتر ومعاها مركز تكلفة، سؤال "أنهي قطاع كسب الشهر ده" بقى استعلام مش مشروع.
وقواعد النطاق مغطّاة بمشروع اختبارات خاص بيها، منفصل عن اختبارات خدمات التطبيق وتكامل EF Core، فالقواعد اللي بتحمي الدفاتر بتتحقق بمعزل عن السباكة اللي بتخزنها.



