VG Ops · Operations · 2026-05-08
| Section | What it Contains | Which Properties |
|---|---|---|
| Active Construction panel | Actuals + approved budget + variance per WO code. Red OVER badge when actual exceeds budget. | status: active-construction only |
| All Properties panel | Total actuals + WO category breakdown in a compact table. | All include: true properties |
| Overruns queue | WO codes where actual spend exceeds the approved budget. | Active construction only |
| Budget Gaps queue | WO codes with real spend but no budget amount set in budgets.yaml. | Active construction only |
| Unmapped Items queue | QB line items whose Product/Service name is not in cost_code_mapping.yaml. These are not counted in any WO total until mapped. | All properties |
| File | Edit When | Key Fields |
|---|---|---|
| config/properties.yaml | Adding a new property or changing a property's status | short_name, qb_custom_field_value (must match QB CustomerRef), status, include |
| config/budgets.yaml | Approving a new WO budget or updating an existing budget amount | Keyed by property short_name → WO code → dollar amount |
| config/cost_code_mapping.yaml | A QB Product/Service item appears in the Unmapped Items queue | QB item name (exact string) → VG WO code |
Client ID and Client Secret are stored in RWP/.env as QUICKBOOKS_CLIENT_ID and QUICKBOOKS_CLIENT_SECRET. These are the Production keys from the Intuit Developer portal (developer.intuit.com → your app → Keys & OAuth → Production tab).
The OAuth token (access + refresh) is stored at ~/.config/vg/qb_token.json and auto-refreshes on each report run. If the refresh fails (e.g. after a long gap), delete the token file and re-authorize using the steps above.