56 lines
4.2 KiB
SQL
56 lines
4.2 KiB
SQL
-- ============================================================
|
|
-- بوابة الائتمان: لا التزام إلا لمن تمرّ أرباحه بالمحفظة
|
|
--
|
|
-- المشكلة التي يعالجها هذا الملف (قرار المالك 2026-08-09):
|
|
--
|
|
-- سقف الخصم اليومي في محرك الالتزامات نسبة من أرباح اليوم، وأرباح اليوم
|
|
-- تُقاس من الصفوف الموجبة في `driverWallet`. سائق الكاش الذي يحصّل نقداً
|
|
-- ولا تمرّ أرباحه بالمحفظة يظهر بأرباح صفر كل يوم — فسقفه صفر، فلا
|
|
-- يُحصَّل منه شيء أبداً.
|
|
--
|
|
-- هذا محتمَل في التأمين (قسط صغير متكرر، والخسارة محدودة ومرئية). وهو
|
|
-- غير محتمَل إطلاقاً في الوقود والصيانة والتمويل: هناك تسلّم السائق
|
|
-- قيمةً فعلية — وقوداً في خزّان سيارته أو إصلاحاً في ورشة — مقابل وعد
|
|
-- بالسداد من قناة لا يمرّ بها ماله. هذا ليس ائتماناً بل هبة.
|
|
--
|
|
-- الحل: شرط أهلية إضافي مخزَّن مع المنتج لا في الكود، على غرار شروط
|
|
-- الرحلات والتقييم القائمة. العتبة تختلف بطبيعة المنتج: قسط تأمين يومي
|
|
-- صغير لا يحتاج ما يحتاجه قرض صيانة.
|
|
-- ============================================================
|
|
|
|
ALTER TABLE `obligation_products`
|
|
-- المفتاح العام. تركه قابلاً للإطفاء ليس تساهلاً: منتج مستقبلي قد
|
|
-- يُدفع مقدَّماً أو يموّله طرف ثالث، فلا معنى لبوابة ائتمان عليه.
|
|
ADD COLUMN `requires_wallet_income` TINYINT(1) NOT NULL DEFAULT 1
|
|
COMMENT 'يشترط أن تمرّ أرباح السائق بالمحفظة' AFTER `min_account_days`,
|
|
|
|
-- عدد الأيام المتمايزة التي دخل فيها مالٌ محفظةَ السائق خلال آخر
|
|
-- ثلاثين يوماً. المقياس أيام لا مبلغ لأن السؤال هنا ليس «كم يكسب؟»
|
|
-- بل «هل قناة التحصيل تعمل؟» — سائق دخله مرة واحدة كبيرة قد يكون
|
|
-- استرداداً أو حادثة، وسائق دخله اثنا عشر يوماً متفرّقاً قناته حيّة.
|
|
ADD COLUMN `min_wallet_days_30d` SMALLINT NOT NULL DEFAULT 10
|
|
COMMENT 'أيام دخل في المحفظة خلال آخر 30 يوماً' AFTER `requires_wallet_income`,
|
|
|
|
-- الحد الأدنى للدخل المار بالمحفظة في آخر ثلاثين يوماً. يُقاس بعملة
|
|
-- المنتج. صفر يعني «لا شرط مبلغ» ويُكتفى بشرط الأيام.
|
|
ADD COLUMN `min_wallet_income_30d` DECIMAL(12,3) NOT NULL DEFAULT 0
|
|
COMMENT 'إجمالي الدخل المار بالمحفظة خلال آخر 30 يوماً' AFTER `min_wallet_days_30d`;
|
|
|
|
|
|
-- ── عتبة التأمين ────────────────────────────────────────────
|
|
-- منتجات التأمين المرحَّلة تخضع للبوابة أيضاً — القسط الذي تتحمّله
|
|
-- الشركة ثم تسترده من الأرباح ائتمانٌ بالمعنى نفسه.
|
|
--
|
|
-- لكن العتبة متساهلة عمداً (ثمانية أيام، بلا شرط مبلغ): التأمين مكافأة
|
|
-- استمرار مشروطة أصلاً بمئتي رحلة وتقييم جيد، وتشديد بوابة ثانية فوقها
|
|
-- يفرغ المنتج من غرضه.
|
|
--
|
|
-- هذا يمسّ الاشتراكات **الجديدة** وحدها. الالتزامات القائمة لا تُفحص
|
|
-- ثانيةً: سحب تغطية من سائق مؤمَّن اليوم بسبب شرط سُنّ اليوم عقوبة
|
|
-- بأثر رجعي.
|
|
UPDATE `obligation_products` op
|
|
JOIN `insurance_plans` pl ON pl.`code` = op.`code`
|
|
SET op.`requires_wallet_income` = 1,
|
|
op.`min_wallet_days_30d` = 8,
|
|
op.`min_wallet_income_30d` = 0;
|