Enterprise class checkout validation for PrestaShop: 58 real condition examples with Field · Operator · Value panels and the exact policy JSON. Nest unlimited AND/OR rules — MOQ, geo, carrier, payment, customer and time — without artificial limits.
Conditional Order Validation is enterprise class software for checkout governance. You design policies in a visual condition builder, nest AND/OR groups without artificial depth limits, attach multilingual Reasons, choose block or warn, then measure everything on the analytics dashboard and defend every decision in the full audit log.
This article is a field guide: 52 practical validation scenarios built only from real condition fields available in the module. Every scenario is a real multi-condition tree (AND/OR, often with nested groups) taken from everyday shop operations — not a single-field demo. You get the dark condition-tree card plus the compact conditions JSON exactly as JSON.stringify stores it in the module’s Edit as JSON panel.
There is no “only three simple rules” ceiling. Enterprise class software means unlimited possibilities when you compose nested groups, priorities and stop-on-first-match policies into a validation system as complex as your business.
Groups inside groups, per-sibling joins, drag-and-drop reorder. Build the rule your operations team describes in a sentence — not the rule a plugin template allows.
Every policy persists a condition tree. Edit visually or open Edit as JSON. Import, export, duplicate, simulate — the same structure end to end.
KPI cards, Chart.js trends, evaluation snapshots. Enterprise class means you can explain why checkout was blocked at 14:37 yesterday.
How to read each example: the dark terminal card shows the nested condition tree (cyan fields, operators, amber/emerald values, purple Group / indigo Nested badges). Entity picks are shown as Name #ID (e.g. Poland #14, Furniture #18) — the compact JSON below still stores raw IDs exactly as the module’s JSON.stringify does. Swap sample IDs for your SearchTool picks.
Reminder: a policy matches when its condition tree evaluates to true — then the policy action (block or warn) runs. MOQ fields (*_qty_min, *_qty_max, *_qty_multiple) are special: they match when the constraint is violated. Combine policies with priority and stop-on-first for layered enterprise workflows without limits on how sophisticated you go.
Most shops waive a strict minimum for logged-in wholesalers but still enforce it for guests: guest AND cart total below the floor.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"guest","operator":"eq","value":"1"},{"type":"condition","field":"cart_total","operator":"lt","value":"50","join":"AND"}]}Fraud desk pattern: cart over 2000 EUR AND (guest OR fewer than 1 completed order). Soft-warn so support can call back.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"cart_total","operator":"gt","value":"2000"},{"type":"group","operator":"AND","children":[{"type":"condition","field":"guest","operator":"eq","value":"1"},{"type":"condition","field":"customer_orders","operator":"lt","value":"1","join":"OR"}],"join":"AND"}]}Carriers refuse COD on expensive parcels: payment module is COD AND products total is over 300 EUR.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"payment_module","operator":"eq","value":"ps_cashondelivery"},{"type":"condition","field":"cart_total_products","operator":"gt","value":"300","join":"AND"}]}Everyday logistics: selected carrier is locker AND cart weight exceeds 25 kg — customer must switch to courier.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"carrier","operator":"in","value":"12"},{"type":"condition","field":"cart_weight","operator":"gt","value":"25","join":"AND"}]}After 14:00, same-day postcodes are closed: hour >= 14 AND delivery postcode matches the city regex.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"hour","operator":"gte","value":"14"},{"type":"condition","field":"postcode","operator":"regex","value":"^(00|01|02|03|04)-","join":"AND"}]}Warehouse closed Sat/Sun for pallet work: day is Saturday or Sunday AND weight over 30 kg AND cart requires shipping.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"day_of_week","operator":"in","value":"6,7"},{"type":"condition","field":"cart_weight","operator":"gt","value":"30","join":"AND"},{"type":"condition","field":"requires_shipping","operator":"eq","value":"1","join":"AND"}]}Licensing + warehouse conflict: at least one virtual product AND at least one physical product in the same cart.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"has_virtual_product","operator":"eq","value":"1"},{"type":"condition","field":"has_physical_product","operator":"eq","value":"1","join":"AND"}]}Category Personalization is in the cart AND customization flag is No — stop until the customer fills the form.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category","operator":"in","value":"42"},{"type":"condition","field":"has_customization","operator":"eq","value":"0","join":"AND"}]}Warranty conflict: product 12 AND product 34 both present — force two separate orders.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product","operator":"in","value":"12"},{"type":"condition","field":"product","operator":"in","value":"34","join":"AND"}]}Compliance: category Chemicals AND category Food in the same basket — shipping law forbids mixing.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category","operator":"in","value":"8"},{"type":"condition","field":"category","operator":"in","value":"5","join":"AND"}]}Manufacturer 7 is B2B-only: brand in cart AND customer is not in wholesale groups 3 or 4.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer","operator":"in","value":"7"},{"type":"condition","field":"group","operator":"not_in","value":"3,4","join":"AND"}]}Supplier 3 ships made-to-order: supplier in cart AND guest checkout — ask them to create an account first.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"supplier","operator":"in","value":"3"},{"type":"condition","field":"guest","operator":"eq","value":"1","join":"AND"}]}Margin guard: cart already has a voucher AND more than 2 cart rules are stacked.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"has_discount","operator":"eq","value":"1"},{"type":"condition","field":"cart_rules_count","operator":"gt","value":"2","join":"AND"}]}Misconfigured carrier symptom: cart requires shipping AND shipping cost equals 0 — warn ops before the order is paid.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"requires_shipping","operator":"eq","value":"1"},{"type":"condition","field":"cart_shipping","operator":"eq","value":"0","join":"AND"}]}Packing station limit: unique products over 15 AND customer is guest (logged customers may be B2B with dedicated pickers).
{"type":"group","operator":"AND","children":[{"type":"condition","field":"unique_product_count","operator":"gt","value":"15"},{"type":"condition","field":"guest","operator":"eq","value":"1","join":"AND"}]}Sample/wholesale kit: customer group is wholesale AND total product quantity is still under 6.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"group","operator":"in","value":"3"},{"type":"condition","field":"product_count","operator":"lt","value":"6","join":"AND"}]}Product 12 MOQ violated AND this is the customer's first order — common when newcomers ignore pack size on the product page.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_qty_min","operator":"eq","value":"12:2"},{"type":"condition","field":"customer.is_first_order","operator":"eq","value":"1","join":"AND"}]}Launch allocation: product 55 quantity exceeds max 5 AND category Limited Drops is in the cart.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_qty_max","operator":"eq","value":"55:5"},{"type":"condition","field":"category","operator":"in","value":"15","join":"AND"}]}Category 9 must reach 6 units for the deal to be valid — MOQ violated AND a voucher is applied (block empty promo abuse).
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category_qty_min","operator":"eq","value":"9:6"},{"type":"condition","field":"has_discount","operator":"eq","value":"1","join":"AND"}]}Category 15 qty over 3 per order AND payment is not bank wire (card/COD buyers often scalp launches).
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category_qty_max","operator":"eq","value":"15:3"},{"type":"condition","field":"payment_module","operator":"neq","value":"ps_wirepayment","join":"AND"}]}SKU 88 must be ordered in multiples of 4 AND delivery country is outside the domestic ID — export cartons only.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_qty_multiple","operator":"eq","value":"88:4"},{"type":"condition","field":"country","operator":"not_in","value":"14","join":"AND"}]}Category 5 qty not a multiple of 6 AND customer group is retailer — stores only accept full facings.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category_qty_multiple","operator":"eq","value":"5:6"},{"type":"condition","field":"group","operator":"in","value":"4","join":"AND"}]}Manufacturer 4 qty not multiple of 6 AND lifetime spend is still under wholesale threshold — nudge them to fill the case.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer_qty_multiple","operator":"eq","value":"4:6"},{"type":"condition","field":"customer_spent","operator":"lt","value":"500","join":"AND"}]}Supplier 2 must be ordered in steps of 10 AND delivery zone is remote — partial cartons are not economical to ship.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"supplier_qty_multiple","operator":"eq","value":"2:10"},{"type":"condition","field":"zone","operator":"in","value":"4","join":"AND"}]}Product 21 line total under 99 EUR AND category Custom Paint is present — workshop will not schedule the job.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_line_total","operator":"lt","value":"21:99"},{"type":"condition","field":"category","operator":"in","value":"21","join":"AND"}]}Shop #1 only: currency is USD (id 2) AND delivery country is domestic — force EUR checkout.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"shop.id","operator":"eq","value":"1"},{"type":"condition","field":"currency","operator":"in","value":"2","join":"AND"},{"type":"condition","field":"country","operator":"in","value":"14","join":"AND"}]}Delivery country is embargoed AND cart has a physical product (digital downloads may still be allowed via another policy).
{"type":"group","operator":"AND","children":[{"type":"condition","field":"country","operator":"in","value":"69"},{"type":"condition","field":"has_physical_product","operator":"eq","value":"1","join":"AND"}]}Invoice country outside the EU sample set AND products total (tax excl.) over 150 — tax team must review.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"invoice_country","operator":"not_in","value":"8,14,15"},{"type":"condition","field":"cart.total_products_tax_excl","operator":"gt","value":"150","join":"AND"}]}Zone 4 AND cash on delivery — high return risk; require prepayment.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"zone","operator":"in","value":"4"},{"type":"condition","field":"payment_module","operator":"eq","value":"ps_cashondelivery","join":"AND"}]}Delivery state 322 AND weight over 5 kg — regional partner does not cover heavy parcels there.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"address.delivery_state","operator":"in","value":"322"},{"type":"condition","field":"cart_weight","operator":"gt","value":"5","join":"AND"}]}All lines are virtual AND customer is not logged in — accounts are required for license delivery.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"all_virtual","operator":"eq","value":"1"},{"type":"condition","field":"logged","operator":"eq","value":"0","join":"AND"}]}Shop #2 B2B storefront: email domain is gmail.com OR customer is guest — only company accounts.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"shop.id","operator":"eq","value":"2"},{"type":"group","operator":"AND","children":[{"type":"condition","field":"customer.email_domain","operator":"eq","value":"gmail.com"},{"type":"condition","field":"guest","operator":"eq","value":"1","join":"OR"}],"join":"AND"}]}Account younger than 7 days AND cart over 300 EUR — cooldown against stolen-card testing.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"customer.account_age_days","operator":"lt","value":"7"},{"type":"condition","field":"cart_total","operator":"gt","value":"300","join":"AND"}]}First order AND COD — soft-warn; many shops switch first orders to prepaid only.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"customer.is_first_order","operator":"eq","value":"1"},{"type":"condition","field":"payment_module","operator":"eq","value":"ps_cashondelivery","join":"AND"}]}Manufacturer 7 in cart AND lifetime spend under 500 — brand wants proven buyers only.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer","operator":"in","value":"7"},{"type":"condition","field":"customer_spent","operator":"lt","value":"500","join":"AND"}]}Date is 2026-12-24 AND cart requires shipping — only digital can proceed that day.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"date","operator":"eq","value":"2026-12-24"},{"type":"condition","field":"requires_shipping","operator":"eq","value":"1","join":"AND"}]}Date between warehouse stocktake days AND any physical product — pause outbound orders.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"date","operator":"between","value":"2026-08-01,2026-08-15"},{"type":"condition","field":"has_physical_product","operator":"eq","value":"1","join":"AND"}]}Manufacturer min qty violated AND customer is in retailer group — case quantity is contractual.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer_qty_min","operator":"eq","value":"4:12"},{"type":"condition","field":"group","operator":"in","value":"4","join":"AND"}]}Supplier max qty exceeded AND country is domestic — export channel has a separate pool.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"supplier_qty_max","operator":"eq","value":"2:50"},{"type":"condition","field":"country","operator":"in","value":"14","join":"AND"}]}Manufacturer max exceeded AND a discount is applied — stop promo-driven overselling of allocated stock.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer_qty_max","operator":"eq","value":"4:100"},{"type":"condition","field":"has_discount","operator":"eq","value":"1","join":"AND"}]}Supplier min qty violated AND shipping is required — partial cartons are rejected by the 3PL intake.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"supplier_qty_min","operator":"eq","value":"2:10"},{"type":"condition","field":"requires_shipping","operator":"eq","value":"1","join":"AND"}]}Category qty under 12 AND products total tax excl. under 150 — neither unit nor spend MOQ is met.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category_qty","operator":"lt","value":"5:12"},{"type":"condition","field":"cart.total_products_tax_excl","operator":"lt","value":"150","join":"AND"}]}Manufacturer qty under 24 AND customer is logged in (guests never see this brand — separate catalog rule).
{"type":"group","operator":"AND","children":[{"type":"condition","field":"manufacturer_qty","operator":"lt","value":"4:24"},{"type":"condition","field":"logged","operator":"eq","value":"1","join":"AND"}]}Supplier qty under 10 AND carrier is standard pallet service — intake expects full cartons only.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"supplier_qty","operator":"lt","value":"2:10"},{"type":"condition","field":"carrier","operator":"in","value":"5","join":"AND"}]}Product 12 qty under 3 AND a voucher is on the cart — the coupon requires the multi-buy.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_qty","operator":"lt","value":"12:3"},{"type":"condition","field":"has_discount","operator":"eq","value":"1","join":"AND"}]}Real finance rule: (VIP group OR (cart >= 500 AND logged-in)) AND payment is cash on delivery. Nested OR inside an AND — classic enterprise tree.
{"type":"group","operator":"AND","children":[{"type":"group","operator":"AND","children":[{"type":"condition","field":"group","operator":"in","value":"3"},{"type":"group","operator":"AND","children":[{"type":"condition","field":"cart_total","operator":"gte","value":"500"},{"type":"condition","field":"logged","operator":"eq","value":"1","join":"AND"}],"join":"OR"}]},{"type":"condition","field":"payment_module","operator":"eq","value":"ps_cashondelivery","join":"AND"}]}Furniture/oversized category AND weight over 30 kg AND carrier is locker — must use furniture courier instead.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"category","operator":"in","value":"18,19"},{"type":"condition","field":"cart_weight","operator":"gt","value":"30","join":"AND"},{"type":"condition","field":"carrier","operator":"in","value":"12","join":"AND"}]}Guest AND virtual product present AND postcode starts with 9 — often a fraud pattern on gift-card style SKUs; warn before payment.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"guest","operator":"eq","value":"1"},{"type":"condition","field":"has_virtual_product","operator":"eq","value":"1","join":"AND"},{"type":"condition","field":"postcode","operator":"regex","value":"^9","join":"AND"}]}Hour >= 22 AND unique products over 10 AND shipping required — night shift cannot pick complex orders.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"hour","operator":"gte","value":"22"},{"type":"condition","field":"unique_product_count","operator":"gt","value":"10","join":"AND"},{"type":"condition","field":"requires_shipping","operator":"eq","value":"1","join":"AND"}]}Email domain is not company.com AND lifetime spend under 1000 — B2B portal allows consumer domains only after proven spend.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"customer.email_domain","operator":"neq","value":"company.com"},{"type":"condition","field":"customer_spent","operator":"lt","value":"1000","join":"AND"}]}Export country AND weight over 20 kg AND locker carrier — impossible service combination shops hit every week.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"country","operator":"in","value":"8"},{"type":"condition","field":"cart_weight","operator":"gt","value":"20","join":"AND"},{"type":"condition","field":"carrier","operator":"in","value":"12","join":"AND"}]}Wholesale group AND (product count under 12 OR net products total under 200) — either units or spend must clear the contract.
{"type":"group","operator":"AND","children":[{"type":"condition","field":"group","operator":"in","value":"3"},{"type":"group","operator":"AND","children":[{"type":"condition","field":"product_count","operator":"lt","value":"12"},{"type":"condition","field":"cart.total_products_tax_excl","operator":"lt","value":"200","join":"OR"}],"join":"AND"}]}These 52 trees are starting points, not a ceiling. Because Conditional Order Validation is enterprise class software, you can nest groups inside groups, mix catalog MOQs with geo, payment module names, customer LTV and calendar windows, assign priorities, stop on first match, simulate carts before go-live, then watch blocks and warnings on the dashboard while every evaluation lands in the audit log.
Unlimited possibilities. No artificial limits on condition complexity. If your operations team can describe the rule in plain language, the visual builder — and the JSON behind it — can express it.
Install Conditional Order Validation, load a preset or paste one of the JSON trees above into Edit as JSON, attach a multilingual Reason, and simulate. Enterprise DNA for PrestaShop 9 / 8 / 1.7.
Conditional Order Validation
Article written byMilosz Myszczuk, PrestaShop expert. CEO and founder of the VEKIA interactive agency. Learn more.
If you like this article, support our work!

Conditional Order Validation lets you block or warn checkout when a cart breaks your rules. Set cond...
129.00 €

Charge handling, service or packaging fees only when your rules match. Conditional Order Fees adds a...
129.00 €

Apply conditional order discounts using native cart rules. Create BOGO deals, buy N get M free, spen...
149.00 €

Sell optional checkout services your customers choose: gift wrapping, shipping insurance, express ha...
149.00 €