diff --git a/vendor/magento/module-advanced-rule/Model/Condition/Filter.php b/vendor/magento/module-advanced-rule/Model/Condition/Filter.php
index 254f29320312..004f8feff27a 100644
--- a/vendor/magento/module-advanced-rule/Model/Condition/Filter.php
+++ b/vendor/magento/module-advanced-rule/Model/Condition/Filter.php
@@ -8,19 +8,20 @@
 use Magento\AdvancedRule\Model\Condition\FilterInterface;
 
 /**
- * Class Filter
+ * Class to save Filter related logic for rules into database.
  *
  * @codeCoverageIgnore
  */
 class Filter extends \Magento\Framework\Model\AbstractModel implements FilterInterface
 {
-    const KEY_FILTER_TEXT = 'filter_text';
-    const KEY_WEIGHT = 'weight';
-    const KEY_FILTER_TEXT_GENERATOR_CLASS = 'filter_text_generator_class';
-    const KEY_FILTER_TEXT_GENERATOR_ARGUMENTS = 'filter_text_generator_arguments';
+    public const KEY_FILTER_TEXT = 'filter_text';
+    public const KEY_WEIGHT = 'weight';
+    public const KEY_FILTER_TEXT_GENERATOR_CLASS = 'filter_text_generator_class';
+    public const KEY_FILTER_TEXT_GENERATOR_ARGUMENTS = 'filter_text_generator_arguments';
+    public const IS_COUPON = 'is_coupon';
 
     /**
-     * @return string
+     * @inheritdoc
      */
     public function getFilterText()
     {
@@ -28,8 +29,7 @@ public function getFilterText()
     }
 
     /**
-     * @param string $filterText
-     * @return $this
+     * @inheritdoc
      */
     public function setFilterText($filterText)
     {
@@ -37,7 +37,7 @@ public function setFilterText($filterText)
     }
 
     /**
-     * @return float
+     * @inheritdoc
      */
     public function getWeight()
     {
@@ -45,8 +45,7 @@ public function getWeight()
     }
 
     /**
-     * @param float $weight
-     * @return $this
+     * @inheritdoc
      */
     public function setWeight($weight)
     {
@@ -54,9 +53,7 @@ public function setWeight($weight)
     }
 
     /**
-     * Return name of the FilterTextGenerator class
-     *
-     * @return string
+     * @inheritdoc
      */
     public function getFilterTextGeneratorClass()
     {
@@ -64,8 +61,7 @@ public function getFilterTextGeneratorClass()
     }
 
     /**
-     * @param string $filterTextGeneratorClass
-     * @return $this
+     * @inheritdoc
      */
     public function setFilterTextGeneratorClass($filterTextGeneratorClass)
     {
@@ -73,7 +69,7 @@ public function setFilterTextGeneratorClass($filterTextGeneratorClass)
     }
 
     /**
-     * @return string
+     * @inheritdoc
      */
     public function getFilterTextGeneratorArguments()
     {
@@ -81,11 +77,26 @@ public function getFilterTextGeneratorArguments()
     }
 
     /**
-     * @param string $arguments
-     * @return $this
+     * @inheritdoc
      */
     public function setFilterTextGeneratorArguments($arguments)
     {
         return $this->setData(self::KEY_FILTER_TEXT_GENERATOR_ARGUMENTS, $arguments);
     }
+
+    /**
+     * @inheritdoc
+     */
+    public function setIsCoupon(bool $isCoupon)
+    {
+        return $this->setData(self::IS_COUPON, $isCoupon);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isCoupon():bool
+    {
+        return $this->getData(self::IS_COUPON);
+    }
 }
diff --git a/vendor/magento/module-advanced-rule/Model/Condition/FilterInterface.php b/vendor/magento/module-advanced-rule/Model/Condition/FilterInterface.php
index 3436599537c7..cdd328fcfb44 100644
--- a/vendor/magento/module-advanced-rule/Model/Condition/FilterInterface.php
+++ b/vendor/magento/module-advanced-rule/Model/Condition/FilterInterface.php
@@ -14,51 +14,83 @@
  */
 interface FilterInterface
 {
-    const FILTER_TEXT_TRUE = 'true';
+    /**
+     * Const to show if filter is text.
+     */
+    public const FILTER_TEXT_TRUE = 'true';
 
     /**
+     * Return filter text.
+     *
      * @return string
      */
     public function getFilterText();
 
     /**
+     * Set filter text.
+     *
      * @param string $filterText
      * @return $this
      */
     public function setFilterText($filterText);
 
     /**
+     * Return weight of the rule to see if it can be applied.
+     *
      * @return float
      */
     public function getWeight();
 
     /**
+     * Set weight of the rule to see if it can be applied.
+     *
      * @param float $weight
      * @return $this
      */
     public function setWeight($weight);
 
     /**
-     * Return name of the FilterTextGenerator class
+     * Return name of the FilterTextGenerator class.
      *
      * @return string
      */
     public function getFilterTextGeneratorClass();
 
     /**
+     * Set name of the FilterTextGenerator class.
+     *
      * @param string $filterTextGeneratorClass
      * @return $this
      */
     public function setFilterTextGeneratorClass($filterTextGeneratorClass);
 
     /**
+     * Return arguments for FilterTextGenerator class.
+     *
      * @return string
      */
     public function getFilterTextGeneratorArguments();
 
     /**
+     * Set arguments for FilterTextGenerator class.
+     *
      * @param string $arguments
      * @return $this
      */
     public function setFilterTextGeneratorArguments($arguments);
+
+    /**
+     * Set flag if a rule is coupon based.
+     *
+     * @param bool $isCoupon
+     * @return $this
+     */
+    public function setIsCoupon(bool $isCoupon);
+
+    /**
+     * Return flag if coupon is rule based.
+     *
+     * @return bool
+     */
+    public function isCoupon():bool;
 }
diff --git a/vendor/magento/module-advanced-sales-rule/Model/Indexer/SalesRule/AbstractAction.php b/vendor/magento/module-advanced-sales-rule/Model/Indexer/SalesRule/AbstractAction.php
index 9ea9d5f8edb0..d720c123b119 100644
--- a/vendor/magento/module-advanced-sales-rule/Model/Indexer/SalesRule/AbstractAction.php
+++ b/vendor/magento/module-advanced-sales-rule/Model/Indexer/SalesRule/AbstractAction.php
@@ -54,12 +54,14 @@ public function __construct(
 
     /**
      * Run full reindex
+     *
      * @return $this
      */
     abstract public function execute();
 
     /**
-     * Run reindexation
+     * Run reindexation.
+     *
      * @param bool $fullReindex
      * @return void
      */
@@ -79,6 +81,8 @@ protected function reindex($fullReindex = false)
     }
 
     /**
+     * Set ids for action.
+     *
      * @param int[] $actionIds
      * @return void
      */
@@ -88,6 +92,8 @@ protected function setActionIds($actionIds)
     }
 
     /**
+     * Save filters for specific rule.
+     *
      * @param SalesRule $rule
      * @return void
      */
@@ -96,6 +102,7 @@ protected function saveFilters(SalesRule $rule)
         $ruleId = $rule->getId();
         if ($ruleId) {
             $condition = $rule->getConditions();
+            $isCouponCode = $rule->getCouponType() != SalesRule::COUPON_TYPE_NO_COUPON;
             $data = [];
             if ($condition instanceof FilterableConditionInterface && $condition->isFilterable()) {
                 $filterGroups = $condition->getFilterGroups();
@@ -110,6 +117,7 @@ protected function saveFilters(SalesRule $rule)
                             Filter::KEY_FILTER_TEXT => $filter->getFilterText(),
                             Filter::KEY_FILTER_TEXT_GENERATOR_CLASS => $filter->getFilterTextGeneratorClass(),
                             Filter::KEY_FILTER_TEXT_GENERATOR_ARGUMENTS => $filter->getFilterTextGeneratorArguments(),
+                            Filter::IS_COUPON => $isCouponCode,
                         ];
                     }
                     $groupId++;
@@ -118,6 +126,7 @@ protected function saveFilters(SalesRule $rule)
 
             if (empty($data)) {
                 $data = $this->getTruePlaceHolder($ruleId);
+                $data[Filter::IS_COUPON] = $isCouponCode;
             }
 
             $this->filterResourceModel->insertFilters($data);
@@ -125,6 +134,8 @@ protected function saveFilters(SalesRule $rule)
     }
 
     /**
+     * Get placeholder for rules without data.
+     *
      * @param int $ruleId
      * @return array
      */
@@ -137,7 +148,6 @@ protected function getTruePlaceHolder($ruleId)
             Filter::KEY_FILTER_TEXT => FilterInterface::FILTER_TEXT_TRUE,
             Filter::KEY_FILTER_TEXT_GENERATOR_CLASS => null,
             Filter::KEY_FILTER_TEXT_GENERATOR_ARGUMENTS => null,
-
         ];
     }
 }
diff --git a/vendor/magento/module-advanced-sales-rule/Model/ResourceModel/Rule/Condition/Filter.php b/vendor/magento/module-advanced-sales-rule/Model/ResourceModel/Rule/Condition/Filter.php
index 3d98979b41f9..8c4385ce90ae 100644
--- a/vendor/magento/module-advanced-sales-rule/Model/ResourceModel/Rule/Condition/Filter.php
+++ b/vendor/magento/module-advanced-sales-rule/Model/ResourceModel/Rule/Condition/Filter.php
@@ -56,6 +56,8 @@ public function filterRules(array $filterText)
         $select = $connection->select()->from(
             $this->getMainTable(),
             ['rule_id']
+        )->where(
+            'is_coupon != 1',
         )->where(
             $connection->quoteInto(
                 FilterModel::KEY_FILTER_TEXT . ' IN (?) ',
diff --git a/vendor/magento/module-advanced-sales-rule/Model/Rule/Condition/FilterTextGenerator/Product/Category.php b/vendor/magento/module-advanced-sales-rule/Model/Rule/Condition/FilterTextGenerator/Product/Category.php
index 3e28264ecca0..a5876195ea85 100644
--- a/vendor/magento/module-advanced-sales-rule/Model/Rule/Condition/FilterTextGenerator/Product/Category.php
+++ b/vendor/magento/module-advanced-sales-rule/Model/Rule/Condition/FilterTextGenerator/Product/Category.php
@@ -1,16 +1,48 @@
 <?php
-/**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+/************************************************************************
+ *
+ *  ADOBE CONFIDENTIAL
+ *  ___________________
+ *
+ *  Copyright 2015 Adobe
+ *  All Rights Reserved.
+ *
+ *  NOTICE: All information contained herein is, and remains
+ *  the property of Adobe and its suppliers, if any. The intellectual
+ *  and technical concepts contained herein are proprietary to Adobe
+ *  and its suppliers and are protected by all applicable intellectual
+ *  property laws, including trade secret and copyright laws.
+ *  Dissemination of this information or reproduction of this material
+ *  is strictly forbidden unless prior written permission is obtained
+ *  from Adobe.
+ *  ************************************************************************
  */
 namespace Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Product;
 
 use Magento\AdvancedSalesRule\Model\Rule\Condition\ConcreteCondition\Product\Categories;
 use Magento\AdvancedRule\Model\Condition\FilterTextGeneratorInterface;
+use Magento\Catalog\Model\ProductCategoryList;
+use Magento\Framework\App\ObjectManager;
 
 class Category implements FilterTextGeneratorInterface
 {
     /**
+     * @var ProductCategoryList
+     */
+    private $productCategoryList;
+
+    /**
+     * @param ProductCategoryList|null $categoryList
+     */
+    public function __construct(
+        ProductCategoryList $categoryList = null
+    ) {
+        $this->productCategoryList = $categoryList ?: ObjectManager::getInstance()->get(ProductCategoryList::class);
+    }
+
+    /**
+     *  Generates an array of filter text strings based on the categories of products in a given quote address.
+     *
      * @param \Magento\Framework\DataObject $quoteAddress
      * @return string[]
      */
@@ -21,7 +53,7 @@ public function generateFilterText(\Magento\Framework\DataObject $quoteAddress)
             $items = $quoteAddress->getAllItems();
             foreach ($items as $item) {
                 $product = $item->getProduct();
-                $categoryIds = $product->getAvailableInCategories();
+                $categoryIds = $this->productCategoryList->getCategoryIds($product->getId());
                 foreach ($categoryIds as $categoryId) {
                     $text = Categories::FILTER_TEXT_PREFIX . $categoryId;
                     if (!in_array($text, $filterText)) {
diff --git a/vendor/magento/module-advanced-sales-rule/etc/db_schema.xml b/vendor/magento/module-advanced-sales-rule/etc/db_schema.xml
index cabb9d9bc3a8..d554aaef67a4 100644
--- a/vendor/magento/module-advanced-sales-rule/etc/db_schema.xml
+++ b/vendor/magento/module-advanced-sales-rule/etc/db_schema.xml
@@ -21,6 +21,8 @@
                 comment="Filter text generator class name"/>
         <column xsi:type="varchar" name="filter_text_generator_arguments" nullable="true" length="255"
                 comment="Filter text generator arguments"/>
+        <column xsi:type="boolean" name="is_coupon" nullable="false" default="0"
+                comment="Flag to show if rule is coupon based"/>
         <constraint xsi:type="primary" referenceId="PRIMARY">
             <column name="rule_filter_id"/>
         </constraint>
