aboutsummaryrefslogtreecommitdiff
path: root/engine/economics/economic.ts
blob: 2d37ced2bf4174d5d00b173eaa85f016fc95bf01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
 * A coarse wealth tier derived from the hidden economic state. Never
 * displayed numerically; informs surface prose ("struggling", "comfortable",
 * "old money").
 */
export type EconomicClass =
  | 'destitute'
  | 'struggling'
  | 'working'
  | 'lower_middle'
  | 'middle'
  | 'upper_middle'
  | 'wealthy'
  | 'very_wealthy'
  | 'old_money'
  | 'generationally_wealthy'

export type AccountKind = 'checking' | 'savings' | 'brokerage' | 'retirement'

export interface Account {
  readonly id: string
  readonly kind: AccountKind
  readonly balance: number
}

export type AssetKind = 'home' | 'vehicle' | 'business' | 'collectible' | 'real_estate'

export interface Asset {
  readonly id: string
  readonly kind: AssetKind
  readonly description: string
  readonly estimatedValue: number
  readonly encumbered: boolean
}

export type DebtKind = 'mortgage' | 'auto' | 'student' | 'credit_card' | 'personal' | 'medical'

export interface Debt {
  readonly id: string
  readonly kind: DebtKind
  readonly balance: number
  readonly monthlyPayment: number
  readonly apr: number
}

/**
 * Hidden economic state for a character. All numbers are in "marks" (the
 * world's universal currency). Never surfaced to the player as digits —
 * the simulation drives prose and qualitative affordability context.
 */
export interface EconomicState {
  readonly cashOnHand: number
  readonly accounts: readonly Account[]
  readonly assets: readonly Asset[]
  readonly debts: readonly Debt[]
  readonly monthlyIncome: number
  readonly monthlyExpenses: number
  readonly netWorth: number
  readonly classification: EconomicClass
}