packages feed

crem-0.1.0.0: examples/Crem/Example/RiskManager/Domain.hs

module Crem.Example.RiskManager.Domain where

import "base" Data.String (IsString)

newtype Name = Name String
  deriving newtype (Eq, Show, IsString)

newtype Surname = Surname String
  deriving newtype (Eq, Show, IsString)

newtype TaxCode = TaxCode String
  deriving newtype (Eq, Show, IsString)

data UserData = UserData
  { name :: Name
  , surname :: Surname
  , taxCode :: TaxCode
  }
  deriving stock (Eq, Show)

newtype Amount = EuroCents Int
  deriving newtype (Eq, Show)

newtype InstalmentsNumber = InstalmentsNumber Int
  deriving newtype (Eq, Show)

data LoanDetails = LoanDetails
  { amount :: Amount
  , instalments :: InstalmentsNumber
  }
  deriving stock (Eq, Show)

newtype MissedPaymentDeadlines = MissedPaymentDeadlines Int
  deriving newtype (Eq, Show)

data CreditBureauData = CreditBureauData
  { missedPaymentDeadlines :: MissedPaymentDeadlines
  , arrears :: Amount
  }
  deriving stock (Eq, Show)

-- ** State machine data types

data RiskCommand
  = RegisterUserData UserData
  | ProvideLoanDetails LoanDetails
  | ProvideCreditBureauData CreditBureauData
  deriving stock (Eq, Show)

data RiskEvent
  = UserDataRegistered UserData
  | LoanDetailsProvided LoanDetails
  | CreditBureauDataReceived CreditBureauData
  deriving stock (Eq, Show)