@pimia/sdk 0.9.0 → 0.10.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,95 @@ 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
+ get: operations["connectedApps.index"];
709
+ put?: never;
710
+ post?: never;
711
+ delete?: never;
712
+ options?: never;
713
+ head?: never;
714
+ patch?: never;
715
+ trace?: never;
716
+ };
717
+ "/settings/connected-apps/credentials/{credentialId}": {
718
+ parameters: {
719
+ query?: never;
720
+ header?: never;
721
+ path?: never;
722
+ cookie?: never;
723
+ };
724
+ get?: never;
725
+ put?: never;
726
+ post?: never;
727
+ /**
728
+ * Cierra UNA credencial —un dispositivo— sin tocar las demás ni el grant
729
+ * @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í.
730
+ *
731
+ * La app sigue conectada desde donde siga viva; para retirarle el acceso
732
+ * entero está `destroy`. Por eso esta operación no emite `app.revoked`: al
733
+ * integrador no le ha caído la puerta, se le ha caído una sesión.
734
+ *
735
+ * El grant sale de la propia credencial y se comprueba con el mismo filtro
736
+ * que el resto de la pantalla (este usuario, este tenant, sin revocar), así
737
+ * que la ruta no lo nombra: no hay forma de pedir un par descuadrado.
738
+ *
739
+ * 404 cuando la credencial no existe, no es de este usuario o ya no está
740
+ * viva (rotada, revocada o caducada): quien cierra estaba mirando una lista
741
+ * de hace un momento y lo que necesita es recargarla, no un error distinto
742
+ * por cada motivo.
743
+ */
744
+ delete: operations["connectedApps.destroyCredential"];
745
+ options?: never;
746
+ head?: never;
747
+ patch?: never;
748
+ trace?: never;
749
+ };
750
+ "/settings/connected-apps/{authorizationId}": {
751
+ parameters: {
752
+ query?: never;
753
+ header?: never;
754
+ path?: never;
755
+ cookie?: never;
756
+ };
757
+ get?: never;
758
+ put?: never;
759
+ post?: never;
760
+ /**
761
+ * Retira el acceso de la app entera: cae el grant, sus refresh tokens y los
762
+ * PAT que esa app acuñó para este usuario. Todas sus credenciales con él
763
+ * @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í.
764
+ */
765
+ delete: operations["connectedApps.destroy"];
766
+ options?: never;
767
+ head?: never;
768
+ patch?: never;
769
+ trace?: never;
770
+ };
683
771
  "/contacts": {
684
772
  parameters: {
685
773
  query?: never;
@@ -3247,8 +3335,8 @@ export interface paths {
3247
3335
  *
3248
3336
  * ⚠️ `total_credits` y `total_debits` SÍ son cadenas, y a propósito: son
3249
3337
  * `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.
3338
+ * como texto, y van en la UNIDAD MAYOR de la moneda, con decimales, como el
3339
+ * resto de la banca —no en subunidades enteras como el resto de la API.
3252
3340
  */
3253
3341
  get: operations["reconciliation.summary"];
3254
3342
  put?: never;
@@ -3289,10 +3377,10 @@ export interface paths {
3289
3377
  * ordenados por `score` descendente (importe, proximidad de fecha,
3290
3378
  * referencia y nombre del cliente).
3291
3379
  *
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,
3380
+ * **`amount` va en subunidades enteras**, como el `total` del que sale y como
3381
+ * todo importe de documento en esta API. No lo confundas con
3382
+ * `bank_transactions.amount`, que sí va en la unidad mayor con decimales por
3383
+ * ser el reflejo de un extracto bancario. `number` es `null` en los borradores,
3296
3384
  * que nacen sin numerar: el identificador estable es `model.id`.
3297
3385
  */
3298
3386
  get: operations["reconciliation.suggestions"];
@@ -4096,7 +4184,7 @@ export interface paths {
4096
4184
  put?: never;
4097
4185
  /**
4098
4186
  * 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.
4187
+ * @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
4188
  *
4101
4189
  * Reusa el plano async `delegated_tasks` (el mismo que ya cierra el round-trip
4102
4190
  * delegar→agente→callback→sello): compone un context rico desde la tarea (título,
@@ -5111,7 +5199,7 @@ export interface components {
5111
5199
  name: string;
5112
5200
  iban: string | null;
5113
5201
  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. */
5202
+ /** @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
5203
  opening_balance: string;
5116
5204
  currency_code: string;
5117
5205
  enabled: boolean;
@@ -5121,7 +5209,7 @@ export interface components {
5121
5209
  updated_at: string | null;
5122
5210
  /** Format: date-time */
5123
5211
  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. */
5212
+ /** @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
5213
  balance: string;
5126
5214
  };
5127
5215
  /** BankImport */
@@ -5150,7 +5238,7 @@ export interface components {
5150
5238
  transaction_date: string;
5151
5239
  /** Format: date-time */
5152
5240
  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. */
5241
+ /** @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
5242
  amount: string;
5155
5243
  /**
5156
5244
  * @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 +6169,11 @@ export interface components {
6081
6169
  sub_total?: number | null;
6082
6170
  total?: number | null;
6083
6171
  /**
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.
6172
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
6173
+ * de tipo, el contrato publicaba este campo como `string` —el
6174
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
6175
+ * que la columna guardaba como 10,5: media subunidad, que no
6176
+ * significa nada.
6088
6177
  */
6089
6178
  tax?: number | null;
6090
6179
  template_name?: string | null;
@@ -6226,10 +6315,11 @@ export interface components {
6226
6315
  exchange_rate?: string | null;
6227
6316
  payment_method_id?: string | null;
6228
6317
  /**
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.
6318
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
6319
+ * de tipo, el contrato publicaba este campo como `string` —el
6320
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
6321
+ * que la columna guardaba como 10,5: media subunidad, que no
6322
+ * significa nada.
6233
6323
  */
6234
6324
  amount: number;
6235
6325
  customer_id?: string | null;
@@ -6765,10 +6855,11 @@ export interface components {
6765
6855
  sub_total?: number | null;
6766
6856
  total?: number | null;
6767
6857
  /**
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.
6858
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
6859
+ * de tipo, el contrato publicaba este campo como `string` —el
6860
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
6861
+ * que la columna guardaba como 10,5: media subunidad, que no
6862
+ * significa nada.
6772
6863
  */
6773
6864
  tax?: number | null;
6774
6865
  /**
@@ -6946,10 +7037,11 @@ export interface components {
6946
7037
  ItemsRequest: {
6947
7038
  name: string;
6948
7039
  /**
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.
7040
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
7041
+ * de tipo, el contrato publicaba este campo como `string` —el
7042
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
7043
+ * que la columna guardaba como 10,5: media subunidad, que no
7044
+ * significa nada.
6953
7045
  */
6954
7046
  price: number;
6955
7047
  /** @enum {string|null} */
@@ -7248,12 +7340,20 @@ export interface components {
7248
7340
  currency?: components["schemas"]["CurrencyResource"] | null;
7249
7341
  transaction?: components["schemas"]["TransactionResource"] | null;
7250
7342
  };
7251
- /** ProfileRequest */
7343
+ /**
7344
+ * ProfileRequest
7345
+ * @description `PUT /me` — el nombre, el correo y la contraseña de quien llama.
7346
+ *
7347
+ * Cambiar el **correo** o la **contraseña** exige `current_password`, la
7348
+ * vigente. Cambiar solo el nombre no: `name` y `email` son los dos `required`,
7349
+ * así que reenviar el mismo correo no cuenta como cambio.
7350
+ */
7252
7351
  ProfileRequest: {
7253
7352
  name: string;
7254
7353
  password?: string | null;
7255
7354
  /** Format: email */
7256
7355
  email: string;
7356
+ current_password?: string;
7257
7357
  };
7258
7358
  /** ProjectRequest */
7259
7359
  ProjectRequest: {
@@ -7389,10 +7489,11 @@ export interface components {
7389
7489
  sub_total: number;
7390
7490
  total: number;
7391
7491
  /**
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.
7492
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
7493
+ * de tipo, el contrato publicaba este campo como `string` —el
7494
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
7495
+ * que la columna guardaba como 10,5: media subunidad, que no
7496
+ * significa nada.
7396
7497
  */
7397
7498
  tax: number;
7398
7499
  /**
@@ -7509,10 +7610,11 @@ export interface components {
7509
7610
  sub_total?: number | null;
7510
7611
  total?: number | null;
7511
7612
  /**
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.
7613
+ * @description `integer` porque son SUBUNIDADES enteras de la moneda. Sin regla
7614
+ * de tipo, el contrato publicaba este campo como `string` —el
7615
+ * generador deduce el tipo de las reglas— y la API aceptaba «10.5»,
7616
+ * que la columna guardaba como 10,5: media subunidad, que no
7617
+ * significa nada.
7516
7618
  */
7517
7619
  tax?: number | null;
7518
7620
  /**
@@ -8801,7 +8903,7 @@ export interface operations {
8801
8903
  };
8802
8904
  content: {
8803
8905
  "application/json": {
8804
- version: null | unknown[] | string | Record<string, never>;
8906
+ version: string | null;
8805
8907
  /** @constant */
8806
8908
  channel: "stable";
8807
8909
  };
@@ -9765,6 +9867,94 @@ export interface operations {
9765
9867
  };
9766
9868
  };
9767
9869
  };
9870
+ "connectedApps.index": {
9871
+ parameters: {
9872
+ query?: never;
9873
+ header?: never;
9874
+ path?: never;
9875
+ cookie?: never;
9876
+ };
9877
+ requestBody?: never;
9878
+ responses: {
9879
+ 200: {
9880
+ headers: {
9881
+ [name: string]: unknown;
9882
+ };
9883
+ content: {
9884
+ "application/json": {
9885
+ data: {
9886
+ id: number;
9887
+ name: string;
9888
+ confidential: boolean;
9889
+ scopes: string[];
9890
+ permissions: {
9891
+ text: string;
9892
+ write: boolean;
9893
+ }[];
9894
+ summary: string;
9895
+ connected_at: string | null;
9896
+ last_used_at: string | null;
9897
+ active_tokens: number;
9898
+ credentials: {
9899
+ id: number;
9900
+ connected_at: string | null;
9901
+ last_used_at: string | null;
9902
+ expires_at: string | null;
9903
+ }[];
9904
+ }[];
9905
+ };
9906
+ };
9907
+ };
9908
+ };
9909
+ };
9910
+ "connectedApps.destroyCredential": {
9911
+ parameters: {
9912
+ query?: never;
9913
+ header?: never;
9914
+ path: {
9915
+ credentialId: number;
9916
+ };
9917
+ cookie?: never;
9918
+ };
9919
+ requestBody?: never;
9920
+ responses: {
9921
+ 200: {
9922
+ headers: {
9923
+ [name: string]: unknown;
9924
+ };
9925
+ content: {
9926
+ "application/json": {
9927
+ message: string;
9928
+ revoked_tokens: number;
9929
+ };
9930
+ };
9931
+ };
9932
+ };
9933
+ };
9934
+ "connectedApps.destroy": {
9935
+ parameters: {
9936
+ query?: never;
9937
+ header?: never;
9938
+ path: {
9939
+ authorizationId: number;
9940
+ };
9941
+ cookie?: never;
9942
+ };
9943
+ requestBody?: never;
9944
+ responses: {
9945
+ 200: {
9946
+ headers: {
9947
+ [name: string]: unknown;
9948
+ };
9949
+ content: {
9950
+ "application/json": {
9951
+ message: string;
9952
+ revoked_tokens: number;
9953
+ };
9954
+ };
9955
+ };
9956
+ };
9957
+ };
9768
9958
  "contact.index": {
9769
9959
  parameters: {
9770
9960
  query: {
@@ -10264,7 +10454,7 @@ export interface operations {
10264
10454
  "customers.index": {
10265
10455
  parameters: {
10266
10456
  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. */
10457
+ /** @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
10458
  view?: "summary";
10269
10459
  /** @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
10460
  external_ref?: string;
@@ -11145,7 +11335,7 @@ export interface operations {
11145
11335
  "estimates.index": {
11146
11336
  parameters: {
11147
11337
  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. */
11338
+ /** @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
11339
  view?: "summary";
11150
11340
  /** @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
11341
  external_ref?: string;
@@ -12964,7 +13154,7 @@ export interface operations {
12964
13154
  parameters: {
12965
13155
  query?: {
12966
13156
  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. */
13157
+ /** @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
13158
  view?: "summary";
12969
13159
  /** @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
13160
  external_ref?: string;
package/dist/index.d.ts CHANGED
@@ -37,8 +37,21 @@ export declare const SCOPES: {
37
37
  readonly reportsRead: "reports:read";
38
38
  /** Leer la configuración de la empresa (impuestos, preferencias, series). */
39
39
  readonly settingsRead: "settings:read";
40
+ /**
41
+ * Configurar la empresa: impuestos, preferencias, campos personalizados y el
42
+ * perfil del propio usuario (`PUT /me`). Ojo con ese último: cambiar el
43
+ * correo o la contraseña exige además `current_password`, que es del usuario
44
+ * y no tuya.
45
+ */
46
+ readonly settingsWrite: "settings:write";
47
+ /** Cerrar y reabrir los trimestres fiscales del tenant. */
48
+ readonly reportsWrite: "reports:write";
40
49
  /** Ver la tienda de módulos y qué tiene contratado el tenant. */
41
50
  readonly storeRead: "store:read";
51
+ /** Instalar módulos de la tienda en el tenant. */
52
+ readonly storeWrite: "store:write";
53
+ /** Leer documentos con IA (OCR de gastos y de facturas recibidas). */
54
+ readonly ocrWrite: "ocr:write";
42
55
  /** Leer la gestión de personal: empleados, ausencias, fichajes, calendarios. */
43
56
  readonly hrRead: "hr:read";
44
57
  /** Gestionar el personal: altas, ausencias, correcciones de fichaje, horarios. */
package/dist/index.js CHANGED
@@ -33,8 +33,21 @@ export const SCOPES = {
33
33
  reportsRead: 'reports:read',
34
34
  /** Leer la configuración de la empresa (impuestos, preferencias, series). */
35
35
  settingsRead: 'settings:read',
36
+ /**
37
+ * Configurar la empresa: impuestos, preferencias, campos personalizados y el
38
+ * perfil del propio usuario (`PUT /me`). Ojo con ese último: cambiar el
39
+ * correo o la contraseña exige además `current_password`, que es del usuario
40
+ * y no tuya.
41
+ */
42
+ settingsWrite: 'settings:write',
43
+ /** Cerrar y reabrir los trimestres fiscales del tenant. */
44
+ reportsWrite: 'reports:write',
36
45
  /** Ver la tienda de módulos y qué tiene contratado el tenant. */
37
46
  storeRead: 'store:read',
47
+ /** Instalar módulos de la tienda en el tenant. */
48
+ storeWrite: 'store:write',
49
+ /** Leer documentos con IA (OCR de gastos y de facturas recibidas). */
50
+ ocrWrite: 'ocr:write',
38
51
  /** Leer la gestión de personal: empleados, ausencias, fichajes, calendarios. */
39
52
  hrRead: 'hr:read',
40
53
  /** Gestionar el personal: altas, ausencias, correcciones de fichaje, horarios. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pimia/sdk",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Cliente TypeScript de la API de Pimia para apps de partner: OAuth con PKCE, rotación de refresh persistida, reintentos de rate limit y tipos generados del OpenAPI.",
5
5
  "license": "MIT",
6
6
  "author": "Pimia (https://pimia.es)",