@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.
Files changed (214) hide show
  1. package/README.md +79 -0
  2. package/dist/agents/bancroft.d.ts +32 -0
  3. package/dist/agents/bancroft.d.ts.map +1 -0
  4. package/dist/agents/bancroft.js +292 -0
  5. package/dist/agents/bancroft.js.map +1 -0
  6. package/dist/agents/schemas.d.ts +13 -0
  7. package/dist/agents/schemas.d.ts.map +1 -0
  8. package/dist/agents/schemas.js +74 -0
  9. package/dist/agents/schemas.js.map +1 -0
  10. package/dist/bindings.d.ts +85 -0
  11. package/dist/bindings.d.ts.map +1 -0
  12. package/dist/bindings.js +293 -0
  13. package/dist/bindings.js.map +1 -0
  14. package/dist/browser.d.ts +66 -0
  15. package/dist/browser.d.ts.map +1 -0
  16. package/dist/browser.js +53 -0
  17. package/dist/browser.js.map +1 -0
  18. package/dist/calc/builtins.d.ts +4 -0
  19. package/dist/calc/builtins.d.ts.map +1 -0
  20. package/dist/calc/builtins.js +329 -0
  21. package/dist/calc/builtins.js.map +1 -0
  22. package/dist/calc/dependencies.d.ts +34 -0
  23. package/dist/calc/dependencies.d.ts.map +1 -0
  24. package/dist/calc/dependencies.js +101 -0
  25. package/dist/calc/dependencies.js.map +1 -0
  26. package/dist/calc/errors.d.ts +8 -0
  27. package/dist/calc/errors.d.ts.map +1 -0
  28. package/dist/calc/errors.js +18 -0
  29. package/dist/calc/errors.js.map +1 -0
  30. package/dist/calc/evaluator.d.ts +5 -0
  31. package/dist/calc/evaluator.d.ts.map +1 -0
  32. package/dist/calc/evaluator.js +184 -0
  33. package/dist/calc/evaluator.js.map +1 -0
  34. package/dist/calc/index.d.ts +14 -0
  35. package/dist/calc/index.d.ts.map +1 -0
  36. package/dist/calc/index.js +56 -0
  37. package/dist/calc/index.js.map +1 -0
  38. package/dist/calc/parser.d.ts +32 -0
  39. package/dist/calc/parser.d.ts.map +1 -0
  40. package/dist/calc/parser.js +361 -0
  41. package/dist/calc/parser.js.map +1 -0
  42. package/dist/cascade.d.ts +85 -0
  43. package/dist/cascade.d.ts.map +1 -0
  44. package/dist/cascade.js +172 -0
  45. package/dist/cascade.js.map +1 -0
  46. package/dist/cli.d.ts +3 -0
  47. package/dist/cli.d.ts.map +1 -0
  48. package/dist/cli.js +843 -0
  49. package/dist/cli.js.map +1 -0
  50. package/dist/codec.d.ts +25 -0
  51. package/dist/codec.d.ts.map +1 -0
  52. package/dist/codec.js +62 -0
  53. package/dist/codec.js.map +1 -0
  54. package/dist/codecs.d.ts +6 -0
  55. package/dist/codecs.d.ts.map +1 -0
  56. package/dist/codecs.js +12 -0
  57. package/dist/codecs.js.map +1 -0
  58. package/dist/compactor.d.ts +11 -0
  59. package/dist/compactor.d.ts.map +1 -0
  60. package/dist/compactor.js +84 -0
  61. package/dist/compactor.js.map +1 -0
  62. package/dist/context-profiles.d.ts +30 -0
  63. package/dist/context-profiles.d.ts.map +1 -0
  64. package/dist/context-profiles.js +225 -0
  65. package/dist/context-profiles.js.map +1 -0
  66. package/dist/context.d.ts +55 -0
  67. package/dist/context.d.ts.map +1 -0
  68. package/dist/context.js +288 -0
  69. package/dist/context.js.map +1 -0
  70. package/dist/dcf.d.ts +9 -0
  71. package/dist/dcf.d.ts.map +1 -0
  72. package/dist/dcf.js +75 -0
  73. package/dist/dcf.js.map +1 -0
  74. package/dist/debt.d.ts +11 -0
  75. package/dist/debt.d.ts.map +1 -0
  76. package/dist/debt.js +85 -0
  77. package/dist/debt.js.map +1 -0
  78. package/dist/defaults.d.ts +104 -0
  79. package/dist/defaults.d.ts.map +1 -0
  80. package/dist/defaults.js +622 -0
  81. package/dist/defaults.js.map +1 -0
  82. package/dist/derived.d.ts +17 -0
  83. package/dist/derived.d.ts.map +1 -0
  84. package/dist/derived.js +29 -0
  85. package/dist/derived.js.map +1 -0
  86. package/dist/editor.d.ts +76 -0
  87. package/dist/editor.d.ts.map +1 -0
  88. package/dist/editor.js +502 -0
  89. package/dist/editor.js.map +1 -0
  90. package/dist/envelope.d.ts +51 -0
  91. package/dist/envelope.d.ts.map +1 -0
  92. package/dist/envelope.js +213 -0
  93. package/dist/envelope.js.map +1 -0
  94. package/dist/format.d.ts +60 -0
  95. package/dist/format.d.ts.map +1 -0
  96. package/dist/format.js +115 -0
  97. package/dist/format.js.map +1 -0
  98. package/dist/gaps.d.ts +62 -0
  99. package/dist/gaps.d.ts.map +1 -0
  100. package/dist/gaps.js +272 -0
  101. package/dist/gaps.js.map +1 -0
  102. package/dist/index.d.ts +75 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +47 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/init.d.ts +15 -0
  107. package/dist/init.d.ts.map +1 -0
  108. package/dist/init.js +169 -0
  109. package/dist/init.js.map +1 -0
  110. package/dist/integrity-canonical.d.ts +17 -0
  111. package/dist/integrity-canonical.d.ts.map +1 -0
  112. package/dist/integrity-canonical.js +124 -0
  113. package/dist/integrity-canonical.js.map +1 -0
  114. package/dist/integrity.d.ts +54 -0
  115. package/dist/integrity.d.ts.map +1 -0
  116. package/dist/integrity.js +244 -0
  117. package/dist/integrity.js.map +1 -0
  118. package/dist/modules.d.ts +24 -0
  119. package/dist/modules.d.ts.map +1 -0
  120. package/dist/modules.js +322 -0
  121. package/dist/modules.js.map +1 -0
  122. package/dist/negotiation.d.ts +19 -0
  123. package/dist/negotiation.d.ts.map +1 -0
  124. package/dist/negotiation.js +70 -0
  125. package/dist/negotiation.js.map +1 -0
  126. package/dist/opstatement.d.ts +9 -0
  127. package/dist/opstatement.d.ts.map +1 -0
  128. package/dist/opstatement.js +80 -0
  129. package/dist/opstatement.js.map +1 -0
  130. package/dist/packs/excel-emit.d.ts +21 -0
  131. package/dist/packs/excel-emit.d.ts.map +1 -0
  132. package/dist/packs/excel-emit.js +135 -0
  133. package/dist/packs/excel-emit.js.map +1 -0
  134. package/dist/packs/index.d.ts +13 -0
  135. package/dist/packs/index.d.ts.map +1 -0
  136. package/dist/packs/index.js +37 -0
  137. package/dist/packs/index.js.map +1 -0
  138. package/dist/packs/industrial.d.ts +3 -0
  139. package/dist/packs/industrial.d.ts.map +1 -0
  140. package/dist/packs/industrial.js +115 -0
  141. package/dist/packs/industrial.js.map +1 -0
  142. package/dist/packs/multifamily.d.ts +3 -0
  143. package/dist/packs/multifamily.d.ts.map +1 -0
  144. package/dist/packs/multifamily.js +82 -0
  145. package/dist/packs/multifamily.js.map +1 -0
  146. package/dist/packs/office.d.ts +3 -0
  147. package/dist/packs/office.d.ts.map +1 -0
  148. package/dist/packs/office.js +108 -0
  149. package/dist/packs/office.js.map +1 -0
  150. package/dist/packs/retail.d.ts +3 -0
  151. package/dist/packs/retail.d.ts.map +1 -0
  152. package/dist/packs/retail.js +115 -0
  153. package/dist/packs/retail.js.map +1 -0
  154. package/dist/packs/self-storage.d.ts +3 -0
  155. package/dist/packs/self-storage.d.ts.map +1 -0
  156. package/dist/packs/self-storage.js +105 -0
  157. package/dist/packs/self-storage.js.map +1 -0
  158. package/dist/parser.d.ts +15 -0
  159. package/dist/parser.d.ts.map +1 -0
  160. package/dist/parser.js +430 -0
  161. package/dist/parser.js.map +1 -0
  162. package/dist/protocol.d.ts +389 -0
  163. package/dist/protocol.d.ts.map +1 -0
  164. package/dist/protocol.js +714 -0
  165. package/dist/protocol.js.map +1 -0
  166. package/dist/refinement.d.ts +63 -0
  167. package/dist/refinement.d.ts.map +1 -0
  168. package/dist/refinement.js +242 -0
  169. package/dist/refinement.js.map +1 -0
  170. package/dist/renderer.d.ts +22 -0
  171. package/dist/renderer.d.ts.map +1 -0
  172. package/dist/renderer.js +478 -0
  173. package/dist/renderer.js.map +1 -0
  174. package/dist/rentroll.d.ts +21 -0
  175. package/dist/rentroll.d.ts.map +1 -0
  176. package/dist/rentroll.js +256 -0
  177. package/dist/rentroll.js.map +1 -0
  178. package/dist/report.d.ts +29 -0
  179. package/dist/report.d.ts.map +1 -0
  180. package/dist/report.js +924 -0
  181. package/dist/report.js.map +1 -0
  182. package/dist/runner.d.ts +43 -0
  183. package/dist/runner.d.ts.map +1 -0
  184. package/dist/runner.js +288 -0
  185. package/dist/runner.js.map +1 -0
  186. package/dist/sourcesuses.d.ts +14 -0
  187. package/dist/sourcesuses.d.ts.map +1 -0
  188. package/dist/sourcesuses.js +63 -0
  189. package/dist/sourcesuses.js.map +1 -0
  190. package/dist/types.d.ts +248 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +15 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/uwcsv.d.ts +23 -0
  195. package/dist/uwcsv.d.ts.map +1 -0
  196. package/dist/uwcsv.js +877 -0
  197. package/dist/uwcsv.js.map +1 -0
  198. package/dist/uwjson.d.ts +19 -0
  199. package/dist/uwjson.d.ts.map +1 -0
  200. package/dist/uwjson.js +61 -0
  201. package/dist/uwjson.js.map +1 -0
  202. package/dist/uwxml.d.ts +18 -0
  203. package/dist/uwxml.d.ts.map +1 -0
  204. package/dist/uwxml.js +297 -0
  205. package/dist/uwxml.js.map +1 -0
  206. package/dist/validator.d.ts +35 -0
  207. package/dist/validator.d.ts.map +1 -0
  208. package/dist/validator.js +553 -0
  209. package/dist/validator.js.map +1 -0
  210. package/dist/valuation.d.ts +9 -0
  211. package/dist/valuation.d.ts.map +1 -0
  212. package/dist/valuation.js +34 -0
  213. package/dist/valuation.js.map +1 -0
  214. package/package.json +58 -0
@@ -0,0 +1,115 @@
1
+ // Canonical retail calc pack.
2
+ //
3
+ // Single source of truth for the retail derived metrics. Consumed by the web
4
+ // editor (via @uwmd/core/browser), the @uwmd/excel converter (via
5
+ // emitExcelFormula), conformance tests, and any future asset-class viewer.
6
+ // Add a metric here once and every tool picks it up.
7
+ //
8
+ // Each formula is a Tier-3 safe expression evaluable by `evaluateCalc()`
9
+ // against a parsed .uw.md file. Field paths reference the canonical retail
10
+ // schema (see UW_FORMAT_SPEC §4 and the Cactus Crossing example).
11
+ //
12
+ // Retail measures size in gross leasable area (`property.gross_leasable_area`)
13
+ // and occupancy in GLA (`rent_roll.occupied_gla` / `total_gla`). It adds an
14
+ // `expense_recovery_ratio` metric distinctive to NNN structures — the share of
15
+ // operating expenses recovered from tenants via reimbursements.
16
+ export const RETAIL_PACK = {
17
+ manifest_version: '1',
18
+ id: 'org.uwmd.pack.retail',
19
+ name: 'Retail Starter Pack',
20
+ version: '1.0.0',
21
+ description: 'Twelve derived metrics for retail underwriting: cap rate, LTV, LTC, DSCR, debt yield, $/sqft, loan/sqft, NOI/sqft, expense ratio, expense recovery ratio, cash-on-cash, occupancy.',
22
+ authors: ['UW Markdown Working Group'],
23
+ license: 'MIT',
24
+ requires_protocol: '^1.0.0',
25
+ requires_format: '^1.1.0',
26
+ requires_tier: 'tier-3-calc-host',
27
+ asset_classes: ['retail'],
28
+ calculations: [
29
+ {
30
+ id: 'cap_rate',
31
+ label: 'Cap Rate',
32
+ formula: 'noi_model.net_operating_income / valuation.purchase_price',
33
+ unit: '%',
34
+ deterministic: true,
35
+ },
36
+ {
37
+ id: 'ltv',
38
+ label: 'LTV',
39
+ formula: 'debt_structure.loan_amount / valuation.purchase_price',
40
+ unit: '%',
41
+ deterministic: true,
42
+ },
43
+ {
44
+ id: 'ltc',
45
+ label: 'LTC',
46
+ formula: 'debt_structure.loan_amount / sources_uses.uses.total',
47
+ unit: '%',
48
+ deterministic: true,
49
+ },
50
+ {
51
+ id: 'dscr',
52
+ label: 'DSCR',
53
+ formula: 'noi_model.net_operating_income / debt_structure.annual_debt_service',
54
+ unit: 'x',
55
+ deterministic: true,
56
+ },
57
+ {
58
+ id: 'debt_yield',
59
+ label: 'Debt Yield',
60
+ formula: 'noi_model.net_operating_income / debt_structure.loan_amount',
61
+ unit: '%',
62
+ deterministic: true,
63
+ },
64
+ {
65
+ id: 'price_per_sqft',
66
+ label: 'Price / SqFt',
67
+ formula: 'valuation.purchase_price / property.gross_leasable_area',
68
+ unit: '$',
69
+ deterministic: true,
70
+ },
71
+ {
72
+ id: 'loan_per_sqft',
73
+ label: 'Loan / SqFt',
74
+ formula: 'debt_structure.loan_amount / property.gross_leasable_area',
75
+ unit: '$',
76
+ deterministic: true,
77
+ },
78
+ {
79
+ id: 'noi_per_sqft',
80
+ label: 'NOI / SqFt',
81
+ formula: 'noi_model.net_operating_income / property.gross_leasable_area',
82
+ unit: '$',
83
+ deterministic: true,
84
+ },
85
+ {
86
+ id: 'expense_ratio',
87
+ label: 'Operating Expense Ratio',
88
+ formula: 'noi_model.expenses.total_operating_expenses / noi_model.income.effective_gross_income',
89
+ unit: '%',
90
+ deterministic: true,
91
+ },
92
+ {
93
+ id: 'expense_recovery_ratio',
94
+ label: 'Expense Recovery Ratio',
95
+ formula: 'noi_model.income.expense_reimbursements / noi_model.expenses.total_operating_expenses',
96
+ unit: '%',
97
+ deterministic: true,
98
+ },
99
+ {
100
+ id: 'cash_on_cash',
101
+ label: 'Cash-on-Cash',
102
+ formula: '(noi_model.net_operating_income - debt_structure.annual_debt_service) / sources_uses.sources.sponsor_equity',
103
+ unit: '%',
104
+ deterministic: true,
105
+ },
106
+ {
107
+ id: 'occupancy',
108
+ label: 'Occupancy',
109
+ formula: 'rent_roll.occupied_gla / rent_roll.total_gla',
110
+ unit: '%',
111
+ deterministic: true,
112
+ },
113
+ ],
114
+ };
115
+ //# sourceMappingURL=retail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retail.js","sourceRoot":"","sources":["../../src/packs/retail.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,6EAA6E;AAC7E,kEAAkE;AAClE,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,kEAAkE;AAClE,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,gEAAgE;AAIhE,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,gBAAgB,EAAE,GAAG;IACrB,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,oLAAoL;IACtL,OAAO,EAAE,CAAC,2BAA2B,CAAC;IACtC,OAAO,EAAE,KAAK;IACd,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,kBAAkB;IACjC,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE;QACZ;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,uDAAuD;YAChE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,qEAAqE;YAC9E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,yDAAyD;YAClE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,wBAAwB;YAC5B,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,cAAc;YACrB,OAAO,EACL,6GAA6G;YAC/G,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,8CAA8C;YACvD,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ModuleManifest } from '../protocol.js';
2
+ export declare const SELF_STORAGE_PACK: ModuleManifest;
3
+ //# sourceMappingURL=self-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-storage.d.ts","sourceRoot":"","sources":["../../src/packs/self-storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAE,cAqG/B,CAAC"}
@@ -0,0 +1,105 @@
1
+ // Canonical self-storage calc pack.
2
+ //
3
+ // Single source of truth for self-storage derived metrics. The class-specific
4
+ // fields are net rentable square feet, rentable units, and both physical and
5
+ // economic occupancy.
6
+ export const SELF_STORAGE_PACK = {
7
+ manifest_version: '1',
8
+ id: 'org.uwmd.pack.self_storage',
9
+ name: 'Self-Storage Starter Pack',
10
+ version: '1.0.0',
11
+ description: 'Twelve derived metrics for self-storage underwriting: cap rate, LTV, LTC, DSCR, debt yield, $/NRSF, loan/NRSF, NOI/NRSF, expense ratio, cash-on-cash, physical occupancy, and economic occupancy.',
12
+ authors: ['UW Markdown Working Group'],
13
+ license: 'MIT',
14
+ requires_protocol: '^1.0.0',
15
+ requires_format: '^1.1.0',
16
+ requires_tier: 'tier-3-calc-host',
17
+ asset_classes: ['self_storage'],
18
+ calculations: [
19
+ {
20
+ id: 'cap_rate',
21
+ label: 'Cap Rate',
22
+ formula: 'noi_model.net_operating_income / valuation.purchase_price',
23
+ unit: '%',
24
+ deterministic: true,
25
+ },
26
+ {
27
+ id: 'ltv',
28
+ label: 'LTV',
29
+ formula: 'debt_structure.loan_amount / valuation.purchase_price',
30
+ unit: '%',
31
+ deterministic: true,
32
+ },
33
+ {
34
+ id: 'ltc',
35
+ label: 'LTC',
36
+ formula: 'debt_structure.loan_amount / sources_uses.uses.total',
37
+ unit: '%',
38
+ deterministic: true,
39
+ },
40
+ {
41
+ id: 'dscr',
42
+ label: 'DSCR',
43
+ formula: 'noi_model.net_operating_income / debt_structure.annual_debt_service',
44
+ unit: 'x',
45
+ deterministic: true,
46
+ },
47
+ {
48
+ id: 'debt_yield',
49
+ label: 'Debt Yield',
50
+ formula: 'noi_model.net_operating_income / debt_structure.loan_amount',
51
+ unit: '%',
52
+ deterministic: true,
53
+ },
54
+ {
55
+ id: 'price_per_nrsf',
56
+ label: 'Price / NRSF',
57
+ formula: 'valuation.purchase_price / property.net_rentable_square_feet',
58
+ unit: '$',
59
+ deterministic: true,
60
+ },
61
+ {
62
+ id: 'loan_per_nrsf',
63
+ label: 'Loan / NRSF',
64
+ formula: 'debt_structure.loan_amount / property.net_rentable_square_feet',
65
+ unit: '$',
66
+ deterministic: true,
67
+ },
68
+ {
69
+ id: 'noi_per_nrsf',
70
+ label: 'NOI / NRSF',
71
+ formula: 'noi_model.net_operating_income / property.net_rentable_square_feet',
72
+ unit: '$',
73
+ deterministic: true,
74
+ },
75
+ {
76
+ id: 'expense_ratio',
77
+ label: 'Operating Expense Ratio',
78
+ formula: 'noi_model.expenses.total_operating_expenses / noi_model.income.effective_gross_income',
79
+ unit: '%',
80
+ deterministic: true,
81
+ },
82
+ {
83
+ id: 'cash_on_cash',
84
+ label: 'Cash-on-Cash',
85
+ formula: '(noi_model.net_operating_income - debt_structure.annual_debt_service) / sources_uses.sources.sponsor_equity',
86
+ unit: '%',
87
+ deterministic: true,
88
+ },
89
+ {
90
+ id: 'physical_occupancy',
91
+ label: 'Physical Occupancy',
92
+ formula: 'rent_roll.occupied_units / property.rentable_units',
93
+ unit: '%',
94
+ deterministic: true,
95
+ },
96
+ {
97
+ id: 'economic_occupancy',
98
+ label: 'Economic Occupancy',
99
+ formula: 'noi_model.income.effective_gross_income / noi_model.income.gross_potential_rent',
100
+ unit: '%',
101
+ deterministic: true,
102
+ },
103
+ ],
104
+ };
105
+ //# sourceMappingURL=self-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-storage.js","sourceRoot":"","sources":["../../src/packs/self-storage.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,sBAAsB;AAItB,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,gBAAgB,EAAE,GAAG;IACrB,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,2BAA2B;IACjC,OAAO,EAAE,OAAO;IAChB,WAAW,EACT,mMAAmM;IACrM,OAAO,EAAE,CAAC,2BAA2B,CAAC;IACtC,OAAO,EAAE,KAAK;IACd,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,kBAAkB;IACjC,aAAa,EAAE,CAAC,cAAc,CAAC;IAC/B,YAAY,EAAE;QACZ;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,uDAAuD;YAChE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,qEAAqE;YAC9E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,8DAA8D;YACvE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,gEAAgE;YACzE,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,oEAAoE;YAC7E,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,yBAAyB;YAChC,OAAO,EACL,uFAAuF;YACzF,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,cAAc;YACrB,OAAO,EACL,6GAA6G;YAC/G,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,oDAAoD;YAC7D,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,iFAAiF;YAC1F,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,IAAI;SACpB;KACF;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { UWBlock, ParsedUWFile, ParseOptions } from './types.js';
2
+ export declare class UWMDParseError extends Error {
3
+ readonly code: string;
4
+ readonly line?: number;
5
+ readonly feature?: string;
6
+ constructor(code: string, message: string, opts?: {
7
+ line?: number;
8
+ feature?: string;
9
+ });
10
+ }
11
+ export declare function parseUWFile(content: string, options?: ParseOptions): ParsedUWFile;
12
+ export declare function getSection(parsed: ParsedUWFile, sectionId: string): UWBlock | null;
13
+ export declare function getSectionVariant(parsed: ParsedUWFile, sectionId: string, variant: string): UWBlock | null;
14
+ export declare function deepGet(obj: unknown, path: string): unknown;
15
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,OAAO,EAIP,YAAY,EAEZ,YAAY,EAEb,MAAM,YAAY,CAAC;AAsDpB,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;CAO1F;AAmJD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,YAAY,CAqHrF;AAwGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKlF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,GAAG,IAAI,CAIhB;AAMD,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3D"}