@enerlence/suntropy-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,337 @@
1
+ Crea o edita un estudio solar completo usando el study builder de la CLI de Suntropy. El estudio se construye progresivamente en un fichero JSON local, y al final se guarda en el backend. El comando `calculate-results` replica el SolarResultCalculator del frontend para generar los resultados energeticos y economicos completos (spending/savings por periodo, excedentes, cobertura).
2
+
3
+ ## Parametros de entrada
4
+
5
+ Pregunta al usuario los siguientes datos. Usa los valores por defecto si no los proporciona:
6
+
7
+ | Parametro | Obligatorio | Default |
8
+ |-----------|-------------|---------|
9
+ | Nombre del estudio | No | "Estudio Solar YYYY-MM-DD" |
10
+ | Ubicacion (lat, lon) | Si | - |
11
+ | Consumo anual (kWh) | Si | - |
12
+ | Patron consumo | No | Domestic |
13
+ | Modo consumo | No | annual+pattern (alternatives: by-period, monthly, monthly-by-period, from-file) |
14
+ | Tarifa ATR ID | No | 14 (3.0TD, 6 periodos) |
15
+ | Zona geografica ID | No | 1 (Peninsula) |
16
+ | Mercado | No | es |
17
+ | Precios energia P1-P6 (euros/kWh) | Si (o usar defaults) | 3.0TD: [0.18, 0.15, 0.11, 0.09, 0.08, 0.07] / 2.0TD: [0.25, 0.17, 0.13] |
18
+ | Equipo: panel ID o kit ID | No | Usar solarform para obtener kit recomendado |
19
+ | Potencia instalada (Wp) | No | Auto desde solarform o kit |
20
+ | Inclinacion (grados) | No | 30 |
21
+ | Azimuth (grados) | No | 180 (sur) |
22
+ | Perdidas (%) | No | 14 |
23
+ | Nombre del cliente | No | - |
24
+ | Coste total instalacion (euros) | No | Obtener del solarform |
25
+ | Margen (%) | No | 15 |
26
+ | Vida util (anos) | No | 25 |
27
+
28
+ ## Ejecucion
29
+
30
+ Ejecuta los siguientes pasos secuencialmente. Cada paso que modifica el estudio actualiza automaticamente el progreso de completado.
31
+
32
+ ### Paso 0: Preparar directorio e inicializar estudio
33
+
34
+ ```bash
35
+ STUDY_DIR=$(mktemp -d /tmp/suntropy_study_XXXXXX)
36
+ STUDY_FILE=$STUDY_DIR/study.json
37
+
38
+ suntropy studies init --file $STUDY_FILE --name "<nombre>" --market <market>
39
+ ```
40
+
41
+ Si se va a editar un estudio existente, usar `pull` en vez de `init`:
42
+ ```bash
43
+ suntropy studies pull <studyId> --file $STUDY_FILE
44
+ ```
45
+
46
+ Anade comentario indicando el inicio:
47
+ ```bash
48
+ suntropy studies add-comment --file $STUDY_FILE --content "Inicio de estudio solar via CLI agent"
49
+ ```
50
+
51
+ ### Paso 1: Configurar tarifa y zona geografica
52
+
53
+ ```bash
54
+ suntropy studies set tariff --file $STUDY_FILE --tariff-id <tariffId> --zone-id <zoneId> --market <market>
55
+ ```
56
+
57
+ Esto auto-configura la fase electrica (>3 periodos -> three_phase).
58
+
59
+ Tarifas comunes (Espana):
60
+ - 13 = 2.0TD (3 periodos, residencial)
61
+ - 14 = 3.0TD (6 periodos, comercial/industrial)
62
+ - 15 = 6.1TD (6 periodos, gran consumo)
63
+
64
+ Zonas comunes (Espana):
65
+ - 1 = Peninsula
66
+ - 2 = Canarias
67
+ - 3 = Baleares
68
+
69
+ ### Paso 2: Configurar precios de energia
70
+
71
+ ```bash
72
+ suntropy studies set prices --file $STUDY_FILE \
73
+ --energy '{"p1":<precio1>,"p2":<precio2>,"p3":<precio3>,"p4":<precio4>,"p5":<precio5>,"p6":<precio6>}'
74
+ ```
75
+
76
+ O con flags individuales:
77
+ ```bash
78
+ suntropy studies set prices --file $STUDY_FILE \
79
+ --energy-p1 0.18 --energy-p2 0.15 --energy-p3 0.11 --energy-p4 0.09 --energy-p5 0.08 --energy-p6 0.07
80
+ ```
81
+
82
+ Si el usuario proporciona potencia contratada y precios de potencia:
83
+ ```bash
84
+ suntropy studies set prices --file $STUDY_FILE \
85
+ --energy '{"p1":0.18,...}' \
86
+ --power '{"p1":40,...}' \
87
+ --contracted '{"p1":5.5,...}'
88
+ ```
89
+
90
+ ### Paso 3: Datos del cliente (opcional pero recomendado)
91
+
92
+ ```bash
93
+ suntropy studies set client --file $STUDY_FILE \
94
+ --name "Nombre Cliente" --email "email@example.com" \
95
+ --address "Calle Ejemplo 1" --city "Madrid" --region "Madrid"
96
+ ```
97
+
98
+ Anade comentario tras configurar cliente:
99
+ ```bash
100
+ suntropy studies add-comment --file $STUDY_FILE --content "Datos del cliente configurados"
101
+ ```
102
+
103
+ ### Paso 4: Configurar consumo
104
+
105
+ Segun el modo:
106
+
107
+ **Modo annual + pattern (mas comun):**
108
+ ```bash
109
+ suntropy studies set consumption --file $STUDY_FILE --annual <kWh> --pattern <patron>
110
+ ```
111
+ Patrones disponibles: Balance, Nightly, Morning, Afternoon, Domestic, Commercial
112
+
113
+ **Modo por periodo:**
114
+ ```bash
115
+ suntropy studies set consumption --file $STUDY_FILE --by-period '{"p1":2500,"p2":1000,"p3":500}'
116
+ ```
117
+
118
+ **Modo mensual:**
119
+ ```bash
120
+ suntropy studies set consumption --file $STUDY_FILE --monthly '{"1":350,"2":320,"3":300,"4":280,"5":260,"6":250,"7":300,"8":320,"9":290,"10":280,"11":310,"12":340}'
121
+ ```
122
+
123
+ **Modo desde archivo (curva PowerCurve):**
124
+ ```bash
125
+ suntropy studies set consumption --file $STUDY_FILE --from-file /ruta/a/consumo.json
126
+ ```
127
+
128
+ Anade comentario indicando el consumo configurado:
129
+ ```bash
130
+ suntropy studies add-comment --file $STUDY_FILE --content "Consumo configurado: <kWh> kWh/ano, patron <patron>"
131
+ ```
132
+
133
+ ### Paso 5: Obtener configuracion optima (si no la proporciono el usuario)
134
+
135
+ Si el usuario no especifico equipo ni potencia, usar solarform para obtener la configuracion recomendada:
136
+
137
+ ```bash
138
+ suntropy solarform simple \
139
+ --region <region> --sub-region <subregion> \
140
+ --consumption <kWh> --pattern <patron> \
141
+ --fields solarKit.peakPower,solarKit.panelNumber,economicResults.totalCost,solarKit.identifier,solarKit.idSolarKit
142
+ ```
143
+
144
+ O con coordenadas:
145
+ ```bash
146
+ suntropy solarform calculate --data '{"center":{"lat":<lat>,"lng":<lon>},"consumptionMode":"consumptionPatterns","locationMode":"locationOnly","consumptionPatternViewMode":"consumptionPattern","selectedConsumptionPattern":"<patron>","consumptionQuantity":<kWh>,"consumptionQuantityIntroductionMode":"monthlyConsumption"}' \
147
+ --fields solarKit.peakPower,solarKit.panelNumber,economicResults.totalCost,solarKit.idSolarKit
148
+ ```
149
+
150
+ De aqui extraer: `peakPower`, `panelNumber`, `totalCost`, `idSolarKit`.
151
+
152
+ ### Paso 6: Configurar equipo (panel o kit)
153
+
154
+ **Opcion A: Kit solar (recomendado, modo por defecto):**
155
+ ```bash
156
+ suntropy studies set kit --file $STUDY_FILE --kit-id <idSolarKit>
157
+ ```
158
+
159
+ **Opcion B: Panel + inversor individuales:**
160
+ ```bash
161
+ suntropy studies set panel --file $STUDY_FILE --panel-id <panelId> --panels-count <N>
162
+ suntropy studies set inverter --file $STUDY_FILE --inverter-id <inverterId>
163
+ ```
164
+
165
+ Si no se conocen los IDs, listar inventario:
166
+ ```bash
167
+ suntropy inventory kits list --active-only --fields idSolarKit,identifier,peakPower,price
168
+ suntropy inventory panels list --active-only --fields solarPanelId,name,peakPower,costPerUnit
169
+ suntropy inventory inverters list --active-only --fields idInverter,name,nominalPower
170
+ ```
171
+
172
+ Anade comentario tras seleccionar equipo:
173
+ ```bash
174
+ suntropy studies add-comment --file $STUDY_FILE --content "Equipo seleccionado: <nombre kit/panel>"
175
+ ```
176
+
177
+ ### Paso 7: Anadir superficie y calcular produccion
178
+
179
+ ```bash
180
+ # Anadir superficie con coordenadas
181
+ suntropy studies add surface --file $STUDY_FILE \
182
+ --lat <lat> --lon <lon> \
183
+ --angle <inclinacion> --azimuth <azimuth> \
184
+ --power <Wp> --panels-count <N>
185
+
186
+ # Calcular produccion para todas las superficies
187
+ suntropy studies calculate production --file $STUDY_FILE --all-surfaces
188
+ ```
189
+
190
+ Si se necesitan multiples superficies (diferente orientacion/inclinacion):
191
+ ```bash
192
+ suntropy studies add surface --file $STUDY_FILE --lat <lat> --lon <lon> --angle 30 --azimuth 180 --power 3000 --identifier "Tejado sur"
193
+ suntropy studies add surface --file $STUDY_FILE --lat <lat> --lon <lon> --angle 15 --azimuth 90 --power 2000 --identifier "Tejado este"
194
+ suntropy studies calculate production --file $STUDY_FILE --all-surfaces
195
+ ```
196
+
197
+ ### Paso 8: Calcular resultados (SolarResultCalculator)
198
+
199
+ Este es el paso clave. El comando `calculate-results` replica exactamente la logica del SolarResultCalculator del frontend:
200
+ - Calcula consumo neto, excedentes, cobertura
201
+ - Obtiene la distribucion de periodos del servicio de periodos
202
+ - Calcula gasto bruto y neto por periodo tarifario (con IVA si aplica)
203
+ - Calcula ahorro por periodo
204
+ - Soporta precios alternativos, mercado PT, descuentos energia/potencia
205
+
206
+ ```bash
207
+ suntropy studies calculate-results --file $STUDY_FILE
208
+ ```
209
+
210
+ **Resultado generado (propiedad `results` del estudio):**
211
+ - `totalProduction`: produccion total (kWh/ano)
212
+ - `totalConsumptionCoverage`: % de consumo cubierto por produccion
213
+ - `netConsumption`: curva PowerCurve de consumo neto
214
+ - `excessesCurve`: curva PowerCurve de excedentes
215
+ - `totalRawSpendingByPeriod`: gasto bruto por periodo (euros)
216
+ - `totalRawSpending`: gasto bruto total
217
+ - `totalNetSpendingByPeriod`: gasto neto por periodo (con solar)
218
+ - `totalNetSpending`: gasto neto total
219
+ - `totalSavingsByPeriod`: ahorro por periodo
220
+ - `totalSavings`: ahorro total anual
221
+ - `totalExcessesByPeriod`: excedentes por periodo (kWh)
222
+ - `totalExcesses`: excedentes totales (kWh)
223
+
224
+ Anade comentario tras calcular resultados:
225
+ ```bash
226
+ suntropy studies add-comment --file $STUDY_FILE --content "Resultados calculados: produccion <X> kWh, ahorro <X> euros/ano, cobertura <X>%"
227
+ ```
228
+
229
+ ### Paso 9: Configurar parametros economicos
230
+
231
+ ```bash
232
+ suntropy studies set economics --file $STUDY_FILE \
233
+ --margin <margen%> --total-cost <costeTotal> \
234
+ --lifetime 25 --inflation 3 --taxes-pct 21
235
+ ```
236
+
237
+ Para compensacion de excedentes:
238
+ ```bash
239
+ suntropy studies set economics --file $STUDY_FILE \
240
+ --excesses-mode gridSelling --excesses-selling-price 0.06
241
+ ```
242
+
243
+ Modos de excedentes disponibles: `gridSelling`, `PPA`, `noInjection`, `virtualBattery`
244
+
245
+ ### Paso 10: Validar estudio completo
246
+
247
+ ```bash
248
+ suntropy studies validate --file $STUDY_FILE
249
+ ```
250
+
251
+ Debe devolver `completionPercentage: 100` y `missing: {}`. Si falta algo, el output indica que falta y que comando usar.
252
+
253
+ ### Paso 11: Guardar en backend
254
+
255
+ ```bash
256
+ suntropy studies save --file $STUDY_FILE
257
+ ```
258
+
259
+ Esto automaticamente:
260
+ - Re-valida todos los pasos
261
+ - Anade un comentario auto-generado ("created" si es nuevo, "modified" si es edicion)
262
+ - Guarda en MongoDB + crea metadata en PostgreSQL
263
+ - Si es un estudio nuevo, actualiza el fichero local con el `_id` del backend
264
+
265
+ Con estado especifico:
266
+ ```bash
267
+ suntropy studies save --file $STUDY_FILE --state-id 1
268
+ ```
269
+
270
+ ## Edicion de estudios existentes
271
+
272
+ Para editar un estudio que ya existe en el backend:
273
+
274
+ ```bash
275
+ # 1. Descargar estudio
276
+ suntropy studies pull <studyId> --file $STUDY_FILE
277
+
278
+ # 2. Modificar lo necesario (los mismos comandos set/add/calculate)
279
+ suntropy studies set consumption --file $STUDY_FILE --annual 5000 --pattern Commercial
280
+ suntropy studies add-comment --file $STUDY_FILE --content "Consumo actualizado de 4000 a 5000 kWh"
281
+
282
+ # 3. Recalcular produccion y resultados (si cambio consumo o superficies)
283
+ suntropy studies calculate production --file $STUDY_FILE --all-surfaces
284
+ suntropy studies calculate-results --file $STUDY_FILE
285
+ suntropy studies add-comment --file $STUDY_FILE --content "Resultados recalculados tras cambio de consumo"
286
+
287
+ # 4. Guardar cambios
288
+ suntropy studies save --file $STUDY_FILE
289
+ ```
290
+
291
+ ## Comentarios via API (estudios ya guardados)
292
+
293
+ Para anadir comentarios a un estudio que ya existe en el backend sin descargarlo:
294
+ ```bash
295
+ suntropy studies comment <studyId> --content "Revision completada por agente"
296
+ ```
297
+
298
+ ## Presentacion de resultados
299
+
300
+ Tras el paso 8 (calculate-results), presenta al usuario un resumen con los datos del `results`:
301
+
302
+ ```
303
+ ESTUDIO SOLAR - <nombre>
304
+
305
+ CONFIGURACION
306
+ Ubicacion: <lat>, <lon>
307
+ Consumo anual: <X> kWh (patron <patron>)
308
+ Potencia instalada: <X> kWp
309
+ Equipo: <nombre kit/panel>
310
+ Tarifa: <nombre tarifa> (<N> periodos)
311
+ Coste instalacion: <X> euros
312
+
313
+ BALANCE ENERGETICO
314
+ Produccion anual: <totalProduction> kWh
315
+ Cobertura: <totalConsumptionCoverage>%
316
+ Excedentes totales: <totalExcesses> kWh
317
+
318
+ AHORRO POR PERIODO
319
+ Periodo Gasto sin solar Gasto con solar Ahorro
320
+ P1 <rawP1> euros <netP1> euros <savP1> euros
321
+ P2 <rawP2> euros <netP2> euros <savP2> euros
322
+ ...
323
+ TOTAL <totalRawSpending> euros <totalNetSpending> euros <totalSavings> euros
324
+
325
+ RESULTADO
326
+ Ahorro anual: <totalSavings> euros/ano
327
+ Reduccion: <(1-totalNetSpending/totalRawSpending)*100>%
328
+ ```
329
+
330
+ ## Notas
331
+
332
+ - El fichero JSON local (`$STUDY_FILE`) contiene el estudio completo incluyendo curvas PowerCurve. Es el mismo formato que usa el frontend.
333
+ - `calculate-results` escribe los resultados en la propiedad `results` del estudio, exactamente igual que el SolarResultCalculator del frontend.
334
+ - Los comentarios quedan registrados en el estudio con tipo, timestamp y userUID para trazabilidad.
335
+ - Si algun paso falla, muestra el error y pregunta al usuario como proceder.
336
+ - Usa `suntropy studies validate` en cualquier momento para ver el estado de completado.
337
+ - Los cambios en consumo o superficies disparan cascade resets automaticos (se invalidan produccion, resultados y balance economico).