CViM / src / model / SFC / gov.jl
gov.jl
Raw
"""
Define the government's actions.
"""

"""
    prev_vars!(agent::Government) → nothing

Update the government's previous variables.
"""
function prev_vars!(agent::Government)
    agent.bills_prev = agent.bills
    return nothing
end

"""
    bills!(agent::Government, model) → agent.bills    

The government issues treasury bills.
"""
function bills!(agent::Government, model)
    agent.bills += model.g + model.ib * agent.bills_prev - 
        agent.taxes - sum(a.profits for a in allagents(model) if a isa CentralBank)
    return agent.bills
end

"""
    taxes!(agent::Government, model) → agent.taxes

The government collect households' wage taxes.
"""
function taxes!(agent::Government, model)
    agent.taxes = sum(a.taxes for a in allagents(model) if a isa Household)
    return agent.taxes
end

"""
    networth!(agent::Government) → agent.networth

The government updates its networth, i.e. government debt.
"""
function networth!(agent::Government)
    agent.networth = agent.bills
    return agent.networth
end

"""
    balance!(agent::Government, model) → agent.balance_current

Update the balance of the government for SFC checks.
"""
function balance!(agent::Government, model)
    agent.balance_current = (agent.bills - agent.bills_prev) + agent.taxes + sum(a.profits for a in allagents(model) if a isa CentralBank) - 
        model.ib * agent.bills_prev - model.g
    return agent.balance_current
end

"""
    SFC!(agent::Government, model) → model

Define the government's SFC actions and update its accounting.
"""
function SFC!(agent::Government, model)
    CViM.prev_vars!(agent)
    CViM.taxes!(agent, model)
    CViM.bills!(agent, model)
    CViM.networth!(agent)
    CViM.balance!(agent, model)
    return model
end