public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        /** @var PaymentInterface $payment */
        $payment = $request->getModel();

        if ($payment->getState() !== PaymentStates::STATE_FAILED) {
            return;
        }

        $model = ArrayObject::ensureArrayObject($payment->getDetails());

        if (false == $result = $model['vads_auth_result']) {
            return;
        }

        switch ($result) {
            case '33': // Date de validité de la carte dépassée
            case '54': // Date de validité de la carte dépassée
                $request->setLevel(1);

                return;

            case '03': // Accepteur invalide
            case '04': // Conserver la carte
            case '05': // Ne pas honorer
            case '07': // Conserver la carte, conditions spéciales
            case '12': // Transaction invalide
            case '13': // Montant invalide
                $request->setLevel(3);

                return;

            case '34': // Suspicion de fraude
            case '59': // Suspicion de fraude
                $request->setLevel(4);

                return;

            case '14': // Numéro de porteur invalide
            case '15': // Emetteur de carte inconnu
            case '31': // Identifiant de l’organisme acquéreur inconnu
            case '41': // Carte perdue
            case '43': // Carte volée
            case '56': // Carte absente du fichier
            case '57': // Transaction non permise à ce porteur
            case '63': // Règles de sécurité non respectées
            case '76': // Porteur déjà en opposition, ancien enregistrement conservé
                $request->setLevel(5);

                return;
        }

        if ($model['vads_ctx_mode'] === 'TEST' && $result === '51') { // Provision insuffisante ou crédit dépassé
            $request->setLevel(3);
        }
    }
public function execute($request)
    {
        RequestNotSupportedException::assertSupports($this, $request);

        /** @var PaymentInterface $payment */
        $payment = $request->getModel();

        if ($payment->getState() !== PaymentStates::STATE_FAILED) {
            return;
        }

        $model = ArrayObject::ensureArrayObject($payment->getDetails());

        if (false == $result = $model['vads_auth_result']) {
            return;
        }

        switch ($result) {
            case '33': // Date de validité de la carte dépassée
            case '54': // Date de validité de la carte dépassée
                $request->setLevel(1);

                return;

            case '03': // Accepteur invalide
            case '04': // Conserver la carte
            case '05': // Ne pas honorer
            case '07': // Conserver la carte, conditions spéciales
            case '12': // Transaction invalide
            case '13': // Montant invalide
                $request->setLevel(3);

                return;

            case '34': // Suspicion de fraude
            case '59': // Suspicion de fraude
                $request->setLevel(4);

                return;

            case '14': // Numéro de porteur invalide
            case '15': // Emetteur de carte inconnu
            case '31': // Identifiant de l’organisme acquéreur inconnu
            case '41': // Carte perdue
            case '43': // Carte volée
            case '56': // Carte absente du fichier
            case '57': // Transaction non permise à ce porteur
            case '63': // Règles de sécurité non respectées
            case '76': // Porteur déjà en opposition, ancien enregistrement conservé
                $request->setLevel(5);

                return;
        }

        if ($model['vads_ctx_mode'] === 'TEST' && $result === '51') { // Provision insuffisante ou crédit dépassé
            $request->setLevel(3);
        }
    }
{@inheritDoc}

@param FraudLevel $request