@uwmd/core 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/dist/agents/bancroft.d.ts +32 -0
- package/dist/agents/bancroft.d.ts.map +1 -0
- package/dist/agents/bancroft.js +292 -0
- package/dist/agents/bancroft.js.map +1 -0
- package/dist/agents/schemas.d.ts +13 -0
- package/dist/agents/schemas.d.ts.map +1 -0
- package/dist/agents/schemas.js +74 -0
- package/dist/agents/schemas.js.map +1 -0
- package/dist/bindings.d.ts +85 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +293 -0
- package/dist/bindings.js.map +1 -0
- package/dist/browser.d.ts +66 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +53 -0
- package/dist/browser.js.map +1 -0
- package/dist/calc/builtins.d.ts +4 -0
- package/dist/calc/builtins.d.ts.map +1 -0
- package/dist/calc/builtins.js +329 -0
- package/dist/calc/builtins.js.map +1 -0
- package/dist/calc/dependencies.d.ts +34 -0
- package/dist/calc/dependencies.d.ts.map +1 -0
- package/dist/calc/dependencies.js +101 -0
- package/dist/calc/dependencies.js.map +1 -0
- package/dist/calc/errors.d.ts +8 -0
- package/dist/calc/errors.d.ts.map +1 -0
- package/dist/calc/errors.js +18 -0
- package/dist/calc/errors.js.map +1 -0
- package/dist/calc/evaluator.d.ts +5 -0
- package/dist/calc/evaluator.d.ts.map +1 -0
- package/dist/calc/evaluator.js +184 -0
- package/dist/calc/evaluator.js.map +1 -0
- package/dist/calc/index.d.ts +14 -0
- package/dist/calc/index.d.ts.map +1 -0
- package/dist/calc/index.js +56 -0
- package/dist/calc/index.js.map +1 -0
- package/dist/calc/parser.d.ts +32 -0
- package/dist/calc/parser.d.ts.map +1 -0
- package/dist/calc/parser.js +361 -0
- package/dist/calc/parser.js.map +1 -0
- package/dist/cascade.d.ts +85 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +172 -0
- package/dist/cascade.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +843 -0
- package/dist/cli.js.map +1 -0
- package/dist/codec.d.ts +25 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +62 -0
- package/dist/codec.js.map +1 -0
- package/dist/codecs.d.ts +6 -0
- package/dist/codecs.d.ts.map +1 -0
- package/dist/codecs.js +12 -0
- package/dist/codecs.js.map +1 -0
- package/dist/compactor.d.ts +11 -0
- package/dist/compactor.d.ts.map +1 -0
- package/dist/compactor.js +84 -0
- package/dist/compactor.js.map +1 -0
- package/dist/context-profiles.d.ts +30 -0
- package/dist/context-profiles.d.ts.map +1 -0
- package/dist/context-profiles.js +225 -0
- package/dist/context-profiles.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +288 -0
- package/dist/context.js.map +1 -0
- package/dist/dcf.d.ts +9 -0
- package/dist/dcf.d.ts.map +1 -0
- package/dist/dcf.js +75 -0
- package/dist/dcf.js.map +1 -0
- package/dist/debt.d.ts +11 -0
- package/dist/debt.d.ts.map +1 -0
- package/dist/debt.js +85 -0
- package/dist/debt.js.map +1 -0
- package/dist/defaults.d.ts +104 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +622 -0
- package/dist/defaults.js.map +1 -0
- package/dist/derived.d.ts +17 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +29 -0
- package/dist/derived.js.map +1 -0
- package/dist/editor.d.ts +76 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +502 -0
- package/dist/editor.js.map +1 -0
- package/dist/envelope.d.ts +51 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +213 -0
- package/dist/envelope.js.map +1 -0
- package/dist/format.d.ts +60 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +115 -0
- package/dist/format.js.map +1 -0
- package/dist/gaps.d.ts +62 -0
- package/dist/gaps.d.ts.map +1 -0
- package/dist/gaps.js +272 -0
- package/dist/gaps.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +169 -0
- package/dist/init.js.map +1 -0
- package/dist/integrity-canonical.d.ts +17 -0
- package/dist/integrity-canonical.d.ts.map +1 -0
- package/dist/integrity-canonical.js +124 -0
- package/dist/integrity-canonical.js.map +1 -0
- package/dist/integrity.d.ts +54 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +244 -0
- package/dist/integrity.js.map +1 -0
- package/dist/modules.d.ts +24 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +322 -0
- package/dist/modules.js.map +1 -0
- package/dist/negotiation.d.ts +19 -0
- package/dist/negotiation.d.ts.map +1 -0
- package/dist/negotiation.js +70 -0
- package/dist/negotiation.js.map +1 -0
- package/dist/opstatement.d.ts +9 -0
- package/dist/opstatement.d.ts.map +1 -0
- package/dist/opstatement.js +80 -0
- package/dist/opstatement.js.map +1 -0
- package/dist/packs/excel-emit.d.ts +21 -0
- package/dist/packs/excel-emit.d.ts.map +1 -0
- package/dist/packs/excel-emit.js +135 -0
- package/dist/packs/excel-emit.js.map +1 -0
- package/dist/packs/index.d.ts +13 -0
- package/dist/packs/index.d.ts.map +1 -0
- package/dist/packs/index.js +37 -0
- package/dist/packs/index.js.map +1 -0
- package/dist/packs/industrial.d.ts +3 -0
- package/dist/packs/industrial.d.ts.map +1 -0
- package/dist/packs/industrial.js +115 -0
- package/dist/packs/industrial.js.map +1 -0
- package/dist/packs/multifamily.d.ts +3 -0
- package/dist/packs/multifamily.d.ts.map +1 -0
- package/dist/packs/multifamily.js +82 -0
- package/dist/packs/multifamily.js.map +1 -0
- package/dist/packs/office.d.ts +3 -0
- package/dist/packs/office.d.ts.map +1 -0
- package/dist/packs/office.js +108 -0
- package/dist/packs/office.js.map +1 -0
- package/dist/packs/retail.d.ts +3 -0
- package/dist/packs/retail.d.ts.map +1 -0
- package/dist/packs/retail.js +115 -0
- package/dist/packs/retail.js.map +1 -0
- package/dist/packs/self-storage.d.ts +3 -0
- package/dist/packs/self-storage.d.ts.map +1 -0
- package/dist/packs/self-storage.js +105 -0
- package/dist/packs/self-storage.js.map +1 -0
- package/dist/parser.d.ts +15 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +430 -0
- package/dist/parser.js.map +1 -0
- package/dist/protocol.d.ts +389 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +714 -0
- package/dist/protocol.js.map +1 -0
- package/dist/refinement.d.ts +63 -0
- package/dist/refinement.d.ts.map +1 -0
- package/dist/refinement.js +242 -0
- package/dist/refinement.js.map +1 -0
- package/dist/renderer.d.ts +22 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +478 -0
- package/dist/renderer.js.map +1 -0
- package/dist/rentroll.d.ts +21 -0
- package/dist/rentroll.d.ts.map +1 -0
- package/dist/rentroll.js +256 -0
- package/dist/rentroll.js.map +1 -0
- package/dist/report.d.ts +29 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +924 -0
- package/dist/report.js.map +1 -0
- package/dist/runner.d.ts +43 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +288 -0
- package/dist/runner.js.map +1 -0
- package/dist/sourcesuses.d.ts +14 -0
- package/dist/sourcesuses.d.ts.map +1 -0
- package/dist/sourcesuses.js +63 -0
- package/dist/sourcesuses.js.map +1 -0
- package/dist/types.d.ts +248 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/uwcsv.d.ts +23 -0
- package/dist/uwcsv.d.ts.map +1 -0
- package/dist/uwcsv.js +877 -0
- package/dist/uwcsv.js.map +1 -0
- package/dist/uwjson.d.ts +19 -0
- package/dist/uwjson.d.ts.map +1 -0
- package/dist/uwjson.js +61 -0
- package/dist/uwjson.js.map +1 -0
- package/dist/uwxml.d.ts +18 -0
- package/dist/uwxml.d.ts.map +1 -0
- package/dist/uwxml.js +297 -0
- package/dist/uwxml.js.map +1 -0
- package/dist/validator.d.ts +35 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +553 -0
- package/dist/validator.js.map +1 -0
- package/dist/valuation.d.ts +9 -0
- package/dist/valuation.d.ts.map +1 -0
- package/dist/valuation.js +34 -0
- package/dist/valuation.js.map +1 -0
- package/package.json +58 -0
package/dist/defaults.js
ADDED
|
@@ -0,0 +1,622 @@
|
|
|
1
|
+
// Asset-class default tables — Protocol §V.7-§V.8
|
|
2
|
+
//
|
|
3
|
+
// Published normative defaults for the cascade resolver. Each entry is a
|
|
4
|
+
// {low, central, high} range so refinement/VOI consumers can quantify what's
|
|
5
|
+
// at stake before any document arrives.
|
|
6
|
+
//
|
|
7
|
+
// Bumping a default's range materially → bump table `version`.
|
|
8
|
+
/**
|
|
9
|
+
* Multifamily asset-class defaults, v1.0.0.
|
|
10
|
+
*
|
|
11
|
+
* Ranges are deliberately wide enough to span most US primary/secondary markets
|
|
12
|
+
* for stabilized garden / mid-rise product. They are intended for triage —
|
|
13
|
+
* scope-stage VOI ranking — not for committee-grade underwriting.
|
|
14
|
+
*
|
|
15
|
+
* Citations name the canonical industry source; specific point values within
|
|
16
|
+
* the range reflect a blend of published surveys and internal calibration.
|
|
17
|
+
* Bump `version` when any low/central/high shifts beyond round-off.
|
|
18
|
+
*/
|
|
19
|
+
export const MULTIFAMILY_DEFAULTS = {
|
|
20
|
+
asset_class: 'multifamily',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
fields: {
|
|
23
|
+
'noi_model.expense_ratio': {
|
|
24
|
+
low: 0.34,
|
|
25
|
+
central: 0.4,
|
|
26
|
+
high: 0.46,
|
|
27
|
+
unit: 'ratio',
|
|
28
|
+
source: 'asset_class_default',
|
|
29
|
+
citation: 'NCREIF / IREM Income & Expense Survey (typical garden + mid-rise band)',
|
|
30
|
+
},
|
|
31
|
+
'rent_roll.vacancy_pct': {
|
|
32
|
+
low: 0.04,
|
|
33
|
+
central: 0.06,
|
|
34
|
+
high: 0.1,
|
|
35
|
+
unit: 'percent',
|
|
36
|
+
source: 'asset_class_default',
|
|
37
|
+
citation: 'CoStar / RealPage US multifamily vacancy distribution',
|
|
38
|
+
},
|
|
39
|
+
'noi_model.rent_growth_pct_y1': {
|
|
40
|
+
low: 0.02,
|
|
41
|
+
central: 0.03,
|
|
42
|
+
high: 0.05,
|
|
43
|
+
unit: 'percent',
|
|
44
|
+
source: 'asset_class_default',
|
|
45
|
+
citation: 'Yardi Matrix / CoStar trailing rent-growth bands',
|
|
46
|
+
},
|
|
47
|
+
'noi_model.management_fee_pct': {
|
|
48
|
+
low: 0.025,
|
|
49
|
+
central: 0.035,
|
|
50
|
+
high: 0.045,
|
|
51
|
+
unit: 'percent',
|
|
52
|
+
source: 'asset_class_default',
|
|
53
|
+
citation: 'IREM management fee survey (third-party fee on EGI)',
|
|
54
|
+
},
|
|
55
|
+
'noi_model.replacement_reserve_per_unit_y1': {
|
|
56
|
+
low: 250,
|
|
57
|
+
central: 300,
|
|
58
|
+
high: 400,
|
|
59
|
+
unit: 'currency',
|
|
60
|
+
source: 'asset_class_default',
|
|
61
|
+
citation: 'Agency (Fannie/Freddie) underwriting reserve floors',
|
|
62
|
+
},
|
|
63
|
+
'debt_structure.rate_pct': {
|
|
64
|
+
low: 0.06,
|
|
65
|
+
central: 0.067,
|
|
66
|
+
high: 0.075,
|
|
67
|
+
unit: 'percent',
|
|
68
|
+
source: 'asset_class_default',
|
|
69
|
+
citation: 'Agency 5-7yr fixed quote band, mid-2026 rate environment',
|
|
70
|
+
},
|
|
71
|
+
'debt_structure.amortization_months': {
|
|
72
|
+
low: 300,
|
|
73
|
+
central: 360,
|
|
74
|
+
high: 360,
|
|
75
|
+
unit: 'months',
|
|
76
|
+
source: 'asset_class_default',
|
|
77
|
+
citation: 'Standard agency amortization (25-30 yr)',
|
|
78
|
+
},
|
|
79
|
+
'debt_structure.io_months': {
|
|
80
|
+
low: 0,
|
|
81
|
+
central: 0,
|
|
82
|
+
high: 60,
|
|
83
|
+
unit: 'months',
|
|
84
|
+
source: 'asset_class_default',
|
|
85
|
+
citation: 'Agency IO availability range (0-5 yr)',
|
|
86
|
+
},
|
|
87
|
+
'debt_structure.ltv_pct': {
|
|
88
|
+
low: 0.55,
|
|
89
|
+
central: 0.65,
|
|
90
|
+
high: 0.75,
|
|
91
|
+
unit: 'percent',
|
|
92
|
+
source: 'asset_class_default',
|
|
93
|
+
citation: 'Agency LTV envelope for stabilized multifamily',
|
|
94
|
+
},
|
|
95
|
+
'valuation.exit_cap_rate_pct': {
|
|
96
|
+
low: 0.045,
|
|
97
|
+
central: 0.055,
|
|
98
|
+
high: 0.065,
|
|
99
|
+
unit: 'percent',
|
|
100
|
+
source: 'asset_class_default',
|
|
101
|
+
citation: 'CBRE / RCA US multifamily exit cap distribution',
|
|
102
|
+
},
|
|
103
|
+
'sources_uses.closing_costs_pct': {
|
|
104
|
+
low: 0.015,
|
|
105
|
+
central: 0.025,
|
|
106
|
+
high: 0.035,
|
|
107
|
+
unit: 'percent',
|
|
108
|
+
source: 'asset_class_default',
|
|
109
|
+
citation: 'Acquisition closing cost band (title, legal, debt fees, taxes)',
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Office asset-class defaults, v1.0.0.
|
|
115
|
+
*
|
|
116
|
+
* Calibrated for stabilized Class A/B suburban and CBD office. Ranges run wider
|
|
117
|
+
* than multifamily — office cash flows are lumpier (lease rollover, TI/LC, longer
|
|
118
|
+
* downtime) and pricing is more dispersed across markets and building class.
|
|
119
|
+
* Like the multifamily table these are triage-grade (scope-stage VOI ranking),
|
|
120
|
+
* not committee underwriting.
|
|
121
|
+
*
|
|
122
|
+
* Citations name the canonical industry source; specific point values within
|
|
123
|
+
* the range reflect a blend of published surveys and internal calibration.
|
|
124
|
+
* Bump `version` when any low/central/high shifts beyond round-off.
|
|
125
|
+
*/
|
|
126
|
+
export const OFFICE_DEFAULTS = {
|
|
127
|
+
asset_class: 'office',
|
|
128
|
+
version: '1.0.0',
|
|
129
|
+
fields: {
|
|
130
|
+
'noi_model.expense_ratio': {
|
|
131
|
+
low: 0.38,
|
|
132
|
+
central: 0.45,
|
|
133
|
+
high: 0.52,
|
|
134
|
+
unit: 'ratio',
|
|
135
|
+
source: 'asset_class_default',
|
|
136
|
+
citation: 'BOMA / IREM Office Income & Expense (opex as share of EGI, gross basis)',
|
|
137
|
+
},
|
|
138
|
+
'rent_roll.vacancy_pct': {
|
|
139
|
+
low: 0.08,
|
|
140
|
+
central: 0.13,
|
|
141
|
+
high: 0.2,
|
|
142
|
+
unit: 'percent',
|
|
143
|
+
source: 'asset_class_default',
|
|
144
|
+
citation: 'CBRE / JLL US office vacancy distribution (post-2023 structural band)',
|
|
145
|
+
},
|
|
146
|
+
'noi_model.rent_growth_pct_y1': {
|
|
147
|
+
low: 0.0,
|
|
148
|
+
central: 0.02,
|
|
149
|
+
high: 0.035,
|
|
150
|
+
unit: 'percent',
|
|
151
|
+
source: 'asset_class_default',
|
|
152
|
+
citation: 'CBRE-EA / CoStar office asking-rent growth bands',
|
|
153
|
+
},
|
|
154
|
+
'noi_model.management_fee_pct': {
|
|
155
|
+
low: 0.02,
|
|
156
|
+
central: 0.03,
|
|
157
|
+
high: 0.04,
|
|
158
|
+
unit: 'percent',
|
|
159
|
+
source: 'asset_class_default',
|
|
160
|
+
citation: 'BOMA management fee survey (third-party fee on EGI)',
|
|
161
|
+
},
|
|
162
|
+
'noi_model.ti_allowance_psf_new': {
|
|
163
|
+
low: 40,
|
|
164
|
+
central: 65,
|
|
165
|
+
high: 100,
|
|
166
|
+
unit: 'currency',
|
|
167
|
+
source: 'asset_class_default',
|
|
168
|
+
citation: 'CBRE / CompStak tenant-improvement allowance, new leases ($/SF)',
|
|
169
|
+
},
|
|
170
|
+
'noi_model.ti_allowance_psf_renewal': {
|
|
171
|
+
low: 15,
|
|
172
|
+
central: 30,
|
|
173
|
+
high: 50,
|
|
174
|
+
unit: 'currency',
|
|
175
|
+
source: 'asset_class_default',
|
|
176
|
+
citation: 'CBRE / CompStak tenant-improvement allowance, renewals ($/SF)',
|
|
177
|
+
},
|
|
178
|
+
'noi_model.leasing_commission_pct': {
|
|
179
|
+
low: 0.04,
|
|
180
|
+
central: 0.06,
|
|
181
|
+
high: 0.08,
|
|
182
|
+
unit: 'percent',
|
|
183
|
+
source: 'asset_class_default',
|
|
184
|
+
citation: 'Brokerage leasing-commission band (% of total lease value, new deals)',
|
|
185
|
+
},
|
|
186
|
+
'debt_structure.rate_pct': {
|
|
187
|
+
low: 0.065,
|
|
188
|
+
central: 0.075,
|
|
189
|
+
high: 0.085,
|
|
190
|
+
unit: 'percent',
|
|
191
|
+
source: 'asset_class_default',
|
|
192
|
+
citation: 'CMBS / life-co office fixed quote band, mid-2026 rate environment',
|
|
193
|
+
},
|
|
194
|
+
'debt_structure.amortization_months': {
|
|
195
|
+
low: 300,
|
|
196
|
+
central: 360,
|
|
197
|
+
high: 360,
|
|
198
|
+
unit: 'months',
|
|
199
|
+
source: 'asset_class_default',
|
|
200
|
+
citation: 'Standard permanent office amortization (25-30 yr)',
|
|
201
|
+
},
|
|
202
|
+
'debt_structure.io_months': {
|
|
203
|
+
low: 0,
|
|
204
|
+
central: 12,
|
|
205
|
+
high: 36,
|
|
206
|
+
unit: 'months',
|
|
207
|
+
source: 'asset_class_default',
|
|
208
|
+
citation: 'Office IO availability range (0-3 yr, longer on bridge)',
|
|
209
|
+
},
|
|
210
|
+
'debt_structure.ltv_pct': {
|
|
211
|
+
low: 0.5,
|
|
212
|
+
central: 0.6,
|
|
213
|
+
high: 0.68,
|
|
214
|
+
unit: 'percent',
|
|
215
|
+
source: 'asset_class_default',
|
|
216
|
+
citation: 'Office LTV envelope for stabilized assets (conservative post-2023)',
|
|
217
|
+
},
|
|
218
|
+
'valuation.exit_cap_rate_pct': {
|
|
219
|
+
low: 0.065,
|
|
220
|
+
central: 0.075,
|
|
221
|
+
high: 0.09,
|
|
222
|
+
unit: 'percent',
|
|
223
|
+
source: 'asset_class_default',
|
|
224
|
+
citation: 'CBRE / RCA US office exit cap distribution',
|
|
225
|
+
},
|
|
226
|
+
'sources_uses.closing_costs_pct': {
|
|
227
|
+
low: 0.015,
|
|
228
|
+
central: 0.025,
|
|
229
|
+
high: 0.035,
|
|
230
|
+
unit: 'percent',
|
|
231
|
+
source: 'asset_class_default',
|
|
232
|
+
citation: 'Acquisition closing cost band (title, legal, debt fees, taxes)',
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Retail asset-class defaults, v1.0.0.
|
|
238
|
+
*
|
|
239
|
+
* Calibrated for stabilized grocery-anchored and neighborhood retail on a
|
|
240
|
+
* predominantly NNN lease structure. The defining retail trait is expense
|
|
241
|
+
* recovery: most operating expenses are reimbursed by tenants, so the *effective*
|
|
242
|
+
* (unrecovered) expense ratio is low even though gross expenses are not. Triage
|
|
243
|
+
* grade (scope-stage VOI ranking), not committee underwriting.
|
|
244
|
+
*
|
|
245
|
+
* Citations name the canonical industry source; specific point values within
|
|
246
|
+
* the range reflect a blend of published surveys and internal calibration.
|
|
247
|
+
* Bump `version` when any low/central/high shifts beyond round-off.
|
|
248
|
+
*/
|
|
249
|
+
export const RETAIL_DEFAULTS = {
|
|
250
|
+
asset_class: 'retail',
|
|
251
|
+
version: '1.0.0',
|
|
252
|
+
fields: {
|
|
253
|
+
'noi_model.expense_ratio': {
|
|
254
|
+
low: 0.22,
|
|
255
|
+
central: 0.3,
|
|
256
|
+
high: 0.4,
|
|
257
|
+
unit: 'ratio',
|
|
258
|
+
source: 'asset_class_default',
|
|
259
|
+
citation: 'ICSC / NCREIF retail opex as share of EGI (net of NNN recoveries)',
|
|
260
|
+
},
|
|
261
|
+
'noi_model.expense_recovery_rate': {
|
|
262
|
+
low: 0.7,
|
|
263
|
+
central: 0.85,
|
|
264
|
+
high: 0.95,
|
|
265
|
+
unit: 'percent',
|
|
266
|
+
source: 'asset_class_default',
|
|
267
|
+
citation: 'NNN recovery rate — share of recoverable opex billed back to tenants',
|
|
268
|
+
},
|
|
269
|
+
'rent_roll.vacancy_pct': {
|
|
270
|
+
low: 0.04,
|
|
271
|
+
central: 0.07,
|
|
272
|
+
high: 0.12,
|
|
273
|
+
unit: 'percent',
|
|
274
|
+
source: 'asset_class_default',
|
|
275
|
+
citation: 'CoStar / ICSC neighborhood & community center vacancy distribution',
|
|
276
|
+
},
|
|
277
|
+
'noi_model.rent_growth_pct_y1': {
|
|
278
|
+
low: 0.01,
|
|
279
|
+
central: 0.025,
|
|
280
|
+
high: 0.04,
|
|
281
|
+
unit: 'percent',
|
|
282
|
+
source: 'asset_class_default',
|
|
283
|
+
citation: 'CoStar retail asking-rent growth bands (open-air centers)',
|
|
284
|
+
},
|
|
285
|
+
'noi_model.management_fee_pct': {
|
|
286
|
+
low: 0.03,
|
|
287
|
+
central: 0.04,
|
|
288
|
+
high: 0.05,
|
|
289
|
+
unit: 'percent',
|
|
290
|
+
source: 'asset_class_default',
|
|
291
|
+
citation: 'ICSC management fee survey (third-party fee on EGI)',
|
|
292
|
+
},
|
|
293
|
+
'noi_model.ti_allowance_psf_inline_new': {
|
|
294
|
+
low: 20,
|
|
295
|
+
central: 40,
|
|
296
|
+
high: 70,
|
|
297
|
+
unit: 'currency',
|
|
298
|
+
source: 'asset_class_default',
|
|
299
|
+
citation: 'CBRE / CompStak inline tenant-improvement allowance, new leases ($/SF)',
|
|
300
|
+
},
|
|
301
|
+
'noi_model.leasing_commission_pct': {
|
|
302
|
+
low: 0.04,
|
|
303
|
+
central: 0.05,
|
|
304
|
+
high: 0.06,
|
|
305
|
+
unit: 'percent',
|
|
306
|
+
source: 'asset_class_default',
|
|
307
|
+
citation: 'Brokerage leasing-commission band (% of total lease value, retail)',
|
|
308
|
+
},
|
|
309
|
+
'debt_structure.rate_pct': {
|
|
310
|
+
low: 0.06,
|
|
311
|
+
central: 0.0675,
|
|
312
|
+
high: 0.08,
|
|
313
|
+
unit: 'percent',
|
|
314
|
+
source: 'asset_class_default',
|
|
315
|
+
citation: 'CMBS / life-co retail fixed quote band, mid-2026 rate environment',
|
|
316
|
+
},
|
|
317
|
+
'debt_structure.amortization_months': {
|
|
318
|
+
low: 300,
|
|
319
|
+
central: 360,
|
|
320
|
+
high: 360,
|
|
321
|
+
unit: 'months',
|
|
322
|
+
source: 'asset_class_default',
|
|
323
|
+
citation: 'Standard permanent retail amortization (25-30 yr)',
|
|
324
|
+
},
|
|
325
|
+
'debt_structure.io_months': {
|
|
326
|
+
low: 0,
|
|
327
|
+
central: 0,
|
|
328
|
+
high: 24,
|
|
329
|
+
unit: 'months',
|
|
330
|
+
source: 'asset_class_default',
|
|
331
|
+
citation: 'Retail IO availability range (0-2 yr on permanent debt)',
|
|
332
|
+
},
|
|
333
|
+
'debt_structure.ltv_pct': {
|
|
334
|
+
low: 0.55,
|
|
335
|
+
central: 0.62,
|
|
336
|
+
high: 0.7,
|
|
337
|
+
unit: 'percent',
|
|
338
|
+
source: 'asset_class_default',
|
|
339
|
+
citation: 'Retail LTV envelope for stabilized, credit-anchored centers',
|
|
340
|
+
},
|
|
341
|
+
'valuation.exit_cap_rate_pct': {
|
|
342
|
+
low: 0.065,
|
|
343
|
+
central: 0.0725,
|
|
344
|
+
high: 0.085,
|
|
345
|
+
unit: 'percent',
|
|
346
|
+
source: 'asset_class_default',
|
|
347
|
+
citation: 'CBRE / RCA US retail exit cap distribution (grocery-anchored)',
|
|
348
|
+
},
|
|
349
|
+
'sources_uses.closing_costs_pct': {
|
|
350
|
+
low: 0.015,
|
|
351
|
+
central: 0.025,
|
|
352
|
+
high: 0.035,
|
|
353
|
+
unit: 'percent',
|
|
354
|
+
source: 'asset_class_default',
|
|
355
|
+
citation: 'Acquisition closing cost band (title, legal, debt fees, taxes)',
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
/**
|
|
360
|
+
* Industrial asset-class defaults, v1.0.0.
|
|
361
|
+
*
|
|
362
|
+
* Calibrated for stabilized Class A/B bulk-distribution and logistics product on
|
|
363
|
+
* NNN leases. Industrial has the lowest effective expense ratio of the major
|
|
364
|
+
* classes (cheap to operate, near-total expense recovery) and the tightest cap
|
|
365
|
+
* rates. Triage grade (scope-stage VOI ranking), not committee underwriting.
|
|
366
|
+
*
|
|
367
|
+
* Citations name the canonical industry source; specific point values within
|
|
368
|
+
* the range reflect a blend of published surveys and internal calibration.
|
|
369
|
+
* Bump `version` when any low/central/high shifts beyond round-off.
|
|
370
|
+
*/
|
|
371
|
+
export const INDUSTRIAL_DEFAULTS = {
|
|
372
|
+
asset_class: 'industrial',
|
|
373
|
+
version: '1.0.0',
|
|
374
|
+
fields: {
|
|
375
|
+
'noi_model.expense_ratio': {
|
|
376
|
+
low: 0.15,
|
|
377
|
+
central: 0.22,
|
|
378
|
+
high: 0.3,
|
|
379
|
+
unit: 'ratio',
|
|
380
|
+
source: 'asset_class_default',
|
|
381
|
+
citation: 'NAIOP / NCREIF industrial opex as share of EGI (net of NNN recoveries)',
|
|
382
|
+
},
|
|
383
|
+
'noi_model.expense_recovery_rate': {
|
|
384
|
+
low: 0.85,
|
|
385
|
+
central: 0.92,
|
|
386
|
+
high: 0.98,
|
|
387
|
+
unit: 'percent',
|
|
388
|
+
source: 'asset_class_default',
|
|
389
|
+
citation: 'NNN recovery rate — industrial leases recover near-all recoverable opex',
|
|
390
|
+
},
|
|
391
|
+
'rent_roll.vacancy_pct': {
|
|
392
|
+
low: 0.03,
|
|
393
|
+
central: 0.05,
|
|
394
|
+
high: 0.09,
|
|
395
|
+
unit: 'percent',
|
|
396
|
+
source: 'asset_class_default',
|
|
397
|
+
citation: 'CBRE / Cushman US industrial vacancy distribution (big-box logistics)',
|
|
398
|
+
},
|
|
399
|
+
'noi_model.rent_growth_pct_y1': {
|
|
400
|
+
low: 0.02,
|
|
401
|
+
central: 0.035,
|
|
402
|
+
high: 0.05,
|
|
403
|
+
unit: 'percent',
|
|
404
|
+
source: 'asset_class_default',
|
|
405
|
+
citation: 'CBRE-EA / CoStar industrial asking-rent growth bands',
|
|
406
|
+
},
|
|
407
|
+
'noi_model.management_fee_pct': {
|
|
408
|
+
low: 0.015,
|
|
409
|
+
central: 0.025,
|
|
410
|
+
high: 0.035,
|
|
411
|
+
unit: 'percent',
|
|
412
|
+
source: 'asset_class_default',
|
|
413
|
+
citation: 'NAIOP management fee survey (third-party fee on EGI, NNN)',
|
|
414
|
+
},
|
|
415
|
+
'noi_model.ti_allowance_psf_new': {
|
|
416
|
+
low: 2,
|
|
417
|
+
central: 5,
|
|
418
|
+
high: 12,
|
|
419
|
+
unit: 'currency',
|
|
420
|
+
source: 'asset_class_default',
|
|
421
|
+
citation: 'CBRE / CompStak warehouse tenant-improvement allowance, new leases ($/SF)',
|
|
422
|
+
},
|
|
423
|
+
'noi_model.leasing_commission_pct': {
|
|
424
|
+
low: 0.04,
|
|
425
|
+
central: 0.05,
|
|
426
|
+
high: 0.06,
|
|
427
|
+
unit: 'percent',
|
|
428
|
+
source: 'asset_class_default',
|
|
429
|
+
citation: 'Brokerage leasing-commission band (% of total lease value, industrial)',
|
|
430
|
+
},
|
|
431
|
+
'debt_structure.rate_pct': {
|
|
432
|
+
low: 0.058,
|
|
433
|
+
central: 0.065,
|
|
434
|
+
high: 0.075,
|
|
435
|
+
unit: 'percent',
|
|
436
|
+
source: 'asset_class_default',
|
|
437
|
+
citation: 'CMBS / life-co industrial fixed quote band, mid-2026 rate environment',
|
|
438
|
+
},
|
|
439
|
+
'debt_structure.amortization_months': {
|
|
440
|
+
low: 300,
|
|
441
|
+
central: 360,
|
|
442
|
+
high: 360,
|
|
443
|
+
unit: 'months',
|
|
444
|
+
source: 'asset_class_default',
|
|
445
|
+
citation: 'Standard permanent industrial amortization (25-30 yr)',
|
|
446
|
+
},
|
|
447
|
+
'debt_structure.io_months': {
|
|
448
|
+
low: 0,
|
|
449
|
+
central: 0,
|
|
450
|
+
high: 24,
|
|
451
|
+
unit: 'months',
|
|
452
|
+
source: 'asset_class_default',
|
|
453
|
+
citation: 'Industrial IO availability range (0-2 yr on permanent debt)',
|
|
454
|
+
},
|
|
455
|
+
'debt_structure.ltv_pct': {
|
|
456
|
+
low: 0.55,
|
|
457
|
+
central: 0.62,
|
|
458
|
+
high: 0.7,
|
|
459
|
+
unit: 'percent',
|
|
460
|
+
source: 'asset_class_default',
|
|
461
|
+
citation: 'Industrial LTV envelope for stabilized logistics assets',
|
|
462
|
+
},
|
|
463
|
+
'valuation.exit_cap_rate_pct': {
|
|
464
|
+
low: 0.055,
|
|
465
|
+
central: 0.065,
|
|
466
|
+
high: 0.075,
|
|
467
|
+
unit: 'percent',
|
|
468
|
+
source: 'asset_class_default',
|
|
469
|
+
citation: 'CBRE / RCA US industrial exit cap distribution',
|
|
470
|
+
},
|
|
471
|
+
'sources_uses.closing_costs_pct': {
|
|
472
|
+
low: 0.015,
|
|
473
|
+
central: 0.025,
|
|
474
|
+
high: 0.035,
|
|
475
|
+
unit: 'percent',
|
|
476
|
+
source: 'asset_class_default',
|
|
477
|
+
citation: 'Acquisition closing cost band (title, legal, debt fees, taxes)',
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
};
|
|
481
|
+
/**
|
|
482
|
+
* Self-storage asset-class defaults, v1.0.0.
|
|
483
|
+
*
|
|
484
|
+
* Calibrated for stabilized drive-up and climate-controlled storage facilities.
|
|
485
|
+
* The key class-specific inputs are physical occupancy, economic occupancy,
|
|
486
|
+
* and revenue per net rentable square foot. Triage grade (scope-stage VOI
|
|
487
|
+
* ranking), not committee underwriting.
|
|
488
|
+
*/
|
|
489
|
+
export const SELF_STORAGE_DEFAULTS = {
|
|
490
|
+
asset_class: 'self_storage',
|
|
491
|
+
version: '1.0.0',
|
|
492
|
+
fields: {
|
|
493
|
+
'noi_model.expense_ratio': {
|
|
494
|
+
low: 0.28,
|
|
495
|
+
central: 0.34,
|
|
496
|
+
high: 0.42,
|
|
497
|
+
unit: 'ratio',
|
|
498
|
+
source: 'asset_class_default',
|
|
499
|
+
citation: 'SSA / NAREIT self-storage operating expense bands',
|
|
500
|
+
},
|
|
501
|
+
'rent_roll.vacancy_pct': {
|
|
502
|
+
low: 0.08,
|
|
503
|
+
central: 0.12,
|
|
504
|
+
high: 0.2,
|
|
505
|
+
unit: 'percent',
|
|
506
|
+
source: 'asset_class_default',
|
|
507
|
+
citation: 'Yardi Matrix / Radius+ self-storage physical vacancy distribution',
|
|
508
|
+
},
|
|
509
|
+
'rent_roll.economic_vacancy_pct': {
|
|
510
|
+
low: 0.1,
|
|
511
|
+
central: 0.15,
|
|
512
|
+
high: 0.24,
|
|
513
|
+
unit: 'percent',
|
|
514
|
+
source: 'asset_class_default',
|
|
515
|
+
citation: 'Self-storage economic vacancy band including concessions and loss-to-lease',
|
|
516
|
+
},
|
|
517
|
+
'noi_model.rent_growth_pct_y1': {
|
|
518
|
+
low: 0.01,
|
|
519
|
+
central: 0.025,
|
|
520
|
+
high: 0.045,
|
|
521
|
+
unit: 'percent',
|
|
522
|
+
source: 'asset_class_default',
|
|
523
|
+
citation: 'Yardi Matrix self-storage rent-growth bands',
|
|
524
|
+
},
|
|
525
|
+
'noi_model.management_fee_pct': {
|
|
526
|
+
low: 0.04,
|
|
527
|
+
central: 0.05,
|
|
528
|
+
high: 0.06,
|
|
529
|
+
unit: 'percent',
|
|
530
|
+
source: 'asset_class_default',
|
|
531
|
+
citation: 'Third-party self-storage management fee band',
|
|
532
|
+
},
|
|
533
|
+
'noi_model.revenue_per_nrsf': {
|
|
534
|
+
low: 10,
|
|
535
|
+
central: 15,
|
|
536
|
+
high: 22,
|
|
537
|
+
unit: 'currency',
|
|
538
|
+
source: 'asset_class_default',
|
|
539
|
+
citation: 'Radius+ / Yardi Matrix annual revenue per occupied NRSF bands',
|
|
540
|
+
},
|
|
541
|
+
'debt_structure.rate_pct': {
|
|
542
|
+
low: 0.0625,
|
|
543
|
+
central: 0.07,
|
|
544
|
+
high: 0.08,
|
|
545
|
+
unit: 'percent',
|
|
546
|
+
source: 'asset_class_default',
|
|
547
|
+
citation: 'CMBS / life-co self-storage fixed quote band, mid-2026 rate environment',
|
|
548
|
+
},
|
|
549
|
+
'debt_structure.amortization_months': {
|
|
550
|
+
low: 300,
|
|
551
|
+
central: 360,
|
|
552
|
+
high: 360,
|
|
553
|
+
unit: 'months',
|
|
554
|
+
source: 'asset_class_default',
|
|
555
|
+
citation: 'Standard permanent self-storage amortization (25-30 yr)',
|
|
556
|
+
},
|
|
557
|
+
'debt_structure.io_months': {
|
|
558
|
+
low: 0,
|
|
559
|
+
central: 0,
|
|
560
|
+
high: 24,
|
|
561
|
+
unit: 'months',
|
|
562
|
+
source: 'asset_class_default',
|
|
563
|
+
citation: 'Self-storage IO availability range (0-2 yr on permanent debt)',
|
|
564
|
+
},
|
|
565
|
+
'debt_structure.ltv_pct': {
|
|
566
|
+
low: 0.55,
|
|
567
|
+
central: 0.65,
|
|
568
|
+
high: 0.72,
|
|
569
|
+
unit: 'percent',
|
|
570
|
+
source: 'asset_class_default',
|
|
571
|
+
citation: 'Self-storage LTV envelope for stabilized assets',
|
|
572
|
+
},
|
|
573
|
+
'valuation.exit_cap_rate_pct': {
|
|
574
|
+
low: 0.055,
|
|
575
|
+
central: 0.065,
|
|
576
|
+
high: 0.0775,
|
|
577
|
+
unit: 'percent',
|
|
578
|
+
source: 'asset_class_default',
|
|
579
|
+
citation: 'RCA / Green Street self-storage cap-rate distribution',
|
|
580
|
+
},
|
|
581
|
+
'sources_uses.closing_costs_pct': {
|
|
582
|
+
low: 0.015,
|
|
583
|
+
central: 0.025,
|
|
584
|
+
high: 0.035,
|
|
585
|
+
unit: 'percent',
|
|
586
|
+
source: 'asset_class_default',
|
|
587
|
+
citation: 'Acquisition closing cost band (title, legal, debt fees, taxes)',
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
};
|
|
591
|
+
const REGISTRY = Object.freeze({
|
|
592
|
+
multifamily: MULTIFAMILY_DEFAULTS,
|
|
593
|
+
office: OFFICE_DEFAULTS,
|
|
594
|
+
retail: RETAIL_DEFAULTS,
|
|
595
|
+
industrial: INDUSTRIAL_DEFAULTS,
|
|
596
|
+
self_storage: SELF_STORAGE_DEFAULTS,
|
|
597
|
+
});
|
|
598
|
+
/**
|
|
599
|
+
* Look up the published defaults for an asset class. Returns null when no
|
|
600
|
+
* table is registered (callers should fall through to `global_default` /
|
|
601
|
+
* `system_default` per the cascade in protocol §V.7).
|
|
602
|
+
*/
|
|
603
|
+
export function getAssetClassDefaults(asset_class) {
|
|
604
|
+
return REGISTRY[asset_class] ?? null;
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Look up a single default range by `(asset_class, field_path)`. Returns null
|
|
608
|
+
* if the asset class has no table or the field has no published default.
|
|
609
|
+
*/
|
|
610
|
+
export function getDefaultRange(asset_class, field_path) {
|
|
611
|
+
const table = getAssetClassDefaults(asset_class);
|
|
612
|
+
return table?.fields[field_path] ?? null;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* List the field paths for which an asset class publishes defaults. Useful for
|
|
616
|
+
* the refinement engine to enumerate candidate inputs.
|
|
617
|
+
*/
|
|
618
|
+
export function listDefaultedFields(asset_class) {
|
|
619
|
+
const table = getAssetClassDefaults(asset_class);
|
|
620
|
+
return table ? Object.keys(table.fields) : [];
|
|
621
|
+
}
|
|
622
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type DerivedKind = 'currency' | 'count' | 'rate' | 'psf';
|
|
2
|
+
export interface DerivedField {
|
|
3
|
+
/** Dot-path inside the block content where this total is stored. */
|
|
4
|
+
path: string;
|
|
5
|
+
label: string;
|
|
6
|
+
kind: DerivedKind;
|
|
7
|
+
value: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function roundByKind(value: number, kind: DerivedKind): number;
|
|
10
|
+
/** Accumulates DerivedFields, silently dropping any non-finite result so partial
|
|
11
|
+
* data never writes NaN into the file. */
|
|
12
|
+
export declare function collector(): {
|
|
13
|
+
fields: DerivedField[];
|
|
14
|
+
add(path: string, label: string, kind: DerivedKind, value: number | null): void;
|
|
15
|
+
};
|
|
16
|
+
export declare const numOrNull: (v: unknown) => number | null;
|
|
17
|
+
//# sourceMappingURL=derived.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAIpE;AAED;2CAC2C;AAC3C,wBAAgB,SAAS;;cAIX,MAAM,SAAS,MAAM,QAAQ,WAAW,SAAS,MAAM,GAAG,IAAI;EAK3E;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,OAAO,KAAG,MAAM,GAAG,IACQ,CAAC"}
|