الحالة
تبيع كيتو كارتيل مجموعات وجبات صحية ومكملات غذائية باشتراكات أسبوعية وشهرية. نموذج الاشتراك يخلق طبقة من التعقيد التشغيلي لا تكون البنية الإلكترونية القياسية مصمَّمة للتعامل معها: اشتراك كل عميل يمكن أن يكون في حالة مختلفة في أي لحظة — نشط، موقوف مؤقتاً، تخفيض في منتصف الدورة، مبدَّل المنتج — والفوترة تعمل بجداول زمنية بغض النظر عن تغيرات الحالة. كان مخطط الاشتراك الأصلي المسطّح يتعامل مع كل هذا كعلامات بسيطة للتشغيل/الإيقاف. عندما يُرقّي عميل في منتصف الدورة، لم يكن النظام يعرف كيف يحسب النسبة بشكل صحيح. عند تشغيل الفوترة، كانت تقرأ الحالة الحالية بدلاً من حالة وقت الفوترة — مما يعني أن عميلاً أوقف مؤقتاً بعد نقطة الفوترة كان لا يزال يُشحن. أعدنا تصميم نظام الاشتراك من المخطط للأعلى. حالة الاشتراك الآن تُتتبع كتحولات صريحة مع طوابع زمنية — محرك الفوترة يقرأ دائماً ما كانت الحالة *عليه* في لحظة الفوترة.
ما كان يجب أن يتغير
ازدواج في الشحن من سباقات إعادة محاولة الفوترة. حسابات نسبية غير صحيحة عند تغيير العملاء للخطط في منتصف الدورة. حجوزات وهمية للمخزون من محاولات الفوترة التي فشلت ثم أُعيدت. كان خدمة العملاء تتعامل مع عشرات شكاوى الفوترة شهرياً — تكلفة مباشرة في الاسترداد ووقت الموظفين تأكل الهوامش.
لقد تغيرت
إعادة تصميم المخطط مع تحولات حالة صريحة وطوابع زمنية. مفاتيح idempotency على كل عملية فوترة — المفتاح المُقدَّم مرتين ينتج شحنة واحدة دائماً. خصم المخزون كمُشترك في حدث الفوترة المؤكد، ليس عند إنشاء الطلب. منطق النسبة القائم على تاريخ الحالة الموزون بالوقت. صفر ازدواج في الشحن منذ النشر.
ما حصل عليه العميل
- 01 فوترة غير قابلة للتكرار — مستحيل فعلياً الازدواج في الشحن
- 02 مخطط تحول الحالة — حساب نسبي دقيق دائماً
- 03 المخزون يُخصم فقط عند حدث الفوترة المؤكد
- 04 6 مستويات اشتراك مع مرونة كاملة في تغيير الخطة