sinfactura-types 1.10.539 → 1.10.540

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/cjs/order.js CHANGED
@@ -336,6 +336,9 @@ exports.ORDER_ERROR_CODES = [
336
336
  'SALE_LEDGER_RETRACTION_REFUSED',
337
337
  'SALE_LEDGER_ROW_NOT_OWNED',
338
338
  'PRODUCT_NOT_FOUND',
339
+ // The per-sale cap on create and quantity-increasing edits (`ProductSaleLimitRefusal`).
340
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
341
+ 'PRODUCT_SALE_LIMIT_INVALID',
339
342
  // `POST /orders { mode: 'deposit' }` — see `OrderDepositRequest`.
340
343
  'DEPOSIT_SOURCE_NOT_ALLOWED',
341
344
  'DEPOSIT_CURRENCY_MISMATCH',
@@ -170,4 +170,7 @@ exports.PRESUPUESTO_ERROR_CODES = [
170
170
  // puts on the wire. Spelling a second, tidier code for the same refusal would
171
171
  // make one client branch answer two ways depending on which surface refused.
172
172
  'STOCK INSUFICIENTE',
173
+ // The per-sale cap refusal every sale entry point shares (`ProductSaleLimitRefusal`).
174
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
175
+ 'PRODUCT_SALE_LIMIT_INVALID',
173
176
  ];
@@ -298,6 +298,9 @@ exports.SERVICE_ORDER_ERROR_CODES = [
298
298
  'SERVICE_BILLING_PRODUCT_IN_BASKET',
299
299
  'SERVICE_DELIVERY_BASKET_DECISION_REQUIRED',
300
300
  'PRODUCT_NOT_AVAILABLE',
301
+ // The per-sale cap on the basket's sale lines (`ProductSaleLimitRefusal`).
302
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
303
+ 'PRODUCT_SALE_LIMIT_INVALID',
301
304
  'FX_CONVERSION_UNAVAILABLE',
302
305
  'TRANSACT_ITEMS_LIMIT_EXCEEDED',
303
306
  // Parts
package/dist/order.d.ts CHANGED
@@ -1449,6 +1449,30 @@ declare global {
1449
1449
  * to be mis-linked.
1450
1450
  */
1451
1451
  unlinkedLines?: number;
1452
+ /**
1453
+ * Every linked product whose summed quantity on this order breaks its
1454
+ * per-sale cap ({@link Product.limit}) — one entry per product, never one
1455
+ * per line. `limit` is the stored cap, or `null` when the stored value is
1456
+ * not interpretable and the operator must re-save the product.
1457
+ *
1458
+ * A RECORD, not a refusal: a paid MercadoLibre order is never refused or
1459
+ * clamped for a cap — it is persisted and moves stock exactly as any other,
1460
+ * and this tells the operator it happened.
1461
+ *
1462
+ * Absent means no breach, nothing linked ever graded, or an order not
1463
+ * (or no longer) paid before its stock moved — graded only while `paid`,
1464
+ * the same gate stock application waits on. Written at upsert: graded
1465
+ * until the order's stock decrement lands (`Order.stockAppliedAt`), then
1466
+ * carried forward verbatim, so a replayed event or a cap edited afterwards
1467
+ * neither duplicates nor flips it. An event with no linked lines to grade
1468
+ * carries the stored value rather than clearing it.
1469
+ */
1470
+ saleLimit?: {
1471
+ productId: string;
1472
+ limit: number | null;
1473
+ /** `null` only when a stored line's quantity is not a finite number. */
1474
+ requestedQuantity: number | null;
1475
+ }[];
1452
1476
  };
1453
1477
  /**
1454
1478
  * `fiscal_documents` upload outcome. Absent = no invoice issued yet.
@@ -2303,6 +2327,6 @@ export declare const orderFulfilmentProgress: (order: OrderFulfilmentProgressInp
2303
2327
  * `SUBSCRIPTION_READONLY`) sit on the order CREATE leg only: an edit is not a new
2304
2328
  * order, so `bareOrderPostHandler` routes past `requireMetered` entirely.
2305
2329
  */
2306
- export declare const ORDER_ERROR_CODES: readonly ["ORDER_NOT_FOUND", "ORDER_LOCKED", "ORDER_NOT_READY", "ORDER_DELIVERED_ANOTHER_DAY", "ORDER_DELIVERY_STATE_UNCHANGED", "ORDER_ILLEGAL_TRANSITION", "ORDER_VERSION_CONFLICT", "CUSTOMER_NOT_FOUND", "CUSTOMER_MERGED", "ORDER_HAS_NO_CUSTOMER", "CUSTOMER_ANONYMIZED", "FX_CONVERSION_UNAVAILABLE", "ROLE_FORBIDDEN", "ORDER_CANCELLED", "PAYMENT_SETTLED_ON_ANOTHER_ORDER", "ORDER_HAS_SHIPMENTS", "ORDER_HAS_RETURNS", "SHIPMENT_QUANTITY_EXCEEDED", "SHIPMENT_LINE_MISMATCH", "SHIPMENT_NOT_FOUND", "SHIPMENT_LIMIT_REACHED", "SHIPMENT_TOO_LARGE", "ORDER_FULFILMENT_EXTERNAL", "SHIPMENT_FAILED", "ADMIN_REQUIRED", "IDEMPOTENCY_KEY_REQUIRED", "INVALID_IDEMPOTENCY_KEY", "IDEMPOTENCY_KEY_REUSE", "IDEMPOTENCY_IN_PROGRESS", "IDEMPOTENCY_LOCK_CONTENTION", "IDEMPOTENCY_KEY_FAILED", "IDEMPOTENT_RESPONSE_NOT_CACHED", "ORDER_CANCELLATION_NOT_PROTECTED", "ORDER_CANCELLATION_COMMITTED", "ORDER_CANCELLATION_LOCKED", "ORDER_CANCELLATION_TOO_LARGE", "ORDER_CANCELLATION_FAILED", "SALE_LEDGER_RETRACTION_REFUSED", "SALE_LEDGER_ROW_NOT_OWNED", "PRODUCT_NOT_FOUND", "DEPOSIT_SOURCE_NOT_ALLOWED", "DEPOSIT_CURRENCY_MISMATCH", "DEPOSIT_EXCEEDS_TOTAL", "DEPOSIT_FREEZE_REQUIRES_INVOICE", "DEPOSIT_FREEZE_INVOICE_PENDING", "DEPOSIT_CHARACTERIZATION_CONFLICT", "DEPOSIT_FREEZE_INVOICE_NOT_QUALIFYING", "DEPOSIT_INVOICED_ORDER_MUST_FREEZE", "DEPOSIT_REFERENCE_IS_LINKED_PAYMENT", "DEPOSIT_DUPLICATE_REFERENCE", "PAYMENT_REFERENCED_BY_DEPOSIT", "ORDER_HAS_UNREFUNDED_DEPOSIT", "DEPOSIT_NOT_FOUND", "DEPOSIT_ALREADY_REFUNDED"];
2330
+ export declare const ORDER_ERROR_CODES: readonly ["ORDER_NOT_FOUND", "ORDER_LOCKED", "ORDER_NOT_READY", "ORDER_DELIVERED_ANOTHER_DAY", "ORDER_DELIVERY_STATE_UNCHANGED", "ORDER_ILLEGAL_TRANSITION", "ORDER_VERSION_CONFLICT", "CUSTOMER_NOT_FOUND", "CUSTOMER_MERGED", "ORDER_HAS_NO_CUSTOMER", "CUSTOMER_ANONYMIZED", "FX_CONVERSION_UNAVAILABLE", "ROLE_FORBIDDEN", "ORDER_CANCELLED", "PAYMENT_SETTLED_ON_ANOTHER_ORDER", "ORDER_HAS_SHIPMENTS", "ORDER_HAS_RETURNS", "SHIPMENT_QUANTITY_EXCEEDED", "SHIPMENT_LINE_MISMATCH", "SHIPMENT_NOT_FOUND", "SHIPMENT_LIMIT_REACHED", "SHIPMENT_TOO_LARGE", "ORDER_FULFILMENT_EXTERNAL", "SHIPMENT_FAILED", "ADMIN_REQUIRED", "IDEMPOTENCY_KEY_REQUIRED", "INVALID_IDEMPOTENCY_KEY", "IDEMPOTENCY_KEY_REUSE", "IDEMPOTENCY_IN_PROGRESS", "IDEMPOTENCY_LOCK_CONTENTION", "IDEMPOTENCY_KEY_FAILED", "IDEMPOTENT_RESPONSE_NOT_CACHED", "ORDER_CANCELLATION_NOT_PROTECTED", "ORDER_CANCELLATION_COMMITTED", "ORDER_CANCELLATION_LOCKED", "ORDER_CANCELLATION_TOO_LARGE", "ORDER_CANCELLATION_FAILED", "SALE_LEDGER_RETRACTION_REFUSED", "SALE_LEDGER_ROW_NOT_OWNED", "PRODUCT_NOT_FOUND", "PRODUCT_SALE_LIMIT_EXCEEDED", "PRODUCT_SALE_LIMIT_INVALID", "DEPOSIT_SOURCE_NOT_ALLOWED", "DEPOSIT_CURRENCY_MISMATCH", "DEPOSIT_EXCEEDS_TOTAL", "DEPOSIT_FREEZE_REQUIRES_INVOICE", "DEPOSIT_FREEZE_INVOICE_PENDING", "DEPOSIT_CHARACTERIZATION_CONFLICT", "DEPOSIT_FREEZE_INVOICE_NOT_QUALIFYING", "DEPOSIT_INVOICED_ORDER_MUST_FREEZE", "DEPOSIT_REFERENCE_IS_LINKED_PAYMENT", "DEPOSIT_DUPLICATE_REFERENCE", "PAYMENT_REFERENCED_BY_DEPOSIT", "ORDER_HAS_UNREFUNDED_DEPOSIT", "DEPOSIT_NOT_FOUND", "DEPOSIT_ALREADY_REFUNDED"];
2307
2331
  export type OrderErrorCode = (typeof ORDER_ERROR_CODES)[number];
2308
2332
  export {};
package/dist/order.js CHANGED
@@ -329,6 +329,9 @@ export const ORDER_ERROR_CODES = [
329
329
  'SALE_LEDGER_RETRACTION_REFUSED',
330
330
  'SALE_LEDGER_ROW_NOT_OWNED',
331
331
  'PRODUCT_NOT_FOUND',
332
+ // The per-sale cap on create and quantity-increasing edits (`ProductSaleLimitRefusal`).
333
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
334
+ 'PRODUCT_SALE_LIMIT_INVALID',
332
335
  // `POST /orders { mode: 'deposit' }` — see `OrderDepositRequest`.
333
336
  'DEPOSIT_SOURCE_NOT_ALLOWED',
334
337
  'DEPOSIT_CURRENCY_MISMATCH',
@@ -246,6 +246,6 @@ export declare const PRESUPUESTO_IMMUTABLE_STATUSES: readonly ["rejected", "expi
246
246
  * operator can act on is the distinct-product ceiling those items derive
247
247
  * from, and the two refuse at exactly the same point.
248
248
  */
249
- export declare const PRESUPUESTO_ERROR_CODES: readonly ["PRESUPUESTO_NOT_FOUND", "VALIDATION_FAILED", "ADMIN_REQUIRED", "INVALID_CURSOR", "PRODUCT_COST_UNKNOWN", "PRESUPUESTO_NOT_MUTABLE", "PRESUPUESTO_ILLEGAL_TRANSITION", "PRESUPUESTO_ALREADY_CONVERTED", "PRESUPUESTO_NOT_APPROVED", "PRESUPUESTO_TOO_MANY_PRODUCTS", "TRANSACTION_ITEMS_LIMIT_REACHED", "PRODUCT_NOT_FOUND", "STOCK INSUFICIENTE"];
249
+ export declare const PRESUPUESTO_ERROR_CODES: readonly ["PRESUPUESTO_NOT_FOUND", "VALIDATION_FAILED", "ADMIN_REQUIRED", "INVALID_CURSOR", "PRODUCT_COST_UNKNOWN", "PRESUPUESTO_NOT_MUTABLE", "PRESUPUESTO_ILLEGAL_TRANSITION", "PRESUPUESTO_ALREADY_CONVERTED", "PRESUPUESTO_NOT_APPROVED", "PRESUPUESTO_TOO_MANY_PRODUCTS", "TRANSACTION_ITEMS_LIMIT_REACHED", "PRODUCT_NOT_FOUND", "STOCK INSUFICIENTE", "PRODUCT_SALE_LIMIT_EXCEEDED", "PRODUCT_SALE_LIMIT_INVALID"];
250
250
  export type PresupuestoErrorCode = (typeof PRESUPUESTO_ERROR_CODES)[number];
251
251
  export {};
@@ -167,4 +167,7 @@ export const PRESUPUESTO_ERROR_CODES = [
167
167
  // puts on the wire. Spelling a second, tidier code for the same refusal would
168
168
  // make one client branch answer two ways depending on which surface refused.
169
169
  'STOCK INSUFICIENTE',
170
+ // The per-sale cap refusal every sale entry point shares (`ProductSaleLimitRefusal`).
171
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
172
+ 'PRODUCT_SALE_LIMIT_INVALID',
170
173
  ];
package/dist/product.d.ts CHANGED
@@ -321,7 +321,19 @@ declare global {
321
321
  widthMm?: number;
322
322
  /** Third edge of the shipping envelope, in MILLIMETRES. See {@link Product.lengthMm}. */
323
323
  heightMm?: number;
324
- limit?: number;
324
+ /**
325
+ * Most units of this product ONE sale may carry, summed across every line of
326
+ * the operation. Enforced server-side on every local sale entry point
327
+ * (order create, storefront and WhatsApp checkout, presupuesto conversion,
328
+ * service delivery, and quantity-increasing edits), which refuse
329
+ * `409 PRODUCT_SALE_LIMIT_EXCEEDED` — see {@link ProductSaleLimitRefusal}.
330
+ *
331
+ * ⚠️ Absent, `null` and `0` all mean UNCAPPED; a write of `0` is stored as
332
+ * `null`. A new value must be a positive integer. A legacy row holding
333
+ * anything else refuses new sales with `PRODUCT_SALE_LIMIT_INVALID`.
334
+ * MercadoLibre orders are never refused — a breach is flagged instead.
335
+ */
336
+ limit?: number | null;
325
337
  incomes?: {
326
338
  stockId: string;
327
339
  orderId?: string;
@@ -668,6 +680,31 @@ declare global {
668
680
  */
669
681
  computedAt: number;
670
682
  }
683
+ /**
684
+ * The 409 body every sale entry point returns when an operation breaks a
685
+ * product's {@link Product.limit}.
686
+ *
687
+ * - `PRODUCT_SALE_LIMIT_EXCEEDED` — `requestedQuantity` (the operation's total
688
+ * for that product, unrounded) is above `limit`.
689
+ * - `PRODUCT_SALE_LIMIT_INVALID` — the stored cap is not interpretable;
690
+ * `limit` is `null` and the operator must re-save the product.
691
+ *
692
+ * The pre-check refuses before any stock, tender, coupon or fiscal effect, so
693
+ * a client may keep the draft and retry once the quantity is reduced. A cap
694
+ * lowered between that check and the commit is refused by the commit itself,
695
+ * with the same body — nothing is written, but effects that precede every
696
+ * commit on that surface (a redeemed coupon) are not undone.
697
+ */
698
+ interface ProductSaleLimitRefusal {
699
+ message: string;
700
+ error: 'PRODUCT_SALE_LIMIT_EXCEEDED' | 'PRODUCT_SALE_LIMIT_INVALID';
701
+ data: {
702
+ productId: string;
703
+ limit: number | null;
704
+ /** `null` only when a stored line's quantity is not a finite number. */
705
+ requestedQuantity: number | null;
706
+ };
707
+ }
671
708
  /**
672
709
  * `GET /products?mode=associations&productIds=A,B,C` — the stored model for the
673
710
  * products on the line, in one read.
@@ -1339,6 +1339,6 @@ export declare const MAX_SERVICE_PICTURES = 20;
1339
1339
  * check `GATING_ERROR_CODES` in addition. The deposit's opt-in idempotency
1340
1340
  * refusals are included here.
1341
1341
  */
1342
- export declare const SERVICE_ORDER_ERROR_CODES: readonly ["ROLE_FORBIDDEN", "PARENT_FILTER_CONFLICT", "VALIDATION_FAILED", "INVALID_CURSOR", "INVALID_FROM_DATE", "INVALID_TO_DATE", "INVALID_DATE_RANGE", "REWORK_INDEX_UNAVAILABLE", "STORE_NOT_FOUND", "SERVICE_ORDER_NOT_FOUND", "CUSTOMER_NOT_FOUND", "PARENT_SERVICE_ORDER_NOT_FOUND", "SERVICE_TEMPLATE_NOT_FOUND", "SERVICE_TYPE_REQUIRED", "INVALID_IMAGE_REFERENCE", "MISSING_STORE_CONTEXT", "WARRANTY_BELOW_LEGAL_MINIMUM", "TECHNICIAN_NOT_FOUND", "TECHNICIAN_NOT_ELIGIBLE", "CUSTODY_ILLEGAL_TRANSITION", "SERVICE_ORDER_BILLABLE_FROZEN", "SERVICE_ORDER_EDIT_CHANGED", "SERVICE_ORDER_DISABLED_STATE_UNCHANGED", "APPOINTMENT_NOT_FOUND", "APPOINTMENT_NOT_LINKABLE", "APPOINTMENT_NOT_OPEN", "APPOINTMENT_CUSTOMER_MISMATCH", "APPOINTMENT_VERSION_CONFLICT", "SERVICE_ORDER_TERMINAL", "SERVICE_ORDER_DISABLED", "SERVICE_ORDER_ILLEGAL_TRANSITION", "SERVICE_ORDER_STATUS_CHANGED", "SERVICE_ORDER_OUTCOME_REQUIRED", "SERVICE_ORDER_OUTCOME_NOT_ALLOWED", "SERVICE_ORDER_CUSTODY_NOT_RECEIVED", "SERVICE_ORDER_BILLABLE_NOT_AT_THIS_TRANSITION", "PAYMENT_METHODS_NOT_CONFIGURED", "PAYMENT_METHOD_NOT_FOUND", "SERVICE_ORDER_DEPOSIT_CHANGED", "INVALID_IDEMPOTENCY_KEY", "IDEMPOTENCY_KEY_REUSE", "IDEMPOTENCY_IN_PROGRESS", "IDEMPOTENCY_KEY_FAILED", "IDEMPOTENCY_LOCK_CONTENTION", "SERVICE_DEPOSIT_CURRENCY_MISMATCH", "SERVICE_DEPOSIT_INVALID", "INVALID_AMOUNT", "DEFAULT_DRAWER_UNAVAILABLE", "CURRENCY_MISMATCH", "SHIFT_NOT_OPEN", "SERVICE_BILLING_PRODUCTS_UNAVAILABLE", "SERVICE_BILLING_PRODUCT_IN_BASKET", "SERVICE_DELIVERY_BASKET_DECISION_REQUIRED", "PRODUCT_NOT_AVAILABLE", "FX_CONVERSION_UNAVAILABLE", "TRANSACT_ITEMS_LIMIT_EXCEEDED", "SERVICE_PARTS_RESTORE_EXCEEDS_CONSUMED", "SERVICE_PARTS_RESTORE_EXCEEDS_AMOUNT", "SERVICE_PARTS_STOCK_INSUFFICIENT", "SERVICE_PARTS_PRODUCT_NOT_FOUND", "SERVICE_PARTS_LEDGER_FULL", "SERVICE_PARTS_TOO_MANY", "SERVICE_ORDER_PARTS_CHANGED", "SERVICE_QUOTE_NOT_FOUND", "SERVICE_QUOTE_NOT_OFFERABLE", "SERVICE_QUOTE_HOLDS_TOO_MANY", "SERVICE_QUOTE_SUPERSEDED", "SERVICE_QUOTE_ALREADY_RESOLVED", "SERVICE_QUOTE_LAPSED", "SERVICE_QUOTE_CHANNEL_RESERVED", "SERVICE_QUOTE_CHANNEL_NOT_APPLICABLE", "SERVICE_QUOTE_REASON_NOT_APPLICABLE", "SERVICE_ORDER_QUOTE_CHANGED", "SERVICE_ORDER_NOT_READY", "SERVICE_RENOTIFY_IMPERSONATED", "SERVICE_RENOTIFY_TOO_SOON", "SERVICE_RENOTIFY_CONFLICT", "SERVICE_RENOTIFY_NOT_RECORDED", "SERVICE_RENOTIFY_LEDGER_UNREADABLE", "SERVICE_RENOTIFY_NOT_DISPATCHED", "SERVICE_TIMER_ALREADY_RUNNING", "SERVICE_TIMER_NOT_RUNNING", "SERVICE_TIMER_STOP_CONFLICT", "TECHNICIAN_NOT_CLOCKED_IN", "SERVICE_ORDER_GONE", "SERVICE_WORKLOG_NOT_FOUND", "SERVICE_WORKLOG_NOT_REVERSIBLE", "SERVICE_WORKLOG_ALREADY_REVERSED", "SERVICE_ORDER_WORKLOG_CHANGED"];
1342
+ export declare const SERVICE_ORDER_ERROR_CODES: readonly ["ROLE_FORBIDDEN", "PARENT_FILTER_CONFLICT", "VALIDATION_FAILED", "INVALID_CURSOR", "INVALID_FROM_DATE", "INVALID_TO_DATE", "INVALID_DATE_RANGE", "REWORK_INDEX_UNAVAILABLE", "STORE_NOT_FOUND", "SERVICE_ORDER_NOT_FOUND", "CUSTOMER_NOT_FOUND", "PARENT_SERVICE_ORDER_NOT_FOUND", "SERVICE_TEMPLATE_NOT_FOUND", "SERVICE_TYPE_REQUIRED", "INVALID_IMAGE_REFERENCE", "MISSING_STORE_CONTEXT", "WARRANTY_BELOW_LEGAL_MINIMUM", "TECHNICIAN_NOT_FOUND", "TECHNICIAN_NOT_ELIGIBLE", "CUSTODY_ILLEGAL_TRANSITION", "SERVICE_ORDER_BILLABLE_FROZEN", "SERVICE_ORDER_EDIT_CHANGED", "SERVICE_ORDER_DISABLED_STATE_UNCHANGED", "APPOINTMENT_NOT_FOUND", "APPOINTMENT_NOT_LINKABLE", "APPOINTMENT_NOT_OPEN", "APPOINTMENT_CUSTOMER_MISMATCH", "APPOINTMENT_VERSION_CONFLICT", "SERVICE_ORDER_TERMINAL", "SERVICE_ORDER_DISABLED", "SERVICE_ORDER_ILLEGAL_TRANSITION", "SERVICE_ORDER_STATUS_CHANGED", "SERVICE_ORDER_OUTCOME_REQUIRED", "SERVICE_ORDER_OUTCOME_NOT_ALLOWED", "SERVICE_ORDER_CUSTODY_NOT_RECEIVED", "SERVICE_ORDER_BILLABLE_NOT_AT_THIS_TRANSITION", "PAYMENT_METHODS_NOT_CONFIGURED", "PAYMENT_METHOD_NOT_FOUND", "SERVICE_ORDER_DEPOSIT_CHANGED", "INVALID_IDEMPOTENCY_KEY", "IDEMPOTENCY_KEY_REUSE", "IDEMPOTENCY_IN_PROGRESS", "IDEMPOTENCY_KEY_FAILED", "IDEMPOTENCY_LOCK_CONTENTION", "SERVICE_DEPOSIT_CURRENCY_MISMATCH", "SERVICE_DEPOSIT_INVALID", "INVALID_AMOUNT", "DEFAULT_DRAWER_UNAVAILABLE", "CURRENCY_MISMATCH", "SHIFT_NOT_OPEN", "SERVICE_BILLING_PRODUCTS_UNAVAILABLE", "SERVICE_BILLING_PRODUCT_IN_BASKET", "SERVICE_DELIVERY_BASKET_DECISION_REQUIRED", "PRODUCT_NOT_AVAILABLE", "PRODUCT_SALE_LIMIT_EXCEEDED", "PRODUCT_SALE_LIMIT_INVALID", "FX_CONVERSION_UNAVAILABLE", "TRANSACT_ITEMS_LIMIT_EXCEEDED", "SERVICE_PARTS_RESTORE_EXCEEDS_CONSUMED", "SERVICE_PARTS_RESTORE_EXCEEDS_AMOUNT", "SERVICE_PARTS_STOCK_INSUFFICIENT", "SERVICE_PARTS_PRODUCT_NOT_FOUND", "SERVICE_PARTS_LEDGER_FULL", "SERVICE_PARTS_TOO_MANY", "SERVICE_ORDER_PARTS_CHANGED", "SERVICE_QUOTE_NOT_FOUND", "SERVICE_QUOTE_NOT_OFFERABLE", "SERVICE_QUOTE_HOLDS_TOO_MANY", "SERVICE_QUOTE_SUPERSEDED", "SERVICE_QUOTE_ALREADY_RESOLVED", "SERVICE_QUOTE_LAPSED", "SERVICE_QUOTE_CHANNEL_RESERVED", "SERVICE_QUOTE_CHANNEL_NOT_APPLICABLE", "SERVICE_QUOTE_REASON_NOT_APPLICABLE", "SERVICE_ORDER_QUOTE_CHANGED", "SERVICE_ORDER_NOT_READY", "SERVICE_RENOTIFY_IMPERSONATED", "SERVICE_RENOTIFY_TOO_SOON", "SERVICE_RENOTIFY_CONFLICT", "SERVICE_RENOTIFY_NOT_RECORDED", "SERVICE_RENOTIFY_LEDGER_UNREADABLE", "SERVICE_RENOTIFY_NOT_DISPATCHED", "SERVICE_TIMER_ALREADY_RUNNING", "SERVICE_TIMER_NOT_RUNNING", "SERVICE_TIMER_STOP_CONFLICT", "TECHNICIAN_NOT_CLOCKED_IN", "SERVICE_ORDER_GONE", "SERVICE_WORKLOG_NOT_FOUND", "SERVICE_WORKLOG_NOT_REVERSIBLE", "SERVICE_WORKLOG_ALREADY_REVERSED", "SERVICE_ORDER_WORKLOG_CHANGED"];
1343
1343
  export type ServiceOrderErrorCode = (typeof SERVICE_ORDER_ERROR_CODES)[number];
1344
1344
  export {};
@@ -295,6 +295,9 @@ export const SERVICE_ORDER_ERROR_CODES = [
295
295
  'SERVICE_BILLING_PRODUCT_IN_BASKET',
296
296
  'SERVICE_DELIVERY_BASKET_DECISION_REQUIRED',
297
297
  'PRODUCT_NOT_AVAILABLE',
298
+ // The per-sale cap on the basket's sale lines (`ProductSaleLimitRefusal`).
299
+ 'PRODUCT_SALE_LIMIT_EXCEEDED',
300
+ 'PRODUCT_SALE_LIMIT_INVALID',
298
301
  'FX_CONVERSION_UNAVAILABLE',
299
302
  'TRANSACT_ITEMS_LIMIT_EXCEEDED',
300
303
  // Parts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sinfactura-types",
3
- "version": "1.10.539",
3
+ "version": "1.10.540",
4
4
  "description": "Shared wire and entity contracts for the SINFACTURA platform.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",