@uwmd/core 1.8.0 → 1.10.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/dist/browser.d.ts +11 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -2
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +121 -8
- package/dist/cli.js.map +1 -1
- package/dist/editor.d.ts +18 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +55 -1
- package/dist/editor.js.map +1 -1
- package/dist/format-rules.d.ts +46 -0
- package/dist/format-rules.d.ts.map +1 -0
- package/dist/format-rules.js +134 -0
- package/dist/format-rules.js.map +1 -0
- package/dist/format.d.ts +4 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +34 -4
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/integrity-canonical.d.ts +20 -0
- package/dist/integrity-canonical.d.ts.map +1 -1
- package/dist/integrity-canonical.js +66 -0
- package/dist/integrity-canonical.js.map +1 -1
- package/dist/integrity.d.ts +10 -1
- package/dist/integrity.d.ts.map +1 -1
- package/dist/integrity.js +22 -6
- package/dist/integrity.js.map +1 -1
- package/dist/lease-up.d.ts +134 -0
- package/dist/lease-up.d.ts.map +1 -0
- package/dist/lease-up.js +196 -0
- package/dist/lease-up.js.map +1 -0
- package/dist/meta-shape.d.ts +96 -0
- package/dist/meta-shape.d.ts.map +1 -0
- package/dist/meta-shape.js +211 -0
- package/dist/meta-shape.js.map +1 -0
- package/dist/migrate-to-v2.d.ts +42 -0
- package/dist/migrate-to-v2.d.ts.map +1 -0
- package/dist/migrate-to-v2.js +0 -0
- package/dist/migrate-to-v2.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +14 -1
- package/dist/parser.js.map +1 -1
- package/dist/protocol.d.ts +152 -4
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +330 -2
- package/dist/protocol.js.map +1 -1
- package/dist/renderer.d.ts +10 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +72 -8
- package/dist/renderer.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validator.d.ts +3 -48
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +194 -64
- package/dist/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +2 -2
package/dist/integrity.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MetaShape } from './meta-shape.js';
|
|
1
2
|
import type { ParsedUWFile, UWBlock, UWBlockSignature } from './types.js';
|
|
2
3
|
import type { EditPolicy } from './protocol.js';
|
|
3
4
|
/**
|
|
@@ -20,8 +21,16 @@ export declare function sha256BytesHex(bytes: Uint8Array): Promise<string>;
|
|
|
20
21
|
* Compute the content_hash for a block. Strips the block's own
|
|
21
22
|
* `_meta.content_hash` and `_meta.signature` before hashing (handled by the
|
|
22
23
|
* canonicalizer).
|
|
24
|
+
*
|
|
25
|
+
* Canonicalization is versioned by the file's `uw_version` (RFC 0009):
|
|
26
|
+
* `shape: 'v1'` (the default) is the frozen 1.x rule; `shape: 'v2'` is the
|
|
27
|
+
* normalize-then-hash rule for `uw_version: "2.0"` files — the block content
|
|
28
|
+
* is reshaped to the canonical nested form first, so both accepted parser
|
|
29
|
+
* shapes yield the identical digest.
|
|
23
30
|
*/
|
|
24
|
-
export declare function computeBlockHash(block: UWBlock
|
|
31
|
+
export declare function computeBlockHash(block: UWBlock, options?: {
|
|
32
|
+
shape?: MetaShape;
|
|
33
|
+
}): Promise<string>;
|
|
25
34
|
export type IntegrityCode = 'INT-01' | 'INT-02' | 'INT-03' | 'INT-04' | 'INT-05' | 'INT-06' | 'INT-07' | 'INT-08' | 'POL-01' | 'POL-02';
|
|
26
35
|
export interface IntegrityIssue {
|
|
27
36
|
code: IntegrityCode;
|
package/dist/integrity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
package/dist/integrity.js
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
// - SHA-256 implementation is split between Node (`createHash`) and Web
|
|
10
10
|
// Crypto (`crypto.subtle`). The browser entry point binds the latter via
|
|
11
11
|
// subpath export when adopters import from `@uwmd/core/browser`.
|
|
12
|
-
import { canonicalize, canonicalizeExact } from './integrity-canonical.js';
|
|
12
|
+
import { canonicalize, canonicalizeExact, canonicalizeV2 } from './integrity-canonical.js';
|
|
13
|
+
import { canonicalV2BlockContent, isV2File } from './meta-shape.js';
|
|
13
14
|
import { UW_SIGNATURE_ALGORITHMS } from './types.js';
|
|
14
15
|
import { BUILTIN_EDIT_POLICIES, parseActorSource } from './protocol.js';
|
|
15
16
|
// ─── Hashing ─────────────────────────────────────────────────────────────────
|
|
@@ -57,11 +58,21 @@ function bytesToHex(bytes) {
|
|
|
57
58
|
* Compute the content_hash for a block. Strips the block's own
|
|
58
59
|
* `_meta.content_hash` and `_meta.signature` before hashing (handled by the
|
|
59
60
|
* canonicalizer).
|
|
61
|
+
*
|
|
62
|
+
* Canonicalization is versioned by the file's `uw_version` (RFC 0009):
|
|
63
|
+
* `shape: 'v1'` (the default) is the frozen 1.x rule; `shape: 'v2'` is the
|
|
64
|
+
* normalize-then-hash rule for `uw_version: "2.0"` files — the block content
|
|
65
|
+
* is reshaped to the canonical nested form first, so both accepted parser
|
|
66
|
+
* shapes yield the identical digest.
|
|
60
67
|
*/
|
|
61
|
-
export async function computeBlockHash(block) {
|
|
68
|
+
export async function computeBlockHash(block, options = {}) {
|
|
62
69
|
// The canonical scope is the block CONTENT including meta, since meta
|
|
63
|
-
// carries the cascade-relevant provenance. The
|
|
64
|
-
//
|
|
70
|
+
// carries the cascade-relevant provenance. The excluded keys are stripped
|
|
71
|
+
// by the canonicalizer.
|
|
72
|
+
if (options.shape === 'v2') {
|
|
73
|
+
const normalized = canonicalV2BlockContent({ ...block.content, _meta: block.meta });
|
|
74
|
+
return sha256TextHex(canonicalizeV2(normalized));
|
|
75
|
+
}
|
|
65
76
|
return sha256Hex({ ...block.content, _meta: block.meta });
|
|
66
77
|
}
|
|
67
78
|
/**
|
|
@@ -132,6 +143,9 @@ export async function verifyChain(parsed, options = {}) {
|
|
|
132
143
|
const issues = [];
|
|
133
144
|
let chainsWithHashes = 0;
|
|
134
145
|
let chainsVerified = 0;
|
|
146
|
+
// Canonicalization is versioned by the file's own frontmatter (RFC 0009):
|
|
147
|
+
// digests in a `uw_version: "2.0"` file recompute under the v2 rule.
|
|
148
|
+
const shape = isV2File(parsed.frontmatter) ? 'v2' : 'v1';
|
|
135
149
|
for (const sectionId of Object.keys(parsed.sections)) {
|
|
136
150
|
// Build the chain: prior (superseded) blocks first, then current head.
|
|
137
151
|
const prior = parsed.superseded[sectionId] ?? [];
|
|
@@ -160,7 +174,7 @@ export async function verifyChain(parsed, options = {}) {
|
|
|
160
174
|
continue;
|
|
161
175
|
}
|
|
162
176
|
// INT-04: hash mismatch
|
|
163
|
-
const recomputed = await computeBlockHash(block);
|
|
177
|
+
const recomputed = await computeBlockHash(block, { shape });
|
|
164
178
|
if (recomputed !== stamped) {
|
|
165
179
|
issues.push({
|
|
166
180
|
code: 'INT-04',
|
|
@@ -246,7 +260,9 @@ async function verifySignatures(parsed, issues, options) {
|
|
|
246
260
|
// as INT-04, and the escalation from warning to error is the point: on an
|
|
247
261
|
// unsigned block a drifted hash is a bookkeeping slip, but on a signed one
|
|
248
262
|
// it means the content in front of you is not the content anybody signed.
|
|
249
|
-
const recomputed = await computeBlockHash(block
|
|
263
|
+
const recomputed = await computeBlockHash(block, {
|
|
264
|
+
shape: isV2File(parsed.frontmatter) ? 'v2' : 'v1',
|
|
265
|
+
});
|
|
250
266
|
if (recomputed !== block.meta.content_hash) {
|
|
251
267
|
issues.push({
|
|
252
268
|
code: 'INT-07',
|
package/dist/integrity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ParsedUWFile } from './types.js';
|
|
2
|
+
/** How the schedule models the trajectory. Closed and non-extensible. */
|
|
3
|
+
export type LeaseUpModelType = 'natural_turnover' | 'absorption_curve';
|
|
4
|
+
/** Period cadence, uniform per schedule (§4.25 period grammar). */
|
|
5
|
+
export type LeaseUpGranularity = 'monthly' | 'quarterly';
|
|
6
|
+
/**
|
|
7
|
+
* One period of the lease-up trajectory. All rates are fractions (0.18 = 18%),
|
|
8
|
+
* all dollar figures period totals. Only `period` is required; a period that
|
|
9
|
+
* omits a cash-flow component makes the stated `net_cash_flow` unverifiable
|
|
10
|
+
* for that row, never wrong.
|
|
11
|
+
*/
|
|
12
|
+
export interface LeaseUpPeriod {
|
|
13
|
+
/** `YYYY-Qn` (quarterly) or `YYYY-MM` (monthly), per `period_granularity`. */
|
|
14
|
+
period: string;
|
|
15
|
+
occupied_sf?: number | null;
|
|
16
|
+
leased_sf?: number | null;
|
|
17
|
+
in_place_rent_psf?: number | null;
|
|
18
|
+
market_rent_psf?: number | null;
|
|
19
|
+
vacancy_rate?: number | null;
|
|
20
|
+
rent_revenue?: number | null;
|
|
21
|
+
concessions?: number | null;
|
|
22
|
+
ti_lc_capex?: number | null;
|
|
23
|
+
net_cash_flow?: number | null;
|
|
24
|
+
}
|
|
25
|
+
/** The assumption set driving the schedule. Deal thesis, never defaulted. */
|
|
26
|
+
export interface LeaseUpAssumptions {
|
|
27
|
+
monthly_turnover_rate?: number | null;
|
|
28
|
+
market_rent_psf_at_stabilization?: number | null;
|
|
29
|
+
vacancy_during_lease_up?: number | null;
|
|
30
|
+
concession_months_per_lease?: number | null;
|
|
31
|
+
tenant_improvement_psf?: number | null;
|
|
32
|
+
leasing_commission_rate?: number | null;
|
|
33
|
+
}
|
|
34
|
+
/** The stated endpoint the trajectory claims to reach. */
|
|
35
|
+
export interface LeaseUpStabilizedSummary {
|
|
36
|
+
occupied_sf?: number | null;
|
|
37
|
+
occupancy_rate?: number | null;
|
|
38
|
+
annualized_egi?: number | null;
|
|
39
|
+
annualized_noi?: number | null;
|
|
40
|
+
}
|
|
41
|
+
/** The `lease_up_schedule` section content (UW_FORMAT_SPEC §4.25). */
|
|
42
|
+
export interface LeaseUpSchedule {
|
|
43
|
+
model_type: LeaseUpModelType;
|
|
44
|
+
period_granularity: LeaseUpGranularity;
|
|
45
|
+
stabilization_target?: string | null;
|
|
46
|
+
assumptions?: LeaseUpAssumptions | null;
|
|
47
|
+
schedule: LeaseUpPeriod[];
|
|
48
|
+
stabilized_summary?: LeaseUpStabilizedSummary | null;
|
|
49
|
+
}
|
|
50
|
+
export type LeaseUpVerdict = 'verified' | 'failed' | 'unverifiable';
|
|
51
|
+
export type LeaseUpIssueCode =
|
|
52
|
+
/** A period's stated net_cash_flow disagrees with its stated components. */
|
|
53
|
+
'LU-NCF-DISAGREES'
|
|
54
|
+
/** A stabilized_summary figure disagrees with the final period. */
|
|
55
|
+
| 'LU-SUMMARY-DISAGREES'
|
|
56
|
+
/** A stated figure reads an input the document does not supply — undecided, never zero. */
|
|
57
|
+
| 'LU-UNEVALUABLE';
|
|
58
|
+
export interface LeaseUpIssue {
|
|
59
|
+
code: LeaseUpIssueCode;
|
|
60
|
+
severity: 'failure' | 'indeterminate';
|
|
61
|
+
message: string;
|
|
62
|
+
/** The period this issue anchors to, when row-level. */
|
|
63
|
+
period?: string;
|
|
64
|
+
expected?: string;
|
|
65
|
+
actual?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface LeaseUpVerification {
|
|
68
|
+
verdict: LeaseUpVerdict;
|
|
69
|
+
issues: LeaseUpIssue[];
|
|
70
|
+
}
|
|
71
|
+
/** The document-level inputs the summary figures divide. */
|
|
72
|
+
export interface LeaseUpContext {
|
|
73
|
+
/**
|
|
74
|
+
* The occupancy denominator in square feet, resolved through the Protocol
|
|
75
|
+
* §XIII size-intensive registry. `null` when the deal's class has no
|
|
76
|
+
* sqft-basis primary size or the document does not state it — which makes
|
|
77
|
+
* `occupancy_rate` `unverifiable`, never a guess.
|
|
78
|
+
*/
|
|
79
|
+
total_sf: number | null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The decimal quantum each figure family is compared at (protocol §VIII.5
|
|
83
|
+
* posture: both sides quantize at the same boundary). Currency to cents; rates
|
|
84
|
+
* to 4 places, like the capital-stack sizing table. Exported so an emitting
|
|
85
|
+
* surface quantizes where this verifier does rather than keeping its own copy.
|
|
86
|
+
*/
|
|
87
|
+
export declare const LEASE_UP_VERIFY_DECIMALS: Readonly<{
|
|
88
|
+
readonly currency: 2;
|
|
89
|
+
readonly rate: 4;
|
|
90
|
+
readonly sf: 2;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* The relative tolerance CC-15 allows between the schedule's final period /
|
|
94
|
+
* stabilized summary and `noi_model`'s stabilized figures (2%). Deliberate,
|
|
95
|
+
* not softness: unlike CC-01 (one number restated in two places, exact), the
|
|
96
|
+
* trajectory endpoint and the stabilized-year projection are two different
|
|
97
|
+
* models of stabilization, and demanding exact agreement would force
|
|
98
|
+
* producers to hand-tune one to echo the other — destroying the
|
|
99
|
+
* independent-model signal the check exists to read (RFC 0008).
|
|
100
|
+
*/
|
|
101
|
+
export declare const LEASE_UP_STABILIZED_TOLERANCE = 0.02;
|
|
102
|
+
/**
|
|
103
|
+
* Recompute every stated aggregate and report a three-state verdict:
|
|
104
|
+
* - a figure disagrees beyond its quantum → `failed`
|
|
105
|
+
* - a figure reads an input the document does not supply → `unverifiable`
|
|
106
|
+
* - otherwise → `verified`
|
|
107
|
+
*
|
|
108
|
+
* The closed recompute vocabulary (§4.25):
|
|
109
|
+
* - per period: `net_cash_flow` = `rent_revenue + concessions + ti_lc_capex`
|
|
110
|
+
* (all stated; a missing component is `unverifiable` for that row)
|
|
111
|
+
* - `stabilized_summary.occupied_sf` against the final period's
|
|
112
|
+
* - `stabilized_summary.occupancy_rate` = final `occupied_sf` ÷ `ctx.total_sf`
|
|
113
|
+
*
|
|
114
|
+
* A `verified` schedule means the stated figures follow deterministically from
|
|
115
|
+
* the stated rows. It does not mean the trajectory is achievable.
|
|
116
|
+
*/
|
|
117
|
+
export declare function verifyLeaseUpSchedule(schedule: LeaseUpSchedule, ctx: LeaseUpContext): LeaseUpVerification;
|
|
118
|
+
/**
|
|
119
|
+
* Pull the occupancy denominator from a parsed document through the Protocol
|
|
120
|
+
* §XIII size-intensive registry — which is what the registry exists for. Only
|
|
121
|
+
* a `sqft`-unit primary size is a valid denominator for `occupied_sf`; a
|
|
122
|
+
* keys/units/beds class resolves to `null`, which makes `occupancy_rate`
|
|
123
|
+
* `unverifiable` rather than dimensionally wrong. A multifamily document that
|
|
124
|
+
* states its secondary `total_nra_sqft` supplies the denominator that way.
|
|
125
|
+
*/
|
|
126
|
+
export declare function leaseUpContext(parsed: ParsedUWFile): LeaseUpContext;
|
|
127
|
+
/**
|
|
128
|
+
* A period's ordinal on its granularity's axis, or `null` when the string is
|
|
129
|
+
* outside the grammar for that granularity. Consecutive periods differ by
|
|
130
|
+
* exactly 1, which is what makes the validator's gap-free check (`LU-02`) a
|
|
131
|
+
* subtraction rather than a calendar library.
|
|
132
|
+
*/
|
|
133
|
+
export declare function leaseUpPeriodOrdinal(period: string, granularity: LeaseUpGranularity): number | null;
|
|
134
|
+
//# sourceMappingURL=lease-up.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease-up.d.ts","sourceRoot":"","sources":["../src/lease-up.ts"],"names":[],"mappings":"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"}
|
package/dist/lease-up.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// Lease-up schedule — state-and-verify trajectory (RFC 0008, UW_FORMAT_SPEC §4.25).
|
|
2
|
+
//
|
|
3
|
+
// A deal states the period-by-period path from current to stabilized rents —
|
|
4
|
+
// natural turnover on a value-add, or an absorption curve on ground-up — plus
|
|
5
|
+
// the assumption set that drives it and a stabilized summary. This module
|
|
6
|
+
// recomputes each stated aggregate over a FIXED, CLOSED vocabulary and reports
|
|
7
|
+
// a three-state verdict, the same shape as `verifyCapitalStack` and
|
|
8
|
+
// `verifyRollup` (RFC 0026 pattern).
|
|
9
|
+
//
|
|
10
|
+
// This deliberately does NOT touch the Tier-3 calc engine. The schedule is
|
|
11
|
+
// stated data, not formulas: a variable-length period array is not addressable
|
|
12
|
+
// by a pack formula (no iteration, RFC 0019 §1), but a deterministic TypeScript
|
|
13
|
+
// verifier walks it directly. Structural rules (period grammar, monotonicity,
|
|
14
|
+
// empty schedules) are validator errors (`LU-01`…`LU-04`, validator.ts), not
|
|
15
|
+
// verifier findings — structure is validation, arithmetic is verification.
|
|
16
|
+
// Browser-safe; performs no I/O.
|
|
17
|
+
import { getSection, deepGet } from './parser.js';
|
|
18
|
+
import { resolveDealSize } from './protocol.js';
|
|
19
|
+
// ─── Quantization ────────────────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* The decimal quantum each figure family is compared at (protocol §VIII.5
|
|
22
|
+
* posture: both sides quantize at the same boundary). Currency to cents; rates
|
|
23
|
+
* to 4 places, like the capital-stack sizing table. Exported so an emitting
|
|
24
|
+
* surface quantizes where this verifier does rather than keeping its own copy.
|
|
25
|
+
*/
|
|
26
|
+
export const LEASE_UP_VERIFY_DECIMALS = Object.freeze({
|
|
27
|
+
currency: 2,
|
|
28
|
+
rate: 4,
|
|
29
|
+
sf: 2,
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* The relative tolerance CC-15 allows between the schedule's final period /
|
|
33
|
+
* stabilized summary and `noi_model`'s stabilized figures (2%). Deliberate,
|
|
34
|
+
* not softness: unlike CC-01 (one number restated in two places, exact), the
|
|
35
|
+
* trajectory endpoint and the stabilized-year projection are two different
|
|
36
|
+
* models of stabilization, and demanding exact agreement would force
|
|
37
|
+
* producers to hand-tune one to echo the other — destroying the
|
|
38
|
+
* independent-model signal the check exists to read (RFC 0008).
|
|
39
|
+
*/
|
|
40
|
+
export const LEASE_UP_STABILIZED_TOLERANCE = 0.02;
|
|
41
|
+
function roundTo(value, decimals) {
|
|
42
|
+
const f = 10 ** decimals;
|
|
43
|
+
return Math.round(value * f) / f;
|
|
44
|
+
}
|
|
45
|
+
function isNum(v) {
|
|
46
|
+
return typeof v === 'number' && Number.isFinite(v);
|
|
47
|
+
}
|
|
48
|
+
// ─── Verification ────────────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Recompute every stated aggregate and report a three-state verdict:
|
|
51
|
+
* - a figure disagrees beyond its quantum → `failed`
|
|
52
|
+
* - a figure reads an input the document does not supply → `unverifiable`
|
|
53
|
+
* - otherwise → `verified`
|
|
54
|
+
*
|
|
55
|
+
* The closed recompute vocabulary (§4.25):
|
|
56
|
+
* - per period: `net_cash_flow` = `rent_revenue + concessions + ti_lc_capex`
|
|
57
|
+
* (all stated; a missing component is `unverifiable` for that row)
|
|
58
|
+
* - `stabilized_summary.occupied_sf` against the final period's
|
|
59
|
+
* - `stabilized_summary.occupancy_rate` = final `occupied_sf` ÷ `ctx.total_sf`
|
|
60
|
+
*
|
|
61
|
+
* A `verified` schedule means the stated figures follow deterministically from
|
|
62
|
+
* the stated rows. It does not mean the trajectory is achievable.
|
|
63
|
+
*/
|
|
64
|
+
export function verifyLeaseUpSchedule(schedule, ctx) {
|
|
65
|
+
const issues = [];
|
|
66
|
+
const rows = schedule.schedule ?? [];
|
|
67
|
+
for (const row of rows) {
|
|
68
|
+
if (!isNum(row.net_cash_flow))
|
|
69
|
+
continue; // nothing stated, nothing to verify
|
|
70
|
+
if (!isNum(row.rent_revenue) || !isNum(row.concessions) || !isNum(row.ti_lc_capex)) {
|
|
71
|
+
issues.push({
|
|
72
|
+
code: 'LU-UNEVALUABLE',
|
|
73
|
+
severity: 'indeterminate',
|
|
74
|
+
period: row.period,
|
|
75
|
+
message: `Period ${row.period} states net_cash_flow but omits a component (rent_revenue, concessions, ti_lc_capex), so it cannot be verified.`,
|
|
76
|
+
});
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const dp = LEASE_UP_VERIFY_DECIMALS.currency;
|
|
80
|
+
const recomputed = roundTo(row.rent_revenue + row.concessions + row.ti_lc_capex, dp);
|
|
81
|
+
const stated = roundTo(row.net_cash_flow, dp);
|
|
82
|
+
if (stated !== recomputed) {
|
|
83
|
+
issues.push({
|
|
84
|
+
code: 'LU-NCF-DISAGREES',
|
|
85
|
+
severity: 'failure',
|
|
86
|
+
period: row.period,
|
|
87
|
+
message: `Period ${row.period} states net_cash_flow ${row.net_cash_flow} but the components sum to ${recomputed}.`,
|
|
88
|
+
expected: String(stated),
|
|
89
|
+
actual: String(recomputed),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const summary = schedule.stabilized_summary;
|
|
94
|
+
const final = rows.length > 0 ? rows[rows.length - 1] : undefined;
|
|
95
|
+
if (summary && final) {
|
|
96
|
+
if (isNum(summary.occupied_sf)) {
|
|
97
|
+
if (!isNum(final.occupied_sf)) {
|
|
98
|
+
issues.push({
|
|
99
|
+
code: 'LU-UNEVALUABLE',
|
|
100
|
+
severity: 'indeterminate',
|
|
101
|
+
message: `stabilized_summary states occupied_sf but the final period (${final.period}) does not, so it cannot be verified.`,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const dp = LEASE_UP_VERIFY_DECIMALS.sf;
|
|
106
|
+
const stated = roundTo(summary.occupied_sf, dp);
|
|
107
|
+
const recomputed = roundTo(final.occupied_sf, dp);
|
|
108
|
+
if (stated !== recomputed) {
|
|
109
|
+
issues.push({
|
|
110
|
+
code: 'LU-SUMMARY-DISAGREES',
|
|
111
|
+
severity: 'failure',
|
|
112
|
+
message: `stabilized_summary.occupied_sf states ${summary.occupied_sf} but the final period (${final.period}) states ${final.occupied_sf}.`,
|
|
113
|
+
expected: String(stated),
|
|
114
|
+
actual: String(recomputed),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (isNum(summary.occupancy_rate)) {
|
|
120
|
+
const sf = isNum(final.occupied_sf) ? final.occupied_sf : summary.occupied_sf;
|
|
121
|
+
if (!isNum(sf) || ctx.total_sf === null || ctx.total_sf === 0) {
|
|
122
|
+
issues.push({
|
|
123
|
+
code: 'LU-UNEVALUABLE',
|
|
124
|
+
severity: 'indeterminate',
|
|
125
|
+
message: 'stabilized_summary states occupancy_rate but no square-foot denominator resolves through the size-intensive registry (Protocol §XIII), so it cannot be verified.',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const dp = LEASE_UP_VERIFY_DECIMALS.rate;
|
|
130
|
+
const stated = roundTo(summary.occupancy_rate, dp);
|
|
131
|
+
const recomputed = roundTo(sf / ctx.total_sf, dp);
|
|
132
|
+
if (stated !== recomputed) {
|
|
133
|
+
issues.push({
|
|
134
|
+
code: 'LU-SUMMARY-DISAGREES',
|
|
135
|
+
severity: 'failure',
|
|
136
|
+
message: `stabilized_summary.occupancy_rate states ${summary.occupancy_rate} but ${sf} ÷ ${ctx.total_sf} recomputes to ${recomputed}.`,
|
|
137
|
+
expected: String(stated),
|
|
138
|
+
actual: String(recomputed),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (issues.some((i) => i.severity === 'failure')) {
|
|
145
|
+
return { verdict: 'failed', issues };
|
|
146
|
+
}
|
|
147
|
+
if (issues.some((i) => i.severity === 'indeterminate')) {
|
|
148
|
+
return { verdict: 'unverifiable', issues };
|
|
149
|
+
}
|
|
150
|
+
return { verdict: 'verified', issues };
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Pull the occupancy denominator from a parsed document through the Protocol
|
|
154
|
+
* §XIII size-intensive registry — which is what the registry exists for. Only
|
|
155
|
+
* a `sqft`-unit primary size is a valid denominator for `occupied_sf`; a
|
|
156
|
+
* keys/units/beds class resolves to `null`, which makes `occupancy_rate`
|
|
157
|
+
* `unverifiable` rather than dimensionally wrong. A multifamily document that
|
|
158
|
+
* states its secondary `total_nra_sqft` supplies the denominator that way.
|
|
159
|
+
*/
|
|
160
|
+
export function leaseUpContext(parsed) {
|
|
161
|
+
const size = resolveDealSize(parsed);
|
|
162
|
+
if (size && size.unit === 'sqft')
|
|
163
|
+
return { total_sf: size.quantity };
|
|
164
|
+
// Secondary sqft fields (Protocol §XIII secondary lists) still denominate.
|
|
165
|
+
const property = getSection(parsed, 'property');
|
|
166
|
+
if (property) {
|
|
167
|
+
for (const path of ['total_nra_sqft', 'rentable_square_feet', 'net_rentable_square_feet']) {
|
|
168
|
+
const v = deepGet(property.content, path);
|
|
169
|
+
if (isNum(v) && v > 0)
|
|
170
|
+
return { total_sf: v };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { total_sf: null };
|
|
174
|
+
}
|
|
175
|
+
// ─── Period grammar (shared with the validator) ──────────────────────────────
|
|
176
|
+
const QUARTER_RE = /^(\d{4})-Q([1-4])$/;
|
|
177
|
+
const MONTH_RE = /^(\d{4})-(0[1-9]|1[0-2])$/;
|
|
178
|
+
/**
|
|
179
|
+
* A period's ordinal on its granularity's axis, or `null` when the string is
|
|
180
|
+
* outside the grammar for that granularity. Consecutive periods differ by
|
|
181
|
+
* exactly 1, which is what makes the validator's gap-free check (`LU-02`) a
|
|
182
|
+
* subtraction rather than a calendar library.
|
|
183
|
+
*/
|
|
184
|
+
export function leaseUpPeriodOrdinal(period, granularity) {
|
|
185
|
+
if (granularity === 'quarterly') {
|
|
186
|
+
const m = QUARTER_RE.exec(period);
|
|
187
|
+
if (!m)
|
|
188
|
+
return null;
|
|
189
|
+
return Number(m[1]) * 4 + (Number(m[2]) - 1);
|
|
190
|
+
}
|
|
191
|
+
const m = MONTH_RE.exec(period);
|
|
192
|
+
if (!m)
|
|
193
|
+
return null;
|
|
194
|
+
return Number(m[1]) * 12 + (Number(m[2]) - 1);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=lease-up.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease-up.js","sourceRoot":"","sources":["../src/lease-up.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { ConfidenceLevel, InheritedFrom, MarketDataRef, SourceTag, UWBlockSignature, UWFieldOverride, UWFrontmatter, UWMeta } from './types.js';
|
|
2
|
+
export interface UWMetaV2Provenance {
|
|
3
|
+
/** The actor (RFC 0031 grammar): `manual | agent/<id> | document/<id> |
|
|
4
|
+
* system/<id> | institution/<id>`. Absent only for legacy-tag blocks the
|
|
5
|
+
* shim refused to invent an actor for. */
|
|
6
|
+
source?: SourceTag;
|
|
7
|
+
/** How the value was resolved — one canonical SOURCE_TAGS member. */
|
|
8
|
+
resolution?: SourceTag;
|
|
9
|
+
actor?: string;
|
|
10
|
+
agent_id?: string | null;
|
|
11
|
+
agent_version?: string | null;
|
|
12
|
+
timestamp?: string;
|
|
13
|
+
notes?: string | null;
|
|
14
|
+
market_data_ref?: MarketDataRef;
|
|
15
|
+
inherited_from?: InheritedFrom;
|
|
16
|
+
}
|
|
17
|
+
export interface UWMetaV2Quality {
|
|
18
|
+
confidence?: ConfidenceLevel;
|
|
19
|
+
human_review_required?: boolean;
|
|
20
|
+
flags?: string[];
|
|
21
|
+
partial?: boolean;
|
|
22
|
+
provisional?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface UWMetaV2Lifecycle {
|
|
25
|
+
/** 1-based supersede-chain position. Renamed from v1 `version` to avoid
|
|
26
|
+
* colliding with frontmatter `uw_version` (RFC 0009 resolved question 1). */
|
|
27
|
+
revision: number;
|
|
28
|
+
superseded: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface UWMetaV2Integrity {
|
|
31
|
+
/** Defaults to 'sha256' when absent; 'sha256' is the only admitted value at
|
|
32
|
+
* 2.0 (RFC 0009 resolved question 2). A defaulted value is excluded from
|
|
33
|
+
* the digest; a non-default one is hashed. */
|
|
34
|
+
algorithm?: 'sha256';
|
|
35
|
+
input_hash?: string | null;
|
|
36
|
+
content_hash?: string;
|
|
37
|
+
parent_hash?: string | null;
|
|
38
|
+
signature?: UWBlockSignature;
|
|
39
|
+
}
|
|
40
|
+
export interface UWMetaV2 {
|
|
41
|
+
section?: string;
|
|
42
|
+
provenance: UWMetaV2Provenance;
|
|
43
|
+
quality: UWMetaV2Quality;
|
|
44
|
+
lifecycle: UWMetaV2Lifecycle;
|
|
45
|
+
integrity?: UWMetaV2Integrity;
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
}
|
|
48
|
+
export type MetaShape = 'v1' | 'v2';
|
|
49
|
+
/**
|
|
50
|
+
* A raw `_meta` object is v2-shaped iff it carries object-valued `provenance`
|
|
51
|
+
* AND `lifecycle` (the v2 triple minus the section key, which both shapes
|
|
52
|
+
* carry under one spelling or another). Anything else — including the empty
|
|
53
|
+
* object a block without `_meta` degrades to — reads as v1: the flat shape is
|
|
54
|
+
* the permissive default for the whole of 1.x.
|
|
55
|
+
*/
|
|
56
|
+
export declare function detectMetaShape(raw: Record<string, unknown> | undefined): MetaShape;
|
|
57
|
+
/** Major component of a `uw_version` frontmatter string; unparseable or
|
|
58
|
+
* absent means 1 (mirrors `envelope.ts`'s `?? '1.1'` default). */
|
|
59
|
+
export declare function uwVersionMajor(uwVersion: string | undefined): number;
|
|
60
|
+
/** True when the file's frontmatter declares format 2.0 or later. */
|
|
61
|
+
export declare function isV2File(frontmatter: Pick<UWFrontmatter, 'uw_version'> | undefined): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Structural reshape of a flat v1 `_meta` into the canonical v2 nested form
|
|
64
|
+
* (RFC 0009 §"Migration story"). Deterministic; applies RFC 0031's read-time
|
|
65
|
+
* interpretation first — a canonical tag in flat `source` becomes
|
|
66
|
+
* `provenance.resolution`, and `provenance.source` is left **absent, not
|
|
67
|
+
* invented**. `field_overrides` is NOT carried (it lifts to the block-level
|
|
68
|
+
* `_overrides` annotation — see `canonicalV2BlockContent`).
|
|
69
|
+
*
|
|
70
|
+
* Output is fully defaulted (explicit nulls / empty arrays per the RFC
|
|
71
|
+
* pseudocode) because this is also the digest normalization target.
|
|
72
|
+
*/
|
|
73
|
+
export declare function reshapeMetaV1toV2(flat: UWMeta): UWMetaV2;
|
|
74
|
+
/**
|
|
75
|
+
* Flatten a nested v2 `_meta` (plus the block's `_overrides`, if any) into
|
|
76
|
+
* the in-memory `UWMeta` every existing consumer reads. Lossless view over
|
|
77
|
+
* the nested data: `lifecycle.revision` surfaces as `version`,
|
|
78
|
+
* `integrity.*` flattens, `_overrides` surfaces as `field_overrides`.
|
|
79
|
+
*/
|
|
80
|
+
export declare function reshapeMetaV2toV1(nested: UWMetaV2, overrides?: UWFieldOverride[]): UWMeta;
|
|
81
|
+
/**
|
|
82
|
+
* Produce the canonical v2 form of a block's content object — the input to
|
|
83
|
+
* v2 canonicalization. Accepts either shape and returns a NEW object:
|
|
84
|
+
*
|
|
85
|
+
* - flat `_meta` → reshaped nested, `field_overrides` lifted to `_overrides`
|
|
86
|
+
* - nested `_meta` → re-normalized through the same flat round-trip, so both
|
|
87
|
+
* shapes land on the identical defaulted form (a nested block omitting
|
|
88
|
+
* `quality.partial` digests the same as a flat block omitting `partial`)
|
|
89
|
+
*
|
|
90
|
+
* Exclusion of `integrity.content_hash` / `integrity.signature` / defaulted
|
|
91
|
+
* `integrity.algorithm` is canonicalization step 2 and lives in
|
|
92
|
+
* `integrity-canonical.ts` — this function deliberately keeps them so the
|
|
93
|
+
* stripping stays in one place.
|
|
94
|
+
*/
|
|
95
|
+
export declare function canonicalV2BlockContent(content: Record<string, unknown>): Record<string, unknown>;
|
|
96
|
+
//# sourceMappingURL=meta-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-shape.d.ts","sourceRoot":"","sources":["../src/meta-shape.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,MAAM,EACP,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,kBAAkB;IACjC;;+CAE2C;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC;kFAC8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC;;mDAE+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAIpC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,CAGnF;AAMD;mEACmE;AACnE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIpE;AAED,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,SAAS,GAAG,OAAO,CAE5F;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAmDxD;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,CAiCzF;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCjG"}
|