{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.VoiceId.Types.FraudDetectionResult
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.VoiceId.Types.FraudDetectionResult where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.VoiceId.Types.FraudDetectionConfiguration
import Amazonka.VoiceId.Types.FraudDetectionDecision
import Amazonka.VoiceId.Types.FraudDetectionReason
import Amazonka.VoiceId.Types.FraudRiskDetails

-- | The fraud detection result produced by Voice ID, processed against the
-- current session state and streamed audio of the speaker.
--
-- /See:/ 'newFraudDetectionResult' smart constructor.
data FraudDetectionResult = FraudDetectionResult'
  { -- | A timestamp indicating when audio aggregation ended for this fraud
    -- detection result.
    FraudDetectionResult -> Maybe POSIX
audioAggregationEndedAt :: Prelude.Maybe Data.POSIX,
    -- | A timestamp indicating when audio aggregation started for this fraud
    -- detection result.
    FraudDetectionResult -> Maybe POSIX
audioAggregationStartedAt :: Prelude.Maybe Data.POSIX,
    -- | The @FraudDetectionConfiguration@ used to generate this fraud detection
    -- result.
    FraudDetectionResult -> Maybe FraudDetectionConfiguration
configuration :: Prelude.Maybe FraudDetectionConfiguration,
    -- | The fraud detection decision produced by Voice ID, processed against the
    -- current session state and streamed audio of the speaker.
    FraudDetectionResult -> Maybe FraudDetectionDecision
decision :: Prelude.Maybe FraudDetectionDecision,
    -- | The unique identifier for this fraud detection result. Given there can
    -- be multiple fraud detections for a given session, this field helps in
    -- identifying if the returned result is from previous streaming activity
    -- or a new result. Note that in the absence of any new streaming activity
    -- or risk threshold changes, Voice ID always returns cached Fraud
    -- Detection result for this API.
    FraudDetectionResult -> Maybe Text
fraudDetectionResultId :: Prelude.Maybe Prelude.Text,
    -- | The reason speaker was flagged by the fraud detection system. This is
    -- only be populated if fraud detection Decision is @HIGH_RISK@, and the
    -- following possible values: @KNOWN_FRAUDSTER@ and @VOICE_SPOOFING@.
    FraudDetectionResult -> Maybe [FraudDetectionReason]
reasons :: Prelude.Maybe [FraudDetectionReason],
    -- | Details about each risk analyzed for this speaker. Currently, this
    -- contains KnownFraudsterRisk and VoiceSpoofingRisk details.
    FraudDetectionResult -> Maybe FraudRiskDetails
riskDetails :: Prelude.Maybe FraudRiskDetails
  }
  deriving (FraudDetectionResult -> FraudDetectionResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FraudDetectionResult -> FraudDetectionResult -> Bool
$c/= :: FraudDetectionResult -> FraudDetectionResult -> Bool
== :: FraudDetectionResult -> FraudDetectionResult -> Bool
$c== :: FraudDetectionResult -> FraudDetectionResult -> Bool
Prelude.Eq, ReadPrec [FraudDetectionResult]
ReadPrec FraudDetectionResult
Int -> ReadS FraudDetectionResult
ReadS [FraudDetectionResult]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [FraudDetectionResult]
$creadListPrec :: ReadPrec [FraudDetectionResult]
readPrec :: ReadPrec FraudDetectionResult
$creadPrec :: ReadPrec FraudDetectionResult
readList :: ReadS [FraudDetectionResult]
$creadList :: ReadS [FraudDetectionResult]
readsPrec :: Int -> ReadS FraudDetectionResult
$creadsPrec :: Int -> ReadS FraudDetectionResult
Prelude.Read, Int -> FraudDetectionResult -> ShowS
[FraudDetectionResult] -> ShowS
FraudDetectionResult -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FraudDetectionResult] -> ShowS
$cshowList :: [FraudDetectionResult] -> ShowS
show :: FraudDetectionResult -> String
$cshow :: FraudDetectionResult -> String
showsPrec :: Int -> FraudDetectionResult -> ShowS
$cshowsPrec :: Int -> FraudDetectionResult -> ShowS
Prelude.Show, forall x. Rep FraudDetectionResult x -> FraudDetectionResult
forall x. FraudDetectionResult -> Rep FraudDetectionResult x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FraudDetectionResult x -> FraudDetectionResult
$cfrom :: forall x. FraudDetectionResult -> Rep FraudDetectionResult x
Prelude.Generic)

-- |
-- Create a value of 'FraudDetectionResult' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'audioAggregationEndedAt', 'fraudDetectionResult_audioAggregationEndedAt' - A timestamp indicating when audio aggregation ended for this fraud
-- detection result.
--
-- 'audioAggregationStartedAt', 'fraudDetectionResult_audioAggregationStartedAt' - A timestamp indicating when audio aggregation started for this fraud
-- detection result.
--
-- 'configuration', 'fraudDetectionResult_configuration' - The @FraudDetectionConfiguration@ used to generate this fraud detection
-- result.
--
-- 'decision', 'fraudDetectionResult_decision' - The fraud detection decision produced by Voice ID, processed against the
-- current session state and streamed audio of the speaker.
--
-- 'fraudDetectionResultId', 'fraudDetectionResult_fraudDetectionResultId' - The unique identifier for this fraud detection result. Given there can
-- be multiple fraud detections for a given session, this field helps in
-- identifying if the returned result is from previous streaming activity
-- or a new result. Note that in the absence of any new streaming activity
-- or risk threshold changes, Voice ID always returns cached Fraud
-- Detection result for this API.
--
-- 'reasons', 'fraudDetectionResult_reasons' - The reason speaker was flagged by the fraud detection system. This is
-- only be populated if fraud detection Decision is @HIGH_RISK@, and the
-- following possible values: @KNOWN_FRAUDSTER@ and @VOICE_SPOOFING@.
--
-- 'riskDetails', 'fraudDetectionResult_riskDetails' - Details about each risk analyzed for this speaker. Currently, this
-- contains KnownFraudsterRisk and VoiceSpoofingRisk details.
newFraudDetectionResult ::
  FraudDetectionResult
newFraudDetectionResult :: FraudDetectionResult
newFraudDetectionResult =
  FraudDetectionResult'
    { $sel:audioAggregationEndedAt:FraudDetectionResult' :: Maybe POSIX
audioAggregationEndedAt =
        forall a. Maybe a
Prelude.Nothing,
      $sel:audioAggregationStartedAt:FraudDetectionResult' :: Maybe POSIX
audioAggregationStartedAt = forall a. Maybe a
Prelude.Nothing,
      $sel:configuration:FraudDetectionResult' :: Maybe FraudDetectionConfiguration
configuration = forall a. Maybe a
Prelude.Nothing,
      $sel:decision:FraudDetectionResult' :: Maybe FraudDetectionDecision
decision = forall a. Maybe a
Prelude.Nothing,
      $sel:fraudDetectionResultId:FraudDetectionResult' :: Maybe Text
fraudDetectionResultId = forall a. Maybe a
Prelude.Nothing,
      $sel:reasons:FraudDetectionResult' :: Maybe [FraudDetectionReason]
reasons = forall a. Maybe a
Prelude.Nothing,
      $sel:riskDetails:FraudDetectionResult' :: Maybe FraudRiskDetails
riskDetails = forall a. Maybe a
Prelude.Nothing
    }

-- | A timestamp indicating when audio aggregation ended for this fraud
-- detection result.
fraudDetectionResult_audioAggregationEndedAt :: Lens.Lens' FraudDetectionResult (Prelude.Maybe Prelude.UTCTime)
fraudDetectionResult_audioAggregationEndedAt :: Lens' FraudDetectionResult (Maybe UTCTime)
fraudDetectionResult_audioAggregationEndedAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe POSIX
audioAggregationEndedAt :: Maybe POSIX
$sel:audioAggregationEndedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
audioAggregationEndedAt} -> Maybe POSIX
audioAggregationEndedAt) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe POSIX
a -> FraudDetectionResult
s {$sel:audioAggregationEndedAt:FraudDetectionResult' :: Maybe POSIX
audioAggregationEndedAt = Maybe POSIX
a} :: FraudDetectionResult) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | A timestamp indicating when audio aggregation started for this fraud
-- detection result.
fraudDetectionResult_audioAggregationStartedAt :: Lens.Lens' FraudDetectionResult (Prelude.Maybe Prelude.UTCTime)
fraudDetectionResult_audioAggregationStartedAt :: Lens' FraudDetectionResult (Maybe UTCTime)
fraudDetectionResult_audioAggregationStartedAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe POSIX
audioAggregationStartedAt :: Maybe POSIX
$sel:audioAggregationStartedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
audioAggregationStartedAt} -> Maybe POSIX
audioAggregationStartedAt) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe POSIX
a -> FraudDetectionResult
s {$sel:audioAggregationStartedAt:FraudDetectionResult' :: Maybe POSIX
audioAggregationStartedAt = Maybe POSIX
a} :: FraudDetectionResult) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The @FraudDetectionConfiguration@ used to generate this fraud detection
-- result.
fraudDetectionResult_configuration :: Lens.Lens' FraudDetectionResult (Prelude.Maybe FraudDetectionConfiguration)
fraudDetectionResult_configuration :: Lens' FraudDetectionResult (Maybe FraudDetectionConfiguration)
fraudDetectionResult_configuration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe FraudDetectionConfiguration
configuration :: Maybe FraudDetectionConfiguration
$sel:configuration:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionConfiguration
configuration} -> Maybe FraudDetectionConfiguration
configuration) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe FraudDetectionConfiguration
a -> FraudDetectionResult
s {$sel:configuration:FraudDetectionResult' :: Maybe FraudDetectionConfiguration
configuration = Maybe FraudDetectionConfiguration
a} :: FraudDetectionResult)

-- | The fraud detection decision produced by Voice ID, processed against the
-- current session state and streamed audio of the speaker.
fraudDetectionResult_decision :: Lens.Lens' FraudDetectionResult (Prelude.Maybe FraudDetectionDecision)
fraudDetectionResult_decision :: Lens' FraudDetectionResult (Maybe FraudDetectionDecision)
fraudDetectionResult_decision = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe FraudDetectionDecision
decision :: Maybe FraudDetectionDecision
$sel:decision:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionDecision
decision} -> Maybe FraudDetectionDecision
decision) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe FraudDetectionDecision
a -> FraudDetectionResult
s {$sel:decision:FraudDetectionResult' :: Maybe FraudDetectionDecision
decision = Maybe FraudDetectionDecision
a} :: FraudDetectionResult)

-- | The unique identifier for this fraud detection result. Given there can
-- be multiple fraud detections for a given session, this field helps in
-- identifying if the returned result is from previous streaming activity
-- or a new result. Note that in the absence of any new streaming activity
-- or risk threshold changes, Voice ID always returns cached Fraud
-- Detection result for this API.
fraudDetectionResult_fraudDetectionResultId :: Lens.Lens' FraudDetectionResult (Prelude.Maybe Prelude.Text)
fraudDetectionResult_fraudDetectionResultId :: Lens' FraudDetectionResult (Maybe Text)
fraudDetectionResult_fraudDetectionResultId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe Text
fraudDetectionResultId :: Maybe Text
$sel:fraudDetectionResultId:FraudDetectionResult' :: FraudDetectionResult -> Maybe Text
fraudDetectionResultId} -> Maybe Text
fraudDetectionResultId) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe Text
a -> FraudDetectionResult
s {$sel:fraudDetectionResultId:FraudDetectionResult' :: Maybe Text
fraudDetectionResultId = Maybe Text
a} :: FraudDetectionResult)

-- | The reason speaker was flagged by the fraud detection system. This is
-- only be populated if fraud detection Decision is @HIGH_RISK@, and the
-- following possible values: @KNOWN_FRAUDSTER@ and @VOICE_SPOOFING@.
fraudDetectionResult_reasons :: Lens.Lens' FraudDetectionResult (Prelude.Maybe [FraudDetectionReason])
fraudDetectionResult_reasons :: Lens' FraudDetectionResult (Maybe [FraudDetectionReason])
fraudDetectionResult_reasons = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe [FraudDetectionReason]
reasons :: Maybe [FraudDetectionReason]
$sel:reasons:FraudDetectionResult' :: FraudDetectionResult -> Maybe [FraudDetectionReason]
reasons} -> Maybe [FraudDetectionReason]
reasons) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe [FraudDetectionReason]
a -> FraudDetectionResult
s {$sel:reasons:FraudDetectionResult' :: Maybe [FraudDetectionReason]
reasons = Maybe [FraudDetectionReason]
a} :: FraudDetectionResult) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Details about each risk analyzed for this speaker. Currently, this
-- contains KnownFraudsterRisk and VoiceSpoofingRisk details.
fraudDetectionResult_riskDetails :: Lens.Lens' FraudDetectionResult (Prelude.Maybe FraudRiskDetails)
fraudDetectionResult_riskDetails :: Lens' FraudDetectionResult (Maybe FraudRiskDetails)
fraudDetectionResult_riskDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FraudDetectionResult' {Maybe FraudRiskDetails
riskDetails :: Maybe FraudRiskDetails
$sel:riskDetails:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudRiskDetails
riskDetails} -> Maybe FraudRiskDetails
riskDetails) (\s :: FraudDetectionResult
s@FraudDetectionResult' {} Maybe FraudRiskDetails
a -> FraudDetectionResult
s {$sel:riskDetails:FraudDetectionResult' :: Maybe FraudRiskDetails
riskDetails = Maybe FraudRiskDetails
a} :: FraudDetectionResult)

instance Data.FromJSON FraudDetectionResult where
  parseJSON :: Value -> Parser FraudDetectionResult
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"FraudDetectionResult"
      ( \Object
x ->
          Maybe POSIX
-> Maybe POSIX
-> Maybe FraudDetectionConfiguration
-> Maybe FraudDetectionDecision
-> Maybe Text
-> Maybe [FraudDetectionReason]
-> Maybe FraudRiskDetails
-> FraudDetectionResult
FraudDetectionResult'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AudioAggregationEndedAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AudioAggregationStartedAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Configuration")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Decision")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"FraudDetectionResultId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Reasons" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RiskDetails")
      )

instance Prelude.Hashable FraudDetectionResult where
  hashWithSalt :: Int -> FraudDetectionResult -> Int
hashWithSalt Int
_salt FraudDetectionResult' {Maybe [FraudDetectionReason]
Maybe Text
Maybe POSIX
Maybe FraudDetectionConfiguration
Maybe FraudDetectionDecision
Maybe FraudRiskDetails
riskDetails :: Maybe FraudRiskDetails
reasons :: Maybe [FraudDetectionReason]
fraudDetectionResultId :: Maybe Text
decision :: Maybe FraudDetectionDecision
configuration :: Maybe FraudDetectionConfiguration
audioAggregationStartedAt :: Maybe POSIX
audioAggregationEndedAt :: Maybe POSIX
$sel:riskDetails:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudRiskDetails
$sel:reasons:FraudDetectionResult' :: FraudDetectionResult -> Maybe [FraudDetectionReason]
$sel:fraudDetectionResultId:FraudDetectionResult' :: FraudDetectionResult -> Maybe Text
$sel:decision:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionDecision
$sel:configuration:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionConfiguration
$sel:audioAggregationStartedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
$sel:audioAggregationEndedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
audioAggregationEndedAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
audioAggregationStartedAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FraudDetectionConfiguration
configuration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FraudDetectionDecision
decision
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
fraudDetectionResultId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [FraudDetectionReason]
reasons
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FraudRiskDetails
riskDetails

instance Prelude.NFData FraudDetectionResult where
  rnf :: FraudDetectionResult -> ()
rnf FraudDetectionResult' {Maybe [FraudDetectionReason]
Maybe Text
Maybe POSIX
Maybe FraudDetectionConfiguration
Maybe FraudDetectionDecision
Maybe FraudRiskDetails
riskDetails :: Maybe FraudRiskDetails
reasons :: Maybe [FraudDetectionReason]
fraudDetectionResultId :: Maybe Text
decision :: Maybe FraudDetectionDecision
configuration :: Maybe FraudDetectionConfiguration
audioAggregationStartedAt :: Maybe POSIX
audioAggregationEndedAt :: Maybe POSIX
$sel:riskDetails:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudRiskDetails
$sel:reasons:FraudDetectionResult' :: FraudDetectionResult -> Maybe [FraudDetectionReason]
$sel:fraudDetectionResultId:FraudDetectionResult' :: FraudDetectionResult -> Maybe Text
$sel:decision:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionDecision
$sel:configuration:FraudDetectionResult' :: FraudDetectionResult -> Maybe FraudDetectionConfiguration
$sel:audioAggregationStartedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
$sel:audioAggregationEndedAt:FraudDetectionResult' :: FraudDetectionResult -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
audioAggregationEndedAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
audioAggregationStartedAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FraudDetectionConfiguration
configuration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FraudDetectionDecision
decision
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
fraudDetectionResultId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [FraudDetectionReason]
reasons
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FraudRiskDetails
riskDetails