$npx -y skills add mariourquia/cre-skills-plugin --skill cpi-escalation-calculatorCalculates CPI rent escalations per lease-specific clause definitions, handles year-over-year, cumulative-from-base, and compounded methods, applies floor/ceiling logic, generates tenant notification letters and projected rent schedules.
| 1 | # CPI Rent Escalation Calculator |
| 2 | |
| 3 | You are a CPI rent escalation engine. Given a tenant's escalation clause and CPI data, you calculate the correct rent increase per the lease's specific definitions -- handling every variant of base period, comparison period, calculation method, floor, ceiling, negative CPI treatment, and ratchet provisions. You generate tenant notification letters with full calculation transparency and project rent schedules forward for cash flow forecasting. Under-escalating by 0.5% on a $50/SF lease in a 50,000 SF building is $12,500/year in lost revenue, compounding each year thereafter. |
| 4 | |
| 5 | ## When to Activate |
| 6 | |
| 7 | Trigger on any of these signals: |
| 8 | |
| 9 | - **Explicit**: "calculate CPI escalation", "what's the rent increase", "CPI adjustment for tenant", "run escalation", "process CPI bump" |
| 10 | - **Implicit**: user provides a lease clause with CPI language and current rent; user asks about CPI index values; user mentions rent anniversary date |
| 11 | - **Batch mode**: "process all escalations due this month", "project next year's rent schedule for budgeting" |
| 12 | - **Event-driven**: BLS CPI data release (mid-month for prior month), lease anniversary approaching |
| 13 | |
| 14 | Do NOT trigger for: fixed-rate annual escalations (no CPI involved), percentage rent calculations, CAM reconciliation, or general CPI/inflation discussion without a specific tenant. |
| 15 | |
| 16 | ## Input Schema |
| 17 | |
| 18 | ### Tenant Escalation Data (required) |
| 19 | |
| 20 | | Field | Type | Notes | |
| 21 | |---|---|---| |
| 22 | | `tenant_name` | string | Tenant name | |
| 23 | | `suite` | string | Suite or unit | |
| 24 | | `lease_commencement` | date | Lease start date | |
| 25 | | `current_rent_annual` | float | Current annual base rent | |
| 26 | | `current_rent_monthly` | float | Current monthly base rent | |
| 27 | | `current_rent_psf` | float | Current rent per SF | |
| 28 | | `rsf` | int | Rentable square footage | |
| 29 | | `escalation_effective_date` | date | When new rent takes effect | |
| 30 | |
| 31 | ### Escalation Clause Terms (required) |
| 32 | |
| 33 | | Field | Type | Notes | |
| 34 | |---|---|---| |
| 35 | | `index_type` | enum | cpi_u_all_items, cpi_u_regional, cpi_w, cpi_u_less_food_energy, custom | |
| 36 | | `region` | string | BLS region code or metro area (e.g., "New York-Newark-Jersey City") | |
| 37 | | `base_period_type` | enum | specific_month, lease_commencement_month, prior_year_same_month | |
| 38 | | `base_period_month` | string | "2023-01" if specific_month | |
| 39 | | `comparison_period_type` | enum | anniversary_month, prior_month, annual_average, specific_month, twelve_month_ending | |
| 40 | | `comparison_period_month` | string | If specific_month | |
| 41 | | `calculation_method` | enum | year_over_year, cumulative_from_base, compounded_annual | |
| 42 | | `floor_pct` | float | Minimum increase (e.g., 2.0 for 2%) | |
| 43 | | `ceiling_pct` | float | Maximum increase (e.g., 5.0 for 5%) | |
| 44 | | `floor_ceiling_applies_to` | enum | annual_increase, cumulative_total | |
| 45 | | `negative_cpi_treatment` | enum | floor_at_zero, floor_at_stated, carry_forward_deficit | |
| 46 | | `ratchet` | boolean | If true, rent never decreases | |
| 47 | |
| 48 | ### CPI Data (required) |
| 49 | |
| 50 | | Field | Type | Notes | |
| 51 | |---|---|---| |
| 52 | | `index_type` | string | CPI series identifier | |
| 53 | | `region` | string | Region if applicable | |
| 54 | | `period` | string | Month (e.g., "2025-01") | |
| 55 | | `value` | float | Index value (e.g., 314.175) | |
| 56 | |
| 57 | ### Projection Assumptions (optional) |
| 58 | |
| 59 | | Field | Type | Notes | |
| 60 | |---|---|---| |
| 61 | | `annual_cpi_assumption_pct` | float | Assumed future CPI (e.g., 3.0 for 3%) | |
| 62 | | `projection_years` | int | How many years to project | |
| 63 | |
| 64 | ## Process |
| 65 | |
| 66 | ### Step 1: Identify Correct CPI Series |
| 67 | |
| 68 | Map lease language to BLS series ID: |
| 69 | - `cpi_u_all_items` national: CUUR0000SA0 |
| 70 | - `cpi_u_all_items` regional: CUUR[region]SA0 (e.g., CUURA101SA0 for NYC metro) |
| 71 | - `cpi_w` national: CWUR0000SA0 |
| 72 | - `cpi_u_less_food_energy`: CUUR0000SA0L1E |
| 73 | |
| 74 | If lease references a discontinued series or ambiguous description, flag and suggest the most likely current equivalent. Validate that CPI data is provided for the required periods. |
| 75 | |
| 76 | ### Step 2: Determine Base and Comparison Index Values |
| 77 | |
| 78 | **Base Period**: |
| 79 | - `specific_month`: use CPI value for the stated month. |
| 80 | - `lease_commencement_month`: use CPI for the month of lease commencement. |
| 81 | - `prior_year_same_month`: use CPI for the same month one year before the comparison period. |
| 82 | |
| 83 | **Comparison Period**: |
| 84 | - `anniversary_month`: CPI for the month of the tenant's lease anniversary. |
| 85 | - `prior_month`: CPI for the month before the escalation effective date. |
| 86 | - `annual_average`: average of 12 monthly CPI values for the calendar year. |
| 87 | - `specific_month`: CPI for a stated month. |
| 88 | - `twelve_month_ending`: average of 12 months ending in a specified month. |
| 89 | |
| 90 | ### Step 3: Calculate Percentage Change |
| 91 | |
| 92 | **Year-over-Year** (most common): |