@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.
- package/dist/bin/suntropy.js +2926 -0
- package/dist/bin/suntropy.js.map +1 -0
- package/package.json +35 -0
- package/skills/inventory-create-kit.md +245 -0
- package/skills/inventory-create.md +210 -0
- package/skills/solar-study.md +337 -0
|
@@ -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).
|