@pimia/sdk 0.15.0 → 0.17.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 +97 -0
- package/dist/client.d.ts +88 -0
- package/dist/client.js +49 -0
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -7652,6 +7652,7 @@ export interface components {
|
|
|
7652
7652
|
triage_resolved_by: number | null;
|
|
7653
7653
|
triage_resolved_at: string | null;
|
|
7654
7654
|
triage_rejection_reason: string | null;
|
|
7655
|
+
/** Format: date-time */
|
|
7655
7656
|
exported_at: string | null;
|
|
7656
7657
|
rectified_invoice_id: number | null;
|
|
7657
7658
|
customer_sequence_number: number | null;
|
|
@@ -7671,6 +7672,7 @@ export interface components {
|
|
|
7671
7672
|
/** Format: date-time */
|
|
7672
7673
|
viewed_at: string | null;
|
|
7673
7674
|
contract_id: number | null;
|
|
7675
|
+
export_batch_id: number | null;
|
|
7674
7676
|
};
|
|
7675
7677
|
/** InvoiceItem */
|
|
7676
7678
|
InvoiceItem: {
|
|
@@ -8202,6 +8204,15 @@ export interface components {
|
|
|
8202
8204
|
is_active: boolean;
|
|
8203
8205
|
is_time_trackable: boolean;
|
|
8204
8206
|
opening_stock: number;
|
|
8207
|
+
/**
|
|
8208
|
+
* @description Lo COMPROMETIDO por documentos que aún no han movido el almacén
|
|
8209
|
+
* (N2 · pieza 3, cifra derivada — nadie la escribe). ⚠️ `null` NO
|
|
8210
|
+
* es cero: es «no se está calculando» (módulo `stock` sin
|
|
8211
|
+
* instalar, o el ciclo de inventario apagado). Pintar un 0 ahí
|
|
8212
|
+
* afirmaría «nada comprometido», que es lo que no se sabe.
|
|
8213
|
+
* El porqué entero, en {@see \App\Support\StockCommitments}.
|
|
8214
|
+
*/
|
|
8215
|
+
committed_quantity: number | null;
|
|
8205
8216
|
stock_alert_qty: number | null;
|
|
8206
8217
|
allow_sale_without_stock: boolean;
|
|
8207
8218
|
purchase_tax_type_id: number | null;
|
|
@@ -8245,6 +8256,13 @@ export interface components {
|
|
|
8245
8256
|
is_active: boolean;
|
|
8246
8257
|
is_time_trackable: boolean;
|
|
8247
8258
|
opening_stock: number;
|
|
8259
|
+
/**
|
|
8260
|
+
* @description Igual que en el recurso completo: `null` es «no se está
|
|
8261
|
+
* calculando», no cero (N2 · pieza 3). La celda de stock del
|
|
8262
|
+
* listado del panel lo lee de aquí — el índice del catálogo va
|
|
8263
|
+
* por `?view=summary`.
|
|
8264
|
+
*/
|
|
8265
|
+
committed_quantity: number | null;
|
|
8248
8266
|
stock_alert_qty: number | null;
|
|
8249
8267
|
allow_sale_without_stock: boolean;
|
|
8250
8268
|
/** Format: date-time */
|
|
@@ -8270,6 +8288,15 @@ export interface components {
|
|
|
8270
8288
|
item_name: string;
|
|
8271
8289
|
warehouse_id: number;
|
|
8272
8290
|
quantity: number;
|
|
8291
|
+
/**
|
|
8292
|
+
* @description Lo que el ARTÍCULO tiene comprometido — global, no de este
|
|
8293
|
+
* almacén (N2 · pieza 3). El nombre lleva el `item_` delante por
|
|
8294
|
+
* eso: en una fila que habla de una nave, «comprometido» a secas
|
|
8295
|
+
* se leería como «comprometido aquí», y de los dos documentos que
|
|
8296
|
+
* comprometen solo el albarán declara almacén. `null` = no se
|
|
8297
|
+
* está calculando; nunca es cero.
|
|
8298
|
+
*/
|
|
8299
|
+
item_committed_quantity: number | null;
|
|
8273
8300
|
};
|
|
8274
8301
|
/** ItemsRequest */
|
|
8275
8302
|
ItemsRequest: {
|
|
@@ -9608,6 +9635,36 @@ export interface components {
|
|
|
9608
9635
|
description?: string | null;
|
|
9609
9636
|
compound_tax?: string | null;
|
|
9610
9637
|
collective_tax?: string | null;
|
|
9638
|
+
/**
|
|
9639
|
+
* @description Familia AEAT del impuesto. Decide en qué modelo entra: `IVA` en el
|
|
9640
|
+
* 303, `IRPF` (las retenciones) en el 111 o el 115. Un porcentaje
|
|
9641
|
+
* negativo NO basta para que un tipo cuente como retención: lo
|
|
9642
|
+
* decide esta clave. Si se omite, la columna vale `IVA`.
|
|
9643
|
+
* @enum {string}
|
|
9644
|
+
*/
|
|
9645
|
+
tax_category?: "IVA" | "IRPF" | "IGIC" | "IPSI" | "RE" | "REAGYP" | "SS" | "OTHER";
|
|
9646
|
+
/**
|
|
9647
|
+
* @description Dónde se puede aplicar el tipo: `sale` en lo que se emite
|
|
9648
|
+
* (facturas, presupuestos), `purchase` en lo que se recibe
|
|
9649
|
+
* (facturas de proveedor, gastos), `investment` en bienes de
|
|
9650
|
+
* inversión, `both` en cualquiera de los dos primeros. Si se omite,
|
|
9651
|
+
* la columna vale `both`.
|
|
9652
|
+
* @enum {string}
|
|
9653
|
+
*/
|
|
9654
|
+
tax_scope?: "sale" | "purchase" | "both" | "investment";
|
|
9655
|
+
/**
|
|
9656
|
+
* @description Marca este tipo como el preseleccionado de su familia y su ámbito.
|
|
9657
|
+
* Solo puede haberlo uno por (categoría, ámbito): al marcar este, el
|
|
9658
|
+
* anterior de esa pareja se desmarca. Es el que gana cuando un
|
|
9659
|
+
* documento declara un tramo por el porcentaje y varios tipos
|
|
9660
|
+
* encajan.
|
|
9661
|
+
*/
|
|
9662
|
+
is_default?: boolean;
|
|
9663
|
+
/**
|
|
9664
|
+
* @description Modelo de la AEAT en el que declara este impuesto: `303` el IVA,
|
|
9665
|
+
* `111` o `115` las retenciones.
|
|
9666
|
+
*/
|
|
9667
|
+
aeat_model?: string | null;
|
|
9611
9668
|
};
|
|
9612
9669
|
/** TaxTypeResource */
|
|
9613
9670
|
TaxTypeResource: {
|
|
@@ -20028,6 +20085,46 @@ export interface operations {
|
|
|
20028
20085
|
warehouse_name: string;
|
|
20029
20086
|
quantity: number;
|
|
20030
20087
|
}[];
|
|
20088
|
+
/**
|
|
20089
|
+
* @description Lo COMPROMETIDO y lo DISPONIBLE (N2 · pieza 3). Cifra
|
|
20090
|
+
* derivada: nadie la escribe, se calcula al preguntarla.
|
|
20091
|
+
* `null` ENTERO = no se está calculando (módulo `stock` sin
|
|
20092
|
+
* instalar o ciclo de inventario apagado); un cero ahí
|
|
20093
|
+
* afirmaría «nada comprometido», que es lo que no se sabe. El desglose viaja entero y sin paginar, como
|
|
20094
|
+
* `warehouse_stock`: es cabecera de pestaña, y son los
|
|
20095
|
+
* borradores vivos de UN artículo, que en una pyme se cuentan
|
|
20096
|
+
* con los dedos. Va aquí y no en un endpoint aparte porque la
|
|
20097
|
+
* pregunta es la misma que abre el libro — «¿por qué tengo
|
|
20098
|
+
* 47?» y «¿por qué solo puedo vender 35?» se responden en la
|
|
20099
|
+
* misma pantalla.
|
|
20100
|
+
*/
|
|
20101
|
+
committed: {
|
|
20102
|
+
quantity: number;
|
|
20103
|
+
/**
|
|
20104
|
+
* @description ⚠️ `null` cuando el artículo NUNCA ha llevado stock
|
|
20105
|
+
* (`opening_stock` NULL, la distinción que la migración se
|
|
20106
|
+
* esforzó en preservar): de ese no hay disponible que
|
|
20107
|
+
* calcular, y un «−4» ahí sería una alarma inventada.
|
|
20108
|
+
*/
|
|
20109
|
+
available: number | null;
|
|
20110
|
+
documents: ({
|
|
20111
|
+
/** @constant */
|
|
20112
|
+
document_type: "delivery_note";
|
|
20113
|
+
document_id: number;
|
|
20114
|
+
document_number: string;
|
|
20115
|
+
customer_name: string;
|
|
20116
|
+
date: string;
|
|
20117
|
+
quantity: number;
|
|
20118
|
+
} | {
|
|
20119
|
+
/** @constant */
|
|
20120
|
+
document_type: "invoice";
|
|
20121
|
+
document_id: number;
|
|
20122
|
+
document_number: string;
|
|
20123
|
+
customer_name: string;
|
|
20124
|
+
date: string;
|
|
20125
|
+
quantity: number;
|
|
20126
|
+
})[];
|
|
20127
|
+
} | null;
|
|
20031
20128
|
};
|
|
20032
20129
|
};
|
|
20033
20130
|
};
|
package/dist/client.d.ts
CHANGED
|
@@ -960,6 +960,94 @@ export declare class PimiaClient {
|
|
|
960
960
|
success: string;
|
|
961
961
|
}>;
|
|
962
962
|
};
|
|
963
|
+
/**
|
|
964
|
+
* El libro del almacén: por qué un artículo tiene el saldo que tiene. Exige
|
|
965
|
+
* `items:read` — leer el libro es leer el catálogo que explica— y, a
|
|
966
|
+
* diferencia de almacenes y recuentos, **NO va tras el módulo `stock`**: el
|
|
967
|
+
* libro es N1 y N1 es de todos.
|
|
968
|
+
*
|
|
969
|
+
* ## El COMPROMETIDO, en la cabecera de `forItem`
|
|
970
|
+
*
|
|
971
|
+
* `meta.committed` responde la otra mitad de la pregunta: no «cuánto tengo»
|
|
972
|
+
* sino **«cuánto de lo que tengo puedo vender»**. Trae la cantidad, el
|
|
973
|
+
* disponible (saldo − comprometido) y el DESGLOSE de los documentos que lo
|
|
974
|
+
* comprometen.
|
|
975
|
+
*
|
|
976
|
+
* ⛔ **Tres cosas que hay que tener delante:**
|
|
977
|
+
*
|
|
978
|
+
* 1. **Es una cifra DERIVADA**: no hay columna que escribir, no existe un
|
|
979
|
+
* `PUT` para reservar. Comprometen el albarán y la factura **en
|
|
980
|
+
* borrador**, y dejan de hacerlo solos cuando mueven el almacén (al
|
|
981
|
+
* entregar y al publicar). El presupuesto aceptado NO compromete: nada en
|
|
982
|
+
* el núcleo dice cuándo se cumplió.
|
|
983
|
+
* 2. ⚠️ **`committed` a `null` NO es cero.** Es «no se está calculando» — la
|
|
984
|
+
* empresa no tiene el módulo `stock`, o tiene el ciclo de inventario
|
|
985
|
+
* apagado. Pintar un 0 ahí afirma «nada comprometido», que es justo lo
|
|
986
|
+
* que no se sabe. Igual con `committed_quantity` en el artículo.
|
|
987
|
+
* 3. **Es GLOBAL por artículo, sin dimensión de almacén**: de los documentos
|
|
988
|
+
* que comprometen solo el albarán declara almacén.
|
|
989
|
+
*/
|
|
990
|
+
get stockMovements(): {
|
|
991
|
+
/**
|
|
992
|
+
* El libro entero de la empresa, filtrable por artículo, almacén, motivo
|
|
993
|
+
* y fechas. Su `meta` trae además el valor informativo del almacén
|
|
994
|
+
* (`stock_value_cents`), que NO es valoración contable.
|
|
995
|
+
*/
|
|
996
|
+
list: (query?: RequestOptions["query"], options?: ReadOptions) => Promise<{
|
|
997
|
+
data: components["schemas"]["StockMovementResource"][];
|
|
998
|
+
meta: {
|
|
999
|
+
stock_movement_total_count: number;
|
|
1000
|
+
stock_value_cents: number;
|
|
1001
|
+
};
|
|
1002
|
+
}>;
|
|
1003
|
+
/**
|
|
1004
|
+
* El libro de UN artículo, con la cabecera que lo explica: saldo
|
|
1005
|
+
* (`meta.opening_stock`), reparto por almacén (`meta.warehouse_stock`) y
|
|
1006
|
+
* comprometido (`meta.committed`).
|
|
1007
|
+
*/
|
|
1008
|
+
forItem: (itemId: number | string, query?: RequestOptions["query"], options?: ReadOptions) => Promise<{
|
|
1009
|
+
data: components["schemas"]["StockMovementResource"][];
|
|
1010
|
+
meta: {
|
|
1011
|
+
opening_stock: number | null;
|
|
1012
|
+
warehouse_stock: {
|
|
1013
|
+
warehouse_id: number;
|
|
1014
|
+
warehouse_name: string;
|
|
1015
|
+
quantity: number;
|
|
1016
|
+
}[];
|
|
1017
|
+
committed: {
|
|
1018
|
+
quantity: number;
|
|
1019
|
+
available: number | null;
|
|
1020
|
+
documents: ({
|
|
1021
|
+
document_type: "delivery_note";
|
|
1022
|
+
document_id: number;
|
|
1023
|
+
document_number: string;
|
|
1024
|
+
customer_name: string;
|
|
1025
|
+
date: string;
|
|
1026
|
+
quantity: number;
|
|
1027
|
+
} | {
|
|
1028
|
+
document_type: "invoice";
|
|
1029
|
+
document_id: number;
|
|
1030
|
+
document_number: string;
|
|
1031
|
+
customer_name: string;
|
|
1032
|
+
date: string;
|
|
1033
|
+
quantity: number;
|
|
1034
|
+
})[];
|
|
1035
|
+
} | null;
|
|
1036
|
+
};
|
|
1037
|
+
}>;
|
|
1038
|
+
/**
|
|
1039
|
+
* El ajuste manual con motivo: la corrección que deja rastro, frente al
|
|
1040
|
+
* `PUT /items/{item}` que pisa el contador sin decir por qué. Cantidad
|
|
1041
|
+
* FIRMADA (± decimal) y `note` obligatoria; `warehouse_id` opcional.
|
|
1042
|
+
*/
|
|
1043
|
+
adjust: (itemId: number | string, body: {
|
|
1044
|
+
quantity: number;
|
|
1045
|
+
note: string;
|
|
1046
|
+
warehouse_id?: number;
|
|
1047
|
+
}, options?: WriteOptions) => Promise<{
|
|
1048
|
+
data: components["schemas"]["StockMovementResource"];
|
|
1049
|
+
}>;
|
|
1050
|
+
};
|
|
963
1051
|
get<T = unknown>(path: string, query?: RequestOptions['query'], options?: ReadOptions): Promise<T>;
|
|
964
1052
|
post<T = unknown>(path: string, body?: unknown, options?: WriteOptions): Promise<T>;
|
|
965
1053
|
put<T = unknown>(path: string, body?: unknown, options?: WriteOptions): Promise<T>;
|
package/dist/client.js
CHANGED
|
@@ -245,6 +245,55 @@ export class PimiaClient {
|
|
|
245
245
|
delete: (id, options) => this.delete(`/stock-counts/${id}`, options),
|
|
246
246
|
};
|
|
247
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* El libro del almacén: por qué un artículo tiene el saldo que tiene. Exige
|
|
250
|
+
* `items:read` — leer el libro es leer el catálogo que explica— y, a
|
|
251
|
+
* diferencia de almacenes y recuentos, **NO va tras el módulo `stock`**: el
|
|
252
|
+
* libro es N1 y N1 es de todos.
|
|
253
|
+
*
|
|
254
|
+
* ## El COMPROMETIDO, en la cabecera de `forItem`
|
|
255
|
+
*
|
|
256
|
+
* `meta.committed` responde la otra mitad de la pregunta: no «cuánto tengo»
|
|
257
|
+
* sino **«cuánto de lo que tengo puedo vender»**. Trae la cantidad, el
|
|
258
|
+
* disponible (saldo − comprometido) y el DESGLOSE de los documentos que lo
|
|
259
|
+
* comprometen.
|
|
260
|
+
*
|
|
261
|
+
* ⛔ **Tres cosas que hay que tener delante:**
|
|
262
|
+
*
|
|
263
|
+
* 1. **Es una cifra DERIVADA**: no hay columna que escribir, no existe un
|
|
264
|
+
* `PUT` para reservar. Comprometen el albarán y la factura **en
|
|
265
|
+
* borrador**, y dejan de hacerlo solos cuando mueven el almacén (al
|
|
266
|
+
* entregar y al publicar). El presupuesto aceptado NO compromete: nada en
|
|
267
|
+
* el núcleo dice cuándo se cumplió.
|
|
268
|
+
* 2. ⚠️ **`committed` a `null` NO es cero.** Es «no se está calculando» — la
|
|
269
|
+
* empresa no tiene el módulo `stock`, o tiene el ciclo de inventario
|
|
270
|
+
* apagado. Pintar un 0 ahí afirma «nada comprometido», que es justo lo
|
|
271
|
+
* que no se sabe. Igual con `committed_quantity` en el artículo.
|
|
272
|
+
* 3. **Es GLOBAL por artículo, sin dimensión de almacén**: de los documentos
|
|
273
|
+
* que comprometen solo el albarán declara almacén.
|
|
274
|
+
*/
|
|
275
|
+
get stockMovements() {
|
|
276
|
+
return {
|
|
277
|
+
/**
|
|
278
|
+
* El libro entero de la empresa, filtrable por artículo, almacén, motivo
|
|
279
|
+
* y fechas. Su `meta` trae además el valor informativo del almacén
|
|
280
|
+
* (`stock_value_cents`), que NO es valoración contable.
|
|
281
|
+
*/
|
|
282
|
+
list: (query, options) => this.get('/stock-movements', query, options),
|
|
283
|
+
/**
|
|
284
|
+
* El libro de UN artículo, con la cabecera que lo explica: saldo
|
|
285
|
+
* (`meta.opening_stock`), reparto por almacén (`meta.warehouse_stock`) y
|
|
286
|
+
* comprometido (`meta.committed`).
|
|
287
|
+
*/
|
|
288
|
+
forItem: (itemId, query, options) => this.get(`/items/${itemId}/stock-movements`, query, options),
|
|
289
|
+
/**
|
|
290
|
+
* El ajuste manual con motivo: la corrección que deja rastro, frente al
|
|
291
|
+
* `PUT /items/{item}` que pisa el contador sin decir por qué. Cantidad
|
|
292
|
+
* FIRMADA (± decimal) y `note` obligatoria; `warehouse_id` opcional.
|
|
293
|
+
*/
|
|
294
|
+
adjust: (itemId, body, options) => this.post(`/items/${itemId}/stock-adjustments`, body, options),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
248
297
|
get(path, query, options) {
|
|
249
298
|
return this.request(path, { ...options, method: 'GET', query });
|
|
250
299
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pimia/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.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)",
|