@pimia/sdk 0.9.0 → 0.11.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/api.d.ts CHANGED
@@ -167,7 +167,7 @@ export interface paths {
167
167
  * `group_by=customer` añade by_customer; con `group_by=category`, by_category.
168
168
  * Lo consumen las tools MCP de informes (invoice-shelf-mcp).
169
169
  *
170
- * Importes en céntimos, como el resto de la API.
170
+ * Importes en subunidades enteras de la moneda, como el resto de la API.
171
171
  *
172
172
  * QUÉ FACTURAS CUENTAN, que es la clase de cifra que un integrador no puede
173
173
  * verificar por su cuenta y que hasta el 2026-08-24 el contrato no decía:
@@ -582,7 +582,6 @@ export interface paths {
582
582
  /**
583
583
  * Update the Admin profile.
584
584
  * Includes name, email and (or) password
585
- * @description **No disponible para integradores.** Exige `admin:write`, que el Authorization Server de Pimia no emite: la acción la realiza el dueño desde su panel y un token de partner recibe `403`. Aparece en el contrato para que el hueco sea explícito, no para que se llame.
586
585
  */
587
586
  put: operations["company.updateProfile"];
588
587
  post?: never;
@@ -680,6 +679,103 @@ export interface paths {
680
679
  patch?: never;
681
680
  trace?: never;
682
681
  };
682
+ "/settings/connected-apps": {
683
+ parameters: {
684
+ query?: never;
685
+ header?: never;
686
+ path?: never;
687
+ cookie?: never;
688
+ };
689
+ /**
690
+ * Apps a las que este usuario ha autorizado el acceso a su cuenta
691
+ * @description **Reservada al panel de Pimia.** Exige `admin:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
692
+ *
693
+ * `credentials` son las sesiones vivas del grant: una por dispositivo o
694
+ * proceso que completó una ceremonia OAuth. `connected_at` es el instante
695
+ * de ESA ceremonia y no el de la última renovación, que es lo que hace que
696
+ * la pantalla pueda decir «conectado desde el 25» de una sesión que rota su
697
+ * refresh cada día.
698
+ *
699
+ * `last_used_at` sale del PAT emparejado y no del refresh: el grant se toca
700
+ * en canje/refresh —una vez al día— y el PAT en CADA petición, así que es
701
+ * el único que sabe si esa sesión sigue trabajando. Sale null mientras la
702
+ * credencial no haya hecho ninguna petición todavía.
703
+ *
704
+ * `active_tokens` se queda como estaba (cuenta los PAT del client, rotados
705
+ * aún no caducados incluidos) para no romper a quien ya lo lee; lo que
706
+ * cuenta dispositivos es `credentials`.
707
+ *
708
+ * El grant del panel de primera parte NO sale: el panel es la casa, no una
709
+ * app conectada (ver el docblock de la clase). Solo se listan las
710
+ * invitadas — conectores, el escritorio y las apps de integradores.
711
+ */
712
+ get: operations["connectedApps.index"];
713
+ put?: never;
714
+ post?: never;
715
+ delete?: never;
716
+ options?: never;
717
+ head?: never;
718
+ patch?: never;
719
+ trace?: never;
720
+ };
721
+ "/settings/connected-apps/credentials/{credentialId}": {
722
+ parameters: {
723
+ query?: never;
724
+ header?: never;
725
+ path?: never;
726
+ cookie?: never;
727
+ };
728
+ get?: never;
729
+ put?: never;
730
+ post?: never;
731
+ /**
732
+ * Cierra UNA credencial —un dispositivo— sin tocar las demás ni el grant
733
+ * @description **Reservada al panel de Pimia.** Exige `admin:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
734
+ *
735
+ * La app sigue conectada desde donde siga viva; para retirarle el acceso
736
+ * entero está `destroy`. Por eso esta operación no emite `app.revoked`: al
737
+ * integrador no le ha caído la puerta, se le ha caído una sesión.
738
+ *
739
+ * El grant sale de la propia credencial y se comprueba con el mismo filtro
740
+ * que el resto de la pantalla (este usuario, este tenant, sin revocar), así
741
+ * que la ruta no lo nombra: no hay forma de pedir un par descuadrado.
742
+ *
743
+ * 404 cuando la credencial no existe, no es de este usuario, ya no está
744
+ * viva (rotada, revocada o caducada) — o es del panel de primera parte,
745
+ * que esta superficie no ve (docblock de la clase): quien cierra estaba
746
+ * mirando una lista de hace un momento y lo que necesita es recargarla, no
747
+ * un error distinto por cada motivo.
748
+ */
749
+ delete: operations["connectedApps.destroyCredential"];
750
+ options?: never;
751
+ head?: never;
752
+ patch?: never;
753
+ trace?: never;
754
+ };
755
+ "/settings/connected-apps/{authorizationId}": {
756
+ parameters: {
757
+ query?: never;
758
+ header?: never;
759
+ path?: never;
760
+ cookie?: never;
761
+ };
762
+ get?: never;
763
+ put?: never;
764
+ post?: never;
765
+ /**
766
+ * Retira el acceso de la app entera: cae el grant, sus refresh tokens y los
767
+ * PAT que esa app acuñó para este usuario. Todas sus credenciales con él
768
+ * @description **Reservada al panel de Pimia.** Exige `admin:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
769
+ *
770
+ * El grant del panel de primera parte contesta 404: la casa no es una app
771
+ * conectada y esta superficie no lo ve (docblock de la clase).
772
+ */
773
+ delete: operations["connectedApps.destroy"];
774
+ options?: never;
775
+ head?: never;
776
+ patch?: never;
777
+ trace?: never;
778
+ };
683
779
  "/contacts": {
684
780
  parameters: {
685
781
  query?: never;
@@ -1000,6 +1096,280 @@ export interface paths {
1000
1096
  patch?: never;
1001
1097
  trace?: never;
1002
1098
  };
1099
+ "/delegable-tasks": {
1100
+ parameters: {
1101
+ query?: never;
1102
+ header?: never;
1103
+ path?: never;
1104
+ cookie?: never;
1105
+ };
1106
+ /**
1107
+ * Catálogo de operaciones delegables de esta instancia
1108
+ * @description **Reservada al panel de Pimia.** Exige `delegation:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1109
+ *
1110
+ * Solo las filas del propio tenant: lo que la instancia hereda no se pinta
1111
+ * aquí, así que un tenant que no ha descubierto nada arranca vacío.
1112
+ * `hermes_configured` dice si hay instancia de agente operable — sin ella,
1113
+ * el resto de la pantalla no tiene nada que activar.
1114
+ */
1115
+ get: operations["delegableCatalog.index"];
1116
+ put?: never;
1117
+ post?: never;
1118
+ delete?: never;
1119
+ options?: never;
1120
+ head?: never;
1121
+ patch?: never;
1122
+ trace?: never;
1123
+ };
1124
+ "/delegable-tasks/delegations": {
1125
+ parameters: {
1126
+ query?: never;
1127
+ header?: never;
1128
+ path?: never;
1129
+ cookie?: never;
1130
+ };
1131
+ /**
1132
+ * Las tareas delegadas del tenant: las 20 últimas, y TODAS las que esperan
1133
+ * decisión
1134
+ * @description **Reservada al panel de Pimia.** Exige `delegation:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1135
+ *
1136
+ * Las que están pendientes de decidir entran siempre, aunque caigan fuera de
1137
+ * esas 20: esta es la única superficie donde se aprueban, así que un
1138
+ * checkpoint abierto no puede quedar enterrado por el volumen.
1139
+ */
1140
+ get: operations["delegableCatalog.delegations"];
1141
+ put?: never;
1142
+ post?: never;
1143
+ delete?: never;
1144
+ options?: never;
1145
+ head?: never;
1146
+ patch?: never;
1147
+ trace?: never;
1148
+ };
1149
+ "/delegable-tasks/delegations/{id}/approve": {
1150
+ parameters: {
1151
+ query?: never;
1152
+ header?: never;
1153
+ path?: never;
1154
+ cookie?: never;
1155
+ };
1156
+ get?: never;
1157
+ put?: never;
1158
+ /**
1159
+ * El dueño APRUEBA la propuesta: el checkpoint humano del
1160
+ * preview-antes-de-aplicar
1161
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1162
+ *
1163
+ * Solo sobre una tarea viva con una propuesta en `proposed` o
1164
+ * `needs_changes`; cualquier otra cosa es `404`. Aprobar no aplica nada por
1165
+ * sí mismo: el agente recibe el aviso y aplica su propuesta, y la tarea se
1166
+ * cierra cuando él reporta el resultado. `applied_at` es lo que dice que la
1167
+ * aplicación ocurrió de verdad.
1168
+ *
1169
+ * Opcionalmente se reporta lo que costó verificarla —`human_touch_minutes`
1170
+ * y `verification_outcome` (`pass` si se aprobó tal cual, `edit` si hubo que
1171
+ * corregir)—: es la medida del coste humano de la delegación.
1172
+ */
1173
+ post: operations["delegableCatalog.approveProposal"];
1174
+ delete?: never;
1175
+ options?: never;
1176
+ head?: never;
1177
+ patch?: never;
1178
+ trace?: never;
1179
+ };
1180
+ "/delegable-tasks/delegations/{id}/reject": {
1181
+ parameters: {
1182
+ query?: never;
1183
+ header?: never;
1184
+ path?: never;
1185
+ cookie?: never;
1186
+ };
1187
+ get?: never;
1188
+ put?: never;
1189
+ /**
1190
+ * El dueño RECHAZA la propuesta: no se aplica nada y la tarea queda fallida
1191
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1192
+ *
1193
+ * Es terminal, y por eso se separa de «pedir cambios»: no habrá otra
1194
+ * propuesta sobre esta tarea. Admite `reason` —que se guarda como resultado
1195
+ * de la tarea— y los `human_touch_minutes` que costó decidirlo, porque
1196
+ * rechazar también es verificar.
1197
+ */
1198
+ post: operations["delegableCatalog.rejectProposal"];
1199
+ delete?: never;
1200
+ options?: never;
1201
+ head?: never;
1202
+ patch?: never;
1203
+ trace?: never;
1204
+ };
1205
+ "/delegable-tasks/delegations/{id}/needs-changes": {
1206
+ parameters: {
1207
+ query?: never;
1208
+ header?: never;
1209
+ path?: never;
1210
+ cookie?: never;
1211
+ };
1212
+ get?: never;
1213
+ put?: never;
1214
+ /**
1215
+ * El dueño PIDE CAMBIOS sobre la propuesta, sin cerrarla
1216
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1217
+ *
1218
+ * NO es una decisión, y por eso no es terminal: la tarea sigue en curso, el
1219
+ * agente re-arranca, lee el `reason` y vuelve a proponer. Desde aquí se
1220
+ * puede seguir aprobando o rechazando —la propuesta original queda intacta—,
1221
+ * así que pedir cambios no quema el checkpoint: lo mantiene abierto.
1222
+ */
1223
+ post: operations["delegableCatalog.needsChangesProposal"];
1224
+ delete?: never;
1225
+ options?: never;
1226
+ head?: never;
1227
+ patch?: never;
1228
+ trace?: never;
1229
+ };
1230
+ "/delegable-tasks/{task_type}": {
1231
+ parameters: {
1232
+ query?: never;
1233
+ header?: never;
1234
+ path?: never;
1235
+ cookie?: never;
1236
+ };
1237
+ get?: never;
1238
+ /**
1239
+ * Alta o activación de una operación delegable
1240
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1241
+ *
1242
+ * Sirve para activar una fila existente o para añadir una skill descubierta.
1243
+ * La activación EXIGE verificación viva contra la instancia: si la skill no
1244
+ * está montada, se responde `422` con `verified: false` y el catálogo no se
1245
+ * toca. `201` si la fila se creó, `200` si ya existía.
1246
+ */
1247
+ put: operations["delegableCatalog.upsert"];
1248
+ post?: never;
1249
+ /**
1250
+ * Desactiva una operación delegable. NO la borra
1251
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1252
+ *
1253
+ * La fila se conserva —con su verificación— para poder reactivarla rápido;
1254
+ * lo que cambia es `enabled`, y con eso deja de ser delegable. Un tipo que
1255
+ * la instancia hereda y del que este tenant no tiene fila propia se apaga
1256
+ * igual: se crea el apagado local que lo oculta aquí.
1257
+ */
1258
+ delete: operations["delegableCatalog.disable"];
1259
+ options?: never;
1260
+ head?: never;
1261
+ patch?: never;
1262
+ trace?: never;
1263
+ };
1264
+ "/delegable-tasks/discover": {
1265
+ parameters: {
1266
+ query?: never;
1267
+ header?: never;
1268
+ path?: never;
1269
+ cookie?: never;
1270
+ };
1271
+ /**
1272
+ * Lo que el agente de esta instancia sabe hacer, consultado en vivo
1273
+ * @description **Reservada al panel de Pimia.** Exige `delegation:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1274
+ *
1275
+ * Devuelve las skills montadas en la instancia del tenant marcando cuáles
1276
+ * ya están en el catálogo (`in_catalog`) y cuáles están activadas
1277
+ * (`enabled`). Es la lista sobre la que el dueño activa operaciones.
1278
+ *
1279
+ * Llamada SALIENTE y síncrona: `409` si el tenant no tiene instancia y
1280
+ * `502` si no se pudo determinar el inventario (la instancia no responde).
1281
+ * Un 502 aquí no significa «ninguna skill»: significa que no se sabe.
1282
+ */
1283
+ get: operations["delegableCatalog.discover"];
1284
+ put?: never;
1285
+ post?: never;
1286
+ delete?: never;
1287
+ options?: never;
1288
+ head?: never;
1289
+ patch?: never;
1290
+ trace?: never;
1291
+ };
1292
+ "/delegable-tasks/{task_type}/reverify": {
1293
+ parameters: {
1294
+ query?: never;
1295
+ header?: never;
1296
+ path?: never;
1297
+ cookie?: never;
1298
+ };
1299
+ get?: never;
1300
+ put?: never;
1301
+ /**
1302
+ * Re-comprueba contra la instancia que la skill de una operación sigue
1303
+ * montada
1304
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1305
+ *
1306
+ * Invariante: activa ⇒ verificada. Si la skill ya no verifica, la operación
1307
+ * se desactiva en la misma llamada, y la respuesta lo dice en `verified`.
1308
+ */
1309
+ post: operations["delegableCatalog.reverify"];
1310
+ delete?: never;
1311
+ options?: never;
1312
+ head?: never;
1313
+ patch?: never;
1314
+ trace?: never;
1315
+ };
1316
+ "/delegable-tasks/execute": {
1317
+ parameters: {
1318
+ query?: never;
1319
+ header?: never;
1320
+ path?: never;
1321
+ cookie?: never;
1322
+ };
1323
+ get?: never;
1324
+ put?: never;
1325
+ /**
1326
+ * Ejecución SÍNCRONA de prueba: «Probar» una operación y ver la respuesta
1327
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1328
+ *
1329
+ * El dueño manda un prompt en vivo al agente de su instancia y recibe lo que
1330
+ * conteste. Es la versión síncrona, para probar; la delegación de verdad es
1331
+ * asíncrona y va por `delegate`.
1332
+ *
1333
+ * Si se indica `task_type`, la operación debe estar ACTIVADA (`422` si no) y
1334
+ * se le pide al agente que use esa skill. Fail-closed: `409` sin instancia y
1335
+ * `502` si no responde.
1336
+ */
1337
+ post: operations["delegableCatalog.execute"];
1338
+ delete?: never;
1339
+ options?: never;
1340
+ head?: never;
1341
+ patch?: never;
1342
+ trace?: never;
1343
+ };
1344
+ "/delegable-tasks/delegate": {
1345
+ parameters: {
1346
+ query?: never;
1347
+ header?: never;
1348
+ path?: never;
1349
+ cookie?: never;
1350
+ };
1351
+ get?: never;
1352
+ put?: never;
1353
+ /**
1354
+ * Delega una tarea al agente. Asíncrona: se crea y se entrega
1355
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1356
+ *
1357
+ * La tarea aparece en el Copilot del tenant y el agente la trabaja; el
1358
+ * resultado vuelve después por sus callbacks, así que lo que se consulta
1359
+ * luego es `delegable-tasks/delegations`, no esta respuesta. Si se indica
1360
+ * `task_type`, la operación debe estar ACTIVADA (`422` si no).
1361
+ *
1362
+ * `201` cuando se entregó. Si la instancia no la acepta, la tarea queda
1363
+ * creada y `pending`, y se responde `502` con la tarea en el cuerpo: es una
1364
+ * entrega fallida, no una tarea perdida.
1365
+ */
1366
+ post: operations["delegableCatalog.delegate"];
1367
+ delete?: never;
1368
+ options?: never;
1369
+ head?: never;
1370
+ patch?: never;
1371
+ trace?: never;
1372
+ };
1003
1373
  "/delivery-notes/{id}/mark-delivered": {
1004
1374
  parameters: {
1005
1375
  query?: never;
@@ -1522,7 +1892,7 @@ export interface paths {
1522
1892
  patch?: never;
1523
1893
  trace?: never;
1524
1894
  };
1525
- "/currencies/used": {
1895
+ "/gestoria-link/asesorias": {
1526
1896
  parameters: {
1527
1897
  query?: never;
1528
1898
  header?: never;
@@ -1530,10 +1900,11 @@ export interface paths {
1530
1900
  cookie?: never;
1531
1901
  };
1532
1902
  /**
1533
- * Handle the incoming request
1534
- * @description **Catálogo `meta`.** Lectura libre: la alcanza cualquier token válido, sin scope y sin consentimiento adicional del dueño del tenant.
1903
+ * List available advisory firms for tenant users to browse.
1904
+ * Searches across users table AND gestoria_settings (nombre_despacho, nif_despacho, email_despacho)
1905
+ * @description **Reservada al panel de Pimia.** Exige `admin:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1535
1906
  */
1536
- get: operations["general.getAllUsedCurrencies"];
1907
+ get: operations["gestoriaLink.asesorias"];
1537
1908
  put?: never;
1538
1909
  post?: never;
1539
1910
  delete?: never;
@@ -1542,39 +1913,113 @@ export interface paths {
1542
1913
  patch?: never;
1543
1914
  trace?: never;
1544
1915
  };
1545
- "/company/settings": {
1916
+ "/gestoria-link/status": {
1546
1917
  parameters: {
1547
1918
  query?: never;
1548
1919
  header?: never;
1549
1920
  path?: never;
1550
1921
  cookie?: never;
1551
1922
  };
1552
- /** Handle the incoming request */
1553
- get: operations["settings.getCompanySettings"];
1923
+ /** @description **Reservada al panel de Pimia.** Exige `admin:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí. */
1924
+ get: operations["gestoriaLink.status"];
1554
1925
  put?: never;
1555
- /** Handle the incoming request */
1556
- post: operations["settings.updateCompanySettings"];
1926
+ post?: never;
1557
1927
  delete?: never;
1558
1928
  options?: never;
1559
1929
  head?: never;
1560
1930
  patch?: never;
1561
1931
  trace?: never;
1562
1932
  };
1563
- "/currencies/{currency}/exchange-rate": {
1933
+ "/gestoria-link/request": {
1564
1934
  parameters: {
1565
1935
  query?: never;
1566
1936
  header?: never;
1567
1937
  path?: never;
1568
1938
  cookie?: never;
1569
1939
  };
1940
+ get?: never;
1941
+ put?: never;
1570
1942
  /**
1571
- * El último tipo de cambio conocido de esta moneda contra la de la empresa
1572
- * @description **Catálogo `meta`.** Lectura libre: la alcanza cualquier token válido, sin scope y sin consentimiento adicional del dueño del tenant.
1573
- *
1574
- * ⚠️ **Las dos ramas responden `200`.** Cuando hay cambio registrado viene
1575
- * `exchangeRate`, un array de un solo elemento (así lo consume
1576
- * `ExchangeRateConverter.vue`); cuando no hay ninguno viene
1577
- * `error: no_exchange_rate_available` — con `200`, no con `404`. Quien
1943
+ * Request linkage: accepts gestoria_id (select from list) or link_code (manual code)
1944
+ * @description **Reservada al panel de Pimia.** Exige `admin:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
1945
+ */
1946
+ post: operations["gestoriaLink.request"];
1947
+ delete?: never;
1948
+ options?: never;
1949
+ head?: never;
1950
+ patch?: never;
1951
+ trace?: never;
1952
+ };
1953
+ "/gestoria-link/revoke": {
1954
+ parameters: {
1955
+ query?: never;
1956
+ header?: never;
1957
+ path?: never;
1958
+ cookie?: never;
1959
+ };
1960
+ get?: never;
1961
+ put?: never;
1962
+ post?: never;
1963
+ /** @description **Reservada al panel de Pimia.** Exige `admin:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí. */
1964
+ delete: operations["gestoriaLink.revoke"];
1965
+ options?: never;
1966
+ head?: never;
1967
+ patch?: never;
1968
+ trace?: never;
1969
+ };
1970
+ "/currencies/used": {
1971
+ parameters: {
1972
+ query?: never;
1973
+ header?: never;
1974
+ path?: never;
1975
+ cookie?: never;
1976
+ };
1977
+ /**
1978
+ * Handle the incoming request
1979
+ * @description **Catálogo `meta`.** Lectura libre: la alcanza cualquier token válido, sin scope y sin consentimiento adicional del dueño del tenant.
1980
+ */
1981
+ get: operations["general.getAllUsedCurrencies"];
1982
+ put?: never;
1983
+ post?: never;
1984
+ delete?: never;
1985
+ options?: never;
1986
+ head?: never;
1987
+ patch?: never;
1988
+ trace?: never;
1989
+ };
1990
+ "/company/settings": {
1991
+ parameters: {
1992
+ query?: never;
1993
+ header?: never;
1994
+ path?: never;
1995
+ cookie?: never;
1996
+ };
1997
+ /** Handle the incoming request */
1998
+ get: operations["settings.getCompanySettings"];
1999
+ put?: never;
2000
+ /** Handle the incoming request */
2001
+ post: operations["settings.updateCompanySettings"];
2002
+ delete?: never;
2003
+ options?: never;
2004
+ head?: never;
2005
+ patch?: never;
2006
+ trace?: never;
2007
+ };
2008
+ "/currencies/{currency}/exchange-rate": {
2009
+ parameters: {
2010
+ query?: never;
2011
+ header?: never;
2012
+ path?: never;
2013
+ cookie?: never;
2014
+ };
2015
+ /**
2016
+ * El último tipo de cambio conocido de esta moneda contra la de la empresa
2017
+ * @description **Catálogo `meta`.** Lectura libre: la alcanza cualquier token válido, sin scope y sin consentimiento adicional del dueño del tenant.
2018
+ *
2019
+ * ⚠️ **Las dos ramas responden `200`.** Cuando hay cambio registrado viene
2020
+ * `exchangeRate`, un array de un solo elemento (así lo consume
2021
+ * `ExchangeRateConverter.vue`); cuando no hay ninguno viene
2022
+ * `error: no_exchange_rate_available` — con `200`, no con `404`. Quien
1578
2023
  * llame tiene que mirar QUÉ clave llegó, no el código de estado.
1579
2024
  *
1580
2025
  * Una moneda que no existe sí es un `404`, y también la empresa sin ajuste
@@ -3247,8 +3692,8 @@ export interface paths {
3247
3692
  *
3248
3693
  * ⚠️ `total_credits` y `total_debits` SÍ son cadenas, y a propósito: son
3249
3694
  * `SUM(amount)` sobre una columna `decimal(15,2)` que PostgreSQL entrega
3250
- * como texto, y van en EUROS con decimales como el resto de la banca —no en
3251
- * céntimos como el resto de la API.
3695
+ * como texto, y van en la UNIDAD MAYOR de la moneda, con decimales, como el
3696
+ * resto de la banca —no en subunidades enteras como el resto de la API.
3252
3697
  */
3253
3698
  get: operations["reconciliation.summary"];
3254
3699
  put?: never;
@@ -3289,10 +3734,10 @@ export interface paths {
3289
3734
  * ordenados por `score` descendente (importe, proximidad de fecha,
3290
3735
  * referencia y nombre del cliente).
3291
3736
  *
3292
- * **`amount` va en céntimos**, como el `total` del que sale y como todo
3293
- * importe de documento en esta API. No lo confundas con
3294
- * `bank_transactions.amount`, que sí va en euros con decimales por ser el
3295
- * reflejo de un extracto bancario. `number` es `null` en los borradores,
3737
+ * **`amount` va en subunidades enteras**, como el `total` del que sale y como
3738
+ * todo importe de documento en esta API. No lo confundas con
3739
+ * `bank_transactions.amount`, que sí va en la unidad mayor con decimales por
3740
+ * ser el reflejo de un extracto bancario. `number` es `null` en los borradores,
3296
3741
  * que nacen sin numerar: el identificador estable es `model.id`.
3297
3742
  */
3298
3743
  get: operations["reconciliation.suggestions"];
@@ -4096,7 +4541,7 @@ export interface paths {
4096
4541
  put?: never;
4097
4542
  /**
4098
4543
  * POST tasks/{task}/delegate — delega esta tarea CRM a su agente Pim
4099
- * @description **No disponible para integradores.** Exige `delegation:write`, que el Authorization Server de Pimia no emite: la acción la realiza el dueño desde su panel y un token de partner recibe `403`. Aparece en el contrato para que el hueco sea explícito, no para que se llame.
4544
+ * @description **Reservada al panel de Pimia.** Exige `crm:write`, `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir esos scopes —se le rechazan en el registro y no se le anuncian— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4100
4545
  *
4101
4546
  * Reusa el plano async `delegated_tasks` (el mismo que ya cierra el round-trip
4102
4547
  * delegar→agente→callback→sello): compone un context rico desde la tarea (título,
@@ -4228,6 +4673,144 @@ export interface paths {
4228
4673
  patch?: never;
4229
4674
  trace?: never;
4230
4675
  };
4676
+ "/delegated-tasks": {
4677
+ parameters: {
4678
+ query?: never;
4679
+ header?: never;
4680
+ path?: never;
4681
+ cookie?: never;
4682
+ };
4683
+ /**
4684
+ * El poll del agente: sus tareas delegadas y aún sin resolver
4685
+ * @description **Reservada al panel de Pimia.** Exige `delegation:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4686
+ *
4687
+ * Solo tareas del propio tenant que estén `pending` o `in_progress`. Cada
4688
+ * una viaja con su señal de autonomía —`write_effect`, `default_mode` y
4689
+ * `verifiability_level`—, que es lo que le dice al agente si puede aplicar
4690
+ * directamente o tiene que proponer y esperar aprobación.
4691
+ */
4692
+ get: operations["tenantDelegationCallback.delegatedIndex"];
4693
+ put?: never;
4694
+ post?: never;
4695
+ delete?: never;
4696
+ options?: never;
4697
+ head?: never;
4698
+ patch?: never;
4699
+ trace?: never;
4700
+ };
4701
+ "/delegated-tasks/{id}/claim": {
4702
+ parameters: {
4703
+ query?: never;
4704
+ header?: never;
4705
+ path?: never;
4706
+ cookie?: never;
4707
+ };
4708
+ get?: never;
4709
+ put?: never;
4710
+ /**
4711
+ * El agente RECLAMA una tarea pendiente y la pone en curso
4712
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4713
+ *
4714
+ * Idempotente: reclamar una que ya se tenía devuelve la misma tarea sin
4715
+ * efecto. Una ya resuelta no se re-reclama (`409`), y una que no es del
4716
+ * propio tenant no existe (`404`).
4717
+ */
4718
+ post: operations["tenantDelegationCallback.taskClaim"];
4719
+ delete?: never;
4720
+ options?: never;
4721
+ head?: never;
4722
+ patch?: never;
4723
+ trace?: never;
4724
+ };
4725
+ "/delegated-tasks/{id}/propose": {
4726
+ parameters: {
4727
+ query?: never;
4728
+ header?: never;
4729
+ path?: never;
4730
+ cookie?: never;
4731
+ };
4732
+ get?: never;
4733
+ put?: never;
4734
+ /**
4735
+ * El agente PROPONE un borrador reversible en vez de aplicarlo
4736
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4737
+ *
4738
+ * Preview-antes-de-aplicar: para lo que muta datos, el agente no escribe —
4739
+ * manda su propuesta (`summary`, `changes[]`, `evals[]`), la tarea sigue en
4740
+ * curso y el dueño decide. Es el checkpoint reversible.
4741
+ *
4742
+ * `409` si la propuesta ya fue aprobada: esa decisión no se pisa con un
4743
+ * re-propose que llega tarde. `422` si la tarea no admite propuesta porque
4744
+ * ya corre en modo autónomo — ahí lo que toca es `complete`.
4745
+ *
4746
+ * El sello de verifiabilidad lo deriva el servidor de los `evals`; el que
4747
+ * venga en el cuerpo se reemplaza.
4748
+ */
4749
+ post: operations["tenantDelegationCallback.taskPropose"];
4750
+ delete?: never;
4751
+ options?: never;
4752
+ head?: never;
4753
+ patch?: never;
4754
+ trace?: never;
4755
+ };
4756
+ "/delegated-tasks/{id}/complete": {
4757
+ parameters: {
4758
+ query?: never;
4759
+ header?: never;
4760
+ path?: never;
4761
+ cookie?: never;
4762
+ };
4763
+ get?: never;
4764
+ put?: never;
4765
+ /**
4766
+ * El agente reporta la tarea COMPLETADA, con un resultado verificable
4767
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4768
+ *
4769
+ * Acepta el `result_data` estructurado (preferido) y/o un `result` en prosa;
4770
+ * al menos uno es obligatorio. Idempotente sobre una tarea ya completada.
4771
+ *
4772
+ * Lo que puede cerrarse directo depende del modo: en modo autónomo sí, y en
4773
+ * modo `preview` hace falta una propuesta aprobada — el agente no se salta
4774
+ * su propio checkpoint (`409`, con `code: proposal_required`).
4775
+ *
4776
+ * ⚠️ Reportar «completada» no basta para quedar aplicada. Si la tarea
4777
+ * reclama escrituras, el reporte tiene que traer evidencia —sello `pass`
4778
+ * derivado de los `evals`—: un reporte que declara fallo, o que llega sin
4779
+ * esa evidencia, cierra la tarea como `failed`. `applied_at` afirma que las
4780
+ * escrituras aprobadas ocurrieron, así que no se presume del visto bueno.
4781
+ */
4782
+ post: operations["tenantDelegationCallback.taskComplete"];
4783
+ delete?: never;
4784
+ options?: never;
4785
+ head?: never;
4786
+ patch?: never;
4787
+ trace?: never;
4788
+ };
4789
+ "/delegated-tasks/{id}/fail": {
4790
+ parameters: {
4791
+ query?: never;
4792
+ header?: never;
4793
+ path?: never;
4794
+ cookie?: never;
4795
+ };
4796
+ get?: never;
4797
+ put?: never;
4798
+ /**
4799
+ * El agente reporta la tarea FALLIDA
4800
+ * @description **Reservada al panel de Pimia.** Exige `delegation:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
4801
+ *
4802
+ * Igual que al completar, hace falta al menos `result` (prosa) o
4803
+ * `result_data` (estructurado): una tarea fallida también lleva su sello
4804
+ * derivado por el servidor, para que el panel pinte los `evals` honestos y
4805
+ * no lo que el agente diga de sí mismo.
4806
+ */
4807
+ post: operations["tenantDelegationCallback.taskFail"];
4808
+ delete?: never;
4809
+ options?: never;
4810
+ head?: never;
4811
+ patch?: never;
4812
+ trace?: never;
4813
+ };
4231
4814
  "/tenant-modules": {
4232
4815
  parameters: {
4233
4816
  query?: never;
@@ -4807,6 +5390,98 @@ export interface paths {
4807
5390
  patch?: never;
4808
5391
  trace?: never;
4809
5392
  };
5393
+ "/settings/verifactu": {
5394
+ parameters: {
5395
+ query?: never;
5396
+ header?: never;
5397
+ path?: never;
5398
+ cookie?: never;
5399
+ };
5400
+ /**
5401
+ * Get the current VeriFactu configuration (taxpayer data)
5402
+ * @description **Reservada al panel de Pimia.** Exige `verifactu:read`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
5403
+ *
5404
+ * LEE Y NADA MÁS. Hasta 2026-08-22 este GET creaba el contribuyente en
5405
+ * VeriFactu si no existía: `resolveTaxpayer` intentaba SIEMPRE el
5406
+ * `createTaxpayer` y además escribía `verifactu_taxpayer_id` en el tenant.
5407
+ * O sea que abrir la pantalla de ajustes daba de alta a la empresa ante un
5408
+ * tercero, y un `GET` repetido por un monitor o un prefetch la daba de alta
5409
+ * sola. Un GET que registra a la empresa en la AEAT no es una lectura.
5410
+ *
5411
+ * Quien quiera crearlo lo pide explícitamente: `PUT /settings/verifactu`
5412
+ * (guardar la configuración, que es lo que hace el panel) o el
5413
+ * `POST /settings/verifactu/taxpayer` de abajo. Mientras no exista, esto
5414
+ * devuelve el payload vacío, que ya distingue el caso con
5415
+ * `authorization_status = 'none'`.
5416
+ */
5417
+ get: operations["veriFactuSettings.index"];
5418
+ /**
5419
+ * Update VeriFactu settings (environment, representative mode)
5420
+ * @description **Reservada al panel de Pimia.** Exige `verifactu:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
5421
+ *
5422
+ * Si hay taxpayer en VeriFactu, actualiza via API. Si el tenant aún no
5423
+ * tiene credencial, o faltan los datos para crear el contribuyente, guarda
5424
+ * en local para cuando se configure — ese es el único caso en que «guardado
5425
+ * localmente» es verdad y no un fallo disfrazado.
5426
+ *
5427
+ * Hasta 2026-08-27 CUALQUIER excepción caía al guardado local y contestaba
5428
+ * 200 «Configuración guardada localmente»: con VeriFactu caído, el
5429
+ * formulario decía «guardado» sobre un `is_production` que no llegó a donde
5430
+ * importa. Ahora un fallo de la API remota contesta 502 con el error.
5431
+ */
5432
+ put: operations["veriFactuSettings.update"];
5433
+ post?: never;
5434
+ delete?: never;
5435
+ options?: never;
5436
+ head?: never;
5437
+ patch?: never;
5438
+ trace?: never;
5439
+ };
5440
+ "/settings/verifactu/taxpayer": {
5441
+ parameters: {
5442
+ query?: never;
5443
+ header?: never;
5444
+ path?: never;
5445
+ cookie?: never;
5446
+ };
5447
+ get?: never;
5448
+ put?: never;
5449
+ /**
5450
+ * Alta explícita del contribuyente en VeriFactu
5451
+ * @description **Reservada al panel de Pimia.** Exige `verifactu:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
5452
+ *
5453
+ * Es el POST que se lleva el efecto que tenía el GET. Si ya existe, lo
5454
+ * devuelve sin crear nada (idempotente); si faltan el NIF o el nombre de la
5455
+ * empresa responde 422 diciéndolo, en vez de dejar un aviso en el log y
5456
+ * devolver un payload vacío que no explica por qué está vacío.
5457
+ */
5458
+ post: operations["veriFactuSettings.storeTaxpayer"];
5459
+ delete?: never;
5460
+ options?: never;
5461
+ head?: never;
5462
+ patch?: never;
5463
+ trace?: never;
5464
+ };
5465
+ "/settings/verifactu/certificate": {
5466
+ parameters: {
5467
+ query?: never;
5468
+ header?: never;
5469
+ path?: never;
5470
+ cookie?: never;
5471
+ };
5472
+ get?: never;
5473
+ put?: never;
5474
+ /**
5475
+ * Upload a .pfx/.p12 certificate to VeriFactu
5476
+ * @description **Reservada al panel de Pimia.** Exige `verifactu:write`, que el Authorization Server emite SOLO al client de primera parte: un client de integrador no puede pedir ese scope —se le rechaza en el registro y no se le anuncia— y con cualquier otro token la llamada recibe `403`. Está en el contrato porque es el panel web de Pimia quien la consume, y sus tipos salen de aquí.
5477
+ */
5478
+ post: operations["veriFactuSettings.uploadCertificate"];
5479
+ delete?: never;
5480
+ options?: never;
5481
+ head?: never;
5482
+ patch?: never;
5483
+ trace?: never;
5484
+ };
4810
5485
  "/settings/webhooks": {
4811
5486
  parameters: {
4812
5487
  query?: never;
@@ -5111,7 +5786,7 @@ export interface components {
5111
5786
  name: string;
5112
5787
  iban: string | null;
5113
5788
  bank_name: string | null;
5114
- /** @description EUROS con decimales (`2322.11` = 2.322,11 ), a diferencia del resto de la API, que cuenta el dinero en céntimos enteros. La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a céntimos enteros perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5789
+ /** @description En la UNIDAD MAYOR de la moneda de la cuenta, con decimales (`2322.11` son 2.322,11 de la moneda que declare su `currency_code`), a diferencia del resto de la API, que cuenta el dinero en SUBUNIDADES enteras (céntimos, en una moneda de dos decimales). La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a la subunidad perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5115
5790
  opening_balance: string;
5116
5791
  currency_code: string;
5117
5792
  enabled: boolean;
@@ -5121,7 +5796,7 @@ export interface components {
5121
5796
  updated_at: string | null;
5122
5797
  /** Format: date-time */
5123
5798
  deleted_at: string | null;
5124
- /** @description EUROS con decimales (`2322.11` = 2.322,11 ), a diferencia del resto de la API, que cuenta el dinero en céntimos enteros. La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a céntimos enteros perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5799
+ /** @description En la UNIDAD MAYOR de la moneda de la cuenta, con decimales (`2322.11` son 2.322,11 de la moneda que declare su `currency_code`), a diferencia del resto de la API, que cuenta el dinero en SUBUNIDADES enteras (céntimos, en una moneda de dos decimales). La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a la subunidad perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5125
5800
  balance: string;
5126
5801
  };
5127
5802
  /** BankImport */
@@ -5150,7 +5825,7 @@ export interface components {
5150
5825
  transaction_date: string;
5151
5826
  /** Format: date-time */
5152
5827
  value_date: string | null;
5153
- /** @description EUROS con decimales (`2322.11` = 2.322,11 ), a diferencia del resto de la API, que cuenta el dinero en céntimos enteros. La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a céntimos enteros perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5828
+ /** @description En la UNIDAD MAYOR de la moneda de la cuenta, con decimales (`2322.11` son 2.322,11 de la moneda que declare su `currency_code`), a diferencia del resto de la API, que cuenta el dinero en SUBUNIDADES enteras (céntimos, en una moneda de dos decimales). La banca es la excepción porque es lo que trae un extracto bancario: redondearlo a la subunidad perdería los decimales del apunte. La conciliación convierte al comparar con facturas y gastos. */
5154
5829
  amount: string;
5155
5830
  /**
5156
5831
  * @description Signo del apunte tal y como lo trae el extracto: `credit` entra dinero, `debit` sale. El importe va siempre en positivo, así que el signo es esto.
@@ -6081,10 +6756,11 @@ export interface components {
6081
6756
  sub_total?: number | null;
6082
6757
  total?: number | null;
6083
6758
  /**
6084
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6085
- * publicaba este campo como `string` —el generador deduce el tipo
6086
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6087
- * como 10,5 céntimos: medio céntimo, que no significa nada.
6759
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
6760
+ * de tipo, el contrato publicaba este campo como `string` —el
6761
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
6762
+ * que la columna guardaba como 10,5: media subunidad, que no
6763
+ * significa nada.
6088
6764
  */
6089
6765
  tax?: number | null;
6090
6766
  template_name?: string | null;
@@ -6226,10 +6902,11 @@ export interface components {
6226
6902
  exchange_rate?: string | null;
6227
6903
  payment_method_id?: string | null;
6228
6904
  /**
6229
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6230
- * publicaba este campo como `string` —el generador deduce el tipo
6231
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6232
- * como 10,5 céntimos: medio céntimo, que no significa nada.
6905
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
6906
+ * de tipo, el contrato publicaba este campo como `string` —el
6907
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
6908
+ * que la columna guardaba como 10,5: media subunidad, que no
6909
+ * significa nada.
6233
6910
  */
6234
6911
  amount: number;
6235
6912
  customer_id?: string | null;
@@ -6765,10 +7442,11 @@ export interface components {
6765
7442
  sub_total?: number | null;
6766
7443
  total?: number | null;
6767
7444
  /**
6768
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6769
- * publicaba este campo como `string` —el generador deduce el tipo
6770
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6771
- * como 10,5 céntimos: medio céntimo, que no significa nada.
7445
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
7446
+ * de tipo, el contrato publicaba este campo como `string` —el
7447
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
7448
+ * que la columna guardaba como 10,5: media subunidad, que no
7449
+ * significa nada.
6772
7450
  */
6773
7451
  tax?: number | null;
6774
7452
  /**
@@ -6946,10 +7624,11 @@ export interface components {
6946
7624
  ItemsRequest: {
6947
7625
  name: string;
6948
7626
  /**
6949
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6950
- * publicaba este campo como `string` —el generador deduce el tipo
6951
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6952
- * como 10,5 céntimos: medio céntimo, que no significa nada.
7627
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
7628
+ * de tipo, el contrato publicaba este campo como `string` —el
7629
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
7630
+ * que la columna guardaba como 10,5: media subunidad, que no
7631
+ * significa nada.
6953
7632
  */
6954
7633
  price: number;
6955
7634
  /** @enum {string|null} */
@@ -7248,12 +7927,20 @@ export interface components {
7248
7927
  currency?: components["schemas"]["CurrencyResource"] | null;
7249
7928
  transaction?: components["schemas"]["TransactionResource"] | null;
7250
7929
  };
7251
- /** ProfileRequest */
7930
+ /**
7931
+ * ProfileRequest
7932
+ * @description `PUT /me` — el nombre, el correo y la contraseña de quien llama.
7933
+ *
7934
+ * Cambiar el **correo** o la **contraseña** exige `current_password`, la
7935
+ * vigente. Cambiar solo el nombre no: `name` y `email` son los dos `required`,
7936
+ * así que reenviar el mismo correo no cuenta como cambio.
7937
+ */
7252
7938
  ProfileRequest: {
7253
7939
  name: string;
7254
7940
  password?: string | null;
7255
7941
  /** Format: email */
7256
7942
  email: string;
7943
+ current_password?: string;
7257
7944
  };
7258
7945
  /** ProjectRequest */
7259
7946
  ProjectRequest: {
@@ -7389,10 +8076,11 @@ export interface components {
7389
8076
  sub_total: number;
7390
8077
  total: number;
7391
8078
  /**
7392
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
7393
- * publicaba este campo como `string` —el generador deduce el tipo
7394
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
7395
- * como 10,5 céntimos: medio céntimo, que no significa nada.
8079
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
8080
+ * de tipo, el contrato publicaba este campo como `string` —el
8081
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
8082
+ * que la columna guardaba como 10,5: media subunidad, que no
8083
+ * significa nada.
7396
8084
  */
7397
8085
  tax: number;
7398
8086
  /**
@@ -7509,10 +8197,11 @@ export interface components {
7509
8197
  sub_total?: number | null;
7510
8198
  total?: number | null;
7511
8199
  /**
7512
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
7513
- * publicaba este campo como `string` —el generador deduce el tipo
7514
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
7515
- * como 10,5 céntimos: medio céntimo, que no significa nada.
8200
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
8201
+ * de tipo, el contrato publicaba este campo como `string` —el
8202
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
8203
+ * que la columna guardaba como 10,5: media subunidad, que no
8204
+ * significa nada.
7516
8205
  */
7517
8206
  tax?: number | null;
7518
8207
  /**
@@ -8801,7 +9490,7 @@ export interface operations {
8801
9490
  };
8802
9491
  content: {
8803
9492
  "application/json": {
8804
- version: null | unknown[] | string | Record<string, never>;
9493
+ version: string | null;
8805
9494
  /** @constant */
8806
9495
  channel: "stable";
8807
9496
  };
@@ -9765,66 +10454,154 @@ export interface operations {
9765
10454
  };
9766
10455
  };
9767
10456
  };
9768
- "contact.index": {
10457
+ "connectedApps.index": {
9769
10458
  parameters: {
9770
- query: {
9771
- customer_id: number;
9772
- };
10459
+ query?: never;
9773
10460
  header?: never;
9774
10461
  path?: never;
9775
10462
  cookie?: never;
9776
10463
  };
9777
10464
  requestBody?: never;
9778
10465
  responses: {
9779
- /** @description Array of `ContactResource` */
9780
10466
  200: {
9781
10467
  headers: {
9782
10468
  [name: string]: unknown;
9783
10469
  };
9784
10470
  content: {
9785
10471
  "application/json": {
9786
- data: components["schemas"]["ContactResource"][];
10472
+ data: {
10473
+ id: number;
10474
+ name: string;
10475
+ confidential: boolean;
10476
+ scopes: string[];
10477
+ permissions: {
10478
+ text: string;
10479
+ write: boolean;
10480
+ }[];
10481
+ summary: string;
10482
+ connected_at: string | null;
10483
+ last_used_at: string | null;
10484
+ active_tokens: number;
10485
+ credentials: {
10486
+ id: number;
10487
+ connected_at: string | null;
10488
+ last_used_at: string | null;
10489
+ expires_at: string | null;
10490
+ }[];
10491
+ }[];
9787
10492
  };
9788
10493
  };
9789
10494
  };
9790
- 403: components["responses"]["AuthorizationException"];
9791
- 422: components["responses"]["ValidationException"];
9792
10495
  };
9793
10496
  };
9794
- "contact.store": {
10497
+ "connectedApps.destroyCredential": {
9795
10498
  parameters: {
9796
10499
  query?: never;
9797
10500
  header?: never;
9798
- path?: never;
9799
- cookie?: never;
9800
- };
9801
- requestBody: {
9802
- content: {
9803
- "application/json": components["schemas"]["ContactRequest"];
10501
+ path: {
10502
+ credentialId: number;
9804
10503
  };
10504
+ cookie?: never;
9805
10505
  };
10506
+ requestBody?: never;
9806
10507
  responses: {
9807
- /** @description `ContactResource` */
9808
- 201: {
10508
+ 200: {
9809
10509
  headers: {
9810
10510
  [name: string]: unknown;
9811
10511
  };
9812
10512
  content: {
9813
10513
  "application/json": {
9814
- data: components["schemas"]["ContactResource"];
10514
+ message: string;
10515
+ revoked_tokens: number;
9815
10516
  };
9816
10517
  };
9817
10518
  };
9818
- 403: components["responses"]["AuthorizationException"];
9819
- 422: components["responses"]["ValidationException"];
9820
10519
  };
9821
10520
  };
9822
- "contact.show": {
10521
+ "connectedApps.destroy": {
9823
10522
  parameters: {
9824
10523
  query?: never;
9825
10524
  header?: never;
9826
10525
  path: {
9827
- /** @description The contact ID */
10526
+ authorizationId: number;
10527
+ };
10528
+ cookie?: never;
10529
+ };
10530
+ requestBody?: never;
10531
+ responses: {
10532
+ 200: {
10533
+ headers: {
10534
+ [name: string]: unknown;
10535
+ };
10536
+ content: {
10537
+ "application/json": {
10538
+ message: string;
10539
+ revoked_tokens: number;
10540
+ };
10541
+ };
10542
+ };
10543
+ };
10544
+ };
10545
+ "contact.index": {
10546
+ parameters: {
10547
+ query: {
10548
+ customer_id: number;
10549
+ };
10550
+ header?: never;
10551
+ path?: never;
10552
+ cookie?: never;
10553
+ };
10554
+ requestBody?: never;
10555
+ responses: {
10556
+ /** @description Array of `ContactResource` */
10557
+ 200: {
10558
+ headers: {
10559
+ [name: string]: unknown;
10560
+ };
10561
+ content: {
10562
+ "application/json": {
10563
+ data: components["schemas"]["ContactResource"][];
10564
+ };
10565
+ };
10566
+ };
10567
+ 403: components["responses"]["AuthorizationException"];
10568
+ 422: components["responses"]["ValidationException"];
10569
+ };
10570
+ };
10571
+ "contact.store": {
10572
+ parameters: {
10573
+ query?: never;
10574
+ header?: never;
10575
+ path?: never;
10576
+ cookie?: never;
10577
+ };
10578
+ requestBody: {
10579
+ content: {
10580
+ "application/json": components["schemas"]["ContactRequest"];
10581
+ };
10582
+ };
10583
+ responses: {
10584
+ /** @description `ContactResource` */
10585
+ 201: {
10586
+ headers: {
10587
+ [name: string]: unknown;
10588
+ };
10589
+ content: {
10590
+ "application/json": {
10591
+ data: components["schemas"]["ContactResource"];
10592
+ };
10593
+ };
10594
+ };
10595
+ 403: components["responses"]["AuthorizationException"];
10596
+ 422: components["responses"]["ValidationException"];
10597
+ };
10598
+ };
10599
+ "contact.show": {
10600
+ parameters: {
10601
+ query?: never;
10602
+ header?: never;
10603
+ path: {
10604
+ /** @description The contact ID */
9828
10605
  contact: number;
9829
10606
  };
9830
10607
  cookie?: never;
@@ -10264,7 +11041,7 @@ export interface operations {
10264
11041
  "customers.index": {
10265
11042
  parameters: {
10266
11043
  query?: {
10267
- /** @description Con `summary`, cada fila trae solo los campos del listado: nombre, contacto, NIF, saldo pendiente neto en céntimos y fechas — sin direcciones, campos personalizados, empresa, moneda ni método de pago, y sin el avatar (que cuesta una consulta por fila). Pensado para índices y para recuentos que solo leen el `meta`; la ficha completa sigue en el detalle y en el índice sin este parámetro. */
11044
+ /** @description Con `summary`, cada fila trae solo los campos del listado: nombre, contacto, NIF, saldo pendiente neto en subunidades y fechas — sin direcciones, campos personalizados, empresa, moneda ni método de pago, y sin el avatar (que cuesta una consulta por fila). Pensado para índices y para recuentos que solo leen el `meta`; la ficha completa sigue en el detalle y en el índice sin este parámetro. */
10268
11045
  view?: "summary";
10269
11046
  /** @description Devuelve solo el recurso que lleve esta referencia externa. El alcance es el client OAuth del token: cada integrador consulta las suyas y nunca ve las de otro. Combinado con la escritura de `external_ref`, es el find-or-create sin mantener ningún mapeo local. */
10270
11047
  external_ref?: string;
@@ -10535,6 +11312,512 @@ export interface operations {
10535
11312
  };
10536
11313
  };
10537
11314
  };
11315
+ "delegableCatalog.index": {
11316
+ parameters: {
11317
+ query?: never;
11318
+ header?: never;
11319
+ path?: never;
11320
+ cookie?: never;
11321
+ };
11322
+ requestBody?: never;
11323
+ responses: {
11324
+ 200: {
11325
+ headers: {
11326
+ [name: string]: unknown;
11327
+ };
11328
+ content: {
11329
+ "application/json": {
11330
+ hermes_configured: boolean;
11331
+ slug: string | null;
11332
+ tasks: {
11333
+ task_type: string;
11334
+ label: string;
11335
+ agent_skill: string | null;
11336
+ enabled: boolean;
11337
+ delegable: boolean;
11338
+ write_effect: boolean;
11339
+ default_mode: string;
11340
+ verifiability_level: number | null;
11341
+ icon: string | null;
11342
+ color: string | null;
11343
+ source: string | null;
11344
+ verified: boolean;
11345
+ skill_verified_at: string | null;
11346
+ retired_at: string | null;
11347
+ retired_reason: string | null;
11348
+ }[];
11349
+ };
11350
+ };
11351
+ };
11352
+ 403: components["responses"]["AuthorizationException"];
11353
+ };
11354
+ };
11355
+ "delegableCatalog.delegations": {
11356
+ parameters: {
11357
+ query?: never;
11358
+ header?: never;
11359
+ path?: never;
11360
+ cookie?: never;
11361
+ };
11362
+ requestBody?: never;
11363
+ responses: {
11364
+ 200: {
11365
+ headers: {
11366
+ [name: string]: unknown;
11367
+ };
11368
+ content: {
11369
+ "application/json": {
11370
+ copilot_url: string | null;
11371
+ delegations: {
11372
+ id: number;
11373
+ title: string;
11374
+ task_type: string | null;
11375
+ agent_skill: string | null;
11376
+ status: string;
11377
+ hermes_kanban_id: string | null;
11378
+ plane: string;
11379
+ origin_client_id: string | null;
11380
+ origin_client_name: string | null;
11381
+ result: string | null;
11382
+ result_data: {
11383
+ [key: string]: unknown;
11384
+ } | null;
11385
+ proposal: {
11386
+ [key: string]: unknown;
11387
+ } | null;
11388
+ proposal_status: string | null;
11389
+ proposed_at: string | null;
11390
+ applied_at: string | null;
11391
+ delegated_at: string | null;
11392
+ created_at: string | null;
11393
+ updated_at: string | null;
11394
+ }[];
11395
+ };
11396
+ };
11397
+ };
11398
+ 403: components["responses"]["AuthorizationException"];
11399
+ };
11400
+ };
11401
+ "delegableCatalog.approveProposal": {
11402
+ parameters: {
11403
+ query?: never;
11404
+ header?: never;
11405
+ path: {
11406
+ id: number;
11407
+ };
11408
+ cookie?: never;
11409
+ };
11410
+ requestBody?: {
11411
+ content: {
11412
+ "application/json": {
11413
+ human_touch_minutes?: number | null;
11414
+ /** @enum {string|null} */
11415
+ verification_outcome?: "pass" | "edit" | null;
11416
+ };
11417
+ };
11418
+ };
11419
+ responses: {
11420
+ 200: {
11421
+ headers: {
11422
+ [name: string]: unknown;
11423
+ };
11424
+ content: {
11425
+ "application/json": {
11426
+ task: {
11427
+ id: number;
11428
+ title: string;
11429
+ task_type: string | null;
11430
+ agent_skill: string | null;
11431
+ status: string;
11432
+ hermes_kanban_id: string | null;
11433
+ plane: string;
11434
+ origin_client_id: string | null;
11435
+ origin_client_name: string | null;
11436
+ result: string | null;
11437
+ result_data: {
11438
+ [key: string]: unknown;
11439
+ } | null;
11440
+ proposal: {
11441
+ [key: string]: unknown;
11442
+ } | null;
11443
+ proposal_status: string | null;
11444
+ proposed_at: string | null;
11445
+ applied_at: string | null;
11446
+ delegated_at: string | null;
11447
+ created_at: string | null;
11448
+ updated_at: string | null;
11449
+ };
11450
+ };
11451
+ };
11452
+ };
11453
+ 403: components["responses"]["AuthorizationException"];
11454
+ 422: components["responses"]["ValidationException"];
11455
+ };
11456
+ };
11457
+ "delegableCatalog.rejectProposal": {
11458
+ parameters: {
11459
+ query?: never;
11460
+ header?: never;
11461
+ path: {
11462
+ id: number;
11463
+ };
11464
+ cookie?: never;
11465
+ };
11466
+ requestBody?: {
11467
+ content: {
11468
+ "application/json": {
11469
+ reason?: string | null;
11470
+ human_touch_minutes?: number | null;
11471
+ };
11472
+ };
11473
+ };
11474
+ responses: {
11475
+ 200: {
11476
+ headers: {
11477
+ [name: string]: unknown;
11478
+ };
11479
+ content: {
11480
+ "application/json": {
11481
+ task: {
11482
+ id: number;
11483
+ title: string;
11484
+ task_type: string | null;
11485
+ agent_skill: string | null;
11486
+ status: string;
11487
+ hermes_kanban_id: string | null;
11488
+ plane: string;
11489
+ origin_client_id: string | null;
11490
+ origin_client_name: string | null;
11491
+ result: string | null;
11492
+ result_data: {
11493
+ [key: string]: unknown;
11494
+ } | null;
11495
+ proposal: {
11496
+ [key: string]: unknown;
11497
+ } | null;
11498
+ proposal_status: string | null;
11499
+ proposed_at: string | null;
11500
+ applied_at: string | null;
11501
+ delegated_at: string | null;
11502
+ created_at: string | null;
11503
+ updated_at: string | null;
11504
+ };
11505
+ };
11506
+ };
11507
+ };
11508
+ 403: components["responses"]["AuthorizationException"];
11509
+ 422: components["responses"]["ValidationException"];
11510
+ };
11511
+ };
11512
+ "delegableCatalog.needsChangesProposal": {
11513
+ parameters: {
11514
+ query?: never;
11515
+ header?: never;
11516
+ path: {
11517
+ id: number;
11518
+ };
11519
+ cookie?: never;
11520
+ };
11521
+ requestBody?: {
11522
+ content: {
11523
+ "application/json": {
11524
+ reason?: string | null;
11525
+ };
11526
+ };
11527
+ };
11528
+ responses: {
11529
+ 200: {
11530
+ headers: {
11531
+ [name: string]: unknown;
11532
+ };
11533
+ content: {
11534
+ "application/json": {
11535
+ task: {
11536
+ id: number;
11537
+ title: string;
11538
+ task_type: string | null;
11539
+ agent_skill: string | null;
11540
+ status: string;
11541
+ hermes_kanban_id: string | null;
11542
+ plane: string;
11543
+ origin_client_id: string | null;
11544
+ origin_client_name: string | null;
11545
+ result: string | null;
11546
+ result_data: {
11547
+ [key: string]: unknown;
11548
+ } | null;
11549
+ proposal: {
11550
+ [key: string]: unknown;
11551
+ } | null;
11552
+ proposal_status: string | null;
11553
+ proposed_at: string | null;
11554
+ applied_at: string | null;
11555
+ delegated_at: string | null;
11556
+ created_at: string | null;
11557
+ updated_at: string | null;
11558
+ };
11559
+ };
11560
+ };
11561
+ };
11562
+ 403: components["responses"]["AuthorizationException"];
11563
+ 422: components["responses"]["ValidationException"];
11564
+ };
11565
+ };
11566
+ "delegableCatalog.upsert": {
11567
+ parameters: {
11568
+ query?: never;
11569
+ header?: never;
11570
+ path: {
11571
+ task_type: string;
11572
+ };
11573
+ cookie?: never;
11574
+ };
11575
+ requestBody: {
11576
+ content: {
11577
+ "application/json": {
11578
+ agent_skill: string;
11579
+ label: string;
11580
+ write_effect?: boolean;
11581
+ verifiability_level?: number | null;
11582
+ icon?: string | null;
11583
+ color?: string | null;
11584
+ };
11585
+ };
11586
+ };
11587
+ responses: {
11588
+ 200: {
11589
+ headers: {
11590
+ [name: string]: unknown;
11591
+ };
11592
+ content: {
11593
+ "application/json": {
11594
+ task: {
11595
+ task_type: string;
11596
+ label: string;
11597
+ agent_skill: string | null;
11598
+ enabled: boolean;
11599
+ delegable: boolean;
11600
+ write_effect: boolean;
11601
+ default_mode: string;
11602
+ verifiability_level: number | null;
11603
+ icon: string | null;
11604
+ color: string | null;
11605
+ source: string | null;
11606
+ verified: boolean;
11607
+ skill_verified_at: string | null;
11608
+ retired_at: string | null;
11609
+ retired_reason: string | null;
11610
+ };
11611
+ verified: boolean;
11612
+ };
11613
+ };
11614
+ };
11615
+ 403: components["responses"]["AuthorizationException"];
11616
+ 422: components["responses"]["ValidationException"];
11617
+ };
11618
+ };
11619
+ "delegableCatalog.disable": {
11620
+ parameters: {
11621
+ query?: never;
11622
+ header?: never;
11623
+ path: {
11624
+ task_type: string;
11625
+ };
11626
+ cookie?: never;
11627
+ };
11628
+ requestBody?: never;
11629
+ responses: {
11630
+ 200: {
11631
+ headers: {
11632
+ [name: string]: unknown;
11633
+ };
11634
+ content: {
11635
+ "application/json": {
11636
+ task: {
11637
+ task_type: string;
11638
+ label: string;
11639
+ agent_skill: string | null;
11640
+ enabled: boolean;
11641
+ delegable: boolean;
11642
+ write_effect: boolean;
11643
+ default_mode: string;
11644
+ verifiability_level: number | null;
11645
+ icon: string | null;
11646
+ color: string | null;
11647
+ source: string | null;
11648
+ verified: boolean;
11649
+ skill_verified_at: string | null;
11650
+ retired_at: string | null;
11651
+ retired_reason: string | null;
11652
+ };
11653
+ };
11654
+ };
11655
+ };
11656
+ 403: components["responses"]["AuthorizationException"];
11657
+ };
11658
+ };
11659
+ "delegableCatalog.discover": {
11660
+ parameters: {
11661
+ query?: never;
11662
+ header?: never;
11663
+ path?: never;
11664
+ cookie?: never;
11665
+ };
11666
+ requestBody?: never;
11667
+ responses: {
11668
+ 200: {
11669
+ headers: {
11670
+ [name: string]: unknown;
11671
+ };
11672
+ content: {
11673
+ "application/json": {
11674
+ slug: string;
11675
+ skills: {
11676
+ agent_skill: string;
11677
+ task_type: string;
11678
+ label: string;
11679
+ description: string | null;
11680
+ disabled_on_hermes: boolean;
11681
+ write_effect: boolean;
11682
+ verifiability_level: number | null;
11683
+ in_catalog: boolean;
11684
+ enabled: boolean;
11685
+ }[];
11686
+ };
11687
+ };
11688
+ };
11689
+ 403: components["responses"]["AuthorizationException"];
11690
+ };
11691
+ };
11692
+ "delegableCatalog.reverify": {
11693
+ parameters: {
11694
+ query?: never;
11695
+ header?: never;
11696
+ path: {
11697
+ task_type: string;
11698
+ };
11699
+ cookie?: never;
11700
+ };
11701
+ requestBody?: never;
11702
+ responses: {
11703
+ 200: {
11704
+ headers: {
11705
+ [name: string]: unknown;
11706
+ };
11707
+ content: {
11708
+ "application/json": {
11709
+ task: {
11710
+ task_type: string;
11711
+ label: string;
11712
+ agent_skill: string | null;
11713
+ enabled: boolean;
11714
+ delegable: boolean;
11715
+ write_effect: boolean;
11716
+ default_mode: string;
11717
+ verifiability_level: number | null;
11718
+ icon: string | null;
11719
+ color: string | null;
11720
+ source: string | null;
11721
+ verified: boolean;
11722
+ skill_verified_at: string | null;
11723
+ retired_at: string | null;
11724
+ retired_reason: string | null;
11725
+ };
11726
+ verified: boolean;
11727
+ };
11728
+ };
11729
+ };
11730
+ 403: components["responses"]["AuthorizationException"];
11731
+ };
11732
+ };
11733
+ "delegableCatalog.execute": {
11734
+ parameters: {
11735
+ query?: never;
11736
+ header?: never;
11737
+ path?: never;
11738
+ cookie?: never;
11739
+ };
11740
+ requestBody: {
11741
+ content: {
11742
+ "application/json": {
11743
+ prompt: string;
11744
+ task_type?: string | null;
11745
+ };
11746
+ };
11747
+ };
11748
+ responses: {
11749
+ 200: {
11750
+ headers: {
11751
+ [name: string]: unknown;
11752
+ };
11753
+ content: {
11754
+ "application/json": {
11755
+ skill: string | null;
11756
+ response: string;
11757
+ usage: {
11758
+ [key: string]: unknown;
11759
+ } | null;
11760
+ };
11761
+ };
11762
+ };
11763
+ 403: components["responses"]["AuthorizationException"];
11764
+ 422: components["responses"]["ValidationException"];
11765
+ };
11766
+ };
11767
+ "delegableCatalog.delegate": {
11768
+ parameters: {
11769
+ query?: never;
11770
+ header?: never;
11771
+ path?: never;
11772
+ cookie?: never;
11773
+ };
11774
+ requestBody: {
11775
+ content: {
11776
+ "application/json": {
11777
+ title: string;
11778
+ task_type?: string | null;
11779
+ context?: string | null;
11780
+ };
11781
+ };
11782
+ };
11783
+ responses: {
11784
+ 200: {
11785
+ headers: {
11786
+ [name: string]: unknown;
11787
+ };
11788
+ content: {
11789
+ "application/json": {
11790
+ task: {
11791
+ id: number;
11792
+ title: string;
11793
+ task_type: string | null;
11794
+ agent_skill: string | null;
11795
+ status: string;
11796
+ hermes_kanban_id: string | null;
11797
+ plane: string;
11798
+ origin_client_id: string | null;
11799
+ origin_client_name: string | null;
11800
+ result: string | null;
11801
+ result_data: {
11802
+ [key: string]: unknown;
11803
+ } | null;
11804
+ proposal: {
11805
+ [key: string]: unknown;
11806
+ } | null;
11807
+ proposal_status: string | null;
11808
+ proposed_at: string | null;
11809
+ applied_at: string | null;
11810
+ delegated_at: string | null;
11811
+ created_at: string | null;
11812
+ updated_at: string | null;
11813
+ };
11814
+ };
11815
+ };
11816
+ };
11817
+ 403: components["responses"]["AuthorizationException"];
11818
+ 422: components["responses"]["ValidationException"];
11819
+ };
11820
+ };
10538
11821
  "deliveryNotes.markDelivered": {
10539
11822
  parameters: {
10540
11823
  query?: never;
@@ -11145,7 +12428,7 @@ export interface operations {
11145
12428
  "estimates.index": {
11146
12429
  parameters: {
11147
12430
  query?: {
11148
- /** @description Con `summary`, cada fila trae solo los campos del listado: fechas, número, estado, importes en céntimos, el cliente reducido a `{id, name, email, phone}` y la URL del PDF — sin líneas, impuestos, empresa ni moneda. Pensado para índices y para recuentos que solo leen el `meta`; el documento completo sigue en el detalle y en el índice sin este parámetro. */
12431
+ /** @description Con `summary`, cada fila trae solo los campos del listado: fechas, número, estado, importes en subunidades, el cliente reducido a `{id, name, email, phone}` y la URL del PDF — sin líneas, impuestos, empresa ni moneda. Pensado para índices y para recuentos que solo leen el `meta`; el documento completo sigue en el detalle y en el índice sin este parámetro. */
11149
12432
  view?: "summary";
11150
12433
  /** @description Devuelve solo el recurso que lleve esta referencia externa. El alcance es el client OAuth del token: cada integrador consulta las suyas y nunca ve las de otro. Combinado con la escritura de `external_ref`, es el find-or-create sin mantener ningún mapeo local. */
11151
12434
  external_ref?: string;
@@ -11784,6 +13067,165 @@ export interface operations {
11784
13067
  422: components["responses"]["ValidationException"];
11785
13068
  };
11786
13069
  };
13070
+ "gestoriaLink.asesorias": {
13071
+ parameters: {
13072
+ query?: {
13073
+ q?: string;
13074
+ };
13075
+ header?: never;
13076
+ path?: never;
13077
+ cookie?: never;
13078
+ };
13079
+ requestBody?: never;
13080
+ responses: {
13081
+ 200: {
13082
+ headers: {
13083
+ [name: string]: unknown;
13084
+ };
13085
+ content: {
13086
+ "application/json": {
13087
+ data: {
13088
+ id: string;
13089
+ name: string;
13090
+ nif_masked: string | null;
13091
+ email: string;
13092
+ }[];
13093
+ };
13094
+ };
13095
+ };
13096
+ };
13097
+ };
13098
+ "gestoriaLink.status": {
13099
+ parameters: {
13100
+ query?: never;
13101
+ header?: never;
13102
+ path?: never;
13103
+ cookie?: never;
13104
+ };
13105
+ requestBody?: never;
13106
+ responses: {
13107
+ 200: {
13108
+ headers: {
13109
+ [name: string]: unknown;
13110
+ };
13111
+ content: {
13112
+ "application/json": {
13113
+ data: {
13114
+ id: number;
13115
+ status: string;
13116
+ link_code: string;
13117
+ /** Format: date-time */
13118
+ requested_at: string | null;
13119
+ /** Format: date-time */
13120
+ accepted_at: string | null;
13121
+ permissions: unknown[] | null | {
13122
+ read_invoices: boolean;
13123
+ read_customers: boolean;
13124
+ read_suppliers: boolean;
13125
+ export_accounting: boolean;
13126
+ delete_data: boolean;
13127
+ };
13128
+ gestoria: {
13129
+ id: string | null;
13130
+ name: string | null;
13131
+ nif: string | null;
13132
+ email: string | null;
13133
+ phone: string | null;
13134
+ };
13135
+ } | {
13136
+ /** @constant */
13137
+ status: "none";
13138
+ permissions: {
13139
+ read_invoices: boolean;
13140
+ read_customers: boolean;
13141
+ read_suppliers: boolean;
13142
+ export_accounting: boolean;
13143
+ delete_data: boolean;
13144
+ };
13145
+ };
13146
+ };
13147
+ };
13148
+ };
13149
+ 404: components["responses"]["ModelNotFoundException"];
13150
+ };
13151
+ };
13152
+ "gestoriaLink.request": {
13153
+ parameters: {
13154
+ query?: never;
13155
+ header?: never;
13156
+ path?: never;
13157
+ cookie?: never;
13158
+ };
13159
+ requestBody?: {
13160
+ content: {
13161
+ "application/json": {
13162
+ gestoria_id?: number | null;
13163
+ link_code?: string | null;
13164
+ };
13165
+ };
13166
+ };
13167
+ responses: {
13168
+ 201: {
13169
+ headers: {
13170
+ [name: string]: unknown;
13171
+ };
13172
+ content: {
13173
+ "application/json": {
13174
+ /** @constant */
13175
+ message: "Solicitud enviada a la asesoría.";
13176
+ data: {
13177
+ id: number;
13178
+ status: string;
13179
+ link_code: string;
13180
+ /** Format: date-time */
13181
+ requested_at: string | null;
13182
+ /** Format: date-time */
13183
+ accepted_at: string | null;
13184
+ permissions: unknown[] | null | {
13185
+ read_invoices: boolean;
13186
+ read_customers: boolean;
13187
+ read_suppliers: boolean;
13188
+ export_accounting: boolean;
13189
+ delete_data: boolean;
13190
+ };
13191
+ gestoria: {
13192
+ id: string | null;
13193
+ name: string | null;
13194
+ nif: string | null;
13195
+ email: string | null;
13196
+ phone: string | null;
13197
+ };
13198
+ };
13199
+ };
13200
+ };
13201
+ };
13202
+ 404: components["responses"]["ModelNotFoundException"];
13203
+ 422: components["responses"]["ValidationException"];
13204
+ };
13205
+ };
13206
+ "gestoriaLink.revoke": {
13207
+ parameters: {
13208
+ query?: never;
13209
+ header?: never;
13210
+ path?: never;
13211
+ cookie?: never;
13212
+ };
13213
+ requestBody?: never;
13214
+ responses: {
13215
+ 200: {
13216
+ headers: {
13217
+ [name: string]: unknown;
13218
+ };
13219
+ content: {
13220
+ "application/json": {
13221
+ /** @constant */
13222
+ message: "Vinculación revocada.";
13223
+ };
13224
+ };
13225
+ };
13226
+ 404: components["responses"]["ModelNotFoundException"];
13227
+ };
13228
+ };
11787
13229
  "general.getAllUsedCurrencies": {
11788
13230
  parameters: {
11789
13231
  query?: never;
@@ -12964,7 +14406,7 @@ export interface operations {
12964
14406
  parameters: {
12965
14407
  query?: {
12966
14408
  limit?: string;
12967
- /** @description Con `summary`, cada fila trae solo los campos del listado: fechas, número, los tres ejes de estado (documento, cobro y AEAT), importes en céntimos —incluidos los netos de rectificativas—, el cliente reducido a `{id, name, email, phone}` y la URL del PDF; sin líneas, impuestos, pagos, empresa ni la factura rectificada. Pensado para índices y para recuentos que solo leen el `meta`; el documento completo sigue en el detalle y en el índice sin este parámetro. */
14409
+ /** @description Con `summary`, cada fila trae solo los campos del listado: fechas, número, los tres ejes de estado (documento, cobro y AEAT), importes en subunidades —incluidos los netos de rectificativas—, el cliente reducido a `{id, name, email, phone}` y la URL del PDF; sin líneas, impuestos, pagos, empresa ni la factura rectificada. Pensado para índices y para recuentos que solo leen el `meta`; el documento completo sigue en el detalle y en el índice sin este parámetro. */
12968
14410
  view?: "summary";
12969
14411
  /** @description Devuelve solo el recurso que lleve esta referencia externa. El alcance es el client OAuth del token: cada integrador consulta las suyas y nunca ve las de otro. Combinado con la escritura de `external_ref`, es el find-or-create sin mantener ningún mapeo local. */
12970
14412
  external_ref?: string;
@@ -17530,7 +18972,140 @@ export interface operations {
17530
18972
  query?: never;
17531
18973
  header?: never;
17532
18974
  path: {
17533
- hash: string;
18975
+ hash: string;
18976
+ };
18977
+ cookie?: never;
18978
+ };
18979
+ requestBody?: never;
18980
+ responses: {
18981
+ 200: {
18982
+ headers: {
18983
+ [name: string]: unknown;
18984
+ };
18985
+ content: {
18986
+ "application/pdf": Blob;
18987
+ };
18988
+ };
18989
+ 403: components["responses"]["AuthorizationException"];
18990
+ };
18991
+ };
18992
+ "tax-types.index": {
18993
+ parameters: {
18994
+ query?: never;
18995
+ header?: never;
18996
+ path?: never;
18997
+ cookie?: never;
18998
+ };
18999
+ requestBody?: never;
19000
+ responses: {
19001
+ /** @description Array of `TaxTypeResource` */
19002
+ 200: {
19003
+ headers: {
19004
+ [name: string]: unknown;
19005
+ };
19006
+ content: {
19007
+ "application/json": {
19008
+ data: components["schemas"]["TaxTypeResource"][];
19009
+ };
19010
+ };
19011
+ };
19012
+ 403: components["responses"]["AuthorizationException"];
19013
+ };
19014
+ };
19015
+ "tax-types.store": {
19016
+ parameters: {
19017
+ query?: never;
19018
+ header?: never;
19019
+ path?: never;
19020
+ cookie?: never;
19021
+ };
19022
+ requestBody: {
19023
+ content: {
19024
+ "application/json": components["schemas"]["TaxTypeRequest"];
19025
+ };
19026
+ };
19027
+ responses: {
19028
+ /** @description `TaxTypeResource` */
19029
+ 201: {
19030
+ headers: {
19031
+ [name: string]: unknown;
19032
+ };
19033
+ content: {
19034
+ "application/json": {
19035
+ data: components["schemas"]["TaxTypeResource"];
19036
+ };
19037
+ };
19038
+ };
19039
+ 403: components["responses"]["AuthorizationException"];
19040
+ 422: components["responses"]["ValidationException"];
19041
+ };
19042
+ };
19043
+ "tax-types.show": {
19044
+ parameters: {
19045
+ query?: never;
19046
+ header?: never;
19047
+ path: {
19048
+ /** @description The tax type ID */
19049
+ taxType: number;
19050
+ };
19051
+ cookie?: never;
19052
+ };
19053
+ requestBody?: never;
19054
+ responses: {
19055
+ /** @description `TaxTypeResource` */
19056
+ 200: {
19057
+ headers: {
19058
+ [name: string]: unknown;
19059
+ };
19060
+ content: {
19061
+ "application/json": {
19062
+ data: components["schemas"]["TaxTypeResource"];
19063
+ };
19064
+ };
19065
+ };
19066
+ 403: components["responses"]["AuthorizationException"];
19067
+ 404: components["responses"]["ModelNotFoundException"];
19068
+ };
19069
+ };
19070
+ "tax-types.update": {
19071
+ parameters: {
19072
+ query?: never;
19073
+ header?: never;
19074
+ path: {
19075
+ /** @description The tax type ID */
19076
+ taxType: number;
19077
+ };
19078
+ cookie?: never;
19079
+ };
19080
+ requestBody: {
19081
+ content: {
19082
+ "application/json": components["schemas"]["TaxTypeRequest"];
19083
+ };
19084
+ };
19085
+ responses: {
19086
+ /** @description `TaxTypeResource` */
19087
+ 200: {
19088
+ headers: {
19089
+ [name: string]: unknown;
19090
+ };
19091
+ content: {
19092
+ "application/json": {
19093
+ data: components["schemas"]["TaxTypeResource"];
19094
+ };
19095
+ };
19096
+ };
19097
+ 403: components["responses"]["AuthorizationException"];
19098
+ 404: components["responses"]["ModelNotFoundException"];
19099
+ 422: components["responses"]["ValidationException"];
19100
+ };
19101
+ };
19102
+ "tax-types.destroy": {
19103
+ parameters: {
19104
+ query?: never;
19105
+ header?: never;
19106
+ path: {
19107
+ /** @description The tax type ID */
19108
+ taxType: number;
17534
19109
  };
17535
19110
  cookie?: never;
17536
19111
  };
@@ -17541,133 +19116,235 @@ export interface operations {
17541
19116
  [name: string]: unknown;
17542
19117
  };
17543
19118
  content: {
17544
- "application/pdf": Blob;
19119
+ "application/json": {
19120
+ success: boolean;
19121
+ };
17545
19122
  };
17546
19123
  };
17547
19124
  403: components["responses"]["AuthorizationException"];
19125
+ 404: components["responses"]["ModelNotFoundException"];
17548
19126
  };
17549
19127
  };
17550
- "tax-types.index": {
19128
+ "taxTypes.toggleActive": {
17551
19129
  parameters: {
17552
19130
  query?: never;
17553
19131
  header?: never;
17554
- path?: never;
19132
+ path: {
19133
+ /** @description The tax type ID */
19134
+ taxType: number;
19135
+ };
17555
19136
  cookie?: never;
17556
19137
  };
17557
19138
  requestBody?: never;
17558
19139
  responses: {
17559
- /** @description Array of `TaxTypeResource` */
19140
+ /** @description `TaxTypeResource` */
17560
19141
  200: {
17561
19142
  headers: {
17562
19143
  [name: string]: unknown;
17563
19144
  };
17564
19145
  content: {
17565
19146
  "application/json": {
17566
- data: components["schemas"]["TaxTypeResource"][];
19147
+ data: components["schemas"]["TaxTypeResource"];
17567
19148
  };
17568
19149
  };
17569
19150
  };
17570
19151
  403: components["responses"]["AuthorizationException"];
19152
+ 404: components["responses"]["ModelNotFoundException"];
17571
19153
  };
17572
19154
  };
17573
- "tax-types.store": {
19155
+ "tenantDelegationCallback.delegatedIndex": {
17574
19156
  parameters: {
17575
19157
  query?: never;
17576
19158
  header?: never;
17577
19159
  path?: never;
17578
19160
  cookie?: never;
17579
19161
  };
17580
- requestBody: {
17581
- content: {
17582
- "application/json": components["schemas"]["TaxTypeRequest"];
17583
- };
17584
- };
19162
+ requestBody?: never;
17585
19163
  responses: {
17586
- /** @description `TaxTypeResource` */
17587
- 201: {
19164
+ 200: {
17588
19165
  headers: {
17589
19166
  [name: string]: unknown;
17590
19167
  };
17591
19168
  content: {
17592
19169
  "application/json": {
17593
- data: components["schemas"]["TaxTypeResource"];
17594
- };
19170
+ id: number;
19171
+ tenant_id: string;
19172
+ task_type: string | null;
19173
+ agent_skill: string | null;
19174
+ title: string;
19175
+ context: {
19176
+ [key: string]: unknown;
19177
+ } | null;
19178
+ delegation_status: string;
19179
+ delegated_at: string | null;
19180
+ hermes_kanban_id: string | null;
19181
+ result_data: {
19182
+ [key: string]: unknown;
19183
+ } | null;
19184
+ delegation_result: string | null;
19185
+ delegation_proposal: {
19186
+ [key: string]: unknown;
19187
+ } | null;
19188
+ delegation_proposal_status: string | null;
19189
+ delegation_proposed_at: string | null;
19190
+ delegation_applied_at: string | null;
19191
+ plane: string;
19192
+ origin_client_id: string | null;
19193
+ created_at: string | null;
19194
+ updated_at: string | null;
19195
+ write_effect: boolean;
19196
+ default_mode: string;
19197
+ verifiability_level: number | null;
19198
+ }[];
17595
19199
  };
17596
19200
  };
17597
- 403: components["responses"]["AuthorizationException"];
17598
- 422: components["responses"]["ValidationException"];
17599
19201
  };
17600
19202
  };
17601
- "tax-types.show": {
19203
+ "tenantDelegationCallback.taskClaim": {
17602
19204
  parameters: {
17603
19205
  query?: never;
17604
19206
  header?: never;
17605
19207
  path: {
17606
- /** @description The tax type ID */
17607
- taxType: number;
19208
+ id: number;
17608
19209
  };
17609
19210
  cookie?: never;
17610
19211
  };
17611
19212
  requestBody?: never;
17612
19213
  responses: {
17613
- /** @description `TaxTypeResource` */
17614
19214
  200: {
17615
19215
  headers: {
17616
19216
  [name: string]: unknown;
17617
19217
  };
17618
19218
  content: {
17619
19219
  "application/json": {
17620
- data: components["schemas"]["TaxTypeResource"];
19220
+ id: number;
19221
+ tenant_id: string;
19222
+ task_type: string | null;
19223
+ agent_skill: string | null;
19224
+ title: string;
19225
+ context: {
19226
+ [key: string]: unknown;
19227
+ } | null;
19228
+ delegation_status: string;
19229
+ delegated_at: string | null;
19230
+ hermes_kanban_id: string | null;
19231
+ result_data: {
19232
+ [key: string]: unknown;
19233
+ } | null;
19234
+ delegation_result: string | null;
19235
+ delegation_proposal: {
19236
+ [key: string]: unknown;
19237
+ } | null;
19238
+ delegation_proposal_status: string | null;
19239
+ delegation_proposed_at: string | null;
19240
+ delegation_applied_at: string | null;
19241
+ plane: string;
19242
+ origin_client_id: string | null;
19243
+ created_at: string | null;
19244
+ updated_at: string | null;
17621
19245
  };
17622
19246
  };
17623
19247
  };
17624
- 403: components["responses"]["AuthorizationException"];
17625
- 404: components["responses"]["ModelNotFoundException"];
17626
19248
  };
17627
19249
  };
17628
- "tax-types.update": {
19250
+ "tenantDelegationCallback.taskPropose": {
17629
19251
  parameters: {
17630
19252
  query?: never;
17631
19253
  header?: never;
17632
19254
  path: {
17633
- /** @description The tax type ID */
17634
- taxType: number;
19255
+ id: number;
17635
19256
  };
17636
19257
  cookie?: never;
17637
19258
  };
17638
19259
  requestBody: {
17639
19260
  content: {
17640
- "application/json": components["schemas"]["TaxTypeRequest"];
19261
+ "application/json": {
19262
+ proposal: {
19263
+ schema_version?: number | null;
19264
+ /** @enum {string|null} */
19265
+ mode?: "applied" | "preview" | null;
19266
+ agent_trace_id?: string | null;
19267
+ summary: string;
19268
+ changes?: {
19269
+ label: string;
19270
+ type?: string | null;
19271
+ action?: string | null;
19272
+ link?: string | null;
19273
+ record_id?: string | null;
19274
+ apply?: string[] | null;
19275
+ }[] | null;
19276
+ evals?: {
19277
+ label: string;
19278
+ pass: boolean;
19279
+ detail?: string | null;
19280
+ nivel?: number | null;
19281
+ cuenta_para_sello?: boolean | null;
19282
+ }[] | null;
19283
+ verifiability?: {
19284
+ nivel?: number | null;
19285
+ cuenta_para_sello?: boolean | null;
19286
+ /** @enum {string|null} */
19287
+ sello?: "pass" | "fail" | "n/a" | null;
19288
+ } | null;
19289
+ };
19290
+ };
17641
19291
  };
17642
19292
  };
17643
19293
  responses: {
17644
- /** @description `TaxTypeResource` */
17645
19294
  200: {
17646
19295
  headers: {
17647
19296
  [name: string]: unknown;
17648
19297
  };
17649
19298
  content: {
17650
19299
  "application/json": {
17651
- data: components["schemas"]["TaxTypeResource"];
19300
+ id: number;
19301
+ tenant_id: string;
19302
+ task_type: string | null;
19303
+ agent_skill: string | null;
19304
+ title: string;
19305
+ context: {
19306
+ [key: string]: unknown;
19307
+ } | null;
19308
+ delegation_status: string;
19309
+ delegated_at: string | null;
19310
+ hermes_kanban_id: string | null;
19311
+ result_data: {
19312
+ [key: string]: unknown;
19313
+ } | null;
19314
+ delegation_result: string | null;
19315
+ delegation_proposal: {
19316
+ [key: string]: unknown;
19317
+ } | null;
19318
+ delegation_proposal_status: string | null;
19319
+ delegation_proposed_at: string | null;
19320
+ delegation_applied_at: string | null;
19321
+ plane: string;
19322
+ origin_client_id: string | null;
19323
+ created_at: string | null;
19324
+ updated_at: string | null;
17652
19325
  };
17653
19326
  };
17654
19327
  };
17655
- 403: components["responses"]["AuthorizationException"];
17656
- 404: components["responses"]["ModelNotFoundException"];
17657
19328
  422: components["responses"]["ValidationException"];
17658
19329
  };
17659
19330
  };
17660
- "tax-types.destroy": {
19331
+ "tenantDelegationCallback.taskComplete": {
17661
19332
  parameters: {
17662
19333
  query?: never;
17663
19334
  header?: never;
17664
19335
  path: {
17665
- /** @description The tax type ID */
17666
- taxType: number;
19336
+ id: number;
17667
19337
  };
17668
19338
  cookie?: never;
17669
19339
  };
17670
- requestBody?: never;
19340
+ requestBody?: {
19341
+ content: {
19342
+ "application/json": {
19343
+ result?: string | null;
19344
+ result_data?: string[] | null;
19345
+ };
19346
+ };
19347
+ };
17671
19348
  responses: {
17672
19349
  200: {
17673
19350
  headers: {
@@ -17675,39 +19352,90 @@ export interface operations {
17675
19352
  };
17676
19353
  content: {
17677
19354
  "application/json": {
17678
- success: boolean;
19355
+ id: number;
19356
+ tenant_id: string;
19357
+ task_type: string | null;
19358
+ agent_skill: string | null;
19359
+ title: string;
19360
+ context: {
19361
+ [key: string]: unknown;
19362
+ } | null;
19363
+ delegation_status: string;
19364
+ delegated_at: string | null;
19365
+ hermes_kanban_id: string | null;
19366
+ result_data: {
19367
+ [key: string]: unknown;
19368
+ } | null;
19369
+ delegation_result: string | null;
19370
+ delegation_proposal: {
19371
+ [key: string]: unknown;
19372
+ } | null;
19373
+ delegation_proposal_status: string | null;
19374
+ delegation_proposed_at: string | null;
19375
+ delegation_applied_at: string | null;
19376
+ plane: string;
19377
+ origin_client_id: string | null;
19378
+ created_at: string | null;
19379
+ updated_at: string | null;
17679
19380
  };
17680
19381
  };
17681
19382
  };
17682
- 403: components["responses"]["AuthorizationException"];
17683
- 404: components["responses"]["ModelNotFoundException"];
19383
+ 422: components["responses"]["ValidationException"];
17684
19384
  };
17685
19385
  };
17686
- "taxTypes.toggleActive": {
19386
+ "tenantDelegationCallback.taskFail": {
17687
19387
  parameters: {
17688
19388
  query?: never;
17689
19389
  header?: never;
17690
19390
  path: {
17691
- /** @description The tax type ID */
17692
- taxType: number;
19391
+ id: number;
17693
19392
  };
17694
19393
  cookie?: never;
17695
19394
  };
17696
- requestBody?: never;
19395
+ requestBody?: {
19396
+ content: {
19397
+ "application/json": {
19398
+ result?: string | null;
19399
+ result_data?: string[] | null;
19400
+ };
19401
+ };
19402
+ };
17697
19403
  responses: {
17698
- /** @description `TaxTypeResource` */
17699
19404
  200: {
17700
19405
  headers: {
17701
19406
  [name: string]: unknown;
17702
19407
  };
17703
19408
  content: {
17704
19409
  "application/json": {
17705
- data: components["schemas"]["TaxTypeResource"];
19410
+ id: number;
19411
+ tenant_id: string;
19412
+ task_type: string | null;
19413
+ agent_skill: string | null;
19414
+ title: string;
19415
+ context: {
19416
+ [key: string]: unknown;
19417
+ } | null;
19418
+ delegation_status: string;
19419
+ delegated_at: string | null;
19420
+ hermes_kanban_id: string | null;
19421
+ result_data: {
19422
+ [key: string]: unknown;
19423
+ } | null;
19424
+ delegation_result: string | null;
19425
+ delegation_proposal: {
19426
+ [key: string]: unknown;
19427
+ } | null;
19428
+ delegation_proposal_status: string | null;
19429
+ delegation_proposed_at: string | null;
19430
+ delegation_applied_at: string | null;
19431
+ plane: string;
19432
+ origin_client_id: string | null;
19433
+ created_at: string | null;
19434
+ updated_at: string | null;
17706
19435
  };
17707
19436
  };
17708
19437
  };
17709
- 403: components["responses"]["AuthorizationException"];
17710
- 404: components["responses"]["ModelNotFoundException"];
19438
+ 422: components["responses"]["ValidationException"];
17711
19439
  };
17712
19440
  };
17713
19441
  "tenantModules.index": {
@@ -21502,6 +23230,168 @@ export interface operations {
21502
23230
  };
21503
23231
  };
21504
23232
  };
23233
+ "veriFactuSettings.index": {
23234
+ parameters: {
23235
+ query?: never;
23236
+ header?: never;
23237
+ path?: never;
23238
+ cookie?: never;
23239
+ };
23240
+ requestBody?: never;
23241
+ responses: {
23242
+ 200: {
23243
+ headers: {
23244
+ [name: string]: unknown;
23245
+ };
23246
+ content: {
23247
+ "application/json": {
23248
+ data: unknown[] | {
23249
+ id: null;
23250
+ nif: string;
23251
+ name: string;
23252
+ certificate_expires_at: null;
23253
+ is_production: boolean;
23254
+ use_representative: boolean;
23255
+ representative_nif: null;
23256
+ representative_name: null;
23257
+ /** @constant */
23258
+ authorization_status: "none";
23259
+ };
23260
+ };
23261
+ };
23262
+ };
23263
+ 500: {
23264
+ headers: {
23265
+ [name: string]: unknown;
23266
+ };
23267
+ content: {
23268
+ "application/json": {
23269
+ error: string;
23270
+ };
23271
+ };
23272
+ };
23273
+ };
23274
+ };
23275
+ "veriFactuSettings.update": {
23276
+ parameters: {
23277
+ query?: never;
23278
+ header?: never;
23279
+ path?: never;
23280
+ cookie?: never;
23281
+ };
23282
+ requestBody?: {
23283
+ content: {
23284
+ "application/json": {
23285
+ is_production?: boolean;
23286
+ use_representative?: boolean;
23287
+ representative_nif?: string | null;
23288
+ representative_name?: string | null;
23289
+ };
23290
+ };
23291
+ };
23292
+ responses: {
23293
+ /**
23294
+ * @description Sin contribuyente y sin datos para crearlo (NIF o nombre): local
23295
+ * hasta que existan.
23296
+ */
23297
+ 200: {
23298
+ headers: {
23299
+ [name: string]: unknown;
23300
+ };
23301
+ content: {
23302
+ "application/json": {
23303
+ /** @constant */
23304
+ message: "Configuración guardada localmente. Se sincronizará con VeriFactu cuando se configure el contribuyente.";
23305
+ data: unknown[];
23306
+ } | {
23307
+ /** @constant */
23308
+ message: "Configuración actualizada correctamente.";
23309
+ data: unknown[];
23310
+ };
23311
+ };
23312
+ };
23313
+ 422: components["responses"]["ValidationException"];
23314
+ 502: {
23315
+ headers: {
23316
+ [name: string]: unknown;
23317
+ };
23318
+ content: {
23319
+ "application/json": {
23320
+ error: string;
23321
+ };
23322
+ };
23323
+ };
23324
+ };
23325
+ };
23326
+ "veriFactuSettings.storeTaxpayer": {
23327
+ parameters: {
23328
+ query?: never;
23329
+ header?: never;
23330
+ path?: never;
23331
+ cookie?: never;
23332
+ };
23333
+ requestBody?: never;
23334
+ responses: {
23335
+ 200: {
23336
+ headers: {
23337
+ [name: string]: unknown;
23338
+ };
23339
+ content: {
23340
+ "application/json": {
23341
+ data: {
23342
+ [key: string]: unknown;
23343
+ } | null | unknown[];
23344
+ };
23345
+ };
23346
+ };
23347
+ 422: {
23348
+ headers: {
23349
+ [name: string]: unknown;
23350
+ };
23351
+ content: {
23352
+ "application/json": {
23353
+ error: string;
23354
+ };
23355
+ };
23356
+ };
23357
+ };
23358
+ };
23359
+ "veriFactuSettings.uploadCertificate": {
23360
+ parameters: {
23361
+ query?: never;
23362
+ header?: never;
23363
+ path?: never;
23364
+ cookie?: never;
23365
+ };
23366
+ requestBody: {
23367
+ content: {
23368
+ "multipart/form-data": {
23369
+ /**
23370
+ * Format: binary
23371
+ * @description Maximum file size: 5120 kilobytes.
23372
+ */
23373
+ certificate: Blob;
23374
+ /** @description 5MB max */
23375
+ password: string;
23376
+ };
23377
+ };
23378
+ };
23379
+ responses: {
23380
+ 200: {
23381
+ headers: {
23382
+ [name: string]: unknown;
23383
+ };
23384
+ content: {
23385
+ "application/json": {
23386
+ /** @constant */
23387
+ message: "Certificado subido correctamente.";
23388
+ data: unknown[];
23389
+ };
23390
+ };
23391
+ };
23392
+ 422: components["responses"]["ValidationException"];
23393
+ };
23394
+ };
21505
23395
  "webhookEndpoints.index": {
21506
23396
  parameters: {
21507
23397
  query?: never;