operx-cli 0.2.1__tar.gz → 0.3.0__tar.gz
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.
- {operx_cli-0.2.1/operx_cli.egg-info → operx_cli-0.3.0}/PKG-INFO +32 -6
- operx_cli-0.2.1/PKG-INFO → operx_cli-0.3.0/README.md +221 -209
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/AGENTES.md +27 -5
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/__init__.py +1 -1
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/app.py +5 -2
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/browser_login.py +24 -10
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/account.py +63 -11
- operx_cli-0.3.0/operx_cli/commands/ambiental.py +174 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/common.py +17 -1
- operx_cli-0.3.0/operx_cli/commands/empresas.py +137 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/ordenes.py +26 -2
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/personas.py +24 -1
- operx_cli-0.3.0/operx_cli/commands/preventivos.py +183 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/raw.py +41 -4
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/registros.py +46 -3
- operx_cli-0.3.0/operx_cli/commands/sst.py +99 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/output.py +47 -1
- operx_cli-0.3.0/operx_cli/record_completion.py +93 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/settings.py +5 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/shell.py +26 -11
- operx_cli-0.3.0/operx_cli/updates.py +74 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/values.py +30 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/welcome.py +5 -1
- operx_cli-0.2.1/README.md → operx_cli-0.3.0/operx_cli.egg-info/PKG-INFO +235 -195
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli.egg-info/SOURCES.txt +12 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/pyproject.toml +1 -1
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_app.py +3 -0
- operx_cli-0.3.0/tests/test_cards.py +101 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_login.py +33 -0
- operx_cli-0.3.0/tests/test_logout_and_routes.py +90 -0
- operx_cli-0.3.0/tests/test_preventivos.py +105 -0
- operx_cli-0.3.0/tests/test_record_completion.py +82 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_shell.py +43 -0
- operx_cli-0.3.0/tests/test_sst_ambiental.py +248 -0
- operx_cli-0.3.0/tests/test_updates.py +72 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_welcome.py +12 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/agent_guide.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/client.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/__init__.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/inventario.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/lecturas.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/commands/search.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/lookup.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli/spreadsheet.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli.egg-info/dependency_links.txt +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli.egg-info/entry_points.txt +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli.egg-info/requires.txt +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/operx_cli.egg-info/top_level.txt +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/setup.cfg +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_agentes.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_client.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_inventario_lecturas.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_lookup.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_ordenes.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_output.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_personas.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_registros.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_settings.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_spreadsheet.py +0 -0
- {operx_cli-0.2.1 → operx_cli-0.3.0}/tests/test_values.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: operx-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: La línea de comandos de OperX: tu empresa desde la terminal, con tu token de API.
|
|
5
5
|
Requires-Python: >=3.10
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -36,7 +36,8 @@ curl -LsSf https://astral.sh/uv/install.sh | sh && uv tool install operx-cli
|
|
|
36
36
|
Python 3.10 o más nuevo, también sirve `pipx install operx-cli`. Abre una
|
|
37
37
|
terminal nueva y comprueba con `operx --version`.
|
|
38
38
|
|
|
39
|
-
Para actualizar: `uv tool upgrade operx-cli`.
|
|
39
|
+
Para actualizar: cierra `operx` y escribe `uv tool upgrade operx-cli`. La
|
|
40
|
+
pantalla de bienvenida avisa cuando hay una versión nueva.
|
|
40
41
|
|
|
41
42
|
## Entrar
|
|
42
43
|
|
|
@@ -69,8 +70,8 @@ operx --perfil pruebas login --direccion https://…
|
|
|
69
70
|
operx --perfil pruebas ordenes listar
|
|
70
71
|
```
|
|
71
72
|
|
|
72
|
-
`operx logout`
|
|
73
|
-
|
|
73
|
+
`operx logout` cierra la sesión: revoca el token en el servidor y lo borra de
|
|
74
|
+
este equipo. Un token puesto en `OPERX_TOKEN` no lo toca.
|
|
74
75
|
|
|
75
76
|
## Modo interactivo
|
|
76
77
|
|
|
@@ -101,6 +102,12 @@ operx ordenes estado 1234 completada
|
|
|
101
102
|
operx ordenes asignar 1234 "Pedro Pérez"
|
|
102
103
|
operx ordenes comentar 1234 "Llegó el repuesto"
|
|
103
104
|
|
|
105
|
+
operx preventivos listar --estado vencidos
|
|
106
|
+
operx preventivos ver 12
|
|
107
|
+
operx preventivos crear --nombre "Lubricar rodamientos" --cada 3 --unidad meses --equipo BOM-04 --proxima 01/11/2026
|
|
108
|
+
operx preventivos nota 12 "Usar grasa EP2"
|
|
109
|
+
operx preventivos ejecuciones 12
|
|
110
|
+
|
|
104
111
|
operx equipos listar --buscar compresor
|
|
105
112
|
operx equipos ver BOM-04
|
|
106
113
|
operx equipos crear --nombre "Bomba 4" --codigo BOM-04 --lugar "Planta Norte"
|
|
@@ -116,10 +123,26 @@ operx inventario salida --articulo FIL-010 --lugar "Bodega central" --cantidad 2
|
|
|
116
123
|
operx lecturas puntos BOM-04
|
|
117
124
|
operx lecturas registrar --punto 12 --valor 73,4
|
|
118
125
|
|
|
126
|
+
operx personas listar --buscar pérez
|
|
119
127
|
operx personas importar empleados.xlsx # revisa el archivo, no guarda
|
|
120
128
|
operx personas importar empleados.xlsx --confirmar # guarda si ninguna fila tiene errores
|
|
129
|
+
|
|
130
|
+
operx sst acciones --estado abiertas
|
|
131
|
+
operx sst nueva-accion --titulo "Señalizar la salida" --para 15/11/2026 --responsable "Ana Ruiz"
|
|
132
|
+
operx sst accion-hecha 7 --evidencia "Se instalaron dos señales"
|
|
133
|
+
operx sst incidentes
|
|
134
|
+
|
|
135
|
+
operx ambiental acciones
|
|
136
|
+
operx ambiental permisos
|
|
137
|
+
operx ambiental obligaciones --mes 11/2026
|
|
138
|
+
operx ambiental residuo --corriente "Aceite usado" --kg 12,5
|
|
139
|
+
operx ambiental lectura --medidor Acueducto --valor 1.234,5
|
|
121
140
|
```
|
|
122
141
|
|
|
142
|
+
SG-SST y Ambiental van por empresa: sin `--empresa`, la de tu cuenta. Si
|
|
143
|
+
llevas el SG-SST o lo ambiental de tus clientes, `operx sst empresas` y
|
|
144
|
+
`operx ambiental empresas` las listan.
|
|
145
|
+
|
|
123
146
|
`operx --help` y `operx ordenes --help` muestran todas las opciones.
|
|
124
147
|
|
|
125
148
|
- Los equipos, lugares, clientes, artículos y personas se nombran por su
|
|
@@ -149,10 +172,13 @@ Usuarios y acceso.
|
|
|
149
172
|
|
|
150
173
|
### Cualquier otra llamada
|
|
151
174
|
|
|
152
|
-
Lo que no tiene comando propio se hace con `operx api
|
|
153
|
-
|
|
175
|
+
Lo que no tiene comando propio se hace con `operx api`. `operx api rutas`
|
|
176
|
+
lista todas las direcciones que tu token puede llamar (`operx api rutas
|
|
177
|
+
compresor` deja las que lo mencionan); también están en Acceso por API ›
|
|
178
|
+
Documentación:
|
|
154
179
|
|
|
155
180
|
```sh
|
|
181
|
+
operx api rutas schedules
|
|
156
182
|
operx api GET pm/schedules/ -q search=compresor
|
|
157
183
|
operx api POST contacts/ -d @contacto.json
|
|
158
184
|
operx api GET work-orders/export/ -o ordenes.csv
|
|
@@ -1,209 +1,221 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
operx
|
|
85
|
-
operx
|
|
86
|
-
operx
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
operx
|
|
96
|
-
|
|
97
|
-
operx
|
|
98
|
-
operx
|
|
99
|
-
operx
|
|
100
|
-
operx
|
|
101
|
-
operx
|
|
102
|
-
operx
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
operx
|
|
106
|
-
operx
|
|
107
|
-
operx
|
|
108
|
-
|
|
109
|
-
operx
|
|
110
|
-
operx
|
|
111
|
-
|
|
112
|
-
operx
|
|
113
|
-
operx
|
|
114
|
-
operx
|
|
115
|
-
|
|
116
|
-
operx
|
|
117
|
-
operx
|
|
118
|
-
|
|
119
|
-
operx
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
###
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
de
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
1
|
+
# operx: OperX desde la terminal
|
|
2
|
+
|
|
3
|
+
`operx` usa la API de OperX con tu token personal: lo mismo que puedes hacer
|
|
4
|
+
en la app, desde una terminal, un script o una tarea programada. Actúa como
|
|
5
|
+
tú, con tu rol, y solo en tu empresa.
|
|
6
|
+
|
|
7
|
+
## Instalar
|
|
8
|
+
|
|
9
|
+
Windows (PowerShell):
|
|
10
|
+
|
|
11
|
+
```powershell
|
|
12
|
+
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"; uv tool install operx-cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Mac y Linux:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh && uv tool install operx-cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`uv` instala su propio Python, así que no necesitas tener uno. Si ya tienes
|
|
22
|
+
Python 3.10 o más nuevo, también sirve `pipx install operx-cli`. Abre una
|
|
23
|
+
terminal nueva y comprueba con `operx --version`.
|
|
24
|
+
|
|
25
|
+
Para actualizar: cierra `operx` y escribe `uv tool upgrade operx-cli`. La
|
|
26
|
+
pantalla de bienvenida avisa cuando hay una versión nueva.
|
|
27
|
+
|
|
28
|
+
## Entrar
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
operx login
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
1. La terminal muestra un código y abre el navegador en la página de OperX.
|
|
35
|
+
2. Entras como siempre. La página dice qué terminal pide acceso: apruébalo solo
|
|
36
|
+
si acabas de escribir `operx login` en tu propio computador y el código es
|
|
37
|
+
el mismo. Escribe el código de 6 dígitos de tu app de autenticación (o tu
|
|
38
|
+
contraseña, si no usas una) y elige *Solo lectura* o *Lectura y
|
|
39
|
+
escritura*.
|
|
40
|
+
3. Vuelve a la terminal: ya entraste. Nunca ves ni copias un token.
|
|
41
|
+
|
|
42
|
+
Tu rol necesita el permiso «Acceso por API» (Ajustes › Usuarios y acceso ›
|
|
43
|
+
Roles); un administrador lo da. El acceso dura 90 días y lo ves, y puedes
|
|
44
|
+
revocarlo, en el menú de tu cuenta › Acceso por API.
|
|
45
|
+
|
|
46
|
+
El token queda en el llavero del sistema (en Windows, el Administrador de
|
|
47
|
+
credenciales), nunca en un archivo. En un servidor sin navegador ni llavero:
|
|
48
|
+
`operx login --token` te deja pegar un token creado en Acceso por API, o puedes
|
|
49
|
+
usar variables de entorno: `OPERX_TOKEN` (el token) y, si no es producción,
|
|
50
|
+
`OPERX_DIRECCION`.
|
|
51
|
+
|
|
52
|
+
Para otra dirección u otra empresa, usa un perfil:
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
operx --perfil pruebas login --direccion https://…
|
|
56
|
+
operx --perfil pruebas ordenes listar
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`operx logout` cierra la sesión: revoca el token en el servidor y lo borra de
|
|
60
|
+
este equipo. Un token puesto en `OPERX_TOKEN` no lo toca.
|
|
61
|
+
|
|
62
|
+
## Modo interactivo
|
|
63
|
+
|
|
64
|
+
Escribe `operx` solo, en una terminal, y se abre la pantalla de bienvenida
|
|
65
|
+
(quién eres y los números de hoy: órdenes abiertas, vencidas, artículos bajo
|
|
66
|
+
el mínimo) con un prompt. Ahí escribes los comandos sin el `operx`, con
|
|
67
|
+
Tab para completar y ↑ para repetir lo anterior:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
operx › ordenes listar --vencidas
|
|
71
|
+
operx › buscar "bomba"
|
|
72
|
+
operx › ayuda
|
|
73
|
+
operx › salir
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`salir` (o Ctrl+D) termina la sesión sin borrar tu token. En un script o una
|
|
77
|
+
tubería, `operx` solo muestra la ayuda y no espera a nadie.
|
|
78
|
+
|
|
79
|
+
## Comandos
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
operx buscar "bomba" # como la barra de búsqueda de la app
|
|
83
|
+
|
|
84
|
+
operx ordenes listar --estado en-progreso --asignada-a yo
|
|
85
|
+
operx ordenes ver 1234
|
|
86
|
+
operx ordenes crear --titulo "Cambio de rodamiento" --equipo BOM-04 --prioridad alta --vence 30/10/2026
|
|
87
|
+
operx ordenes estado 1234 completada
|
|
88
|
+
operx ordenes asignar 1234 "Pedro Pérez"
|
|
89
|
+
operx ordenes comentar 1234 "Llegó el repuesto"
|
|
90
|
+
|
|
91
|
+
operx preventivos listar --estado vencidos
|
|
92
|
+
operx preventivos ver 12
|
|
93
|
+
operx preventivos crear --nombre "Lubricar rodamientos" --cada 3 --unidad meses --equipo BOM-04 --proxima 01/11/2026
|
|
94
|
+
operx preventivos nota 12 "Usar grasa EP2"
|
|
95
|
+
operx preventivos ejecuciones 12
|
|
96
|
+
|
|
97
|
+
operx equipos listar --buscar compresor
|
|
98
|
+
operx equipos ver BOM-04
|
|
99
|
+
operx equipos crear --nombre "Bomba 4" --codigo BOM-04 --lugar "Planta Norte"
|
|
100
|
+
operx clientes listar
|
|
101
|
+
operx clientes crear --nombre "Acme S.A.S." --nit 900123456
|
|
102
|
+
operx clientes crear --nombre "Filtros Ltda" --rol proveedor
|
|
103
|
+
operx lugares listar
|
|
104
|
+
|
|
105
|
+
operx inventario existencias --buscar filtro
|
|
106
|
+
operx inventario entrada --articulo FIL-010 --lugar "Bodega central" --cantidad 10 --costo-unitario 1.500,50
|
|
107
|
+
operx inventario salida --articulo FIL-010 --lugar "Bodega central" --cantidad 2 --motivo Consumo
|
|
108
|
+
|
|
109
|
+
operx lecturas puntos BOM-04
|
|
110
|
+
operx lecturas registrar --punto 12 --valor 73,4
|
|
111
|
+
|
|
112
|
+
operx personas listar --buscar pérez
|
|
113
|
+
operx personas importar empleados.xlsx # revisa el archivo, no guarda
|
|
114
|
+
operx personas importar empleados.xlsx --confirmar # guarda si ninguna fila tiene errores
|
|
115
|
+
|
|
116
|
+
operx sst acciones --estado abiertas
|
|
117
|
+
operx sst nueva-accion --titulo "Señalizar la salida" --para 15/11/2026 --responsable "Ana Ruiz"
|
|
118
|
+
operx sst accion-hecha 7 --evidencia "Se instalaron dos señales"
|
|
119
|
+
operx sst incidentes
|
|
120
|
+
|
|
121
|
+
operx ambiental acciones
|
|
122
|
+
operx ambiental permisos
|
|
123
|
+
operx ambiental obligaciones --mes 11/2026
|
|
124
|
+
operx ambiental residuo --corriente "Aceite usado" --kg 12,5
|
|
125
|
+
operx ambiental lectura --medidor Acueducto --valor 1.234,5
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
SG-SST y Ambiental van por empresa: sin `--empresa`, la de tu cuenta. Si
|
|
129
|
+
llevas el SG-SST o lo ambiental de tus clientes, `operx sst empresas` y
|
|
130
|
+
`operx ambiental empresas` las listan.
|
|
131
|
+
|
|
132
|
+
`operx --help` y `operx ordenes --help` muestran todas las opciones.
|
|
133
|
+
|
|
134
|
+
- Los equipos, lugares, clientes, artículos y personas se nombran por su
|
|
135
|
+
código o su nombre exacto. Si dos se llaman igual, `operx` lo dice y pide
|
|
136
|
+
el id.
|
|
137
|
+
- Los números y las fechas se escriben como en la app: `73,4`, `1.500,50`,
|
|
138
|
+
`30/10/2026`, `22/10/2026 08:00`.
|
|
139
|
+
- Las listas muestran la primera página; `--todas` las trae todas.
|
|
140
|
+
- `--json` da todo lo que responde la API; `--csv` da un CSV que Excel abre
|
|
141
|
+
bien (`operx equipos listar --todas --csv > equipos.csv`).
|
|
142
|
+
|
|
143
|
+
### Antes de escribir
|
|
144
|
+
|
|
145
|
+
Todo lo que crea o cambia algo pregunta antes. En un script o una tarea
|
|
146
|
+
programada no hay a quién preguntar: agrega `--si`. Cada escritura queda en
|
|
147
|
+
el historial del token (Acceso por API › el token › Actividad) marcada como
|
|
148
|
+
hecha desde la CLI.
|
|
149
|
+
|
|
150
|
+
### Importar personas
|
|
151
|
+
|
|
152
|
+
La primera columna con el nombre basta. `operx` reconoce las columnas
|
|
153
|
+
Nombres, Apellidos, Código, Cargo, Tipo de contrato, Fecha de ingreso, Fin de
|
|
154
|
+
contrato, Celular, Sede y las de contacto de emergencia, con o sin tildes.
|
|
155
|
+
Una columna con otro nombre se indica con `--mapa "Tu columna=campo"`.
|
|
156
|
+
Nadie recibe acceso a la app al importarlo: las invitaciones se envían en
|
|
157
|
+
Usuarios y acceso.
|
|
158
|
+
|
|
159
|
+
### Cualquier otra llamada
|
|
160
|
+
|
|
161
|
+
Lo que no tiene comando propio se hace con `operx api`. `operx api rutas`
|
|
162
|
+
lista todas las direcciones que tu token puede llamar (`operx api rutas
|
|
163
|
+
compresor` deja las que lo mencionan); también están en Acceso por API ›
|
|
164
|
+
Documentación:
|
|
165
|
+
|
|
166
|
+
```sh
|
|
167
|
+
operx api rutas schedules
|
|
168
|
+
operx api GET pm/schedules/ -q search=compresor
|
|
169
|
+
operx api POST contacts/ -d @contacto.json
|
|
170
|
+
operx api GET work-orders/export/ -o ordenes.csv
|
|
171
|
+
operx api POST work-orders/1234/attachments/ -a file=foto.jpg -d '{"file_type": "photo"}'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
En Git Bash, una dirección que empieza por `/` se vuelve una ruta de Windows:
|
|
175
|
+
escríbela sin la barra inicial, como arriba.
|
|
176
|
+
|
|
177
|
+
## Para agentes de IA
|
|
178
|
+
|
|
179
|
+
`operx agentes` imprime una guía para un agente de IA (Claude, ChatGPT,
|
|
180
|
+
Copilot, Codex…): las reglas para usar `operx` bien (leer con `--json`,
|
|
181
|
+
preguntar antes de escribir, no tocar tokens) y cada comando con sus opciones.
|
|
182
|
+
Dile a tu agente: «Ejecuta `operx agentes` y sigue esa guía».
|
|
183
|
+
|
|
184
|
+
## Para desarrollar
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
cd cli
|
|
188
|
+
python -m venv .venv && .venv/Scripts/python -m pip install -e ".[test]"
|
|
189
|
+
.venv/Scripts/python -m pytest
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`operx_cli/client.py` es lo único que habla con la red; el servidor MCP lo
|
|
193
|
+
usará igual.
|
|
194
|
+
|
|
195
|
+
### Publicar una versión
|
|
196
|
+
|
|
197
|
+
El paquete es `operx-cli` en PyPI. Una versión publicada no se puede reemplazar:
|
|
198
|
+
si algo falla, se sube la siguiente.
|
|
199
|
+
|
|
200
|
+
1. Sube el número en `pyproject.toml` y en `operx_cli/__init__.py`.
|
|
201
|
+
2. Las funciones nuevas del servidor (como `operx login`) tienen que estar ya
|
|
202
|
+
desplegadas en producción antes de publicar: el paquete nuevo las llama.
|
|
203
|
+
3. Desde `cli/`:
|
|
204
|
+
|
|
205
|
+
```sh
|
|
206
|
+
uv build --clear
|
|
207
|
+
uv publish
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
`uv publish` toma el token de PyPI de la variable de entorno
|
|
211
|
+
`UV_PUBLISH_TOKEN`. Usa un token solo del proyecto `operx-cli` (PyPI › Account
|
|
212
|
+
settings › API tokens). Se guarda una vez, en tu usuario de Windows, desde
|
|
213
|
+
PowerShell; lo pegas donde lo pide y no se ve:
|
|
214
|
+
|
|
215
|
+
```powershell
|
|
216
|
+
$token = Read-Host "Token de PyPI" -AsSecureString
|
|
217
|
+
[Environment]::SetEnvironmentVariable("UV_PUBLISH_TOKEN", [Net.NetworkCredential]::new("", $token).Password, "User")
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Las terminales que abras después ya lo tienen. El token es secreto: nunca va
|
|
221
|
+
en un archivo del repositorio ni en un chat.
|
|
@@ -53,9 +53,18 @@ llamada queda en el historial del token, marcada como hecha desde la CLI.
|
|
|
53
53
|
## Escribir
|
|
54
54
|
|
|
55
55
|
- Escriben: `ordenes crear`, `ordenes estado`, `ordenes asignar`,
|
|
56
|
-
`ordenes comentar`, `
|
|
57
|
-
`
|
|
58
|
-
|
|
56
|
+
`ordenes comentar`, `preventivos crear`, `preventivos nota`,
|
|
57
|
+
`equipos crear`, `clientes crear`, `inventario entrada`, `inventario salida`,
|
|
58
|
+
`lecturas registrar`, `personas importar --confirmar`, `sst nueva-accion`,
|
|
59
|
+
`sst accion-hecha`, `ambiental nueva-accion`, `ambiental accion-hecha`,
|
|
60
|
+
`ambiental residuo`, `ambiental lectura`, y `operx api` con POST, PUT,
|
|
61
|
+
PATCH o DELETE. Todos llevan `--si`.
|
|
62
|
+
- SG-SST y Ambiental van por empresa: sin `--empresa`, la de la cuenta. Una
|
|
63
|
+
cuenta que lleva el SG-SST o lo ambiental de sus clientes ve las demás con
|
|
64
|
+
`operx sst empresas` o `operx ambiental empresas`.
|
|
65
|
+
- El responsable de una acción es una persona de la empresa (su nombre o
|
|
66
|
+
código exacto) o, si no está en la empresa, alguien de afuera por su nombre:
|
|
67
|
+
`operx` avisa cuál de las dos tomó.
|
|
59
68
|
- `operx personas importar ARCHIVO` sin `--confirmar` solo revisa el archivo
|
|
60
69
|
y no guarda nada: hazlo primero y muéstrale el resultado a la persona.
|
|
61
70
|
- Un acceso de solo lectura no escribe: la API responde 403.
|
|
@@ -97,8 +106,10 @@ Lo que responde la API:
|
|
|
97
106
|
## Cualquier otra llamada: `operx api`
|
|
98
107
|
|
|
99
108
|
`operx api MÉTODO RUTA` hace cualquier llamada que el token pueda hacer y
|
|
100
|
-
responde el JSON de la API.
|
|
101
|
-
|
|
109
|
+
responde el JSON de la API. `operx api rutas --json` lista todas las rutas
|
|
110
|
+
que el token puede llamar, con lo que hace cada una; `operx api rutas TEXTO`
|
|
111
|
+
deja solo las que lo mencionan. Escríbelas como salen ahí: sin `/api/v1/` y
|
|
112
|
+
sin barra inicial.
|
|
102
113
|
|
|
103
114
|
- `-q nombre=valor`: un filtro. Se repite.
|
|
104
115
|
- `-d '{"campo": "valor"}'` o `-d @archivo.json`: el cuerpo de la llamada.
|
|
@@ -107,6 +118,7 @@ Documentación; escríbelas sin `/api/v1/` y sin barra inicial.
|
|
|
107
118
|
- `-o archivo`: guarda una respuesta que es un archivo (CSV, PDF).
|
|
108
119
|
|
|
109
120
|
```sh
|
|
121
|
+
operx api rutas schedules --json
|
|
110
122
|
operx api GET pm/schedules/ -q search=compresor
|
|
111
123
|
operx api POST contacts/ -d @contacto.json --si
|
|
112
124
|
operx api GET work-orders/export/ -o ordenes.csv
|
|
@@ -131,4 +143,14 @@ operx inventario salida --articulo FIL-010 --lugar "Bodega central" --cantidad 2
|
|
|
131
143
|
|
|
132
144
|
# Los equipos en un CSV para Excel
|
|
133
145
|
operx equipos listar --todas --csv > equipos.csv
|
|
146
|
+
|
|
147
|
+
# Los planes preventivos vencidos
|
|
148
|
+
operx preventivos listar --estado vencidos --json
|
|
149
|
+
|
|
150
|
+
# El plan de acción del SG-SST que sigue abierto
|
|
151
|
+
operx sst acciones --estado abiertas --json
|
|
152
|
+
|
|
153
|
+
# Lo que vence este mes en lo ambiental, y registrar residuos
|
|
154
|
+
operx ambiental obligaciones --json
|
|
155
|
+
operx ambiental residuo --corriente "Aceite usado" --kg 12,5 --si
|
|
134
156
|
```
|
|
@@ -12,7 +12,7 @@ from typer.core import TyperGroup
|
|
|
12
12
|
from . import __version__, settings, shell
|
|
13
13
|
from .agent_guide import guide_text
|
|
14
14
|
from .client import ApiError
|
|
15
|
-
from .commands import account, inventario, lecturas, ordenes, personas, raw, registros, search
|
|
15
|
+
from .commands import ambiental, account, inventario, lecturas, ordenes, personas, preventivos, raw, registros, search, sst
|
|
16
16
|
from .commands.common import CliError, Session
|
|
17
17
|
from .lookup import NoSingleMatch
|
|
18
18
|
from .spreadsheet import SpreadsheetError
|
|
@@ -126,17 +126,20 @@ app.command()(account.cuenta)
|
|
|
126
126
|
app.command()(search.buscar)
|
|
127
127
|
app.command()(raw.api)
|
|
128
128
|
app.add_typer(ordenes.app, name="ordenes")
|
|
129
|
+
app.add_typer(preventivos.app, name="preventivos")
|
|
129
130
|
app.add_typer(registros.equipos, name="equipos")
|
|
130
131
|
app.add_typer(registros.clientes, name="clientes")
|
|
131
132
|
app.add_typer(registros.lugares, name="lugares")
|
|
132
133
|
app.add_typer(inventario.app, name="inventario")
|
|
133
134
|
app.add_typer(lecturas.app, name="lecturas")
|
|
134
135
|
app.add_typer(personas.app, name="personas")
|
|
136
|
+
app.add_typer(sst.app, name="sst")
|
|
137
|
+
app.add_typer(ambiental.app, name="ambiental")
|
|
135
138
|
|
|
136
139
|
|
|
137
140
|
@app.command()
|
|
138
141
|
def agentes(ctx: typer.Context):
|
|
139
|
-
"""La guía para
|
|
142
|
+
"""La guía para que un agente de IA (Claude, ChatGPT…) use operx bien."""
|
|
140
143
|
typer.echo(guide_text(ctx.find_root().command))
|
|
141
144
|
|
|
142
145
|
|