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)