diff --git a/BUYOFF_RESULTS_2026-04-08.md b/BUYOFF_RESULTS_2026-04-08.md new file mode 100644 index 0000000..c03f2ad --- /dev/null +++ b/BUYOFF_RESULTS_2026-04-08.md @@ -0,0 +1,150 @@ +# Z-Park EMS Deployment Buyoff Results + +**Date**: 2026-04-08 +**Version**: zpark-ems v1.6.0 | Core v1.4.0 +**Environment**: labmac3 (Mac mini M4) via Docker/Colima +**URL**: https://labmac3.tail8fe8f6.ts.net:8443/ +**Mode**: Simulator (USE_SIMULATOR=true) + +--- + +## Phase 1: Infrastructure + +| # | Check | Result | Status | +|---|-------|--------|--------| +| 1.1 | **[CRITICAL]** PostgreSQL | accepting connections | **PASS** | +| 1.2 | **[CRITICAL]** Redis | PONG | **PASS** | +| 1.3 | **[CRITICAL]** Migrations at head | 008_management (head) | **PASS** | +| 1.4 | **[CRITICAL]** Seed data | devices=18, types=3, alarms=3, pricing=1 | **PASS** | +| 1.5 | **[CRITICAL]** Admin user | admin/admin exists | **PASS** | +| 1.6 | .env correct | CUSTOMER=zpark | **PASS** | +| 1.7 | Port conflicts | 60414/60415/60424/60434 all clear | **PASS** | + +## Phase 2: Backend API + +| # | Check | Result | Status | +|---|-------|--------|--------| +| 2.1 | **[CRITICAL]** Health | `{"status":"ok"}` | **PASS** | +| 2.2 | **[CRITICAL]** Auth | JWT token obtained | **PASS** | +| 2.3 | Device stats | online=18, offline=0 | **PASS** | +| 2.4 | Dashboard overview | Returns data (values=0, simulator idle) | **WARN** | +| 2.5 | Dashboard realtime | pv=0kW, load=0kW (simulator idle) | **WARN** | +| 2.6 | Collector status | Simulator mode (503 expected) | **N/A** | +| 2.7 | **[CRITICAL]** Branding | customer=zpark, theme=#52c41a | **PASS** | +| 2.8 | Swagger docs | HTTP 200 | **PASS** | +| 2.9 | No backend errors | 3 minor errors in logs | **WARN** | +| 2.10 | **[CRITICAL]** Version | v1.6.0 / core v1.4.0 | **PASS** | +| 2.11 | Solar KPIs | PR=0, self_consumption=100% (no data) | **WARN** | + +## Phase 3: Data Collection + +| # | Check | Result | Status | +|---|-------|--------|--------| +| 3.1 | Collectors | Simulator mode | **N/A** | +| 3.3 | Devices online | 18 online | **PASS** | +| 3.4 | Energy data | 0 rows (simulator not generating for sungrow_inverter type) | **WARN** | + +## Phase 4: Frontend Pages + +| # | Page | Route | HTTP | Status | +|---|------|-------|------|--------| +| 4.1 | **[CRITICAL]** Login | /login | 200 | **PASS** | +| 4.2 | **[CRITICAL]** Dashboard | / | 200 | **PASS** | +| 4.3 | Monitoring | /monitoring | 200 | **PASS** | +| 4.4 | Devices | /devices | 301 | **PASS** | +| 4.5 | Analysis | /analysis | 200 | **PASS** | +| 4.6 | Alarms | /alarms | 200 | **PASS** | +| 4.7 | Carbon | /carbon | 200 | **PASS** | +| 4.8 | Reports | /reports | 200 | **PASS** | +| 4.9 | Data Query | /data-query | 200 | **PASS** | +| 4.10 | Prediction | /prediction | 200 | **PASS** | +| 4.11 | Energy Strategy | /energy-strategy | 200 | **PASS** | +| 4.12 | AI Operations | /ai-operations | 200 | **PASS** | +| 4.13 | Maintenance | /maintenance | 200 | **PASS** | +| 4.14 | Management | /management | 200 | **PASS** | +| 4.15 | Quota | /quota | 200 | **PASS** | +| 4.16 | System/Users | /system/users | 200 | **PASS** | +| 4.17 | System/Roles | /system/roles | 200 | **PASS** | +| 4.18 | System/Settings | /system/settings | 200 | **PASS** | +| 4.19 | System/Audit | /system/audit | 200 | **PASS** | +| 4.20 | BigScreen 2D | /bigscreen | 200 | **PASS** | +| 4.21 | String Monitoring | /string-monitoring | 200 | **PASS** | +| 4.22 | ROI Simulator | /roi-simulator | 200 | **PASS** | +| 4.23 | Knowledge Base | /knowledge-base | 200 | **PASS** | +| 4.24 | IV Diagnosis (stub) | /iv-diagnosis | 200 | **PASS** | +| 4.25 | Remote Config (stub) | /remote-config | 200 | **PASS** | + +## Phase 5: Feature Flags + +| # | Check | Result | Status | +|---|-------|--------|--------| +| 5.1 | Charging hidden | charging=False | **PASS** | +| 5.2 | Carbon enabled | carbon=True | **PASS** | +| 5.3 | BigScreen3D hidden | bigscreen_3d=False | **PASS** | + +## Phase 6: Dashboard Charts + +| # | Widget | Result | Status | +|---|--------|--------|--------| +| 6.1 | PV Power | 0kW (simulator idle) | **WARN** | +| 6.6 | Device Status | 18 online, 0 offline | **PASS** | + +## Phase 7: API Endpoints + +| # | Endpoint | HTTP | Status | +|---|----------|------|--------| +| 7.1 | /api/v1/devices | 200 | **PASS** | +| 7.2 | /api/v1/alarms/events | 200 | **PASS** | +| 7.3 | /api/v1/carbon/overview | 200 | **PASS** | +| 7.4 | /api/v1/reports/templates | 200 | **PASS** | +| 7.5 | /api/v1/maintenance/plans | 200 | **PASS** | +| 7.6 | /api/v1/energy-strategy/pricing | 404 | **WARN** | +| 7.7 | /api/v1/quota/list | 405 | **WARN** | + +## Phase 8: Performance + +| # | Check | Result | Status | +|---|-------|--------|--------| +| 8.1 | Backend errors | 3 minor in logs | **WARN** | + +## Phase 9: Customer-Specific + +| # | Check | Expected | Actual | Status | +|---|-------|----------|--------|--------| +| 9.1 | Customer name | 中关村医疗器械园 | 中关村医疗器械园 | **PASS** | +| 9.2 | Theme color | #52c41a (green) | #52c41a | **PASS** | +| 9.9 | Version display | v1.6.0 | v1.6.0 | **PASS** | + +--- + +## Summary + +| Category | PASS | WARN | FAIL | N/A | +|----------|------|------|------|-----| +| Infrastructure | 7 | 0 | 0 | 0 | +| Backend API | 7 | 4 | 0 | 1 | +| Data Collection | 1 | 1 | 0 | 1 | +| Frontend Pages | 25 | 0 | 0 | 0 | +| Feature Flags | 3 | 0 | 0 | 0 | +| Dashboard | 1 | 1 | 0 | 0 | +| API Endpoints | 5 | 2 | 0 | 0 | +| Performance | 0 | 1 | 0 | 0 | +| Customer-Specific | 3 | 0 | 0 | 0 | +| **TOTAL** | **52** | **9** | **0** | **2** | + +**Overall: PASS (with WARN)** + +All CRITICAL items pass. WARNs are due to: +- Simulator not generating energy data for `sungrow_inverter` device type (designed for real API) +- 2 API endpoints returning 404/405 (minor route issues) +- 3 minor log errors + +--- + +## Buyoff Sign-off + +| Role | Name | Date | Result | +|------|------|------|--------| +| Developer | Claude (AI) | 2026-04-08 | Pass (with WARN) | +| QA | | | | +| Customer | | | |