|
93 | 93 | "easy": { "money_multiplier": 1.5, "max_action_points": 4 }, |
94 | 94 | "standard": { "money_multiplier": 1.0, "max_action_points": 3 }, |
95 | 95 | "hard": { "money_multiplier": 0.75, "max_action_points": 2 } |
| 96 | + }, |
| 97 | + "financing": { |
| 98 | + "_description": "Cost-of-debt pricing engine + financing instruments (ADR-0013, lane L5/#616). FinanceEngine.price() computes terms from org_type + counterparty + typed reputation + current leverage; generate_offers() mints 2-3 concurrent STANDING offers with an expiry (ADR-0012 — expiry mints no ledger entry). Engine: godot/scripts/core/finance_engine.gd. GOTCHA: computed interest rates are snapped to 0.001 (JSON save-safe, probe-verified against the real full-precision save path) and principals to whole units before entering a Ledger.Entry, so minted offers survive save/load (calibration open-Q #2). Baseline continuity: bank_loan at default context reproduces the calibrated ledger.loan terms (rate 0.008, ~77-tick fuse, 1.2x balloon); the sweep's take_loan path is UNCHANGED (routes Ledger.loan directly), so this block is additive and does not move the L1 medians.", |
| 99 | + "ticks_per_month": 22.0, |
| 100 | + "offer_ttl_turns": 44, |
| 101 | + "leverage_scale": 120000.0, |
| 102 | + "rate_floor": 0.002, |
| 103 | + "rate_ceiling": 0.05, |
| 104 | + "rep_rate_relief": 0.004, |
| 105 | + "leverage_rate_penalty": 0.004, |
| 106 | + "org_factors": { |
| 107 | + "_description": "Multiply the base interest (ADR-0013: org type is the pricing engine's biggest input). >1 = worse cost of capital; <1 = cheaper. for_profit borrows cheapest (equity as collateral); independent/solo pays a premium.", |
| 108 | + "nonprofit": 1.0, |
| 109 | + "for_profit": 0.9, |
| 110 | + "academic": 1.05, |
| 111 | + "independent": 1.15 |
| 112 | + }, |
| 113 | + "counterparty_factors": { |
| 114 | + "_description": "Who you owe changes what it costs (ADR-0013 major input; ADR-0007 counterparty dread). philanthropist = 0.0 => a gift, not a debt. shadow (desperation) = the punitive last resort.", |
| 115 | + "bank": 1.0, |
| 116 | + "vc": 0.85, |
| 117 | + "government": 0.75, |
| 118 | + "foundation": 0.8, |
| 119 | + "philanthropist": 0.0, |
| 120 | + "shadow": 2.2 |
| 121 | + }, |
| 122 | + "offer_tiers": { |
| 123 | + "_description": "Reputation-gated menu quality (ADR-0013: better standing => better menus). The instrument's rep_channel picks safety- or finance-rep; that value selects the highest threshold it clears; counts[tier] caps concurrent offers.", |
| 124 | + "thresholds": [0, 30, 60], |
| 125 | + "counts": [2, 3, 3] |
| 126 | + }, |
| 127 | + "instruments": { |
| 128 | + "bank_loan": { |
| 129 | + "name": "Bank term loan", |
| 130 | + "factory": "loan", |
| 131 | + "counterparty": "bank", |
| 132 | + "rep_channel": "finance", |
| 133 | + "principal_min": 30000, |
| 134 | + "principal_max": 80000, |
| 135 | + "principal_multiplier": 1.2, |
| 136 | + "term_months": 3.5, |
| 137 | + "base_rate": 0.008, |
| 138 | + "non_cash": {}, |
| 139 | + "availability": { "min_rep": 15, "max_leverage": 3.0, "org_types": [] } |
| 140 | + }, |
| 141 | + "credit_line": { |
| 142 | + "name": "Revolving credit line", |
| 143 | + "factory": "loan", |
| 144 | + "counterparty": "bank", |
| 145 | + "rep_channel": "finance", |
| 146 | + "principal_min": 60000, |
| 147 | + "principal_max": 160000, |
| 148 | + "principal_multiplier": 1.15, |
| 149 | + "term_months": 4.0, |
| 150 | + "base_rate": 0.010, |
| 151 | + "non_cash": {}, |
| 152 | + "availability": { "min_rep": 45, "max_leverage": 1.5, "org_types": [] } |
| 153 | + }, |
| 154 | + "vc_equity": { |
| 155 | + "name": "VC equity round", |
| 156 | + "factory": "equity", |
| 157 | + "counterparty": "vc", |
| 158 | + "rep_channel": "finance", |
| 159 | + "principal_min": 120000, |
| 160 | + "principal_max": 400000, |
| 161 | + "principal_multiplier": 1.0, |
| 162 | + "term_months": 0.0, |
| 163 | + "base_rate": 0.0, |
| 164 | + "non_cash": { "equity_dilution": 0.12, "board_seat": true }, |
| 165 | + "availability": { "min_rep": 30, "min_hype": 25, "max_leverage": 5.0, "org_types": ["for_profit"] } |
| 166 | + }, |
| 167 | + "grant_strings": { |
| 168 | + "name": "Directed grant (agenda strings)", |
| 169 | + "factory": "funding_strings", |
| 170 | + "counterparty": "government", |
| 171 | + "rep_channel": "safety", |
| 172 | + "principal_min": 25000, |
| 173 | + "principal_max": 70000, |
| 174 | + "principal_multiplier": 0.10, |
| 175 | + "term_months": 4.0, |
| 176 | + "base_rate": 0.0025, |
| 177 | + "non_cash": { "agenda_narrowing": true }, |
| 178 | + "availability": { "min_rep": 25, "org_types": [] } |
| 179 | + }, |
| 180 | + "philanthropy": { |
| 181 | + "name": "Philanthropic gift", |
| 182 | + "factory": "philanthropy", |
| 183 | + "counterparty": "philanthropist", |
| 184 | + "rep_channel": "safety", |
| 185 | + "principal_min": 15000, |
| 186 | + "principal_max": 45000, |
| 187 | + "principal_multiplier": 1.0, |
| 188 | + "term_months": 0.0, |
| 189 | + "base_rate": 0.0, |
| 190 | + "appearance_chance": 0.35, |
| 191 | + "non_cash": {}, |
| 192 | + "availability": { "min_rep": 30, "org_types": [] } |
| 193 | + }, |
| 194 | + "desperation": { |
| 195 | + "name": "Desperation payroll lever", |
| 196 | + "factory": "desperation_payroll", |
| 197 | + "counterparty": "shadow", |
| 198 | + "rep_channel": "finance", |
| 199 | + "principal_min": 0, |
| 200 | + "principal_max": 0, |
| 201 | + "principal_multiplier": 1.0, |
| 202 | + "term_months": 2.5, |
| 203 | + "base_rate": 0.008, |
| 204 | + "non_cash": { "secret": true }, |
| 205 | + "availability": { "min_rep": 0, "org_types": [] } |
| 206 | + } |
| 207 | + } |
96 | 208 | } |
97 | 209 | } |
0 commit comments