code: protected function watch(OrderPaymentInterface $payment)
      {
          $order = $payment->getOrder();
  
          // Abort if notify disabled or sample order
          if (!$order->isAutoNotify() || $order->isSample()) {
              return;
          }
  
          // Abort if not manual/offline payment
          if (!$payment->getMethod()->isManual()) {
              return;
          }
  
          // Abort if payment state has not changed for 'CAPTURED'
          if (!$this->didStateChangeTo($payment, PaymentStates::STATE_CAPTURED)) {
              return;
          }
  
          // Abort if sale has notification of type 'PAYMENT_CAPTURED' with same payment number
          /** @var \Ekyna\Component\Commerce\Order\Model\OrderNotificationInterface $n */
          foreach ($order->getNotifications() as $n) {
              if ($n->getType() !== NotificationTypes::PAYMENT_CAPTURED) {
                  continue;
              }
  
              if ($n->hasData('payment') && $n->getData('payment') === $payment->getNumber()) {
                  return;
              }
          }
  
          $this->notify(NotificationTypes::PAYMENT_CAPTURED, $payment);
      }
docs: Payment watcher.
  
  @param OrderPaymentInterface $payment