diff --git a/BUYOFF.md b/BUYOFF.md new file mode 100644 index 0000000..90cb394 --- /dev/null +++ b/BUYOFF.md @@ -0,0 +1,169 @@ +# Deployment Buyoff Checklist + +**Customer:** 天普大兴园区 (Tianpu Daxing Zero-Carbon Park) +**Project:** tp-ems +**Date:** _______________ +**Performed by:** _______________ +**Environment:** [ ] Staging [ ] Production + +--- + +## Phase 1: Infrastructure + +- [ ] PostgreSQL running and accessible +- [ ] Redis running and accessible +- [ ] All database migrations applied successfully +- [ ] Seed data loaded (device types, default config) +- [ ] Admin user created and can log in +- [ ] `.env` file configured with correct values +- [ ] All required ports open and not conflicting + +## Phase 2: Backend API + +- [ ] `GET /health` returns OK +- [ ] Auth endpoints working (login, token refresh, logout) +- [ ] Device stats endpoints return data +- [ ] Dashboard summary endpoint returns data +- [ ] Collectors are registered and configured +- [ ] Branding endpoint returns Tianpu config +- [ ] Swagger docs accessible at `/docs` +- [ ] Version endpoint returns correct version +- [ ] Solar KPI endpoints return data (PR, equivalent hours, revenue) + +## Phase 3: Data Collection + +- [ ] Collectors connected to data source (iSolarCloud API) +- [ ] Data being collected on schedule +- [ ] All expected devices showing online +- [ ] Energy data (kWh) being recorded +- [ ] No collector errors in logs +- [ ] Rate limits respected (no 429 errors) + +## Phase 3.5: Data Pipeline & Accuracy + +- [ ] PV power values match iSolarCloud source within 5% +- [ ] PV energy values match iSolarCloud source within 5% +- [ ] Heat pump power/energy values match source within 5% +- [ ] No double-counting between station-level and device-level data +- [ ] Daily summary aggregation correct +- [ ] Unit conversions correct (W/kW/MW, Wh/kWh/MWh) +- [ ] `scripts/validate_data.py` passes with no errors + +### Data Accuracy Cross-Reference Table + +| Metric | Source Value | EMS Value | Difference | Within 5%? | +|--------|-------------|-----------|------------|------------| +| PV Daily Energy (kWh) | | | | [ ] | +| PV Current Power (kW) | | | | [ ] | +| Heat Pump Daily Energy (kWh) | | | | [ ] | +| Heat Pump Current Power (kW) | | | | [ ] | +| Total Grid Import (kWh) | | | | [ ] | +| Total Grid Export (kWh) | | | | [ ] | +| Self-Consumption Rate (%) | | | | [ ] | +| PV Performance Ratio (%) | | | | [ ] | + +**Source API checked:** _______________ +**Timestamp of comparison:** _______________ + +## Phase 4: Frontend Pages + +- [ ] Login page loads and authentication works +- [ ] Dashboard / Overview page +- [ ] Monitoring page (real-time) +- [ ] Device list page +- [ ] Analysis page +- [ ] Alarm management page +- [ ] Carbon tracking page +- [ ] Reports page +- [ ] Quota management page +- [ ] Maintenance / work orders page +- [ ] Data query page +- [ ] Prediction page +- [ ] System management page (users, roles) +- [ ] Energy strategy page +- [ ] AI operations page +- [ ] Big screen display page + +## Phase 5: Feature Flags + +- [ ] Disabled features are hidden from navigation +- [ ] Disabled feature routes return 404 or redirect +- [ ] All enabled features are functional +- [ ] Feature flag config matches customer requirements + +## Phase 6: Dashboard Charts & Widgets + +- [ ] PV power curve (real-time) +- [ ] Heat pump power/status +- [ ] Carbon reduction metrics +- [ ] Active alarms count +- [ ] Load curve chart +- [ ] Device status pie chart (online/offline/alarm) +- [ ] Energy flow diagram (Sankey or animated) +- [ ] Energy overview bar chart +- [ ] PV generation trend +- [ ] Installed capacity display +- [ ] Recent alarms list +- [ ] Performance Ratio (PR) gauge +- [ ] Equivalent full-load hours +- [ ] Estimated revenue +- [ ] Self-consumption ratio + +**All charts showing real data (not zeros or placeholders):** [ ] Yes [ ] No + +## Phase 7: UI Interactions + +- [ ] Dark mode toggle works +- [ ] Language switch (zh-CN / en-US) works +- [ ] Sidebar navigation collapses/expands +- [ ] Alarm bell shows notification count +- [ ] User dropdown menu works +- [ ] Logout clears session +- [ ] Pagination works on list pages +- [ ] CRUD operations work (create, read, update, delete) + +## Phase 8: Performance & Errors + +- [ ] No JavaScript errors in browser console +- [ ] No failed API requests (check Network tab) +- [ ] No unhandled backend exceptions in logs +- [ ] Page load time < 3 seconds +- [ ] WebSocket connections stable (if applicable) + +## Phase 9: Customer-Specific (Tianpu) + +- [ ] Customer name displays as "天普大兴园区" +- [ ] Theme/branding matches Tianpu requirements +- [ ] All Tianpu devices present in device list +- [ ] Device models match physical installation +- [ ] Electricity pricing config correct +- [ ] Alarm rules configured for Tianpu thresholds +- [ ] Carbon emission factor set correctly +- [ ] Data source: iSolarCloud API configured with correct `ps_id` +- [ ] Version displayed in UI matches deployed version +- [ ] Feature flags match Tianpu scope +- [ ] `ps_id` values correct for all Tianpu stations +- [ ] Customer config volume/mount verified + +--- + +## Sign-Off + +| Role | Name | Signature | Date | +|------|------|-----------|------| +| Developer | | | | +| QA / Tester | | | | +| Project Lead | | | | +| Customer Rep | | | | + +### Notes + +_Use this space for any observations, deviations, or follow-up items:_ + +1. +2. +3. + +--- + +*Generated from EMS Deployment Buyoff Checklist template. All items must be checked before deployment is considered complete.*