@pimia/sdk 0.8.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:
@@ -375,7 +375,13 @@ export interface paths {
375
375
  path?: never;
376
376
  cookie?: never;
377
377
  };
378
- /** Get available CSV presets */
378
+ /**
379
+ * Los formatos de CSV que el importador reconoce, por nombre
380
+ * @description Son las claves de `CsvBankParser::PRESETS` —cadenas— y es lo que se manda
381
+ * en `preset` al importar un extracto. El `@response` está porque
382
+ * `array_keys()` devuelve un `array` sin más, y el contrato publicaba
383
+ * `data: unknown[]`: un cliente generado no veía siquiera que eran textos.
384
+ */
379
385
  get: operations["bankImport.presets"];
380
386
  put?: never;
381
387
  post?: never;
@@ -576,7 +582,6 @@ export interface paths {
576
582
  /**
577
583
  * Update the Admin profile.
578
584
  * Includes name, email and (or) password
579
- * @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.
580
585
  */
581
586
  put: operations["company.updateProfile"];
582
587
  post?: never;
@@ -674,6 +679,95 @@ export interface paths {
674
679
  patch?: never;
675
680
  trace?: never;
676
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
+ };
677
771
  "/contacts": {
678
772
  parameters: {
679
773
  query?: never;
@@ -1286,6 +1380,36 @@ export interface paths {
1286
1380
  patch?: never;
1287
1381
  trace?: never;
1288
1382
  };
1383
+ "/expenses/{expense}/receipt": {
1384
+ parameters: {
1385
+ query?: never;
1386
+ header?: never;
1387
+ path?: never;
1388
+ cookie?: never;
1389
+ };
1390
+ get?: never;
1391
+ put?: never;
1392
+ /**
1393
+ * Sube o reemplaza el justificante de un gasto
1394
+ * @description Es la mitad que faltaba: hasta aquí, adjuntar un papel a un gasto que ya
1395
+ * existe **no se podía hacer desde ningún cliente del contrato**. El `PUT`
1396
+ * lo publicaba como multiparte y no puede cumplirlo (ver `update()`), y el
1397
+ * otro camino —`POST /expenses/{expense}/upload/receipts`— pide base64 y
1398
+ * solo acepta `gif`, `jpg` y `png`, así que rechaza el PDF que el propio
1399
+ * alta sí admite (#498).
1400
+ *
1401
+ * Misma forma que `receivedInvoices.uploadDocument`, que es el precedente
1402
+ * de la casa para esto: `POST`, multiparte, se limpia la colección antes de
1403
+ * añadir —así no se acumulan huérfanos en cada resubida— y se devuelve el
1404
+ * recurso.
1405
+ */
1406
+ post: operations["expenses.uploadReceipt"];
1407
+ delete?: never;
1408
+ options?: never;
1409
+ head?: never;
1410
+ patch?: never;
1411
+ trace?: never;
1412
+ };
1289
1413
  "/expenses/delete": {
1290
1414
  parameters: {
1291
1415
  query?: never;
@@ -3167,7 +3291,23 @@ export interface paths {
3167
3291
  path?: never;
3168
3292
  cookie?: never;
3169
3293
  };
3170
- /** List bank transactions with filters */
3294
+ /**
3295
+ * Movimientos bancarios, filtrados y paginados
3296
+ * @description Los cinco filtros y el tamaño de página se VALIDAN, y por eso están en el
3297
+ * contrato: el generador no ve un `$request->bank_account_id` —acceso
3298
+ * dinámico— y hasta el 2026-08-25 esta operación publicaba `parameters: []`
3299
+ * mientras el controlador leía seis. Un integrador leyendo el spec no podía
3300
+ * saber que se puede filtrar.
3301
+ *
3302
+ * ⚠️ Filtrar por un `status` o un `type` que no existe ya no devuelve la
3303
+ * lista entera sin filtrar: da 422. Es el mismo criterio que el resto de la
3304
+ * API y lo que evita el «pedí los pendientes y me los dio todos».
3305
+ *
3306
+ * La respuesta es el paginador de Laravel PELADO (`data`, `current_page`,
3307
+ * `total`…), no el sobre `{data, meta}` del resto de la casa. Cada fila
3308
+ * lleva además `bank_account` y `reconciliations[]`, que el listado carga
3309
+ * siempre.
3310
+ */
3171
3311
  get: operations["reconciliation.transactions"];
3172
3312
  put?: never;
3173
3313
  post?: never;
@@ -3184,7 +3324,20 @@ export interface paths {
3184
3324
  path?: never;
3185
3325
  cookie?: never;
3186
3326
  };
3187
- /** Get summary statistics */
3327
+ /**
3328
+ * Recuento de movimientos por estado, y los dos totales
3329
+ * @description Los cuatro recuentos salen de un `count()` y son ENTEROS. Se declaran a
3330
+ * mano porque Scramble tipa bien `Builder::count()` pero no sabe resolver
3331
+ * `(clone $query)->pending()`: el scope local devuelve `mixed` y degradaba
3332
+ * los cuatro a `string`, mientras `total` —que no pasa por un scope— salía
3333
+ * `integer` en la misma respuesta. Cuatro cadenas y un número para el mismo
3334
+ * tipo de dato.
3335
+ *
3336
+ * ⚠️ `total_credits` y `total_debits` SÍ son cadenas, y a propósito: son
3337
+ * `SUM(amount)` sobre una columna `decimal(15,2)` que PostgreSQL entrega
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.
3340
+ */
3188
3341
  get: operations["reconciliation.summary"];
3189
3342
  put?: never;
3190
3343
  post?: never;
@@ -3224,10 +3377,10 @@ export interface paths {
3224
3377
  * ordenados por `score` descendente (importe, proximidad de fecha,
3225
3378
  * referencia y nombre del cliente).
3226
3379
  *
3227
- * **`amount` va en céntimos**, como el `total` del que sale y como todo
3228
- * importe de documento en esta API. No lo confundas con
3229
- * `bank_transactions.amount`, que sí va en euros con decimales por ser el
3230
- * 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,
3231
3384
  * que nacen sin numerar: el identificador estable es `model.id`.
3232
3385
  */
3233
3386
  get: operations["reconciliation.suggestions"];
@@ -4031,7 +4184,7 @@ export interface paths {
4031
4184
  put?: never;
4032
4185
  /**
4033
4186
  * POST tasks/{task}/delegate — delega esta tarea CRM a su agente Pim
4034
- * @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í.
4035
4188
  *
4036
4189
  * Reusa el plano async `delegated_tasks` (el mismo que ya cierra el round-trip
4037
4190
  * delegar→agente→callback→sello): compone un context rico desde la tarea (título,
@@ -5046,7 +5199,7 @@ export interface components {
5046
5199
  name: string;
5047
5200
  iban: string | null;
5048
5201
  bank_name: string | null;
5049
- /** @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. */
5050
5203
  opening_balance: string;
5051
5204
  currency_code: string;
5052
5205
  enabled: boolean;
@@ -5056,7 +5209,7 @@ export interface components {
5056
5209
  updated_at: string | null;
5057
5210
  /** Format: date-time */
5058
5211
  deleted_at: string | null;
5059
- /** @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. */
5060
5213
  balance: string;
5061
5214
  };
5062
5215
  /** BankImport */
@@ -5085,13 +5238,21 @@ export interface components {
5085
5238
  transaction_date: string;
5086
5239
  /** Format: date-time */
5087
5240
  value_date: string | null;
5088
- /** @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. */
5089
5242
  amount: string;
5090
- type: string;
5243
+ /**
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.
5245
+ * @enum {string}
5246
+ */
5247
+ type: "credit" | "debit";
5091
5248
  concept: string | null;
5092
5249
  reference: string | null;
5093
5250
  raw_data: string | null;
5094
- status: string;
5251
+ /**
5252
+ * @description Punto del ciclo de conciliación en el que está el apunte: `pending` recién importado y sin cruzar, `matched` propuesto contra un documento (por `POST /banking/transactions/{id}/match` o por el automático), `reconciled` confirmado, `ignored` apartado a mano porque no corresponde a ninguno.
5253
+ * @enum {string}
5254
+ */
5255
+ status: "pending" | "matched" | "reconciled" | "ignored";
5095
5256
  import_batch: string | null;
5096
5257
  /** Format: date-time */
5097
5258
  created_at: string | null;
@@ -5099,6 +5260,10 @@ export interface components {
5099
5260
  updated_at: string | null;
5100
5261
  /** Format: date-time */
5101
5262
  deleted_at: string | null;
5263
+ /** @description La cuenta del apunte, con `id` y `name` y nada más. Llega en el listado (`GET /banking/transactions`), que la carga siempre; en las respuestas de una operación sobre un apunte suelto no tiene por qué estar. */
5264
+ bank_account?: Record<string, never> | null;
5265
+ /** @description Los cruces del apunte con documentos del ERP, cada uno con su `reconcilable` (la factura, el gasto o la recibida). Como `bank_account`: la trae el listado, que la carga siempre. */
5266
+ reconciliations?: Record<string, never>[] | null;
5102
5267
  };
5103
5268
  /** BulkExchangeRateRequest */
5104
5269
  BulkExchangeRateRequest: {
@@ -6004,10 +6169,11 @@ export interface components {
6004
6169
  sub_total?: number | null;
6005
6170
  total?: number | null;
6006
6171
  /**
6007
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6008
- * publicaba este campo como `string` —el generador deduce el tipo
6009
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6010
- * 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.
6011
6177
  */
6012
6178
  tax?: number | null;
6013
6179
  template_name?: string | null;
@@ -6149,10 +6315,11 @@ export interface components {
6149
6315
  exchange_rate?: string | null;
6150
6316
  payment_method_id?: string | null;
6151
6317
  /**
6152
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6153
- * publicaba este campo como `string` —el generador deduce el tipo
6154
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6155
- * 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.
6156
6323
  */
6157
6324
  amount: number;
6158
6325
  customer_id?: string | null;
@@ -6253,9 +6420,9 @@ export interface components {
6253
6420
  residual_value: number;
6254
6421
  useful_life_years: number;
6255
6422
  depreciation_method: string;
6256
- annual_depreciation: string;
6257
- accumulated_depreciation: string;
6258
- net_book_value: string;
6423
+ annual_depreciation: number;
6424
+ accumulated_depreciation: number;
6425
+ net_book_value: number;
6259
6426
  depreciation_schedule: string;
6260
6427
  company_id: number;
6261
6428
  /** Format: date-time */
@@ -6386,9 +6553,7 @@ export interface components {
6386
6553
  * respuestas de escritura, con `[]` cuando la línea no cobra
6387
6554
  * ninguno; en el índice no viaja.
6388
6555
  */
6389
- time_entry_ids?: {
6390
- [key: string]: unknown;
6391
- };
6556
+ time_entry_ids?: number[];
6392
6557
  taxes?: components["schemas"]["TaxResource"][];
6393
6558
  fields?: components["schemas"]["CustomFieldValueResource"][];
6394
6559
  };
@@ -6410,10 +6575,10 @@ export interface components {
6410
6575
  discount_val: number;
6411
6576
  sub_total: number;
6412
6577
  total: number;
6413
- effective_total: string;
6578
+ effective_total: number;
6414
6579
  tax: number;
6415
6580
  due_amount: number;
6416
- effective_due_amount: string;
6581
+ effective_due_amount: number;
6417
6582
  sent: string;
6418
6583
  viewed: string;
6419
6584
  /**
@@ -6443,10 +6608,11 @@ export interface components {
6443
6608
  creator_id: number | null;
6444
6609
  base_tax: number;
6445
6610
  base_due_amount: number;
6446
- effective_base_total: string;
6447
- effective_base_due_amount: string;
6448
- credited_total: string;
6449
- credited_base_total: string;
6611
+ effective_base_total: number;
6612
+ /** @description NULL cuando la factura no tiene `base_due_amount` calculado, y entonces es un hueco, no un cero: una factura que no ha calculado su deuda en moneda base no es una factura que no deba nada. */
6613
+ effective_base_due_amount: number | null;
6614
+ credited_total: number;
6615
+ credited_base_total: number;
6450
6616
  currency_id: number | null;
6451
6617
  formatted_created_at: string;
6452
6618
  invoice_pdf_url: string;
@@ -6572,8 +6738,8 @@ export interface components {
6572
6738
  * que esto no cueste ni una consulta, y que el scope sea
6573
6739
  * obligatorio en cualquier índice que sirva este recurso.
6574
6740
  */
6575
- effective_total: string;
6576
- effective_due_amount: string;
6741
+ effective_total: number;
6742
+ effective_due_amount: number;
6577
6743
  effective_paid_status: string;
6578
6744
  effective_overdue: string;
6579
6745
  currency_id: number | null;
@@ -6689,10 +6855,11 @@ export interface components {
6689
6855
  sub_total?: number | null;
6690
6856
  total?: number | null;
6691
6857
  /**
6692
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6693
- * publicaba este campo como `string` —el generador deduce el tipo
6694
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6695
- * 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.
6696
6863
  */
6697
6864
  tax?: number | null;
6698
6865
  /**
@@ -6870,10 +7037,11 @@ export interface components {
6870
7037
  ItemsRequest: {
6871
7038
  name: string;
6872
7039
  /**
6873
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
6874
- * publicaba este campo como `string` —el generador deduce el tipo
6875
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
6876
- * 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.
6877
7045
  */
6878
7046
  price: number;
6879
7047
  /** @enum {string|null} */
@@ -7172,12 +7340,20 @@ export interface components {
7172
7340
  currency?: components["schemas"]["CurrencyResource"] | null;
7173
7341
  transaction?: components["schemas"]["TransactionResource"] | null;
7174
7342
  };
7175
- /** 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
+ */
7176
7351
  ProfileRequest: {
7177
7352
  name: string;
7178
7353
  password?: string | null;
7179
7354
  /** Format: email */
7180
7355
  email: string;
7356
+ current_password?: string;
7181
7357
  };
7182
7358
  /** ProjectRequest */
7183
7359
  ProjectRequest: {
@@ -7313,10 +7489,11 @@ export interface components {
7313
7489
  sub_total: number;
7314
7490
  total: number;
7315
7491
  /**
7316
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
7317
- * publicaba este campo como `string` —el generador deduce el tipo
7318
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
7319
- * 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.
7320
7497
  */
7321
7498
  tax: number;
7322
7499
  /**
@@ -7433,10 +7610,11 @@ export interface components {
7433
7610
  sub_total?: number | null;
7434
7611
  total?: number | null;
7435
7612
  /**
7436
- * @description `integer` porque son CÉNTIMOS. Sin regla de tipo, el contrato
7437
- * publicaba este campo como `string` —el generador deduce el tipo
7438
- * de las reglas— y la API aceptaba «10.5», que la columna guardaba
7439
- * 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.
7440
7618
  */
7441
7619
  tax?: number | null;
7442
7620
  /**
@@ -7562,7 +7740,7 @@ export interface components {
7562
7740
  discount_per_item: string | null;
7563
7741
  notes: string | null;
7564
7742
  discount_type: string | null;
7565
- discount: string | null;
7743
+ discount: number | null;
7566
7744
  discount_val: number | null;
7567
7745
  sub_total: number | null;
7568
7746
  total: number | null;
@@ -8435,7 +8613,7 @@ export interface operations {
8435
8613
  "absence.teamCalendar": {
8436
8614
  parameters: {
8437
8615
  query?: {
8438
- month?: string;
8616
+ month?: string | null;
8439
8617
  };
8440
8618
  header?: never;
8441
8619
  path?: never;
@@ -8461,6 +8639,7 @@ export interface operations {
8461
8639
  };
8462
8640
  };
8463
8641
  403: components["responses"]["AuthorizationException"];
8642
+ 422: components["responses"]["ValidationException"];
8464
8643
  };
8465
8644
  };
8466
8645
  "absence.approve": {
@@ -8602,7 +8781,7 @@ export interface operations {
8602
8781
  };
8603
8782
  responses: {
8604
8783
  /** @description `AbsenceResource` */
8605
- 200: {
8784
+ 201: {
8606
8785
  headers: {
8607
8786
  [name: string]: unknown;
8608
8787
  };
@@ -8724,7 +8903,7 @@ export interface operations {
8724
8903
  };
8725
8904
  content: {
8726
8905
  "application/json": {
8727
- version: null | unknown[] | string | Record<string, never>;
8906
+ version: string | null;
8728
8907
  /** @constant */
8729
8908
  channel: "stable";
8730
8909
  };
@@ -9266,7 +9445,7 @@ export interface operations {
9266
9445
  };
9267
9446
  content: {
9268
9447
  "application/json": {
9269
- data: unknown[];
9448
+ data: string[];
9270
9449
  };
9271
9450
  };
9272
9451
  };
@@ -9451,7 +9630,7 @@ export interface operations {
9451
9630
  requestBody?: never;
9452
9631
  responses: {
9453
9632
  /** @description `EstimateResource` */
9454
- 200: {
9633
+ 201: {
9455
9634
  headers: {
9456
9635
  [name: string]: unknown;
9457
9636
  };
@@ -9478,7 +9657,7 @@ export interface operations {
9478
9657
  requestBody?: never;
9479
9658
  responses: {
9480
9659
  /** @description `InvoiceResource` */
9481
- 200: {
9660
+ 201: {
9482
9661
  headers: {
9483
9662
  [name: string]: unknown;
9484
9663
  };
@@ -9688,6 +9867,94 @@ export interface operations {
9688
9867
  };
9689
9868
  };
9690
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
+ };
9691
9958
  "contact.index": {
9692
9959
  parameters: {
9693
9960
  query: {
@@ -9728,7 +9995,7 @@ export interface operations {
9728
9995
  };
9729
9996
  responses: {
9730
9997
  /** @description `ContactResource` */
9731
- 200: {
9998
+ 201: {
9732
9999
  headers: {
9733
10000
  [name: string]: unknown;
9734
10001
  };
@@ -9966,7 +10233,7 @@ export interface operations {
9966
10233
  };
9967
10234
  responses: {
9968
10235
  /** @description `CustomFieldResource` */
9969
- 200: {
10236
+ 201: {
9970
10237
  headers: {
9971
10238
  [name: string]: unknown;
9972
10239
  };
@@ -10187,7 +10454,7 @@ export interface operations {
10187
10454
  "customers.index": {
10188
10455
  parameters: {
10189
10456
  query?: {
10190
- /** @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. */
10191
10458
  view?: "summary";
10192
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. */
10193
10460
  external_ref?: string;
@@ -10601,7 +10868,7 @@ export interface operations {
10601
10868
  };
10602
10869
  responses: {
10603
10870
  /** @description `DeliveryNoteResource` */
10604
- 200: {
10871
+ 201: {
10605
10872
  headers: {
10606
10873
  [name: string]: unknown;
10607
10874
  };
@@ -10753,7 +11020,7 @@ export interface operations {
10753
11020
  };
10754
11021
  responses: {
10755
11022
  /** @description `EmployeeProfileResource` */
10756
- 200: {
11023
+ 201: {
10757
11024
  headers: {
10758
11025
  [name: string]: unknown;
10759
11026
  };
@@ -10912,7 +11179,7 @@ export interface operations {
10912
11179
  };
10913
11180
  responses: {
10914
11181
  /** @description `EstimateSeriesResource` */
10915
- 200: {
11182
+ 201: {
10916
11183
  headers: {
10917
11184
  [name: string]: unknown;
10918
11185
  };
@@ -11068,7 +11335,7 @@ export interface operations {
11068
11335
  "estimates.index": {
11069
11336
  parameters: {
11070
11337
  query?: {
11071
- /** @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. */
11072
11339
  view?: "summary";
11073
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. */
11074
11341
  external_ref?: string;
@@ -11119,7 +11386,7 @@ export interface operations {
11119
11386
  };
11120
11387
  responses: {
11121
11388
  /** @description `EstimateResource` */
11122
- 200: {
11389
+ 201: {
11123
11390
  headers: {
11124
11391
  [name: string]: unknown;
11125
11392
  };
@@ -11229,7 +11496,7 @@ export interface operations {
11229
11496
  };
11230
11497
  responses: {
11231
11498
  /** @description `ExpenseCategoryResource` */
11232
- 200: {
11499
+ 201: {
11233
11500
  headers: {
11234
11501
  [name: string]: unknown;
11235
11502
  };
@@ -11328,6 +11595,44 @@ export interface operations {
11328
11595
  404: components["responses"]["ModelNotFoundException"];
11329
11596
  };
11330
11597
  };
11598
+ "expenses.uploadReceipt": {
11599
+ parameters: {
11600
+ query?: never;
11601
+ header?: never;
11602
+ path: {
11603
+ /** @description The expense ID */
11604
+ expense: number;
11605
+ };
11606
+ cookie?: never;
11607
+ };
11608
+ requestBody: {
11609
+ content: {
11610
+ "multipart/form-data": {
11611
+ /**
11612
+ * Format: binary
11613
+ * @description Maximum file size: 20000 kilobytes.
11614
+ */
11615
+ receipt: Blob;
11616
+ };
11617
+ };
11618
+ };
11619
+ responses: {
11620
+ /** @description `ExpenseResource` */
11621
+ 200: {
11622
+ headers: {
11623
+ [name: string]: unknown;
11624
+ };
11625
+ content: {
11626
+ "application/json": {
11627
+ data: components["schemas"]["ExpenseResource"];
11628
+ };
11629
+ };
11630
+ };
11631
+ 403: components["responses"]["AuthorizationException"];
11632
+ 404: components["responses"]["ModelNotFoundException"];
11633
+ 422: components["responses"]["ValidationException"];
11634
+ };
11635
+ };
11331
11636
  "expenses.delete": {
11332
11637
  parameters: {
11333
11638
  query?: never;
@@ -11395,7 +11700,7 @@ export interface operations {
11395
11700
  };
11396
11701
  responses: {
11397
11702
  /** @description `ExpenseResource` */
11398
- 200: {
11703
+ 201: {
11399
11704
  headers: {
11400
11705
  [name: string]: unknown;
11401
11706
  };
@@ -11950,7 +12255,7 @@ export interface operations {
11950
12255
  };
11951
12256
  responses: {
11952
12257
  /** @description `IncidenceResource` */
11953
- 200: {
12258
+ 201: {
11954
12259
  headers: {
11955
12260
  [name: string]: unknown;
11956
12261
  };
@@ -12132,7 +12437,7 @@ export interface operations {
12132
12437
  };
12133
12438
  responses: {
12134
12439
  /** @description `InvestmentAssetResource` */
12135
- 200: {
12440
+ 201: {
12136
12441
  headers: {
12137
12442
  [name: string]: unknown;
12138
12443
  };
@@ -12339,7 +12644,7 @@ export interface operations {
12339
12644
  };
12340
12645
  responses: {
12341
12646
  /** @description `InvoiceSeriesResource` */
12342
- 200: {
12647
+ 201: {
12343
12648
  headers: {
12344
12649
  [name: string]: unknown;
12345
12650
  };
@@ -12470,7 +12775,7 @@ export interface operations {
12470
12775
  };
12471
12776
  responses: {
12472
12777
  /** @description `InvoiceTemplateResource` */
12473
- 200: {
12778
+ 201: {
12474
12779
  headers: {
12475
12780
  [name: string]: unknown;
12476
12781
  };
@@ -12639,7 +12944,7 @@ export interface operations {
12639
12944
  };
12640
12945
  responses: {
12641
12946
  /** @description `InvoiceTemplateResource` */
12642
- 200: {
12947
+ 201: {
12643
12948
  headers: {
12644
12949
  [name: string]: unknown;
12645
12950
  };
@@ -12849,7 +13154,7 @@ export interface operations {
12849
13154
  parameters: {
12850
13155
  query?: {
12851
13156
  limit?: string;
12852
- /** @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. */
12853
13158
  view?: "summary";
12854
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. */
12855
13160
  external_ref?: string;
@@ -13690,7 +13995,7 @@ export interface operations {
13690
13995
  };
13691
13996
  responses: {
13692
13997
  /** @description `LeadResource` */
13693
- 200: {
13998
+ 201: {
13694
13999
  headers: {
13695
14000
  [name: string]: unknown;
13696
14001
  };
@@ -14194,7 +14499,7 @@ export interface operations {
14194
14499
  };
14195
14500
  responses: {
14196
14501
  /** @description `NoteResource` */
14197
- 200: {
14502
+ 201: {
14198
14503
  headers: {
14199
14504
  [name: string]: unknown;
14200
14505
  };
@@ -14585,7 +14890,7 @@ export interface operations {
14585
14890
  };
14586
14891
  responses: {
14587
14892
  /** @description `PaymentMethodResource` */
14588
- 200: {
14893
+ 201: {
14589
14894
  headers: {
14590
14895
  [name: string]: unknown;
14591
14896
  };
@@ -15064,7 +15369,7 @@ export interface operations {
15064
15369
  };
15065
15370
  responses: {
15066
15371
  /** @description `ProjectResource` */
15067
- 200: {
15372
+ 201: {
15068
15373
  headers: {
15069
15374
  [name: string]: unknown;
15070
15375
  };
@@ -15417,7 +15722,14 @@ export interface operations {
15417
15722
  };
15418
15723
  "reconciliation.transactions": {
15419
15724
  parameters: {
15420
- query?: never;
15725
+ query?: {
15726
+ bank_account_id?: number | null;
15727
+ status?: "pending" | "matched" | "reconciled" | "ignored" | null;
15728
+ type?: "credit" | "debit" | null;
15729
+ from_date?: string | null;
15730
+ to_date?: string | null;
15731
+ per_page?: number | null;
15732
+ };
15421
15733
  header?: never;
15422
15734
  path?: never;
15423
15735
  cookie?: never;
@@ -15455,11 +15767,14 @@ export interface operations {
15455
15767
  };
15456
15768
  };
15457
15769
  };
15770
+ 422: components["responses"]["ValidationException"];
15458
15771
  };
15459
15772
  };
15460
15773
  "reconciliation.summary": {
15461
15774
  parameters: {
15462
- query?: never;
15775
+ query?: {
15776
+ bank_account_id?: number | null;
15777
+ };
15463
15778
  header?: never;
15464
15779
  path?: never;
15465
15780
  cookie?: never;
@@ -15474,16 +15789,17 @@ export interface operations {
15474
15789
  "application/json": {
15475
15790
  data: {
15476
15791
  total: number;
15477
- pending: string;
15478
- matched: string;
15479
- reconciled: string;
15480
- ignored: string;
15792
+ pending: number;
15793
+ matched: number;
15794
+ reconciled: number;
15795
+ ignored: number;
15481
15796
  total_credits: string;
15482
15797
  total_debits: string;
15483
15798
  };
15484
15799
  };
15485
15800
  };
15486
15801
  };
15802
+ 422: components["responses"]["ValidationException"];
15487
15803
  };
15488
15804
  };
15489
15805
  "reconciliation.autoMatch": {
@@ -15493,7 +15809,13 @@ export interface operations {
15493
15809
  path?: never;
15494
15810
  cookie?: never;
15495
15811
  };
15496
- requestBody?: never;
15812
+ requestBody?: {
15813
+ content: {
15814
+ "application/json": {
15815
+ bank_account_id?: number | null;
15816
+ };
15817
+ };
15818
+ };
15497
15819
  responses: {
15498
15820
  200: {
15499
15821
  headers: {
@@ -15522,6 +15844,7 @@ export interface operations {
15522
15844
  };
15523
15845
  };
15524
15846
  };
15847
+ 422: components["responses"]["ValidationException"];
15525
15848
  };
15526
15849
  };
15527
15850
  "reconciliation.suggestions": {
@@ -15729,7 +16052,7 @@ export interface operations {
15729
16052
  };
15730
16053
  responses: {
15731
16054
  /** @description `RecurringInvoiceResource` */
15732
- 200: {
16055
+ 201: {
15733
16056
  headers: {
15734
16057
  [name: string]: unknown;
15735
16058
  };
@@ -15990,7 +16313,7 @@ export interface operations {
15990
16313
  };
15991
16314
  responses: {
15992
16315
  /** @description `RoleResource` */
15993
- 200: {
16316
+ 201: {
15994
16317
  headers: {
15995
16318
  [name: string]: unknown;
15996
16319
  };
@@ -17293,7 +17616,7 @@ export interface operations {
17293
17616
  };
17294
17617
  responses: {
17295
17618
  /** @description `TaskResource` */
17296
- 200: {
17619
+ 201: {
17297
17620
  headers: {
17298
17621
  [name: string]: unknown;
17299
17622
  };
@@ -17451,7 +17774,7 @@ export interface operations {
17451
17774
  };
17452
17775
  responses: {
17453
17776
  /** @description `TaxTypeResource` */
17454
- 200: {
17777
+ 201: {
17455
17778
  headers: {
17456
17779
  [name: string]: unknown;
17457
17780
  };
@@ -17952,7 +18275,7 @@ export interface operations {
17952
18275
  };
17953
18276
  responses: {
17954
18277
  /** @description `TimeClockCorrectionResource` */
17955
- 200: {
18278
+ 201: {
17956
18279
  headers: {
17957
18280
  [name: string]: unknown;
17958
18281
  };
@@ -18091,7 +18414,7 @@ export interface operations {
18091
18414
  };
18092
18415
  responses: {
18093
18416
  /** @description `TimeEntryResource` */
18094
- 200: {
18417
+ 201: {
18095
18418
  headers: {
18096
18419
  [name: string]: unknown;
18097
18420
  };
@@ -20888,7 +21211,7 @@ export interface operations {
20888
21211
  };
20889
21212
  responses: {
20890
21213
  /** @description `UnitResource` */
20891
- 200: {
21214
+ 201: {
20892
21215
  headers: {
20893
21216
  [name: string]: unknown;
20894
21217
  };
@@ -21096,7 +21419,7 @@ export interface operations {
21096
21419
  };
21097
21420
  responses: {
21098
21421
  /** @description `UserResource` */
21099
- 200: {
21422
+ 201: {
21100
21423
  headers: {
21101
21424
  [name: string]: unknown;
21102
21425
  };
@@ -21650,7 +21973,7 @@ export interface operations {
21650
21973
  };
21651
21974
  responses: {
21652
21975
  /** @description `HolidayResource` */
21653
- 200: {
21976
+ 201: {
21654
21977
  headers: {
21655
21978
  [name: string]: unknown;
21656
21979
  };
@@ -21730,7 +22053,7 @@ export interface operations {
21730
22053
  };
21731
22054
  responses: {
21732
22055
  /** @description `WorkCalendarResource` */
21733
- 200: {
22056
+ 201: {
21734
22057
  headers: {
21735
22058
  [name: string]: unknown;
21736
22059
  };
@@ -21868,7 +22191,7 @@ export interface operations {
21868
22191
  };
21869
22192
  responses: {
21870
22193
  /** @description `WorkScheduleResource` */
21871
- 200: {
22194
+ 201: {
21872
22195
  headers: {
21873
22196
  [name: string]: unknown;
21874
22197
  };
package/dist/client.d.ts CHANGED
@@ -211,10 +211,10 @@ export declare class PimiaClient {
211
211
  discount_val: number;
212
212
  sub_total: number;
213
213
  total: number;
214
- effective_total: string;
214
+ effective_total: number;
215
215
  tax: number;
216
216
  due_amount: number;
217
- effective_due_amount: string;
217
+ effective_due_amount: number;
218
218
  sent: string;
219
219
  viewed: string;
220
220
  sent_at: string;
@@ -234,10 +234,10 @@ export declare class PimiaClient {
234
234
  creator_id: number | null;
235
235
  base_tax: number;
236
236
  base_due_amount: number;
237
- effective_base_total: string;
238
- effective_base_due_amount: string;
239
- credited_total: string;
240
- credited_base_total: string;
237
+ effective_base_total: number;
238
+ effective_base_due_amount: number | null;
239
+ credited_total: number;
240
+ credited_base_total: number;
241
241
  currency_id: number | null;
242
242
  formatted_created_at: string;
243
243
  invoice_pdf_url: string;
@@ -298,10 +298,10 @@ export declare class PimiaClient {
298
298
  discount_val: number;
299
299
  sub_total: number;
300
300
  total: number;
301
- effective_total: string;
301
+ effective_total: number;
302
302
  tax: number;
303
303
  due_amount: number;
304
- effective_due_amount: string;
304
+ effective_due_amount: number;
305
305
  sent: string;
306
306
  viewed: string;
307
307
  sent_at: string;
@@ -321,10 +321,10 @@ export declare class PimiaClient {
321
321
  creator_id: number | null;
322
322
  base_tax: number;
323
323
  base_due_amount: number;
324
- effective_base_total: string;
325
- effective_base_due_amount: string;
326
- credited_total: string;
327
- credited_base_total: string;
324
+ effective_base_total: number;
325
+ effective_base_due_amount: number | null;
326
+ credited_total: number;
327
+ credited_base_total: number;
328
328
  currency_id: number | null;
329
329
  formatted_created_at: string;
330
330
  invoice_pdf_url: string;
@@ -491,10 +491,10 @@ export declare class PimiaClient {
491
491
  discount_val: number;
492
492
  sub_total: number;
493
493
  total: number;
494
- effective_total: string;
494
+ effective_total: number;
495
495
  tax: number;
496
496
  due_amount: number;
497
- effective_due_amount: string;
497
+ effective_due_amount: number;
498
498
  sent: string;
499
499
  viewed: string;
500
500
  sent_at: string;
@@ -514,10 +514,10 @@ export declare class PimiaClient {
514
514
  creator_id: number | null;
515
515
  base_tax: number;
516
516
  base_due_amount: number;
517
- effective_base_total: string;
518
- effective_base_due_amount: string;
519
- credited_total: string;
520
- credited_base_total: string;
517
+ effective_base_total: number;
518
+ effective_base_due_amount: number | null;
519
+ credited_total: number;
520
+ credited_base_total: number;
521
521
  currency_id: number | null;
522
522
  formatted_created_at: string;
523
523
  invoice_pdf_url: 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.8.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)",