@pimia/sdk 0.11.0 → 0.12.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
@@ -192,6 +192,22 @@ export interface paths {
192
192
  patch?: never;
193
193
  trace?: never;
194
194
  };
195
+ "/contracts/{contract}/activate": {
196
+ parameters: {
197
+ query?: never;
198
+ header?: never;
199
+ path?: never;
200
+ cookie?: never;
201
+ };
202
+ get?: never;
203
+ put?: never;
204
+ post: operations["contract.activateContract"];
205
+ delete?: never;
206
+ options?: never;
207
+ head?: never;
208
+ patch?: never;
209
+ trace?: never;
210
+ };
195
211
  "/app/version": {
196
212
  parameters: {
197
213
  query?: never;
@@ -454,6 +470,22 @@ export interface paths {
454
470
  patch?: never;
455
471
  trace?: never;
456
472
  };
473
+ "/contracts/{contract}/cancel": {
474
+ parameters: {
475
+ query?: never;
476
+ header?: never;
477
+ path?: never;
478
+ cookie?: never;
479
+ };
480
+ get?: never;
481
+ put?: never;
482
+ post: operations["contract.cancelContract"];
483
+ delete?: never;
484
+ options?: never;
485
+ head?: never;
486
+ patch?: never;
487
+ trace?: never;
488
+ };
457
489
  "/estimates/{estimate}/status": {
458
490
  parameters: {
459
491
  query?: never;
@@ -808,6 +840,79 @@ export interface paths {
808
840
  patch?: never;
809
841
  trace?: never;
810
842
  };
843
+ "/contracts/{contract}/document": {
844
+ parameters: {
845
+ query?: never;
846
+ header?: never;
847
+ path?: never;
848
+ cookie?: never;
849
+ };
850
+ get?: never;
851
+ put?: never;
852
+ post: operations["contractDocument.upload"];
853
+ delete: operations["contractDocument.destroy"];
854
+ options?: never;
855
+ head?: never;
856
+ patch?: never;
857
+ trace?: never;
858
+ };
859
+ "/contracts/delete": {
860
+ parameters: {
861
+ query?: never;
862
+ header?: never;
863
+ path?: never;
864
+ cookie?: never;
865
+ };
866
+ get?: never;
867
+ put?: never;
868
+ /**
869
+ * Borrado en lote (`POST /contracts/delete`). Fail-loud: un id no
870
+ * borrable aborta el lote entero antes de borrar nada
871
+ */
872
+ post: operations["contracts.delete"];
873
+ delete?: never;
874
+ options?: never;
875
+ head?: never;
876
+ patch?: never;
877
+ trace?: never;
878
+ };
879
+ "/contracts": {
880
+ parameters: {
881
+ query?: never;
882
+ header?: never;
883
+ path?: never;
884
+ cookie?: never;
885
+ };
886
+ get: operations["contracts.index"];
887
+ put?: never;
888
+ post: operations["contracts.store"];
889
+ delete?: never;
890
+ options?: never;
891
+ head?: never;
892
+ patch?: never;
893
+ trace?: never;
894
+ };
895
+ "/contracts/{contract}": {
896
+ parameters: {
897
+ query?: never;
898
+ header?: never;
899
+ path?: never;
900
+ cookie?: never;
901
+ };
902
+ get: operations["contracts.show"];
903
+ put: operations["contracts.update"];
904
+ post?: never;
905
+ /**
906
+ * Borra UN contrato, el de la ruta. Solo en borrador: lo activo se
907
+ * cancela, no se borra (decisión 8) — y eso es un 422 con el porqué, no
908
+ * un 500 ni un borrado a medias
909
+ */
910
+ delete: operations["contracts.destroy"];
911
+ options?: never;
912
+ head?: never;
913
+ patch?: never;
914
+ trace?: never;
915
+ };
811
916
  "/estimates/{estimate}/convert-to-invoice": {
812
917
  parameters: {
813
918
  query?: never;
@@ -2676,7 +2781,12 @@ export interface paths {
2676
2781
  path?: never;
2677
2782
  cookie?: never;
2678
2783
  };
2679
- /** Retrieve a list of existing Items */
2784
+ /**
2785
+ * Retrieve a list of existing Items
2786
+ * @description El `@return` de JsonResponse se retira como en el índice de facturas:
2787
+ * nunca fue el tipo real y, con dos returns, dejaba la respuesta sin forma
2788
+ * en el spec.
2789
+ */
2680
2790
  get: operations["items.index"];
2681
2791
  put?: never;
2682
2792
  /** Create Item */
@@ -3940,6 +4050,22 @@ export interface paths {
3940
4050
  patch?: never;
3941
4051
  trace?: never;
3942
4052
  };
4053
+ "/contracts/{contract}/renew": {
4054
+ parameters: {
4055
+ query?: never;
4056
+ header?: never;
4057
+ path?: never;
4058
+ cookie?: never;
4059
+ };
4060
+ get?: never;
4061
+ put?: never;
4062
+ post: operations["contract.renewContract"];
4063
+ delete?: never;
4064
+ options?: never;
4065
+ head?: never;
4066
+ patch?: never;
4067
+ trace?: never;
4068
+ };
3943
4069
  "/roles/{role}/abilities": {
3944
4070
  parameters: {
3945
4071
  query?: never;
@@ -4277,6 +4403,54 @@ export interface paths {
4277
4403
  patch?: never;
4278
4404
  trace?: never;
4279
4405
  };
4406
+ "/invoices/{invoice}/shared-link": {
4407
+ parameters: {
4408
+ query?: never;
4409
+ header?: never;
4410
+ path?: never;
4411
+ cookie?: never;
4412
+ };
4413
+ get: operations["invoice.sharedLink"];
4414
+ put?: never;
4415
+ post?: never;
4416
+ delete?: never;
4417
+ options?: never;
4418
+ head?: never;
4419
+ patch?: never;
4420
+ trace?: never;
4421
+ };
4422
+ "/contracts/{contract}/shared-link": {
4423
+ parameters: {
4424
+ query?: never;
4425
+ header?: never;
4426
+ path?: never;
4427
+ cookie?: never;
4428
+ };
4429
+ get: operations["contract.sharedLink"];
4430
+ put?: never;
4431
+ post?: never;
4432
+ delete?: never;
4433
+ options?: never;
4434
+ head?: never;
4435
+ patch?: never;
4436
+ trace?: never;
4437
+ };
4438
+ "/estimates/{estimate}/shared-link": {
4439
+ parameters: {
4440
+ query?: never;
4441
+ header?: never;
4442
+ path?: never;
4443
+ cookie?: never;
4444
+ };
4445
+ get: operations["estimate.sharedLink"];
4446
+ put?: never;
4447
+ post?: never;
4448
+ delete?: never;
4449
+ options?: never;
4450
+ head?: never;
4451
+ patch?: never;
4452
+ trace?: never;
4453
+ };
4280
4454
  "/expenses/{expense}/show/receipt": {
4281
4455
  parameters: {
4282
4456
  query?: never;
@@ -5710,6 +5884,23 @@ export interface components {
5710
5884
  name: string;
5711
5885
  } | null;
5712
5886
  };
5887
+ /**
5888
+ * ActivateContractRequest
5889
+ * @description Activación de un contrato (`POST /contracts/{contract}/activate`).
5890
+ *
5891
+ * Sin cuerpo, el contrato CREA su recurrente gobernada; con
5892
+ * `recurring_invoice_id`, ADOPTA esa — heredándole los límites del periodo
5893
+ * pero sin pisar su frecuencia, sus líneas ni sus impuestos, que son
5894
+ * configuración humana (Contract::activate()).
5895
+ *
5896
+ * El `exists` va acotado por empresa por la misma lección de siempre (#395):
5897
+ * dentro de una instancia conviven varias empresas, y el id a secas casaría
5898
+ * la recurrente de otra. El modelo lo re-comprueba (empresa Y cliente), pero
5899
+ * el 422 de aquí llega antes y dice qué falla.
5900
+ */
5901
+ ActivateContractRequest: {
5902
+ recurring_invoice_id?: number | null;
5903
+ };
5713
5904
  /** AddressResource */
5714
5905
  AddressResource: {
5715
5906
  id: number;
@@ -5955,6 +6146,102 @@ export interface components {
5955
6146
  /** Format: date-time */
5956
6147
  updated_at: string | null;
5957
6148
  };
6149
+ /**
6150
+ * ContractRequest
6151
+ * @description Alta y edición de un contrato (`POST /contracts`, `PUT /contracts/{id}`).
6152
+ *
6153
+ * Dos decisiones que no son costumbre sino contrato (#583):
6154
+ *
6155
+ * - **`status` NO se acepta aquí.** El ciclo de vida va por sus acciones
6156
+ * (`activate`/`cancel`/`renew`), que son las que gobiernan las recurrentes;
6157
+ * aceptar `status` en el PUT sería un contrato ACTIVE sin recurrente o
6158
+ * CANCELLED sin pausar nada — el estado mentiría. La lista blanca del
6159
+ * payload son estas reglas (ContractFields), así que no declararlo ya es
6160
+ * excluirlo.
6161
+ * - **Los cerrados llevan `Rule::in`**, y no solo por validar: el generador
6162
+ * del spec deduce el enum de la regla, y el estudio dejó medido lo que pasa
6163
+ * cuando no se hace — `frequency`/`status`/`limit_by` de la recurrente son
6164
+ * `string` sin enum en el contrato público y el SDK hereda esa opacidad.
6165
+ */
6166
+ ContractRequest: {
6167
+ title: string;
6168
+ description?: string | null;
6169
+ contract_number?: string | null;
6170
+ customer_id: number;
6171
+ /** Format: date-time */
6172
+ starts_at: string;
6173
+ /**
6174
+ * Format: date-time
6175
+ * @description Nullable = contrato indefinido: la recurrente gobernada hereda
6176
+ * `limit_by = NONE`.
6177
+ */
6178
+ ends_at?: string | null;
6179
+ /**
6180
+ * @description Céntimos, enteros — la convención monetaria de la casa. El tope
6181
+ * es el mismo que el de `total` en documentos.
6182
+ */
6183
+ amount: number;
6184
+ currency_id?: number | null;
6185
+ /** @enum {string} */
6186
+ billing_every: "MONTHLY" | "QUARTERLY" | "SEMIANNUAL" | "ANNUAL";
6187
+ /**
6188
+ * @description 1..31 y no 1..28: el 29-31 es entrada legítima («factúrame a fin
6189
+ * de mes») que la compilación fija al 28 — rechazarla aquí obligaría
6190
+ * al cliente a conocer una limitación de cron que es nuestra.
6191
+ */
6192
+ billing_anchor_day?: number | null;
6193
+ /** @enum {string|null} */
6194
+ renewal_mode?: "NONE" | "MANUAL" | "TACIT" | null;
6195
+ /**
6196
+ * @description Nullable = «usa el default del catálogo regional» (#584). El tope
6197
+ * corta los disparates sin opinar sobre ninguna legislación.
6198
+ */
6199
+ notice_days?: number | null;
6200
+ /**
6201
+ * @description El presupuesto de origen, acotado por empresa — la lección del
6202
+ * `item_id` de las recurrentes (#395): sin el `where`, un contrato
6203
+ * podía quedar apuntando al presupuesto de OTRA empresa del tenant.
6204
+ */
6205
+ estimate_id?: number | null;
6206
+ };
6207
+ /** ContractResource */
6208
+ ContractResource: {
6209
+ id: number;
6210
+ title: string;
6211
+ description: string | null;
6212
+ contract_number: string | null;
6213
+ customer_id: number | null;
6214
+ company_id: number | null;
6215
+ creator_id: number | null;
6216
+ currency_id: number | null;
6217
+ status: string;
6218
+ ha_vencido: boolean;
6219
+ starts_at: string | null;
6220
+ ends_at: string | null;
6221
+ amount: number | null;
6222
+ billing_every: string;
6223
+ billing_anchor_day: number | null;
6224
+ renewal_mode: string;
6225
+ notice_days: number | null;
6226
+ /**
6227
+ * @description El efectivo: el del contrato o el default del catálogo regional
6228
+ * (config/contracts.php). La pantalla enseña este, no el crudo.
6229
+ */
6230
+ notice_days_effective: number;
6231
+ /**
6232
+ * @description ¿Hay firmado adjunto? El fichero se sube por su POST multiparte
6233
+ * dedicado (#584) y se pisa al resubir.
6234
+ */
6235
+ has_document: boolean;
6236
+ estimate_id: number | null;
6237
+ /** Format: date-time */
6238
+ cancelled_at: string | null;
6239
+ fields?: components["schemas"]["CustomFieldValueResource"][];
6240
+ customer?: components["schemas"]["CustomerResource"] | null;
6241
+ estimate?: components["schemas"]["EstimateResource"] | null;
6242
+ recurring_invoices?: components["schemas"]["RecurringInvoiceResource"][];
6243
+ invoices?: components["schemas"]["InvoiceResource"][];
6244
+ };
5958
6245
  /**
5959
6246
  * ConvertEstimateRequest
5960
6247
  * @description Cuerpo —opcional— de la conversión de un presupuesto en factura.
@@ -6297,6 +6584,19 @@ export interface components {
6297
6584
  */
6298
6585
  external_ref: string | null;
6299
6586
  };
6587
+ /**
6588
+ * DeleteContractsRequest
6589
+ * @description Borrado múltiple de contratos (`POST /contracts/delete`). Mismo patrón que
6590
+ * DeleteRecurringInvoicesRequest: el `exists` convierte el id inexistente en
6591
+ * un 422 que dice cuál falla, en vez del 500 de iterar sobre un `find()` nulo.
6592
+ *
6593
+ * Lo que NO valida esto: que cada contrato esté en borrador. Esa es la regla
6594
+ * de negocio (decisión 8: lo activo se cancela, no se borra) y vive en
6595
+ * `Contract::deleteContracts()`, que aborta el lote entero en voz alta.
6596
+ */
6597
+ DeleteContractsRequest: {
6598
+ ids: number[];
6599
+ };
6300
6600
  /** DeleteCustomersRequest */
6301
6601
  DeleteCustomersRequest: {
6302
6602
  ids: number[];
@@ -7082,6 +7382,7 @@ export interface components {
7082
7382
  sent_at: string | null;
7083
7383
  /** Format: date-time */
7084
7384
  viewed_at: string | null;
7385
+ contract_id: number | null;
7085
7386
  };
7086
7387
  /** InvoiceItem */
7087
7388
  InvoiceItem: {
@@ -7620,6 +7921,54 @@ export interface components {
7620
7921
  taxes?: components["schemas"]["TaxResource"][];
7621
7922
  currency?: components["schemas"]["CurrencyResource"] | null;
7622
7923
  };
7924
+ /** ItemSummaryResource */
7925
+ ItemSummaryResource: {
7926
+ id: number;
7927
+ name: string;
7928
+ item_type: string;
7929
+ sku: string | null;
7930
+ supplier_reference: string | null;
7931
+ description: string | null;
7932
+ price: number;
7933
+ purchase_price: number | null;
7934
+ default_discount: number;
7935
+ category_id: number | null;
7936
+ category?: {
7937
+ id: number;
7938
+ name: string;
7939
+ };
7940
+ unit_id: number | null;
7941
+ /**
7942
+ * @description Del `leftJoin` del índice, no de la relación: es el único dato de
7943
+ * la unidad que los listados pintan.
7944
+ */
7945
+ unit_name: string | null;
7946
+ company_id: number | null;
7947
+ currency_id: number | null;
7948
+ tax_per_item: string;
7949
+ purchase_tax_type_id: number | null;
7950
+ is_active: boolean;
7951
+ is_time_trackable: boolean;
7952
+ opening_stock: number;
7953
+ stock_alert_qty: number | null;
7954
+ allow_sale_without_stock: boolean;
7955
+ /** Format: date-time */
7956
+ created_at: string | null;
7957
+ /** Format: date-time */
7958
+ updated_at: string | null;
7959
+ taxes?: {
7960
+ id: number;
7961
+ tax_type_id: number | null;
7962
+ item_id: number | null;
7963
+ company_id: number | null;
7964
+ name: string;
7965
+ amount: number;
7966
+ percent: number;
7967
+ base_amount: number;
7968
+ currency_id: number | null;
7969
+ type: string | null;
7970
+ }[];
7971
+ };
7623
7972
  /** ItemsRequest */
7624
7973
  ItemsRequest: {
7625
7974
  name: string;
@@ -8350,6 +8699,18 @@ export interface components {
8350
8699
  creator?: components["schemas"]["UserResource"] | null;
8351
8700
  currency?: components["schemas"]["CurrencyResource"] | null;
8352
8701
  };
8702
+ /**
8703
+ * RenewContractRequest
8704
+ * @description Renovación manual de un contrato (`POST /contracts/{contract}/renew`).
8705
+ *
8706
+ * Solo la fecha nueva: que sea POSTERIOR al fin actual —renovar es extender—
8707
+ * lo comprueba `Contract::renew()`, porque depende del estado del contrato y
8708
+ * no del cuerpo. La renovación tácita no pasa por aquí: es el job de fase 2.
8709
+ */
8710
+ RenewContractRequest: {
8711
+ /** Format: date-time */
8712
+ ends_at: string;
8713
+ };
8353
8714
  /** Role */
8354
8715
  Role: {
8355
8716
  id: number;
@@ -8390,7 +8751,7 @@ export interface components {
8390
8751
  * ningún permiso es una operación legítima, y `required` la
8391
8752
  * prohibiría (un array vacío no pasa `required`).
8392
8753
  */
8393
- abilities: ("dashboard" | "view-customer" | "create-customer" | "edit-customer" | "delete-customer" | "view-estimate" | "create-estimate" | "edit-estimate" | "delete-estimate" | "send-estimate" | "view-invoice" | "create-invoice" | "edit-invoice" | "delete-invoice" | "send-invoice" | "view-recurring-invoice" | "create-recurring-invoice" | "edit-recurring-invoice" | "delete-recurring-invoice" | "view-payment" | "create-payment" | "edit-payment" | "delete-payment" | "send-payment" | "view-expense" | "create-expense" | "edit-expense" | "delete-expense" | "view-delivery-note" | "create-delivery-note" | "edit-delivery-note" | "delete-delivery-note" | "view-item" | "create-item" | "edit-item" | "delete-item" | "view-lead" | "create-lead" | "edit-lead" | "delete-lead" | "convert-lead" | "view-contact" | "create-contact" | "edit-contact" | "delete-contact" | "view-project" | "create-project" | "edit-project" | "delete-project" | "view-task" | "create-task" | "edit-task" | "delete-task" | "view-own-task" | "edit-own-task" | "view-time-entry" | "create-time-entry" | "edit-time-entry" | "delete-time-entry" | "view-own-time-entry" | "create-own-time-entry" | "edit-own-time-entry" | "delete-own-time-entry" | "view-tax-type" | "create-tax-type" | "edit-tax-type" | "delete-tax-type" | "view-custom-field" | "create-custom-field" | "edit-custom-field" | "delete-custom-field" | "view-role" | "create-role" | "edit-role" | "delete-role" | "view-financial-reports" | "view-all-notes" | "manage-all-notes" | "time_clock.punch" | "time_clock.view_own" | "time_clock.view_team" | "time_clock.correct" | "absence.request" | "absence.approve" | "report.download_legal" | "view-employee" | "create-employee" | "edit-employee" | "delete-employee" | "view-work-schedule" | "manage-work-schedule" | "view-work-calendar" | "manage-work-calendar" | "pos.operate" | "pos.supervise" | "pos.void" | "pos.discount_high" | "pos.cash_movement" | "pos.return" | "pos.admin" | "pos.report" | "view-appointment" | "create-appointment" | "edit-appointment" | "delete-appointment")[];
8754
+ abilities: ("dashboard" | "view-customer" | "create-customer" | "edit-customer" | "delete-customer" | "view-estimate" | "create-estimate" | "edit-estimate" | "delete-estimate" | "send-estimate" | "view-invoice" | "create-invoice" | "edit-invoice" | "delete-invoice" | "send-invoice" | "view-recurring-invoice" | "create-recurring-invoice" | "edit-recurring-invoice" | "delete-recurring-invoice" | "view-payment" | "create-payment" | "edit-payment" | "delete-payment" | "send-payment" | "view-expense" | "create-expense" | "edit-expense" | "delete-expense" | "view-delivery-note" | "create-delivery-note" | "edit-delivery-note" | "delete-delivery-note" | "view-item" | "create-item" | "edit-item" | "delete-item" | "view-lead" | "create-lead" | "edit-lead" | "delete-lead" | "convert-lead" | "view-contact" | "create-contact" | "edit-contact" | "delete-contact" | "view-project" | "create-project" | "edit-project" | "delete-project" | "view-task" | "create-task" | "edit-task" | "delete-task" | "view-own-task" | "edit-own-task" | "view-time-entry" | "create-time-entry" | "edit-time-entry" | "delete-time-entry" | "view-own-time-entry" | "create-own-time-entry" | "edit-own-time-entry" | "delete-own-time-entry" | "view-tax-type" | "create-tax-type" | "edit-tax-type" | "delete-tax-type" | "view-custom-field" | "create-custom-field" | "edit-custom-field" | "delete-custom-field" | "view-role" | "create-role" | "edit-role" | "delete-role" | "view-financial-reports" | "view-all-notes" | "manage-all-notes" | "time_clock.punch" | "time_clock.view_own" | "time_clock.view_team" | "time_clock.correct" | "absence.request" | "absence.approve" | "report.download_legal" | "view-employee" | "create-employee" | "edit-employee" | "delete-employee" | "view-work-schedule" | "manage-work-schedule" | "view-work-calendar" | "manage-work-calendar" | "pos.operate" | "pos.supervise" | "pos.void" | "pos.discount_high" | "pos.cash_movement" | "pos.return" | "pos.admin" | "pos.report" | "view-appointment" | "create-appointment" | "edit-appointment" | "delete-appointment" | "view-contract" | "create-contract" | "edit-contract" | "delete-contract")[];
8394
8755
  };
8395
8756
  /**
8396
8757
  * RoleRequest
@@ -8415,7 +8776,7 @@ export interface components {
8415
8776
  name: string;
8416
8777
  abilities?: {
8417
8778
  /** @enum {string} */
8418
- ability: "dashboard" | "view-customer" | "create-customer" | "edit-customer" | "delete-customer" | "view-estimate" | "create-estimate" | "edit-estimate" | "delete-estimate" | "send-estimate" | "view-invoice" | "create-invoice" | "edit-invoice" | "delete-invoice" | "send-invoice" | "view-recurring-invoice" | "create-recurring-invoice" | "edit-recurring-invoice" | "delete-recurring-invoice" | "view-payment" | "create-payment" | "edit-payment" | "delete-payment" | "send-payment" | "view-expense" | "create-expense" | "edit-expense" | "delete-expense" | "view-delivery-note" | "create-delivery-note" | "edit-delivery-note" | "delete-delivery-note" | "view-item" | "create-item" | "edit-item" | "delete-item" | "view-lead" | "create-lead" | "edit-lead" | "delete-lead" | "convert-lead" | "view-contact" | "create-contact" | "edit-contact" | "delete-contact" | "view-project" | "create-project" | "edit-project" | "delete-project" | "view-task" | "create-task" | "edit-task" | "delete-task" | "view-own-task" | "edit-own-task" | "view-time-entry" | "create-time-entry" | "edit-time-entry" | "delete-time-entry" | "view-own-time-entry" | "create-own-time-entry" | "edit-own-time-entry" | "delete-own-time-entry" | "view-tax-type" | "create-tax-type" | "edit-tax-type" | "delete-tax-type" | "view-custom-field" | "create-custom-field" | "edit-custom-field" | "delete-custom-field" | "view-role" | "create-role" | "edit-role" | "delete-role" | "view-financial-reports" | "view-all-notes" | "manage-all-notes" | "time_clock.punch" | "time_clock.view_own" | "time_clock.view_team" | "time_clock.correct" | "absence.request" | "absence.approve" | "report.download_legal" | "view-employee" | "create-employee" | "edit-employee" | "delete-employee" | "view-work-schedule" | "manage-work-schedule" | "view-work-calendar" | "manage-work-calendar" | "pos.operate" | "pos.supervise" | "pos.void" | "pos.discount_high" | "pos.cash_movement" | "pos.return" | "pos.admin" | "pos.report" | "view-appointment" | "create-appointment" | "edit-appointment" | "delete-appointment";
8779
+ ability: "dashboard" | "view-customer" | "create-customer" | "edit-customer" | "delete-customer" | "view-estimate" | "create-estimate" | "edit-estimate" | "delete-estimate" | "send-estimate" | "view-invoice" | "create-invoice" | "edit-invoice" | "delete-invoice" | "send-invoice" | "view-recurring-invoice" | "create-recurring-invoice" | "edit-recurring-invoice" | "delete-recurring-invoice" | "view-payment" | "create-payment" | "edit-payment" | "delete-payment" | "send-payment" | "view-expense" | "create-expense" | "edit-expense" | "delete-expense" | "view-delivery-note" | "create-delivery-note" | "edit-delivery-note" | "delete-delivery-note" | "view-item" | "create-item" | "edit-item" | "delete-item" | "view-lead" | "create-lead" | "edit-lead" | "delete-lead" | "convert-lead" | "view-contact" | "create-contact" | "edit-contact" | "delete-contact" | "view-project" | "create-project" | "edit-project" | "delete-project" | "view-task" | "create-task" | "edit-task" | "delete-task" | "view-own-task" | "edit-own-task" | "view-time-entry" | "create-time-entry" | "edit-time-entry" | "delete-time-entry" | "view-own-time-entry" | "create-own-time-entry" | "edit-own-time-entry" | "delete-own-time-entry" | "view-tax-type" | "create-tax-type" | "edit-tax-type" | "delete-tax-type" | "view-custom-field" | "create-custom-field" | "edit-custom-field" | "delete-custom-field" | "view-role" | "create-role" | "edit-role" | "delete-role" | "view-financial-reports" | "view-all-notes" | "manage-all-notes" | "time_clock.punch" | "time_clock.view_own" | "time_clock.view_team" | "time_clock.correct" | "absence.request" | "absence.approve" | "report.download_legal" | "view-employee" | "create-employee" | "edit-employee" | "delete-employee" | "view-work-schedule" | "manage-work-schedule" | "view-work-calendar" | "manage-work-calendar" | "pos.operate" | "pos.supervise" | "pos.void" | "pos.discount_high" | "pos.cash_movement" | "pos.return" | "pos.admin" | "pos.report" | "view-appointment" | "create-appointment" | "edit-appointment" | "delete-appointment" | "view-contract" | "create-contract" | "edit-contract" | "delete-contract";
8419
8780
  }[] | null;
8420
8781
  };
8421
8782
  /** RoleResource */
@@ -9475,30 +9836,39 @@ export interface operations {
9475
9836
  422: components["responses"]["ValidationException"];
9476
9837
  };
9477
9838
  };
9478
- appVersion: {
9839
+ "contract.activateContract": {
9479
9840
  parameters: {
9480
9841
  query?: never;
9481
9842
  header?: never;
9482
- path?: never;
9843
+ path: {
9844
+ /** @description The contract ID */
9845
+ contract: number;
9846
+ };
9483
9847
  cookie?: never;
9484
9848
  };
9485
- requestBody?: never;
9849
+ requestBody?: {
9850
+ content: {
9851
+ "application/json": components["schemas"]["ActivateContractRequest"];
9852
+ };
9853
+ };
9486
9854
  responses: {
9855
+ /** @description `ContractResource` */
9487
9856
  200: {
9488
9857
  headers: {
9489
9858
  [name: string]: unknown;
9490
9859
  };
9491
9860
  content: {
9492
9861
  "application/json": {
9493
- version: string | null;
9494
- /** @constant */
9495
- channel: "stable";
9862
+ data: components["schemas"]["ContractResource"];
9496
9863
  };
9497
9864
  };
9498
9865
  };
9866
+ 403: components["responses"]["AuthorizationException"];
9867
+ 404: components["responses"]["ModelNotFoundException"];
9868
+ 422: components["responses"]["ValidationException"];
9499
9869
  };
9500
9870
  };
9501
- "appointment.index": {
9871
+ appVersion: {
9502
9872
  parameters: {
9503
9873
  query?: never;
9504
9874
  header?: never;
@@ -9513,7 +9883,30 @@ export interface operations {
9513
9883
  };
9514
9884
  content: {
9515
9885
  "application/json": {
9516
- appointments: components["schemas"]["Appointment"][];
9886
+ version: string | null;
9887
+ /** @constant */
9888
+ channel: "stable";
9889
+ };
9890
+ };
9891
+ };
9892
+ };
9893
+ };
9894
+ "appointment.index": {
9895
+ parameters: {
9896
+ query?: never;
9897
+ header?: never;
9898
+ path?: never;
9899
+ cookie?: never;
9900
+ };
9901
+ requestBody?: never;
9902
+ responses: {
9903
+ 200: {
9904
+ headers: {
9905
+ [name: string]: unknown;
9906
+ };
9907
+ content: {
9908
+ "application/json": {
9909
+ appointments: components["schemas"]["Appointment"][];
9517
9910
  };
9518
9911
  };
9519
9912
  };
@@ -10123,6 +10516,44 @@ export interface operations {
10123
10516
  422: components["responses"]["ValidationException"];
10124
10517
  };
10125
10518
  };
10519
+ "contract.cancelContract": {
10520
+ parameters: {
10521
+ query?: never;
10522
+ header?: never;
10523
+ path: {
10524
+ /** @description The contract ID */
10525
+ contract: number;
10526
+ };
10527
+ cookie?: never;
10528
+ };
10529
+ requestBody?: never;
10530
+ responses: {
10531
+ /** @description `ContractResource` */
10532
+ 200: {
10533
+ headers: {
10534
+ [name: string]: unknown;
10535
+ };
10536
+ content: {
10537
+ "application/json": {
10538
+ data: components["schemas"]["ContractResource"];
10539
+ };
10540
+ };
10541
+ };
10542
+ 403: components["responses"]["AuthorizationException"];
10543
+ 404: components["responses"]["ModelNotFoundException"];
10544
+ 422: {
10545
+ headers: {
10546
+ [name: string]: unknown;
10547
+ };
10548
+ content: {
10549
+ "application/json": {
10550
+ success: boolean;
10551
+ message: string;
10552
+ };
10553
+ };
10554
+ };
10555
+ };
10556
+ };
10126
10557
  "estimate.changeEstimateStatus": {
10127
10558
  parameters: {
10128
10559
  query?: never;
@@ -10681,6 +11112,248 @@ export interface operations {
10681
11112
  404: components["responses"]["ModelNotFoundException"];
10682
11113
  };
10683
11114
  };
11115
+ "contractDocument.upload": {
11116
+ parameters: {
11117
+ query?: never;
11118
+ header?: never;
11119
+ path: {
11120
+ /** @description The contract ID */
11121
+ contract: number;
11122
+ };
11123
+ cookie?: never;
11124
+ };
11125
+ requestBody: {
11126
+ content: {
11127
+ "multipart/form-data": {
11128
+ /**
11129
+ * Format: binary
11130
+ * @description Maximum file size: 10240 kilobytes.
11131
+ */
11132
+ document: Blob;
11133
+ };
11134
+ };
11135
+ };
11136
+ responses: {
11137
+ /** @description `ContractResource` */
11138
+ 200: {
11139
+ headers: {
11140
+ [name: string]: unknown;
11141
+ };
11142
+ content: {
11143
+ "application/json": {
11144
+ data: components["schemas"]["ContractResource"];
11145
+ };
11146
+ };
11147
+ };
11148
+ 403: components["responses"]["AuthorizationException"];
11149
+ 404: components["responses"]["ModelNotFoundException"];
11150
+ 422: components["responses"]["ValidationException"];
11151
+ };
11152
+ };
11153
+ "contractDocument.destroy": {
11154
+ parameters: {
11155
+ query?: never;
11156
+ header?: never;
11157
+ path: {
11158
+ /** @description The contract ID */
11159
+ contract: number;
11160
+ };
11161
+ cookie?: never;
11162
+ };
11163
+ requestBody?: never;
11164
+ responses: {
11165
+ /** @description `ContractResource` */
11166
+ 200: {
11167
+ headers: {
11168
+ [name: string]: unknown;
11169
+ };
11170
+ content: {
11171
+ "application/json": {
11172
+ data: components["schemas"]["ContractResource"];
11173
+ };
11174
+ };
11175
+ };
11176
+ 403: components["responses"]["AuthorizationException"];
11177
+ 404: components["responses"]["ModelNotFoundException"];
11178
+ };
11179
+ };
11180
+ "contracts.delete": {
11181
+ parameters: {
11182
+ query?: never;
11183
+ header?: never;
11184
+ path?: never;
11185
+ cookie?: never;
11186
+ };
11187
+ requestBody: {
11188
+ content: {
11189
+ "application/json": components["schemas"]["DeleteContractsRequest"];
11190
+ };
11191
+ };
11192
+ responses: {
11193
+ 200: {
11194
+ headers: {
11195
+ [name: string]: unknown;
11196
+ };
11197
+ content: {
11198
+ "application/json": {
11199
+ success: boolean;
11200
+ };
11201
+ };
11202
+ };
11203
+ 403: components["responses"]["AuthorizationException"];
11204
+ 422: components["responses"]["ValidationException"];
11205
+ };
11206
+ };
11207
+ "contracts.index": {
11208
+ parameters: {
11209
+ query?: never;
11210
+ header?: never;
11211
+ path?: never;
11212
+ cookie?: never;
11213
+ };
11214
+ requestBody?: never;
11215
+ responses: {
11216
+ /** @description Array of `ContractResource` */
11217
+ 200: {
11218
+ headers: {
11219
+ [name: string]: unknown;
11220
+ };
11221
+ content: {
11222
+ "application/json": {
11223
+ data: components["schemas"]["ContractResource"][];
11224
+ meta: {
11225
+ contract_total_count: number;
11226
+ };
11227
+ };
11228
+ };
11229
+ };
11230
+ 403: components["responses"]["AuthorizationException"];
11231
+ };
11232
+ };
11233
+ "contracts.store": {
11234
+ parameters: {
11235
+ query?: never;
11236
+ header?: never;
11237
+ path?: never;
11238
+ cookie?: never;
11239
+ };
11240
+ requestBody: {
11241
+ content: {
11242
+ "application/json": components["schemas"]["ContractRequest"];
11243
+ };
11244
+ };
11245
+ responses: {
11246
+ /** @description `ContractResource` */
11247
+ 201: {
11248
+ headers: {
11249
+ [name: string]: unknown;
11250
+ };
11251
+ content: {
11252
+ "application/json": {
11253
+ data: components["schemas"]["ContractResource"];
11254
+ };
11255
+ };
11256
+ };
11257
+ 403: components["responses"]["AuthorizationException"];
11258
+ 422: components["responses"]["ValidationException"];
11259
+ };
11260
+ };
11261
+ "contracts.show": {
11262
+ parameters: {
11263
+ query?: never;
11264
+ header?: never;
11265
+ path: {
11266
+ /** @description The contract ID */
11267
+ contract: number;
11268
+ };
11269
+ cookie?: never;
11270
+ };
11271
+ requestBody?: never;
11272
+ responses: {
11273
+ /** @description `ContractResource` */
11274
+ 200: {
11275
+ headers: {
11276
+ [name: string]: unknown;
11277
+ };
11278
+ content: {
11279
+ "application/json": {
11280
+ data: components["schemas"]["ContractResource"];
11281
+ };
11282
+ };
11283
+ };
11284
+ 403: components["responses"]["AuthorizationException"];
11285
+ 404: components["responses"]["ModelNotFoundException"];
11286
+ };
11287
+ };
11288
+ "contracts.update": {
11289
+ parameters: {
11290
+ query?: never;
11291
+ header?: never;
11292
+ path: {
11293
+ /** @description The contract ID */
11294
+ contract: number;
11295
+ };
11296
+ cookie?: never;
11297
+ };
11298
+ requestBody: {
11299
+ content: {
11300
+ "application/json": components["schemas"]["ContractRequest"];
11301
+ };
11302
+ };
11303
+ responses: {
11304
+ /** @description `ContractResource` */
11305
+ 200: {
11306
+ headers: {
11307
+ [name: string]: unknown;
11308
+ };
11309
+ content: {
11310
+ "application/json": {
11311
+ data: components["schemas"]["ContractResource"];
11312
+ };
11313
+ };
11314
+ };
11315
+ 403: components["responses"]["AuthorizationException"];
11316
+ 404: components["responses"]["ModelNotFoundException"];
11317
+ 422: components["responses"]["ValidationException"];
11318
+ };
11319
+ };
11320
+ "contracts.destroy": {
11321
+ parameters: {
11322
+ query?: never;
11323
+ header?: never;
11324
+ path: {
11325
+ /** @description The contract ID */
11326
+ contract: number;
11327
+ };
11328
+ cookie?: never;
11329
+ };
11330
+ requestBody?: never;
11331
+ responses: {
11332
+ 200: {
11333
+ headers: {
11334
+ [name: string]: unknown;
11335
+ };
11336
+ content: {
11337
+ "application/json": {
11338
+ success: boolean;
11339
+ };
11340
+ };
11341
+ };
11342
+ 403: components["responses"]["AuthorizationException"];
11343
+ 404: components["responses"]["ModelNotFoundException"];
11344
+ 422: {
11345
+ headers: {
11346
+ [name: string]: unknown;
11347
+ };
11348
+ content: {
11349
+ "application/json": {
11350
+ success: boolean;
11351
+ message: string;
11352
+ };
11353
+ };
11354
+ };
11355
+ };
11356
+ };
10684
11357
  "estimate.convertEstimate": {
10685
11358
  parameters: {
10686
11359
  query?: never;
@@ -14843,14 +15516,21 @@ export interface operations {
14843
15516
  };
14844
15517
  "items.index": {
14845
15518
  parameters: {
14846
- query?: never;
15519
+ query?: {
15520
+ /** @description Con `summary`, cada fila trae solo lo que los listados leen: identidad, precios y banderas, la categoría reducida a `{id, name}`, el nombre de la unidad y los impuestos del artículo (enteros, con la misma forma que la vista completa). Sin empresa, sin moneda y sin la unidad como objeto — el recurso completo arrastra la empresa entera por fila, roles incluidos, y contra un catálogo de 200 artículos eso son ~4 s y ~900 KB de los que el 86 % es ese lastre. El artículo completo sigue en el detalle y en el índice sin este parámetro. */
15521
+ view?: "summary";
15522
+ };
14847
15523
  header?: never;
14848
15524
  path?: never;
14849
15525
  cookie?: never;
14850
15526
  };
14851
15527
  requestBody?: never;
14852
15528
  responses: {
14853
- /** @description Array of `ItemResource` */
15529
+ /**
15530
+ * @description Array of `ItemResource`
15531
+ *
15532
+ * Array of `ItemSummaryResource`
15533
+ */
14854
15534
  200: {
14855
15535
  headers: {
14856
15536
  [name: string]: unknown;
@@ -14862,6 +15542,12 @@ export interface operations {
14862
15542
  tax_types: components["schemas"]["TaxType"][];
14863
15543
  item_total_count: number;
14864
15544
  };
15545
+ } | {
15546
+ data: (components["schemas"]["ItemSummaryResource"] & Record<string, never>)[];
15547
+ meta: {
15548
+ tax_types: components["schemas"]["TaxType"][];
15549
+ item_total_count: number;
15550
+ };
14865
15551
  };
14866
15552
  };
14867
15553
  };
@@ -17475,6 +18161,38 @@ export interface operations {
17475
18161
  422: components["responses"]["ValidationException"];
17476
18162
  };
17477
18163
  };
18164
+ "contract.renewContract": {
18165
+ parameters: {
18166
+ query?: never;
18167
+ header?: never;
18168
+ path: {
18169
+ /** @description The contract ID */
18170
+ contract: number;
18171
+ };
18172
+ cookie?: never;
18173
+ };
18174
+ requestBody: {
18175
+ content: {
18176
+ "application/json": components["schemas"]["RenewContractRequest"];
18177
+ };
18178
+ };
18179
+ responses: {
18180
+ /** @description `ContractResource` */
18181
+ 200: {
18182
+ headers: {
18183
+ [name: string]: unknown;
18184
+ };
18185
+ content: {
18186
+ "application/json": {
18187
+ data: components["schemas"]["ContractResource"];
18188
+ };
18189
+ };
18190
+ };
18191
+ 403: components["responses"]["AuthorizationException"];
18192
+ 404: components["responses"]["ModelNotFoundException"];
18193
+ 422: components["responses"]["ValidationException"];
18194
+ };
18195
+ };
17478
18196
  "roles.getAbilities": {
17479
18197
  parameters: {
17480
18198
  query?: never;
@@ -18111,6 +18829,126 @@ export interface operations {
18111
18829
  };
18112
18830
  };
18113
18831
  };
18832
+ "invoice.sharedLink": {
18833
+ parameters: {
18834
+ query?: never;
18835
+ header?: never;
18836
+ path: {
18837
+ /** @description The invoice ID */
18838
+ invoice: number;
18839
+ };
18840
+ cookie?: never;
18841
+ };
18842
+ requestBody?: never;
18843
+ responses: {
18844
+ 200: {
18845
+ headers: {
18846
+ [name: string]: unknown;
18847
+ };
18848
+ content: {
18849
+ "application/json": {
18850
+ data: {
18851
+ url: string;
18852
+ expires_at: string;
18853
+ };
18854
+ };
18855
+ };
18856
+ };
18857
+ 403: components["responses"]["AuthorizationException"];
18858
+ 404: components["responses"]["ModelNotFoundException"];
18859
+ 422: {
18860
+ headers: {
18861
+ [name: string]: unknown;
18862
+ };
18863
+ content: {
18864
+ "application/json": {
18865
+ /** @constant */
18866
+ message: "Un borrador no tiene enlace: publica la factura primero.";
18867
+ };
18868
+ };
18869
+ };
18870
+ };
18871
+ };
18872
+ "contract.sharedLink": {
18873
+ parameters: {
18874
+ query?: never;
18875
+ header?: never;
18876
+ path: {
18877
+ /** @description The contract ID */
18878
+ contract: number;
18879
+ };
18880
+ cookie?: never;
18881
+ };
18882
+ requestBody?: never;
18883
+ responses: {
18884
+ 200: {
18885
+ headers: {
18886
+ [name: string]: unknown;
18887
+ };
18888
+ content: {
18889
+ "application/json": {
18890
+ data: {
18891
+ url: string;
18892
+ expires_at: string;
18893
+ };
18894
+ };
18895
+ };
18896
+ };
18897
+ 403: components["responses"]["AuthorizationException"];
18898
+ 404: components["responses"]["ModelNotFoundException"];
18899
+ 422: {
18900
+ headers: {
18901
+ [name: string]: unknown;
18902
+ };
18903
+ content: {
18904
+ "application/json": {
18905
+ /** @constant */
18906
+ message: "Un contrato sin activar no tiene enlace todavía.";
18907
+ };
18908
+ };
18909
+ };
18910
+ };
18911
+ };
18912
+ "estimate.sharedLink": {
18913
+ parameters: {
18914
+ query?: never;
18915
+ header?: never;
18916
+ path: {
18917
+ /** @description The estimate ID */
18918
+ estimate: number;
18919
+ };
18920
+ cookie?: never;
18921
+ };
18922
+ requestBody?: never;
18923
+ responses: {
18924
+ 200: {
18925
+ headers: {
18926
+ [name: string]: unknown;
18927
+ };
18928
+ content: {
18929
+ "application/json": {
18930
+ data: {
18931
+ url: string;
18932
+ expires_at: string;
18933
+ };
18934
+ };
18935
+ };
18936
+ };
18937
+ 403: components["responses"]["AuthorizationException"];
18938
+ 404: components["responses"]["ModelNotFoundException"];
18939
+ 422: {
18940
+ headers: {
18941
+ [name: string]: unknown;
18942
+ };
18943
+ content: {
18944
+ "application/json": {
18945
+ /** @constant */
18946
+ message: "Un presupuesto sin número no tiene enlace todavía.";
18947
+ };
18948
+ };
18949
+ };
18950
+ };
18951
+ };
18114
18952
  "expense.showReceipt": {
18115
18953
  parameters: {
18116
18954
  query?: never;