core.finances.updateBudgetRanks updates budget ranks and should be called after any budget item is edited for any team.
core.finances.updateRanks can handle updating any of the budget/revenues/finances ranks, and it is called in appropriate places now.
Health expenses regulate injury durations.
Ticket price affects attendance.
Coaching affects player development.
Got rid of "stadium" expense. It can just be merged with "facilities".
Tweaking team finances view
Basics of new, less annoying contract negotiations are in place. All that remains is factoring in mood.
Display mood in negotiations view (although the mood doesn't actually influence anything yet).
New contract negotiation logic seems to work at least decently.