"""
Define base structure and properties of agent types.
"""
Base.@kwdef mutable struct Government <: AbstractAgent
id::Int
taxes::Float64 = 0.0
bills::Float64 = 0.0
bills_prev::Float64 = 0.0
networth::Float64 = 0.0
balance_current::Float64 = 0.0
end
Base.@kwdef mutable struct CentralBank <: AbstractAgent
id::Int
bills::Float64 = 0.0
bills_prev::Float64 = 0.0
hpm::Float64 = 0.0
hpm_prev::Float64 = 0.0
advances::Float64 = 0.0
advances_prev::Float64 = 0.0
lending_facility::Float64 = 0.0
deposit_facility::Float64 = 0.0
lending_facility_prev::Float64 = 0.0
deposit_facility_prev::Float64 = 0.0
profits::Float64 = 0.0
networth::Float64 = 0.0
balance_current::Float64 = 0.0
balance_capital::Float64 = 0.0
end
Base.@kwdef mutable struct Firm <: AbstractAgent
id::Int
value::Symbol
belongToBank::Union{Missing, Int} = missing
lev::Float64 = 0.0
customers::Vector{Int} = []
inventories::Float64 = 0.0
inventories_prev::Float64 = 0.0
GDP::Float64 = 0.0
GDP_prev::Float64 = 0.0
wages::Float64 = 0.0
wages_prev::Float64 = 0.0
consumption::Float64 = 0.0
deposits::Float64 = 0.0
deposits_prev::Float64 = 0.0
loans::Float64 = 0.0
loans_prev::Float64 = 0.0
loans_demand::Float64 = 0.0
loans_interests::Float64 = 0.0
deposits_interests::Float64 = 0.0
repayment::Float64 = 0.0
profits::Float64 = 0.0
networth::Float64 = 0.0
balance_current::Float64 = 0.0
balance_capital::Float64 = 0.0
defaulted_loans::Float64 = 0.0
end
Base.@kwdef mutable struct Household <: AbstractAgent
id::Int
value::Symbol
belongToBank::Union{Missing, Int} = missing
belongToFirm::Union{Missing, Int} = missing
lev::Float64 = 0.0
consumption::Float64 = 0.0
wages::Float64 = 0.0
taxes::Float64 = 0.0
income::Float64 = 0.0
income_prev::Float64 = 0.0
deposits::Float64 = 0.0
deposits_prev::Float64 = 0.0
loans::Float64 = 0.0
loans_prev::Float64 = 0.0
loans_demand::Float64 = 0.0
loans_interests::Float64 = 0.0
deposits_interests::Float64 = 0.0
repayment::Float64 = 0.0
networth::Float64 = 0.0
networth_prev::Float64 = 0.0
balance_current::Float64 = 0.0
defaulted_loans::Float64 = 0.0
end
Base.@kwdef mutable struct Bank <: AbstractAgent
id::Int
type::Symbol
value::Symbol
status::Symbol = :neutral
liq_values::Float64 = 0.0
liq_pref::Float64 = 0.0
belongToBank::Union{Missing, Int} = missing
firms_customers::Vector{Int} = []
hh_customers::Vector{Int} = []
ib_customers::Vector{Int} = []
deposits::Float64 = 0.0
deposits_prev::Float64 = 0.0
bills::Float64 = 0.0
bills_prev = 0.0
hpm::Float64 = 0.0
hpm_prev::Float64 = 0.0
networth::Float64 = 0.0
loans::Float64 = 0.0
loans_prev::Float64 = 0.0
ON_interbank::Float64 = 0.0
Term_interbank::Float64 = 0.0
funding_costs::Float64 = 0.0
funding_costs_prev::Float64 = 0.0
repayment::Float64 = 0.0
ilf_rate::Float64 = 0.0
ilf_rate_prev::Float64 = 0.0
ilh_rate::Float64 = 0.0
ilh_rate_prev::Float64 = 0.0
id_rate::Float64 = 0.0
id_rate_prev::Float64 = 0.0
profits::Float64 = 0.0
balance_current::Float64 = 0.0
balance_capital::Float64 = 0.0
flow::Float64 = 0.0
advances::Float64 = 0.0
advances_prev::Float64 = 0.0
ib_tot_demand::Float64 = 0.0
ib_tot_supply::Float64 = 0.0
ib_on_demand::Float64 = 0.0
ib_term_demand::Float64 = 0.0
ib_on_supply::Float64 = 0.0
ib_term_supply::Float64 = 0.0
loans_interests::Float64 = 0.0
deposits_interests::Float64 = 0.0
bills_interests::Float64 = 0.0
hpm_interests::Float64 = 0.0
advances_interests::Float64 = 0.0
lending_facility::Float64 = 0.0
deposit_facility::Float64 = 0.0
lending_facility_prev::Float64 = 0.0
deposit_facility_prev::Float64 = 0.0
lending_facility_interests::Float64 = 0.0
deposit_facility_interests::Float64 = 0.0
defaulted_loans::Float64 = 0.0
end