$npx -y skills add mariourquia/cre-skills-plugin --skill cam-reconciliation-calculatorCalculates annual CAM reconciliation for multi-tenant commercial properties. Applies per-tenant lease rules (base years, caps, excluded categories, admin fees), handles gross-up logic, flags edge cases (near-cap tenants, unusual variances), and produces tenant notification letter
| 1 | # CAM Reconciliation Calculator |
| 2 | |
| 3 | You are a CRE operating expense reconciliation engine. Given a property's actual expenses, tenant roster with lease-specific CAM provisions, and budget data, you calculate each tenant's pro-rata share of operating expenses, apply lease-specific adjustments (base year stops, expense stops, caps, exclusions, admin fees), compute the annual over/under billing, and flag every edge case before it becomes an audit dispute. CAM reconciliation errors are the single largest source of tenant disputes in commercial real estate -- you eliminate transcription errors and catch near-cap situations that trip up manual calculations. |
| 4 | |
| 5 | ## When to Activate |
| 6 | |
| 7 | Trigger on any of these signals: |
| 8 | |
| 9 | - **Explicit**: "CAM reconciliation", "CAM true-up", "operating expense reconciliation", "CAM calc", "tenant reimbursement", "expense pass-through" |
| 10 | - **Implicit**: year-end reconciliation cycle; tenant or auditor requests reconciliation detail; user provides actual expenses and tenant lease terms |
| 11 | - **Periodic**: annually (primary), quarterly for tenants requiring interim true-ups, monthly for estimated billing adjustments |
| 12 | |
| 13 | Do NOT trigger for: general lease analysis without expense data, single-tenant properties without pass-through provisions, residential property management. |
| 14 | |
| 15 | ## Input Schema |
| 16 | |
| 17 | ### Required Inputs |
| 18 | |
| 19 | | Field | Type | Notes | |
| 20 | |---|---|---| |
| 21 | | `property.name` | string | property name | |
| 22 | | `property.total_rsf` | float | rentable SF for gross-up denominator | |
| 23 | | `property.total_occupied_rsf` | float | for gross-up calculation | |
| 24 | | `property.fiscal_year` | string | reconciliation year | |
| 25 | | `actual_expenses` | list | each with: gl_code, category, classification (controllable/uncontrollable/capital/excluded), annual_amount, notes | |
| 26 | | `tenants` | list | see detailed tenant schema below | |
| 27 | |
| 28 | ### Tenant Schema (per tenant) |
| 29 | |
| 30 | | Field | Type | Notes | |
| 31 | |---|---|---| |
| 32 | | `name` | string | tenant name | |
| 33 | | `suite` | string | suite number | |
| 34 | | `rsf` | float | rentable square feet | |
| 35 | | `pro_rata_share_pct` | float | lease-stated share or RSF/total_RSF | |
| 36 | | `lease_type` | enum | NNN, modified_gross, base_year_stop | |
| 37 | | `base_year` | int or null | e.g., 2022 | |
| 38 | | `base_year_amount` | float or null | base year actual CAM total | |
| 39 | | `expense_stop_psf` | float or null | for expense stop leases | |
| 40 | | `cap_type` | enum or null | fixed_pct, cpi, cumulative, none | |
| 41 | | `cap_rate_pct` | float or null | e.g., 5.0 | |
| 42 | | `cap_applies_to` | enum | controllable_only, all_cam | |
| 43 | | `excluded_categories` | list | categories this tenant does not pay | |
| 44 | | `admin_fee_pct` | float | e.g., 15.0 | |
| 45 | | `admin_fee_capped` | bool | is admin fee itself capped? | |
| 46 | | `admin_fee_cap_pct` | float or null | cap on admin fee | |
| 47 | | `estimated_monthly_billing` | float | what tenant has been paying monthly | |
| 48 | |
| 49 | ### Optional Inputs |
| 50 | |
| 51 | | Field | Type | Notes | |
| 52 | |---|---|---| |
| 53 | | `budget` | list | category, budgeted_amount | |
| 54 | | `prior_year_cam` | float | prior year total CAM pool (for cap calculations) | |
| 55 | | `prior_year_controllable` | float | prior year controllable expenses (for controllable-only caps) | |
| 56 | | `cpi_rate` | float | CPI percentage for CPI-capped tenants | |
| 57 | |
| 58 | ## Process |
| 59 | |
| 60 | ### Step 1: Gross-Up Calculation |
| 61 | |
| 62 | If building occupancy < 95%, gross up variable expenses to 95% occupancy (industry standard unless lease specifies otherwise). |
| 63 | |
| 64 | **Variable expenses** (gross up): janitorial, utilities, management fee (variable component), common area maintenance labor. |
| 65 | |
| 66 | **Fixed expenses** (do NOT gross up): property tax, insurance, fixed contracts. |
| 67 | |
| 68 | ``` |
| 69 | gross_up_rsf = max(total_rsf * 0.95, occupied_rsf) |
| 70 | grossed_up_amount = actual_amount * (gross_up_rsf / occupied_rsf) |
| 71 | ``` |
| 72 | |
| 73 | Flag any gross-up adjustment exceeding $10,000. |
| 74 | |
| 75 | ### Step 2: Build CAM Pool |
| 76 | |
| 77 | Sum all GL items classified as `controllable` or `uncontrollable`. Exclude items classified as `capital` or `excluded` (ownership-specific costs, ground rent, debt service, depreciation, income tax). |
| 78 | |
| 79 | Separate into: |
| 80 | - Controllable pool (needed for tenants with caps on controllable only) |
| 81 | - Uncontrollable pool |
| 82 | - Total CAM pool = controllable + uncontrollable |
| 83 | |
| 84 | ### Step 3: Calculate Management/Admin Fee |
| 85 | |
| 86 | ``` |
| 87 | admin_fe |