KoderKoder.ai
प्राइसिंगएंटरप्राइज़शिक्षानिवेशकों के लिए
लॉग इनशुरू करें

उत्पाद

प्राइसिंगएंटरप्राइज़निवेशकों के लिए

संसाधन

हमसे संपर्क करेंसपोर्टशिक्षाब्लॉग

कानूनी

प्राइवेसी पॉलिसीउपयोग की शर्तेंसुरक्षास्वीकार्य उपयोग नीतिदुरुपयोग रिपोर्ट करें

सोशल

LinkedInTwitter
Koder.ai
भाषा

© 2026 Koder.ai. सर्वाधिकार सुरक्षित।

होम›ब्लॉग›कूपन तर्क की त्रुटियाँ: ऐसे स्टैकिंग नियम जिनसे कार्ट न टूटें
15 नव॰ 2025·8 मिनट

कूपन तर्क की त्रुटियाँ: ऐसे स्टैकिंग नियम जिनसे कार्ट न टूटें

कूपन लॉजिक गलत होने पर चेकआउट टोटल्स टूट सकते हैं। डबल-डिस्काउंटिंग और नकारात्मक टोटल रोकने के लिए स्टैकिंग नियम, अपवर्जन और टेस्ट करने योग्य पैटर्न सीखें।

कूपन तर्क की त्रुटियाँ: ऐसे स्टैकिंग नियम जिनसे कार्ट न टूटें

क्यों प्रोमो लॉजिक अक्सर टूटता है

प्रोमो सरल दिखते हैं जब तक कि आप उन्हें असली चेकआउट में नहीं डालते। एक कार्ट लगातार बदलता रहता है, लेकिन डिस्काउंट अक्सर एक-बार के नियम की तरह लिखे जाते हैं। यही अंतर है जहाँ ज्यादातर कूपन तर्क की त्रुटियाँ दिखती हैं।

कठिनाई यह है कि एक नया नियम पूरे टोटल्स को बदल सकता है। “10% छूट, पर सेल आइटम पर नहीं” जोड़ते हैं और आपको तय करना होगा कि “सेल” का क्या मतलब है, कब यह जांचा जाता है, और 10% किस राशि पर लागू होगा। अगर दूसरा प्रोमो भी उन्हीं आइटमों को छूता है, तो क्रम मायने रखता है, और क्रम कीमत बदल देता है।

कई टीमें गणित को बिजनेस नियमों के साथ मिला देती हैं। "सबटोटल पर छूट को कैप करें" जैसा त्वरित फिक्स तीन जगह कॉपी हो जाता है, और जल्द ही आपके पास अलग-अलग उत्तर होंगे—कार्ट पेज, चेकआउट, इनवॉइस, ईमेल—यह निर्भर करता है कि कुल कैसे कैलकुलेट हुआ।

उच्च-जोखिम पल वे होते हैं जब आपका सिस्टम कीमतें फिर से गणना करता है:

  • कार्ट अपडेट: मात्रा बदलना, आइटम हटाना, शिपिंग मेथड बदलना
  • भुगतान के बाद संपादन: पता बदलना, आंशिक रद्दीकरण, आइटम के स्थान पर बदलाव
  • रिफंड्स और रिटर्न्स: आइटमों में प्रोरैटिंग, टैक्स समायोजन, स्टोर क्रेडिट
  • मल्टी-करेंसी या टैक्स मोड बदलना: नेट बनाम ग्रॉस प्राइसिंग, टैक्स-इन्क्लूसिव टोटल्स

एक छोटा सा उदाहरण: एक खरीदार बंडल जोड़ता है, फिर “$20 off $100” कोड लागू करता है, फिर एक आइटम हटा देता है। अगर आपका कोड पुराना सबटोटल "याद" रखता है, तो आप $85 वाले कार्ट पर भी $20 लागू कर सकते हैं, या किसी लाइन आइटम को नेगेटिव तक धकेल सकते हैं।

इस पोस्ट के अंत तक, आप आम प्रोमो विफलताओं को रोक सकेंगे: डबल-डिस्काउंटिंग, स्क्रीनों के बीच मैच ना होने वाले टोटल्स, नकारात्मक टोटल्स, एक्सक्लूड किए गए आइटमों पर छूट लगना, और ऐसे रिफंड जिनका मिलान ग्राहक ने जो भुगतान किया उससे नहीं होता।

स्पष्ट स्टैकिंग और प्राथमिकता नियमों से शुरू करें

अधिकांश कूपन तर्क त्रुटियाँ एक गायब वाक्य से शुरू होती हैं: कौन-कौन सी छूटें साथ में लागू हो सकती हैं, और किस क्रम में। अगर आप स्टैकिंग नियमों को सरल भाषा में स्पष्ट नहीं बता सकते, तो आपका कार्ट अंततः कुछ आश्चर्यजनक करेगा।

स्टैकिंग को हाँ या नहीं के सरल वाक्यों में परिभाषित करें। उदाहरण: “प्रति ऑर्डर केवल एक मैनुअल कूपन। ऑटोमैटिक प्रोमो तब भी लागू हो सकते हैं जब तक कूपन स्पष्ट रूप से उन्हें ब्लॉक न करे।” यह एक लाइन अनपेक्षित संयोजनों को रोकती है जो डबल-डिस्काउंटिंग का कारण बनते हैं।

शुरू में आइटम-स्तर की छूटों को ऑर्डर-स्तर की छूटों से अलग रखें। आइटम-लेवल नियम किसी उत्पाद की कीमत बदलते हैं (जैसे जूतों पर 20% छूट)। ऑर्डर-लेवल नियम कुल को बदलते हैं (जैसे कार्ट पर $10 की छूट)। बिना संरचना के इन्हें मिलाने पर उत्पाद पेज, कार्ट, और चेकआउट के बीच टोटल्स बहक सकते हैं।

यह तय करें कि “बेहतर डील” का क्या मतलब है, कोड करने से पहले। कई टीमें “अधिकतम बचत” चुनती हैं, पर इससे प्राइस फ़्लोर टूट सकते हैं। आपको ऐसे नियमों की भी जरूरत पड़ सकती है जैसे “कभी लागत से नीचे छूट न दें” या “शिपिंग कभी नकारात्मक न हो।” एक स्पष्ट विजेता नियम चुनें ताकि इंजन अनुमान न लगा सके।

एक सरल प्राथमिकता क्रम संघर्षों को पूर्वानुमेय रखता है:

  • ऑटोमैटिक प्रोमो पहले (कैटलॉग या सीज़नल नियम)
  • मैन्युअल कूपन अगले (ग्राहक ने जो टाइप किया)
  • स्टोर क्रेडिट या गिफ्ट कार्ड आख़िर में (टेंडर, डिस्काउंट नहीं)
  • टैक्स और शिपिंग को डिस्काउंट के बाद पुन:गणना करें

उदाहरण: कार्ट में सभी आइटमों पर 10% ऑटोमैटिक प्रोमो है, और साथ में $100 से ऊपर के आदेशों के लिए $15 का कूपन है। अगर आपकी प्राथमिकता कहती है कि ऑटोमैटिक पहले, तो आप स्पष्ट रूप से जवाब दे पाएँगे: $100 थ्रेशहोल्ड प्री-डिस्काउंट सबटोटल पर देखा जाएगा या डिस्काउंट के बाद? इसे लिखकर रखें और हर जगह एकसमान रखें।

एक बार ये विकल्प लिखे गए, आपके कूपन स्टैकिंग नियम टेस्टेबल नियम बन जाते हैं, छिपी हुई व्यवहार नहीं। यही सबसे तेज़ तरीका है बाद की कूपन त्रुटियों से बचने का।

डिस्काउंट्स को सरल, स्पष्ट डेटा के रूप में मॉडल करें

कई कूपन तर्क की त्रुटियाँ तब शुरू होती हैं जब डिस्काउंट्स चेकआउट कोड में बिखरे हुए if-else चेक्स के रूप में रहते हैं। एक सुरक्षित तरीका है हर प्रोमो को डेटा की तरह सावधानीपूर्वक टाइप, स्कोप और लिमिट्स के साथ रखना। फिर आपका कार्ट गणित छोटा और पूर्वानुमेय एवालुएटर बन जाता है।

शुरू करें प्रोमो का नामकरण डिस्काउंट टाइप से—मार्केटिंग विचार से नहीं। अधिकांश प्रोमो कुछ ही आकृतियों में फिट होते हैं: प्रतिशत छूट, फिक्स्ड अमाउंट ऑफ, फ्री आइटम (या बाय X गेट Y), और फ्री शिपिंग। जब आप एक प्रोमो को इन टाइप्स में एक्सप्रेस कर सकें, तो आप उन विशेष मामलों से बचते हैं जिन्हें टेस्ट करना मुश्किल होता है।

अगला, स्कोप स्पष्ट करें। समान प्रतिशत-ऑफ बहुत अलग व्यवहार करता है यह इस पर निर्भर करते हुए कि यह क्या टार्गेट करता है। परिभाषित करें क्या यह पूरे ऑर्डर पर लागू होगा, किसी कैटिगरी पर, किसी उत्पाद पर, एक सिंगल लाइन आइटम पर, या शिपिंग पर। अगर स्कोप अस्पष्ट होगा, आप गलत सबटोटल को छूट दे देंगे या दो बार छूट कर देंगे।

कंस्ट्रेंट्स को कोड कमेंट्स के बजाय फील्ड्स के रूप में कैप्चर करें। सामान्य कंस्ट्रेंट्स हैं: न्यूनतम खर्च, केवल पहले ऑर्डर के लिए, और डेट रेंज। यह भी रिकॉर्ड करें कि यह सेल कीमतों के साथ कैसे व्यवहार करेगा: ऊपर स्टैक करे, मूल कीमत पर लागू करे, या छूट किए गए आइटमों को बाहर रखे।

एक कॉम्पैक्ट रूल स्कीमा में शामिल हो सकते हैं:

  • type (percent, fixed, free_item, free_shipping)
  • scope (order, category, product, item, shipping)
  • constraints (min_spend, first_order, start_at, end_at)
  • floors (min_total = 0, min_item_price, optional min_margin)
  • rounding policy (per item vs per order)

अंत में ऐसे प्राइस फ्लोर्स जोड़ें जिन्हें इंजन हमेशा सम्मान करे: टोटल कभी शून्य से नीचे न जाएँ, और अगर आपके व्यापार को इसकी जरूरत है तो आइटम कभी लागत से नीचे न जाएँ (या परिभाषित न्यूनतम कीमत से नीचे)। अगर आप इसे बिल्ट कर लेते हैं, तो आप नकारात्मक टोटल्स और अजीब “ग्राहक को हम भुगतान कर दें” किनारों को रोकते हैं।

अगर आप Koder.ai में एक डिस्काउंट इंजन का प्रोटोटाइप बनाते हैं, तो इन फील्ड्स को अपनी प्लानिंग मोड में दिखाएँ ताकि एवालुएटर सरल और टेस्टेबल बना रहे जैसे-जैसे आप और प्रोमो जोड़ें।

चरण-दर-चरण: प्रोमो सुरक्षित तरीके से कैसे एवाल्यूएट करें

अधिकांश कूपन तर्क की त्रुटियाँ तब होती हैं जब पात्रता जांच और गणित आपस में मिल जाते हैं। एक सुरक्षित पैटर्न है दो-फेज़: पहले तय करें क्या लागू हो सकता है, फिर राशियाँ गिनें। यह अलगाव नियमों को पढ़ने योग्य रखता है और खराब स्थितियों (जैसे नकारात्मक टोटल्स) को रोकना आसान बनाता है।

एक निर्धार्य (deterministic) मूल्यांकन क्रम

हर बार वही क्रम इस्तेमाल करें, भले UI या API से प्रोमो अलग क्रम में आएं। निर्धार्यता महत्वपूर्ण है क्योंकि यह “यह कार्ट क्यों बदला?” को एक ऐसे प्रश्न में बदल देती है जिसका उत्तर आप दे सकते हैं।

एक सरल फ्लो जो अच्छी तरह काम करता है:

  • इनपुट वैलिडेट करें: प्रोमो कोड फॉर्मेट, डेट विंडो, ग्राहक स्कोप, मुद्रा, और कीमतें नकारात्मक नहीं होने की जाँच।
  • अर्जेंट प्रोमो चुनें: सिर्फ पात्रता चलाएँ (अभी पैसा नहीं)। उम्मीदवारों की सूची बनाएं।
  • स्टैकिंग और प्राथमिकता हल करें: अपने स्टैकिंग नियम लागू करें (उदा: "एक ऑर्डर-लेवल प्रोमो अधिकतम") और टाई-ब्रेकर (प्राथमिकता, फिर बेहतर वैल्यू, फिर स्थिर ID)।
  • गणना लागू करें: डिस्काउंट्स को एक सुसंगत बेस का उपयोग करके कैलकुलेट करें (प्री-टैक्स बनाम पोस्ट-टैक्स, शिपिंग शामिल है या नहीं) और राउंडिंग नियम लागू करें।
  • टोटल्स का सारांश तैयार करें: लाइन टोटल्स से ऑर्डर टोटल फिर से कैलकुलेट करें, फिर शून्य पर कैप करें और अधिकतम डिस्काउंट लिमिटें लागू करें।

ब्रेकडाउन और ऑडिट ट्रेल ट्रैक करें

जब आप प्रोमो लागू करते हैं, तो सिर्फ एक "डिस्काउंट टोटल" स्टोर न करें। लाइन-आइटम और ऑर्डर के लिए ब्रेकडाउन रखें ताकि आप टोटल्स को मिलान कर सकें और समझा सकें।

कम से कम रिकॉर्ड करें:

  • कौन सा नियम या प्रोमो लागू हुआ (ID और वर्शन), और उसकी प्राथमिकता
  • क्यों यह लागू हुआ (पात्रता फैक्ट्स जैसे "category=shoes", "cart subtotal >= 50")
  • इसने क्या बदला (प्रभावित लाइन IDs, बेस राशि, डिस्काउंट राशि, राउंडिंग)
  • इसने क्या रोका (उदा: "excluded: already has item-level discount")

उदाहरण: एक कार्ट में दो आइटम हैं, एक पहले से सेल पर है। फ़ेज़ 1 कोड को केवल फुल-प्राइस आइटम के लिए पात्र चिह्नित करता है। फ़ेज़ 2 उस लाइन पर 10% लागू करता है, सेल लाइन को बिना छुए छोड़ देता है, फिर लाइन ब्रेकडाउन से ऑर्डर टोटल्स पुन:गणना करता है ताकि आप गलती से डबल-डिस्काउंट न कर दें।

स्पैगेटी लॉजिक बनाए बिना अपवर्जन (exclusions) को एन्कोड करें

अपने बिल्ड के लिए पुरस्कार पाएं
Koder.ai पर आपने जो बनाया उसे साझा कर के बिल्ड के लिए क्रेडिट कमाएँ।
क्रेडिट अर्जित करें

कई कूपन त्रुटियाँ तब शुरू होती हैं जब अपवर्जन विशेष-केस ब्रांचेज़ में छिपा होते हैं जैसे "अगर कोड X है, तो Y छोड़ दो।" एक प्रोमो के लिए यह काम कर जाता है, फिर अगला प्रोमो आने पर टूट जाता है।

एक सुरक्षित पैटर्न यह है: एक ही मूल्यांकन फ्लो रखें, और अपवर्जन को ऐसे चेक्स की सेट की तरह रखें जो किसी प्रोमो कॉम्बिनेशन को पैसे की गणना से पहले अस्वीकार कर दें। इस तरह, डिस्काउंट कभी अधूरा लागू नहीं होगा।

अपवर्जन को डेटा की तरह ट्रीट करें, ब्रांचिंग की तरह नहीं

हार्डकोड किए व्यवहार के बजाय हर प्रोमो को एक छोटा, स्पष्ट "संगतता प्रोफ़ाइल" दें। उदाहरण: प्रोमो टाइप (कूपन बनाम ऑटोमैटिक सेल), स्कोप (आइटम्स, शिपिंग, ऑर्डर), और संयोजन नियम।

दो तरह का समर्थन करें:

  • “Cannot combine with” सूची (denylist): प्रोमो A प्रोमो B को ब्लॉक करता है।
  • “Only combine with” सूची (allowlist): प्रोमो A केवल नामित सेट के साथ स्टैक कर सकता है।
  • नियम फ्लैग्स जैसे "blocks automatic sales" या "requires no other coupons."

कुंजी यह है कि आपका इंजन हर प्रोमो के लिए वही सवाल पूछे, फिर तय करे कि सेट वैध है या नहीं।

संघर्षों को स्पष्ट बनाएं, ऑटो सेल्स सहित

ऑटोमैटिक सेल अक्सर पहले लगाए जाते हैं, फिर कूपन आता है और उन्हें चुपचाप ओवरराइड कर देता है। पहले से तय करें क्या होना चाहिए:

  • कूपन सेल पर स्टैक हो
  • कूपन केवल नॉन-सेल आइटम पर लागू हो
  • अगर सेल मौजूद है तो कूपन अस्वीकार कर दिया जाए

प्रति प्रोमो एक विकल्प चुनें और इसे एक चेक के रूप में एन्कोड करें, किसी वैकल्पिक गणना पथ के रूप में नहीं।

एक व्यावहारिक तरीका है सममिति (symmetry) का सत्यापन। अगर “WELCOME10 cannot combine with FREESHIP” दोनों दिशाओं में अवरुद्ध होना चाहिए, तो इसे डेटाबेस में दोनों तरह एन्कोड करें। अगर यह परस्पर नहीं है, तो इसे इरादतन और डाटा में स्पष्ट रखें।

उदाहरण: एक साइटवाइड 15% ऑटोमैटिक सेल चल रही है। ग्राहक 20% कूपन दर्ज करता है जो केवल फुल-प्राइस आइटम के लिए है। आपकी चेक्स को कूपन के लिए सेल आइटमों को अस्वीकार कर देना चाहिए, बजाय इसके कि आप उन्हें डिस्काउंट देकर बाद में संख्याएँ सुधारने की कोशिश करें।

अगर आप Koder.ai जैसे प्लेटफ़ॉर्म में अपने डिस्काउंट नियम बनाते हैं, तो इन चेक्स को अलग, टेस्टेबल लेयर रखें ताकि आप नियम बदल सकें बिना गणित को फिर से लिखे।

किन एज केसों से टोटल्स मेल नहीं खाते

कई कूपन विवाद हेडलाइन डिस्काउंट के बारे में नहीं होते। वे तब होते हैं जब वही कार्ट दो थोड़े अलग तरीकों से कैलकुलेट हो, फिर ग्राहक कार्ट में एक नंबर और चेकआउट में दूसरा देखता है।

शुरू करें आपके ऑपरेशन के क्रम को लॉक करके। निर्णय करें और दस्तावेज़ करें कि आइटम-लेवल डिस्काउंट्स ऑर्डर-लेवल डिस्काउंट्स से पहले होते हैं या नहीं, और शिपिंग कहाँ फिट बैठती है। एक आम नियम है: पहले आइटम डिस्काउंट, फिर शेष सबटोटल पर ऑर्डर डिस्काउंट, फिर शिपिंग डिस्काउंट्स आख़िर में। जो भी चुनें, हर जगह वही अनुक्रम इस्तेमाल करें जहाँ आप टोटल दिखाते हैं।

टैक्स अगला जाल है। अगर आपकी कीमतें टैक्स-इन्क्लूसिव हैं, तो एक डिस्काउंट टैक्स हिस्से को भी घटा देता है। अगर कीमतें टैक्स-एक्सक्लूसिव हैं, तो टैक्स डिस्काउंट के बाद कैलकुलेट होता है। फ्लो के अलग-अलग हिस्सों में इन मॉडलों का मिश्रण क्लासिक समस्या है क्योंकि दो सही गणनाएँ भी असहमत दिख सकती हैं अगर वे अलग टैक्स बेस मान लें।

राउंडिंग की समस्याएँ छोटी दिखती हैं पर सपोर्ट टिकट बड़े बनाते हैं। तय करें कि आप प्रति लाइन आइटम पर राउंड करेंगे (हर SKU पर डिस्काउंट के बाद) या केवल ऑर्डर स्तर पर, और अपनी मुद्रा प्रिसीजन पर टिके रहें। प्रतिशत कूपन के साथ, लाइन-राउंडिंग कई सेंट्स का अंतर पैदा कर सकती है, खासकर कई सस्ते आइटमों पर।

यहाँ एज केस हैं जिन्हें स्पष्ट रूप से हैंडल करने लायक है:

  • रिटर्न्स और आंशिक रिफंड्स: डिस्काउंट्स को आइटमों के बीच प्रोरैट करें ताकि रिफंड्स भुगतान से अधिक न हों।
  • कूपन लागू करने के बाद कार्ट संपादन: जब आइटम जोड़े या हटाए जाएँ तो पात्रता और कैप फिर से आकलित करें।
  • शिपिंग में बदलाव: पता या मेथड बदलने से टैक्स योग्य राशि और शिपिंग डिस्काउंट पात्रता बदल सकती है।
  • मात्रा परिवर्तन: एक ही आइटम को दोहराने से थ्रेशहोल्ड पार हो सकता है (उदा. मिन स्पेंड या बाय-X-गेट-Y)।
  • मिश्रित टैक्सेबल आइटम: कुछ आइटम टैक्स-नॉनटैक्सेबल हो सकते हैं, पर वे प्रोमो के लिए पात्र हो सकते हैं।

एक ठोस उदाहरण: 10% ऑर्डर कूपन और $50 से ऊपर पर फ्री शिपिंग। यदि कूपन थ्रेशहोल्ड जांच से पहले लागू होता है, तो डिस्काउंटेड सबटोटल $50 से नीचे आ सकता है और शिपिंग फिर से फ्री नहीं रहेगी। एक व्याख्या चुनें, उसे नियम के रूप में एन्कोड करें, और कार्ट, चेकआउट, और रिफंड्स में इसे संगत रखें।

सामान्य प्रोमो बग्स और वे कैसे होते हैं

अधिकांश कूपन त्रुटियाँ तब दिखाई देती हैं जब कार्ट को एक से अधिक पथ से मूल्यांकन किया जाता है। एक प्रोमो एक जगह लाइन-आइटम स्तर पर लागू हो सकता है और कहीं और ऑर्डर स्तर पर फिर से लागू हो सकता है, और दोनों अलग-अलग रूप में "सही" दिख सकते हैं।

यहाँ सबसे सामान्य बग्स और उनके सामान्य कारण हैं:

  • समान आइटम पर डबल-डिस्काउंटिंग: एक ही प्रोमो एक बार आइटम प्राइसिंग में और फिर ऑर्डर टोटल की गणना में फिर से लागू हो जाता है, अक्सर क्योंकि दो सेवाएँ दोनों छूट लागू कर देती हैं।
  • नकारात्मक टोटल या नकारात्मक लाइन आइटम: एक फिक्स्ड अमाउंट डिस्काउंट उस योग्य राशि से अधिक लागू हो जाता है (उदा $20 की छूट $12 योग्य सबटोटल पर) बिना शून्य फ़्लोर के।
  • प्रतिशत डिस्काउंट गलती से पहले से ही कटौती हुई कीमत पर लागू हो जाना: इंजन 10% को वर्तमान कीमत पर लागू कर देता है जबकि नियम का उद्देश्य "लिस्ट प्राइस पर 10%" था, क्योंकि कोड बेस प्राइस का उपयोग कर रहा है।
  • न्यूनतम खर्च गलत सबटोटल पर चेक किया जाना: नियम प्री-डिस्काउंट सबटोटल देखता है, पर बिजनेस पोस्ट-डिस्काउंट अपेक्षा करती थी (या उल्टा), जिससे प्रोमो अचरज में लागू या विफल होते हैं।
  • एक्सक्लूड किए गए आइटमों पर भी कूपन लगना: पात्रता प्रोडक्ट टैग्स पर निर्भर करती है, पर टैगिंग में गड़बड़ी या फॉलबैक पाथ अज्ञात आइटमों को पात्र समझ लेता है।

एक ठोस उदाहरण: कार्ट में दो आइटम हैं, एक पात्र और एक बाहर रखा हुआ। अगर इंजन प्रतिशत प्रोमो के लिए सही "पात्र सबटोटल" गणना करता है, पर बाद में पूरा ऑर्डर टोटल से एक फिक्स्ड डिस्काउंट घटा देता है, तो बाहर रखा आइटम पर अप्रत्यक्ष रूप से छूट दी जा रही है।

सुरक्षित पैटर्न यह है कि हर प्रोमो को एक स्पष्ट "पात्र राशि" के खिलाफ गिना जाए और एक सीमित समायोजन लौटाएँ (कभी शून्य से नीचे नहीं), साथ ही क्या छुआ गया इसकी साफ़ ट्रेस भी मिले। अगर आप अपना डिस्काउंट इंजन Koder.ai जैसे टूल में जनरेट करते हैं, तो आउटपुट में ट्रेस को प्लेन डेटा के रूप में रखें ताकि आपके टेस्ट्स ठीक-ठीक सत्यापित कर सकें कि किन लाइनों को पात्र माना गया और किस सबटोटल का उपयोग हुआ।

सही टेस्ट सूट के साथ नियमों को टेस्टेबल बनाएं

कोड करने से पहले नियम स्पेसिफाई करें
प्लानिंग मोड में नियमों को साधारण भाषा में लिखें, फिर कोड से पहले सहमति बनाएं।
योजना बनाएं

अधिकांश कूपन त्रुटियाँ इसलिए होती हैं क्योंकि टेस्ट केवल अंतिम टोटल को ही चेक करते हैं। एक अच्छा सूट दोनों चीज़ों की जांच करता है—पात्रता (क्या यह प्रोमो लागू होना चाहिए?) और गणित (यह कितना घटाएगा?)—और एक पढ़ने योग्य ब्रेकडाउन देता है जिसे आप समय के साथ तुलना कर सकें।

छोटे से रियल तक टेस्ट बनाएं

एक नियम को अलग रखने वाले यूनिट टेस्ट से शुरू करें। इनपुट छोटा रखें, फिर पूर्ण कार्ट परिदृश्यों की ओर बढ़ें।

  • पात्रता यूनिट टेस्ट: क्या प्रोमो लागू होगा दिए गए ग्राहक प्रकार, डेट्स, प्रोडक्ट टैग्स, और मिन स्पेंड के साथ?
  • गणित यूनिट टेस्ट: दिए गए योग्य सबटोटल पर क्या कैलकुलेशन राउंडिंग और मुद्रा नियमों से मेल खाती है?
  • परिदृश्य टेस्ट: मिश्रित आइटम, मात्राएँ, शिपिंग, टैक्स, और कुछ प्रोमो जिनके बीच प्रतिस्पर्धा हो।
  • “कार्ट बदला” टेस्ट: मूल्य अपडेट, आइटम हटाया गया, या मूल्यांकन और चेकआउट के बीच मात्रा बदली।
  • ब्रेकडाउन स्नैपशॉट टेस्ट: अपेक्षित लाइन-दर-लाइन डिस्काउंट आवंटन रखें, सिर्फ अंतिम टोटल नहीं।

कवरेज होने के बाद, कुछ "हमेशा सत्य" चेक जोड़ें। ये वे अजीब केस पकड़ते हैं जिन्हें आपने हाथ से नहीं सोचा।

  • टोटल कभी 0.00 से नीचे नहीं जाता।
  • कोई डिस्काउंट कुल को बढ़ाता नहीं है।
  • लागू डिस्काउंट इसकी योग्य बेस से बड़ा नहीं होता।
  • एक अयोग्य आइटम को हटाने से डिस्काउंट बड़ा नहीं होना चाहिए।

एक छोटा कार्ट उदाहरण

कल्पना करें एक कार्ट में 2 आइटम हैं: $40 का शर्ट (पात्र) और $30 का गिफ्ट कार्ड (बाहर रखा)। शिपिंग $7 है। एक प्रोमो है "apparel पर 20% ऑफ, अधिकतम $15", और दूसरा प्रोमो है "$50 से ऊपर के आदेशों पर $10 ऑफ" जो प्रतिशत डिस्काउंट के साथ स्टैक नहीं कर सकता।

आपके परिदृश्य टेस्ट को यह सत्यापित करना चाहिए कि कौन सा प्रोमो जीतता है (प्राथमिकता), गिफ्ट कार्ड को बाहर रखा गया है, और सटीक आवंटन की पुष्टि करे: $40 का 20% = $8, शिपिंग अपरिवर्तित, फाइनल टोटल सही। उस ब्रेकडाउन को गोल्डन स्नैपशॉट के रूप में सेव करें ताकि बाद के रिफैक्टर्स चुपके से यह न बदल दें कि कौन सा प्रोमो लागू होता है या बाहर रखे गए लाइनों पर छूट लगने लगे।

प्री-लॉन्च त्वरित चेकलिस्ट

नया प्रोमो शिप करने से पहले, एक अंतिम पास के साथ कुछ ऐसे चेक करें जो ग्राहकों को तुरंत दिखाई देने वाली विफलताओं को पकड़ते हैं: अजीब टोटल्स, भ्रमित संदेश, और ऐसे रिफंड्स जो मेल नहीं खाते। ये चेक यह भी मदद करते हैं कि कूपन तर्क की सबसे आम त्रुटियाँ पकड़ी जा सकें क्योंकि वे नियमों को हर कार्ट में एक जैसा चलाने के लिए मजबूर करते हैं।

इन चेक्स को कुछ "जाने-पहचाने कठिन" कार्ट्स के खिलाफ चलाएं (एक आइटम, कई आइटम, मिश्रित टैक्स रेट्स, शिपिंग, और एक उच्च-परिमाण लाइन)। उन कार्ट्स को सेव करें ताकि आप हर बार प्राइसिंग कोड बदलने पर इन्हें फिर चला सकें।

वे पाँच चेक जो ज्यादातर विफलताएँ पकड़ते हैं

  • टोटल्स पर गार्डरेल: अंतिम ऑर्डर टोटल और हर लाइन का नेट प्राइस कभी शून्य से नीचे नहीं होना चाहिए। अगर डिस्काउंट लागू करने से अधिक हो, तो उसे कैप करें और कैप की गई राशि रिकॉर्ड करें।
  • समझाने योग्य गणित: शॉपर को दिखाया गया डिस्काउंट ब्रेकडाउन (प्रोमो के हिसाब से, लाइन के हिसाब से, शिपिंग के हिसाब से) ठीक उसी अंतिम भुगतान राशि में जुड़ना चाहिए। अगर आप इसे एक वाक्य में समझा नहीं सकते, तो नियम बहुत अस्पष्ट हैं।
  • एक स्टैकिंग पॉलिसी, कोई सरप्राइज़ नहीं: तय करें और सत्यापित करें कि क्या स्टैक कर सकता है (कूपन ऑटो प्रोमो के साथ, प्रतिशत के साथ फिक्स्ड, शिपिंग डिस्काउंट के साथ आइटम डिस्काउंट)। प्राथमिकता क्रम स्पष्ट रखें और यह सुनिश्चित करें कि सपोर्ट टीम वही बोलेगी जो नियम कहता है।
  • राउंडिंग संगत है: एक राउंडिंग नियम चुनें (प्रति-लाइन बनाम प्रति-ऑर्डर, half-up बनाम bankers, मुद्रा-विशिष्ट दशमलव)। इसे दस्तावेज़ करें और ऐसे मूल्यों के साथ टेस्ट करें जैसे $0.99, मात्रा 3, और मिश्रित प्रतिशत डिस्काउंट्स।
  • रिटर्न्स और रिफंड सही हैं: आंशिक रिटर्न्स सही हिस्से के डिस्काउंट, टैक्स, और शिपिंग को रिफंड करें। "3 में से 1 रिटर्न करें", "पहले डिस्काउंटेड आइटम रिटर्न करें" और "प्रोमो एक्सपायर होने के बाद रिफंड" जैसे केस टेस्ट करें।

यदि आप Koder.ai जैसे जनरेटर में अपने डिस्काउंट नियम बनाते हैं, तो इन केसों को नियम परिभाषाओं के साथ ऑटोमेटेड टेस्ट के रूप में जोड़ें। लक्ष्य सरल है: कोई भी भविष्य का प्रोमो टेस्ट में जल्दी फेल होना चाहिए, न कि ग्राहक के कार्ट में फेल।

अपने नियमों को सत्यापित करने के लिए एक यथार्थवादी स्टैकिंग परिदृश्य

अपने प्रोमो इंजन का प्रोटोटाइप बनाएँ
एक निर्धार्य (deterministic) प्रोमो मूल्यांकनकर्ता को चैट फ्लो में प्रोटोटाइप करें, फिर स्पष्ट प्राथमिकता नियमों के साथ दोहराएँ।
Koder.ai आज़माएँ

यहाँ एक छोटा कार्ट है जो अधिकांश कूपन तर्क त्रुटियों को बिना जटिल हुए उजागर कर देता है।

मान लें ये नियम (सिस्टम में ठीक वैसे ही लिखें):

  • ऑटो प्रोमो पहले लागू होता है, आइटम-स्तर, केवल पात्र फुल-प्राइस आइटमों पर
  • कूपन ऑर्डर-लेवल है, $15 ऑफ, कम से कम $100 योग्य माल होना चाहिए
  • "योग्य माल" में सेल आइटम, शिपिंग और टैक्स शामिल नहीं हैं
  • कूपन डिस्काउंट पहले लगे प्रोमो के बाद की योग्य सबटोटल से अधिक नहीं हो सकता
  • टैक्स डिस्काउंट के बाद गणना किया जाता है (छूट किए गए माल और शिपिंग पर)

कार्ट और प्रोमो

कार्ट:

LinePriceNotes
Item A$60full-price, eligible
Item B$40full-price, eligible
Item C$30sale item, excluded
Shipping$8fee

प्रोमो:

  • Promo 1: योग्य आइटमों पर ऑटोमैटिक 10% वीकेंड सेल
  • Promo 2: कूपन $15 ऑफ, मिन $100 योग्य खर्च, सेल आइटमों को बाहर रखता है

वॉकथ्रू और अंतिम ब्रेकडाउन

  1. कूपन मिनिमम जांचें: डिस्काउंट से पहले योग्य माल $60 + $40 = $100 है, इसलिए कूपन लागू हो सकता है।

  2. Promo 1 लागू करें (योग्य आइटमों पर 10%): $100 x 10% = $10 ऑफ। योग्य सबटोटल $90 हो गया।

  3. Promo 2 लागू करें ($15 ऑफ): कैप $90 है, इसलिए पूरा $15 लागू होता है। नया योग्य सबटोटल: $75।

टोटल्स:

  • मर्चेंडाइज़: योग्य $75 + सेल आइटम $30 = $105
  • शिपिंग: $8
  • टैक्स (8%): (105 + 8) x 0.08 = $9.04
  • अंतिम टोटल: $105 + $8 + $9.04 = $122.04

अब एक चीज़ बदलें: ग्राहक Item B ($40) हटा देता है। योग्य मर्चेंडाइज़ $60 रह जाती है, इसलिए $15 कूपन मिन स्पेंड चेक फेल कर जाता है। केवल 10% ऑटो प्रोमो रहता है: Item A $54 हो जाता है, मर्चेंडाइज़ $54 + $30 = $84, और अंतिम टोटल $99.36 बन जाता है। यह वही तरह का "छोटा एडिट" है जो कार्ट्स को अक्सर तोड़ देता है अगर पात्रता और क्रम स्पष्ट न हों।

अगले कदम: प्रोमो सुरक्षित रूप से शिप करें और उन्हें रखरखाव योग्य रखें

कूपन तर्क त्रुटियों से बचने का सबसे तेज़ तरीका यह है कि प्रोमो को उत्पाद नियम की तरह ट्रीट करें, न कि "चेकआउट में कुछ गणित" की तरह। शिप करने से पहले एक छोटा स्पेक लिखें जिसे टीम का कोई भी सदस्य पढ़कर सहमति दे सके।

चार चीजें साधारण भाषा में शामिल करें:

  • स्टैकिंग नियम (क्या संयोजित हो सकता है, और क्या नहीं)
  • प्राथमिकता क्रम (जब दो एक ही आइटम को टार्गेट करें तो कौन जीतेगा)
  • अपवर्जन (कैटेगरी, ब्रांड, सेल आइटम, सब्सक्रिप्शन, गिफ्ट कार्ड)
  • फ्लोर्स और कैप्स (मिन सबटोटल, मैक्स डिस्काउंट, और "कभी $0 से नीचे नहीं")

रिलीज़ के बाद, टोटल्स पर निगरानी रखें जैसे आप एरर्स देखते हैं। एक डिस्काउंट बग अक्सर एक वैध ऑर्डर जैसा दिखता है जब तक फाइनेंस उसे नहीं देखता।

ऐसे मॉनिटरिंग सेट करें जो असामान्य पैटर्न वाले ऑर्डर्स को फ्लैग करें, जैसे नज़दीकी-शून्य टोटल्स, नकारात्मक टोटल्स, सबटोटल से बड़े डिस्काउंट, या अचानक "100% ऑफ" कार्ट्स में स्पाइक। अलर्ट्स को उसी जगह भेजें जहाँ आपका चेकआउट एरर अलर्ट जाता है, और एक छोटा प्लेबुक रखें कि कैसे किसी प्रोमो को सुरक्षित रूप से डिसेबल किया जाए।

नए प्रोमो बिना रिग्रेसन के जोड़ने के लिए एक दोहराने योग्य वर्कफ़्लो का उपयोग करें: पहले स्पेक अपडेट करें, नियम को डेटा के रूप में एन्कोड करें (ब्रांचिंग कोड नहीं), कुछ "नॉर्मल" कार्ट्स और एक-दो नास्टी एज केस के लिए टेस्ट जोड़ें, फिर मर्ज करने से पहले पूरा डिस्काउंट टेस्ट सूट चलाएँ।

अगर आप तेजी से इम्प्लीमेंट और इटरेट करना चाहते हैं, तो आप Koder.ai में प्लानिंग मोड का उपयोग करके प्रोमो इंजन फ्लोज़ का प्रोटोटाइप कर सकते हैं, फिर स्नैपशॉट और रोलबैक के साथ अपने टेस्ट्स को परिष्कृत करें। यह आपको नियम बदलने की कोशिश जल्दी से करने में मदद करता है बिना ज्ञात-स्तर का वर्जन खोए।

विषय-सूची
क्यों प्रोमो लॉजिक अक्सर टूटता हैस्पष्ट स्टैकिंग और प्राथमिकता नियमों से शुरू करेंडिस्काउंट्स को सरल, स्पष्ट डेटा के रूप में मॉडल करेंचरण-दर-चरण: प्रोमो सुरक्षित तरीके से कैसे एवाल्यूएट करेंस्पैगेटी लॉजिक बनाए बिना अपवर्जन (exclusions) को एन्कोड करेंकिन एज केसों से टोटल्स मेल नहीं खातेसामान्य प्रोमो बग्स और वे कैसे होते हैंसही टेस्ट सूट के साथ नियमों को टेस्टेबल बनाएंप्री-लॉन्च त्वरित चेकलिस्टअपने नियमों को सत्यापित करने के लिए एक यथार्थवादी स्टैकिंग परिदृश्यअगले कदम: प्रोमो सुरक्षित रूप से शिप करें और उन्हें रखरखाव योग्य रखें
शेयर करें