Are module attributes "read" multiple times in same function?

it doesn’t.
here’s your expanded code.

  def reset_global_debt() do
    for human <- Earth.list_humans() do
      update_financial_record_for_human(human, %{
        "total_amount" => %{amount: 0, currency: :DOGE}.amount,
        "base_currency" => %{amount: 0, currency: :DOGE}.currency
      })
    end
  end

And if @money would have 1million entries, you will be creating two copies of a map of one million entries, that are going to be stored in your .beam file,