@hardfin/cli 0.1.1-dev.70 → 0.1.1-dev.71

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.
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2061590a-8bec-56a7-864d-cb1435ccb994")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1159525d-9f84-5132-8555-15d762625efb")}catch(e){}}();
4
4
  import { a as defineCommand, i as GLOBAL_FLAGS, r as ExitCode, t as toInvocation } from "./scrub-BZ0egWxC.js";
5
- import { C as ExpectedFailure, E as TimedOut, S as version$1, T as LockHeld, _ as API_VERSION, a as isShipped, b as toSettings, g as writeFailure, h as writeData, i as toUpdateCheckRefusal, l as toStateDirectory, m as toText, o as toPackageDirectory, p as toPrintable, r as toCheck, s as noteNotices, t as PACKAGE, u as isJSONOutput, v as CONFIG_FILE, w as Interrupted, x as toTelemetry, y as ConfigFailure } from "./check-wgnggJ45.js";
5
+ import { C as ExpectedFailure, E as TimedOut, S as version$1, T as LockHeld, _ as CONFIG_FILE, a as isShipped, b as API_VERSION, g as writeFailure, h as writeData, i as toUpdateCheckRefusal, l as toStateDirectory, m as toText, o as toPackageDirectory, p as toPrintable, r as toCheck, s as noteNotices, t as PACKAGE, u as isJSONOutput, v as ConfigFailure, w as Interrupted, x as toTelemetry, y as toSettings } from "./check-CvjTUx-K.js";
6
6
  import { n as toAnswer$1, r as toCompletion, t as PATH_VALUES } from "./completion-tree-DLC6ARLR.js";
7
7
  import { createRequire } from "node:module";
8
8
  import { Command, CommanderError, InvalidArgumentError, Option } from "commander";
@@ -2929,7 +2929,7 @@ function toFiles(directory) {
2929
2929
  //#endregion
2930
2930
  //#region src/command/types.generated.ts
2931
2931
  /** API_TYPES is the TypeScript hardfin types prints. */
2932
- const API_TYPES = "// Types for the Hardfin API, version 2026-10-21, generated from its published document.\n// Regenerate them with hardfin types after upgrading the CLI.\n\n/** ApiError is one entry in a response's errors. */\nexport interface ApiError {\n error: string;\n statusCode: number;\n}\n\n/** ApiEnvelope is the shape every response takes, with the record or records in data. */\nexport interface ApiEnvelope<T> {\n data: T;\n metadata: {\n errors?: ApiError[] | null;\n requestId?: string;\n requestTime?: string;\n statusCode?: number;\n pagination?: unknown;\n };\n}\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type ArchivedState = \"all\" | \"false\" | \"true\";\n\nexport type Asset = SparseAsset & AssetLocationData & {\n /** The asset's cost basis, depreciation, and accounting history. */\n accounting?: AssetAccountingDetails;\n /** The asset's recent events, such as shipments and deliveries. */\n activity?: AssetEvent[];\n /** A free-form description of the asset. */\n description?: string | null;\n /** The number of files attached to the asset. */\n fileCount?: number;\n /** The day the asset entered inventory. */\n inInventoryDate?: string;\n /** The asset's value for each custom field its item defines. */\n metadata?: AssetMetadataFieldWrapper[];\n /** Who owns the asset now. */\n ownership?: AssetOwnership;\n /** The project the asset is assigned to, or null when it is unassigned. */\n project?: SparseProject | null;\n /** How and when the asset was scrapped, or null when it has not been. */\n scrappedContext?: AssetScrappedContext | null;\n /** The number of tickets about the asset. */\n ticketCount?: number;\n /** The number of links attached to the asset. */\n urlLinkCount?: number;\n};\n\nexport interface AssetAccountingDetails {\n /** The asset's inventory cost basis, before deployment costs, which is what inventory is relieved by when the asset leaves it. */\n acquisitionCogs?: Currency | null;\n /** The asset's share of overhead. */\n allocatedIndirect?: Currency | null;\n /** The problems that keep the asset's accounting from being computed, such as a missing cost basis. */\n assetExceptions?: AssetExceptionType[];\n /** The parts cost. */\n billOfMaterials?: Currency | null;\n /** The cost basis on the books now, the acquisition basis in inventory and the deployed basis once the asset is a fixed asset. */\n capitalizedCosts?: Currency | null;\n /** The capitalizations and impairments made to the asset's cost after it was acquired. */\n costAdjustments?: AssetCostAdjustment[];\n /** The ISO 4217 code every cost amount on the asset is denominated in. */\n costCurrencyCode?: CurrencyCode;\n /** The method the asset is depreciated by. */\n depreciationModel?: Depreciation;\n /** The asset's book value month by month, from its inventory month, or null while it has an accounting exception. */\n depreciationPeriods?: AssetDepreciationChartPeriod[] | null;\n /** The labor cost to build the asset. */\n directLabor?: Currency | null;\n /** The shipping cost to receive the asset. */\n freightInbound?: Currency | null;\n /** The shipping cost to deploy the asset, a deployment cost. */\n freightOutbound?: Currency | null;\n /** The day the asset was put into service and began depreciating. */\n inServiceDate?: string | null;\n /** The cost to install the asset, a deployment cost. */\n installation?: Currency | null;\n /** The financing cost of the asset. */\n interest?: Currency | null;\n /** Whether the asset's cost currency can no longer be changed. Closing an accounting period, the first accounting true-up, or recording a cost adjustment locks it for good. A sale with a sale price, or a scrap with a disposal price, also locks it. That lock lifts when the sale is deleted, its sale price is cleared, or the asset is unscrapped, as long as no other priced sale or priced scrap remains. */\n isCostCurrencyLocked?: boolean;\n /** Whether Hardfin sets the in-service date itself rather than keeping one a person entered. */\n isInServiceDateManagedAutomatically?: boolean;\n /** The value the asset keeps at the end of its useful life. */\n salvageValue?: Currency | null;\n /** A single cost entered in place of the cost components. */\n simpleCostBasis?: Currency | null;\n /** The import duty paid on the asset. */\n tariffs?: Currency | null;\n /** The tax paid on the asset. */\n tax?: Currency | null;\n /** The deployed cost basis, including deployment costs, which is what is capitalized once the asset is put into service. */\n totalPotentialCOGS?: Currency | null;\n /** The number of months the asset is depreciated over. */\n usefulLife?: number | null;\n /** The changes made to the asset's useful life. */\n usefulLifeRevisions?: AssetUsefulLifeRevision[];\n}\n\nexport interface AssetCostAdjustment {\n /** CAPITALIZATION to add to the cost basis, or IMPAIRMENT to write it down. */\n adjustmentType?: CostAdjustmentType;\n /** The size of the adjustment. */\n amount?: Currency;\n /** When the adjustment was recorded. */\n createdAt?: string;\n /** The person who recorded the adjustment. */\n createdBy?: SparsePerson;\n /** The day the adjustment takes effect. */\n effectiveDate?: string;\n /** The cost adjustment's key. */\n key?: string;\n /** Free-form detail about the adjustment. */\n notes?: string | null;\n /** Why the cost changed. */\n reason?: CostAdjustmentReason;\n}\n\nexport interface AssetDepreciationChartPeriod {\n /** The depreciation charged from the in-service date through the end of the period. */\n accumulated?: Currency;\n /** The asset's value on the books at the end of the period. */\n bookValue?: Currency;\n /** The last day of the month the period covers. */\n date?: string;\n /** The depreciation charged in the period. */\n depreciation?: Currency;\n}\n\nexport interface AssetEvent {\n /** When the event was recorded. */\n createdAt?: string;\n /** The IANA time zone the event's times were entered in. */\n eventTimezone?: string;\n /** When the event is expected to happen, or null when no one has said. */\n expectedAt?: string | null;\n /** The event's unique identifier. */\n id?: string;\n /** Whether the event has to happen for its group to complete. */\n isRequired?: boolean;\n /** When the event happened, or null while it has not. */\n occurredAt?: string | null;\n /** The day the event was promised to a customer, or null when none was. */\n promiseDate?: string | null;\n /** The event's values a person set, such as carrier tracking. */\n properties?: AssetEventProperty[];\n /** The event's position within its group. */\n sequence?: number;\n /** When someone marked the event as happened in Hardfin, or null while it has not happened. */\n triggeredAt?: string | null;\n /** What kind of event this is. */\n type?: AssetEventType;\n}\n\nexport interface AssetEventConfiguration {\n /** The properties an event of the type carries. */\n properties?: AssetEventProperty[];\n /** The kind of event the configuration describes. */\n type?: AssetEventType;\n}\n\nexport interface AssetEventGroup {\n /** The kind of group this is, and the events it carries. */\n configuration?: AssetEventGroupConfiguration;\n /** Where the movement ends, or null when the group does not move the asset. */\n destination?: SparseLocationWithParent | null;\n /** The events the group has recorded so far. */\n events?: AssetEvent[];\n /** The event group's unique identifier. */\n id?: string;\n /** The event group's key, which the event group endpoints take as eventGroupKey. */\n key?: string;\n /** Where the movement started, or null when the group does not move the asset. */\n origin?: SparseLocationWithParent | null;\n /** The shipment the movement travels on, or null when it travels on none. */\n shipment?: SparseShipment | null;\n}\n\nexport interface AssetEventGroupConfiguration {\n /** The events a group of the kind carries, in the order they happen. */\n events?: AssetEventConfiguration[];\n /** The configuration's unique identifier. */\n id?: string;\n /** The configuration's key. */\n key?: string;\n /** What the configuration is called, such as ship and deliver. */\n name?: string;\n}\n\nexport interface AssetEventProperty {\n /** The event property's unique identifier. */\n id?: string;\n /** Whether Hardfin sets the property itself rather than a person, which responses leave out. */\n isSystemProperty?: boolean;\n /** The property's display name. */\n label?: string;\n /** The kind of value the property holds, such as CARRIER_TRACKING or CACHED_LOCATION. */\n type?: string;\n /** The property's value, whose JSON shape depends on the property's type. */\n value?: unknown[] | boolean | number | Record<string, unknown> | string | null;\n}\n\nexport interface AssetEventType {\n /** The event type's unique identifier. */\n id?: string;\n /** The event type's name, such as Ship or Deliver. */\n name?: string;\n /** Whether an event of this type only happens as part of a group, such as a shipment. */\n requiresEventGroup?: boolean;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetExceptionType = \"DEPLOYMENT_WITHOUT_ACQUISITION\" | \"DISPOSAL_DATE_BEFORE_INVENTORY\" | \"FIRST_ASSIGNMENT_BEFORE_INVENTORY\" | \"FIRST_MOVEMENT_BEFORE_INVENTORY\" | \"FIRST_SALE_DATE_BEFORE_INVENTORY\" | \"IN_SERVICE_DATE_BEFORE_INVENTORY\" | \"MISSING_COST_BASIS\" | \"MISSING_USEFUL_LIFE\" | \"SALVAGE_EXCEEDS_50_PERCENT\" | \"UNKNOWN\";\n\nexport interface AssetFile {\n /** The file's unique identifier. */\n id?: string;\n /** Whether the file is readable with any organization's API key. */\n isPublic?: boolean;\n /** The file's key, which the file endpoints take as fileKey. */\n key?: string;\n /** The file's media type, or an empty string when the upload named none. */\n mimeType?: string;\n /** The name the file had when it was uploaded. */\n name?: string;\n /** The file's size in bytes. */\n size?: number;\n /** The file type the file was uploaded as. */\n type?: string;\n /** When the file was uploaded. */\n uploadedAt?: string;\n}\n\n/** Whether an asset works, is broken, awaits review, or has been scrapped. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetFunctionalStatus = \"FUNCTIONAL\" | \"NEEDS_REVIEW\" | \"NON-FUNCTIONAL\" | \"SCRAPPED\";\n\nexport interface AssetFunctionalStatusHistoryItem {\n /** When the asset left the status, or null while it still holds it. */\n end?: string | null;\n /** When the asset took the status. */\n start?: string;\n /** Whether the asset worked, was broken, awaited review, or had been scrapped through the period. */\n status?: AssetFunctionalStatus;\n}\n\nexport interface AssetListing {\n /** The page of records. */\n results?: Asset[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface AssetLocationData {\n /** Where the asset is, or null while it is in transit. */\n currentLocation?: SparseLocationWithParent | null;\n /** Whether the asset has shipped and not yet been delivered. */\n inTransit?: boolean;\n /** Where a planned or in-progress move takes the asset, or null when none is planned. */\n nextLocation?: SparseLocationWithParent | null;\n /** The location the asset was at before its current one, or null when it has not moved. */\n previousLocation?: SparseLocationWithParent | null;\n}\n\nexport interface AssetMetadataField {\n /** The item field's unique identifier. */\n id?: string;\n /** The item field's key. */\n key?: string;\n /** The field's display name. */\n label?: string;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n /** The kind of value the field holds, which decides the JSON type of its value. */\n type?: ItemFieldType;\n}\n\nexport type AssetMetadataFieldWrapper = {\n field?: {\n type?: \"BOOLEAN\";\n };\n value?: boolean | null;\n} | {\n field?: {\n type?: \"DATE\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"DATE_TIME\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"INTEGER\";\n };\n value?: number | null;\n} | {\n field?: {\n type?: \"MULTILINE_TEXT\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"NUMBER\";\n };\n value?: number | null;\n} | {\n field?: {\n type?: \"TEXT\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"TIME\";\n };\n value?: string | null;\n};\n\nexport interface AssetMoveToPlan {\n /** The ID of the asset to move. */\n assetId: string;\n /** When the asset reaches its destination, or null when the move only ships. */\n deliverAt?: string | null;\n /** The client's own name for the move, which the plan echoes back beside its answer. */\n id: string;\n /** When the asset leaves its origin, or null when the move only delivers. */\n shipAt?: string | null;\n}\n\nexport interface AssetOwnership {\n /** The customer that owns the asset, or null when your organization owns it. */\n customer?: SparseCustomer | null;\n /** The day the asset's current owner took ownership, or null when its ownership has never changed. */\n ownershipChangeDate?: string | null;\n}\n\nexport interface AssetOwnershipHistoryItem {\n /** When the segment was recorded. */\n createdAt?: string;\n /** The customer that owned the asset during the segment, or null when your organization did. */\n customer?: SparseCustomer | null;\n /** The day the segment's owner took ownership. */\n date?: string;\n /** The ownership segment's unique identifier. */\n id?: string;\n /** The ownership segment's key, which the segment endpoints take as segmentKey. */\n key?: string;\n /** When the segment was last changed. */\n lastModifiedAt?: string;\n /** What the owner paid for the asset, or null when no price was recorded. */\n salePrice?: Currency | null;\n}\n\nexport interface AssetPlannedIntersection {\n /** The ID of the event group the move would collide with, or null when none names one. */\n aegId?: string | null;\n /** The key of the event group the move would collide with, or null when none names one. */\n aegKey?: string | null;\n /** When the colliding movement ends, or null while it has no end. */\n end?: string | null;\n /** When the colliding movement starts. */\n start?: string;\n}\n\nexport interface AssetPlannedMove {\n /** The client's own name for the move, echoed from the plan it asked about. */\n id?: string;\n /** The movement the move would collide with, or null when it collides with none. */\n intersection?: AssetPlannedIntersection | null;\n /** Whether the move can be carried out as asked. */\n isValid?: boolean;\n}\n\n/** A project assignment the asset list filters by. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetProjectStatusFilter = \"ACTIVE\" | \"NONE\" | \"PAST\" | \"UPCOMING\";\n\nexport interface AssetProposedMultiMove {\n /** The ID of the asset to move. */\n assetId: string;\n /** When the asset reaches its destination, and one of shipAt or deliverAt is required. */\n deliverAt?: string | null;\n /** The IANA time zone name the delivery time was entered in, such as America/Denver; when omitted, the delivery time's clock time is read in the organization's time zone. */\n deliverAtTimezone?: string | null;\n /** The ID of the location the asset arrives at. */\n destinationId: string;\n /** The ID of the location the asset leaves. */\n originId: string;\n /** When the asset leaves its origin, and one of shipAt or deliverAt is required. */\n shipAt?: string | null;\n /** The IANA time zone name the ship time was entered in, such as America/Denver; when omitted, the ship time's clock time is read in the organization's time zone. */\n shipAtTimezone?: string | null;\n}\n\nexport interface AssetScrappedContext {\n /** The day the asset was scrapped. */\n disposalDate?: string;\n /** What the scrapped asset was sold for, or null when it was not sold. */\n disposalPrice?: Currency | null;\n /** Why the asset was scrapped. */\n disposalReason?: string | null;\n}\n\nexport interface AssetShippingData {\n /** When Hardfin recorded the update. */\n createdAt?: string;\n /** The tracking update's unique identifier. */\n id?: string;\n /** The tracking update's key. */\n key?: string;\n /** Where the carrier reported the shipment, or null when it reported nowhere. */\n location?: AssetShippingDataLocation | null;\n /** When the carrier says the update happened. */\n reportedAt?: string;\n /** The carrier's status for the shipment at that point. */\n status?: string;\n /** What the carrier wrote about the update. */\n statusText?: string;\n /** The carrier's finer status, or null when it reported none. */\n substatus?: string | null;\n /** When Hardfin last changed the update. */\n updatedAt?: string;\n}\n\nexport interface AssetShippingDataListing {\n /** Who carries the shipment and the number it is tracked by, or null when neither is named. */\n carrier?: CarrierDetails | null;\n /** When the carrier now expects to deliver, or null when it says nothing. */\n eta?: string | null;\n /** When the carrier first expected to deliver, or null when it said nothing. */\n originalEta?: string | null;\n /** The carrier's service the shipment travels on, or null when it names none. */\n serviceLevelName?: string | null;\n /** What the carrier has reported, newest first. */\n shippingHistory?: AssetShippingData[];\n}\n\nexport interface AssetShippingDataLocation {\n /** The city the carrier reported. */\n city?: string;\n /** The country the carrier reported. */\n country?: string;\n /** The state or region the carrier reported. */\n state?: string;\n /** The postal code the carrier reported. */\n zip?: string;\n}\n\nexport interface AssetUpdateMetadataItem {\n /** The ID of the item field to set on the asset. */\n fieldId: string;\n /** The field's new value, in the JSON type the field's type calls for, or null to clear it. */\n value?: unknown[] | boolean | number | Record<string, unknown> | string | null;\n}\n\nexport interface AssetUsefulLifeRevision {\n /** When the revision was recorded. */\n createdAt?: string;\n /** The person who recorded the revision. */\n createdBy?: SparsePerson;\n /** The day the new useful life takes effect. */\n effectiveDate?: string;\n /** The revision's key. */\n key?: string;\n /** Free-form detail about the revision. */\n notes?: string | null;\n /** Why the useful life changed. */\n reason?: UsefulLifeRevisionReason;\n /** The asset's new useful life in months. */\n usefulLifeMonths?: number;\n}\n\n/** A machine-readable predicate describing why an entity needs attention. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AttentionReason = \"DELIVERED_NOT_RECEIVED\" | \"OPEN_NOT_SHIPPED\" | \"SHIPPED_NOT_DELIVERED\";\n\n/** An ordinal severity for the needs-attention signal. It is advisory and non-blocking: it flags a record that has sat in a non-terminal state longer than expected. The ordinal ordering drives the attention sort. API responses use attention: null when no active attention finding exists. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AttentionSeverity = \"CRITICAL\" | \"NOTICE\" | \"WARNING\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingFrequency = \"ANNUALLY\" | \"BIENNIALLY\" | \"BIWEEKLY\" | \"DAILY\" | \"MONTHLY\" | \"ONCE\" | \"QUADRENNIALLY\" | \"QUARTERLY\" | \"QUINQUENNIALLY\" | \"SEMIANNUALLY\" | \"TRIENNIALLY\" | \"WEEKLY\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingSchedule = \"MILESTONE\" | \"PERIODIC\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingTiming = \"ADVANCE\" | \"ARREARS\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type Carrier = \"airterra\" | \"apc_postal\" | \"apg\" | \"aramex\" | \"asendia_us\" | \"australia_post\" | \"axlehire\" | \"better_trucks\" | \"borderguru\" | \"boxberry\" | \"bring\" | \"canada_post\" | \"cdl\" | \"chronopost\" | \"colissimo\" | \"collect_plus\" | \"correios_br\" | \"correos_espana\" | \"couriersplease\" | \"deutsche_post\" | \"dhl_benelux\" | \"dhl_ecommerce\" | \"dhl_express\" | \"dhl_germany\" | \"dhl_germany_c2c\" | \"dpd_de\" | \"dpd_uk\" | \"estafeta\" | \"fastway_australia\" | \"fedex\" | \"globegistics\" | \"gls_us\" | \"gophr\" | \"gso\" | \"hermes_germany_b2c\" | \"hermes_uk\" | \"hongkong_post\" | \"la_poste\" | \"lasership\" | \"lso\" | \"mondial_relay\" | \"new_zealand_post\" | \"nippon_express\" | \"ontrac\" | \"orangeds\" | \"other\" | \"parcel\" | \"parcelforce\" | \"passport\" | \"pcf\" | \"pitney_bowes\" | \"poste_italiane\" | \"posti\" | \"purolator\" | \"royal_mail\" | \"royal_mail_sf\" | \"rr_donnelley\" | \"russian_post\" | \"sendle\" | \"shippo\" | \"skypostal\" | \"stuart\" | \"swyft\" | \"uds\" | \"ups\" | \"usps\" | \"veho\" | \"x_delivery\" | \"yodel\";\n\nexport interface CarrierDetails {\n /** The carrier's name, which is accepted only when type is other. */\n name?: string | null;\n /** The number the carrier tracks the shipment by, or null when it has none. */\n trackingNumber?: string | null;\n /** The carrier, or null when none is named. */\n type?: Carrier | null;\n}\n\nexport interface Charge {\n /** The moment the charge became billable, or null while it has not. */\n actualBillableAt?: string | null;\n /** The day the charge became billable, or null while it has not. */\n billingEligibleDate?: string | null;\n /** Why the charge was cancelled, or null when none was given or it is not cancelled. */\n cancellationReason?: string | null;\n /** The moment the charge was cancelled, or null when it is not cancelled. */\n cancelledAt?: string | null;\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge's unique identifier. */\n id?: string;\n /** True when a person added, edited or split the charge, and false when it came from the line item's billing plan unchanged. */\n isCustomModified?: boolean;\n /** The charge's key. */\n key?: string;\n /** The charge's display name, such as the period it covers or the milestone it follows. */\n label?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The number of units the charge bills. */\n quantity?: number;\n /** The charge's position among its line item's charges, in ascending order. */\n sequence?: number;\n /** The last day of the period the charge covers. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** PLANNED before the charge can be invoiced, BILLABLE once it can, INVOICED once it is on an invoice, or CANCELLED when it will not be billed. */\n status?: ChargeStatus;\n /** The amount the charge bills. */\n totalPrice?: Currency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit behind the charge, or null when totalPrice was not computed from one. */\n unitPrice?: Currency | null;\n}\n\nexport interface ChargeListItem {\n /** The moment the charge became billable, or null while it has not. */\n actualBillableAt?: string | null;\n /** Why the charge was cancelled, or null when none was given or it is not cancelled. */\n cancellationReason?: string | null;\n /** The moment the charge was cancelled, or null when it is not cancelled. */\n cancelledAt?: string | null;\n /** The line item's schedule: PERIODIC when its charges recur at a regular frequency, or MILESTONE when each follows a project milestone. */\n chargeSchedule?: BillingSchedule;\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge's unique identifier. */\n id?: string;\n /** The item the charge's line item bills for. */\n item?: SparseItem;\n /** The charge's key. */\n key?: string;\n /** The charge's display name, such as the period it covers or the milestone it follows. */\n label?: string;\n /** CONFIRMED when the line item's charges carry dates, or PENDING when its activation date is not yet known, and a PERIODIC charge can be marked billable only once it is CONFIRMED. */\n lineItemChargeMode?: ChargeMode;\n /** The key of the line item the charge belongs to. */\n lineItemKey?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The project the charge belongs to, which carries the charge's customer. */\n project?: SparseProject;\n /** The number of units the charge bills. */\n quantity?: number;\n /** The last day of the period the charge covers. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** The number of charges split from one charge, which is 1 for a charge that was never split. */\n splitCount?: number;\n /** The charge's position among the charges split from one charge, counted from 1. */\n splitIndex?: number;\n /** PLANNED before the charge can be invoiced, BILLABLE once it can, INVOICED once it is on an invoice, or CANCELLED when it will not be billed. */\n status?: ChargeStatus;\n /** The amount the charge bills. */\n totalPrice?: Currency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit behind the charge, or null when totalPrice was not computed from one. */\n unitPrice?: Currency | null;\n}\n\nexport interface ChargeMarkedBillable {\n /** The billable charge created for the quantity billed now, or null when the whole charge was billed. */\n newCharge?: Charge | null;\n /** The charge the request named, which keeps the quantity not billed when the charge was split. */\n updatedCharge?: Charge;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeMode = \"CONFIRMED\" | \"PENDING\";\n\nexport interface ChargePage {\n /** The charges on this page. */\n results?: ChargeListItem[];\n /** The number of charges the filters match, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeStatus = \"BILLABLE\" | \"CANCELLED\" | \"INVOICED\" | \"PLANNED\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeTriggerType = \"EVENT\" | \"MANUAL\" | \"TIME\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CompanyType = \"CUSTOMER\" | \"MANUFACTURER\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostAdjustmentReason = \"ADDITION\" | \"BETTERMENT\" | \"DAMAGE\" | \"INSTALLATION\" | \"LIFE_EXTENSION\" | \"MARKET_DECLINE\" | \"OBSOLESCENCE\" | \"OTHER\" | \"REGULATORY\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostAdjustmentType = \"CAPITALIZATION\" | \"IMPAIRMENT\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostBasisMode = \"ADVANCED\" | \"SIMPLE\" | null;\n\n/** The kind of credential a request was made with. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `API_KEY` | An API key, for an integration that runs unattended | | `OAUTH` | An OAuth access token, issued to an application a person connected | | `SESSION` | A person signed in to Hardfin in a browser | */\nexport type CredentialType = \"API_KEY\" | \"OAUTH\" | \"SESSION\";\n\nexport interface Currency {\n /** The exact value as a decimal string with at least two decimal places. */\n amount?: string;\n /** The value's ISO 4217 currency code. */\n isoCode?: CurrencyCode;\n}\n\n/** An ISO 4217 alpha currency code. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CurrencyCode = \"CAD\" | \"EUR\" | \"GBP\" | \"USD\";\n\nexport type Customer = SparseCustomer & {\n /** The number of the customer's active projects. */\n activeProjectCt?: number;\n /** The number of assets the customer owns. */\n assetCount?: number;\n /** The number of assets at the customer's locations. */\n assetsAtLocation?: number;\n /** The address invoices are sent to. */\n billingAddress?: string | null;\n /** The person who receives the customer's invoices. */\n billingContact?: CustomerBillingContact | null;\n /** A free-form note about the customer. */\n comment?: string | null;\n /** The customer's web domain, used to look up its logo. */\n domain?: string | null;\n /** The customer's identifier in another system. */\n externalId?: string | null;\n /** The number of the customer's incomplete projects. */\n incompleteProjectCt?: number;\n /** The customer's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** The number of the customer's locations. */\n locationCount?: number;\n /** The customer's locations. */\n locations?: SparseLocationWithParent[];\n /** The storage key of the customer's logo file. */\n logoFileKey?: string | null;\n /** The number of the customer's past projects. */\n pastProjectCt?: number;\n /** The number of the customer's upcoming projects. */\n upcomingProjectCt?: number;\n};\n\nexport interface CustomerBillingContact {\n /** The billing contact's email address. */\n email?: string | null;\n /** The billing contact's name. */\n name?: string | null;\n /** The billing contact's phone number. */\n phone?: string | null;\n}\n\nexport interface CustomerListing {\n /** The page of records. */\n results?: Customer[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type Depreciation = \"DOUBLE_DECLINING\" | \"STRAIGHT_LINE\" | \"SUM_YEAR\" | \"UNIT_OF_PRODUCTION\" | null;\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type EntityType = \"ASSET\" | \"BILLING\" | \"BILLING_PLAN\" | \"CHARGE\" | \"CONTACT\" | \"COST\" | \"CUSTOMER\" | \"FULFILLMENT_ORDER\" | \"INVOICE\" | \"ITEM\" | \"LOCATION\" | \"ORGANIZATION\" | \"PERSON\" | \"PROJECT\" | \"PURCHASE_ORDER\" | \"RETURN_ORDER\" | \"SHIPMENT\" | \"TIME_RECORD\";\n\nexport interface Error {\n error: string;\n statusCode: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ExchangeGroupStatus = \"CANCELLED\" | \"COMPLETE\" | \"DRAFT\" | \"IN_PROGRESS\";\n\nexport interface File {\n /** The file's unique identifier. */\n id?: string;\n /** The file's key, which the file endpoints take as fileKey. */\n key?: string;\n /** The file's media type, or empty when the upload named none. */\n mimeType?: string;\n /** The file's name as it was uploaded. */\n name?: string;\n /** The file's size in bytes. */\n size?: number;\n /** When the file was uploaded. */\n uploadedAt?: string;\n}\n\nexport interface FileNewUpload {\n /** The uploaded file's unique identifier. */\n fileId?: string;\n /** The uploaded file's key, which the file endpoints take as fileKey. */\n fileKey?: string;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FrontendItemType = \"BULK\" | \"DEVICE\" | \"SERVICE\";\n\nexport interface FulfillmentContactSnapshot {\n /** The contact as the 3PL received it. */\n data?: FulfillmentContactSnapshotData;\n /** When the contact was copied. */\n savedAt?: string;\n}\n\nexport interface FulfillmentContactSnapshotData {\n /** The customer the contact belonged to when the order was sent, or null. */\n company?: SparseCustomer | null;\n /** The contact's email address when the order was sent, or null. */\n email?: string | null;\n /** The contact's first name when the order was sent, or null. */\n firstName?: string | null;\n /** The contact's last name when the order was sent, or null. */\n lastName?: string | null;\n /** The contact's phone number when the order was sent, or null. */\n phone?: string | null;\n}\n\nexport interface FulfillmentCycleTime {\n /** The days from the order's creation until it opened, or null while it has not opened. */\n createdToOpenedDays?: string | null;\n /** The days from the first shipment shipping until the order closed, or null until both happen. */\n firstShipmentShippedToCloseDays?: string | null;\n /** The days from the order opening until its first shipment shipped, or null until both happen. */\n openToFirstShipmentShippedDays?: string | null;\n}\n\nexport interface FulfillmentItem {\n /** The ID of the physical item the line asks for, which may appear on only one line. */\n itemId: string;\n /** How many units of the item the order asks for, above 0. */\n requestedQuantity: number;\n}\n\nexport interface FulfillmentListing {\n /** The page of records. */\n results?: FulfillmentOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface FulfillmentOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** When the order closed, or null while it is open. */\n closedAt?: string | null;\n /** What closed the order: SHIPMENT_COMPLETE, MANUAL_CLOSE, THIRD_PARTY_FIN or CANCELLED, or null while it is open. */\n closedAtSource?: FulfillmentOrderClosedAtSource | null;\n /** Who closed the order by hand, or null when it closed on its own or is open. */\n closedBy?: SparsePerson | null;\n /** The person at the destination the order is for, or null. */\n contact?: SparseContact | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** How long the order spent in each stage. */\n cycleTime?: FulfillmentCycleTime;\n /** The exchange the order is part of, or null when it is not part of one. */\n exchangeGroup?: SparseExchangeGroup | null;\n /** How many files are attached to the order. */\n fileCount?: number;\n /** When the order's first outbound shipment was created, cancelled shipments included, or null while it has none. */\n firstShipmentOpenedAt?: string | null;\n /** When the order's first outbound shipment shipped, cancelled shipments included, or null while none has. */\n firstShipmentShippedAt?: string | null;\n /** Where the order ships from. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** The order's line items. */\n items?: FulfillmentOrderItem[];\n /** The fulfillment order's key, which the fulfillment endpoints take as fulfillmentKey. */\n key?: string;\n /** When the order's latest outbound shipment was created, cancelled shipments included, or null while it has none. */\n lastShipmentOpenedAt?: string | null;\n /** When the order's latest outbound shipment shipped, cancelled shipments included, or null while none has. */\n lastShipmentShippedAt?: string | null;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When the order's latest shipment that is not cancelled was delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When the order's latest shipment that is not cancelled shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** When the order opened, which is when it was sent to a 3PL or when its first shipment was created, or null while it has not. */\n openedAt?: string | null;\n /** What Hardfin sent to a 3PL with the order, or null when it was never sent. */\n orderDataSnapshot?: FulfillmentOrderDataSnapshot | null;\n /** The note written about the order, or null. */\n orderNotes?: string | null;\n /** The project the order fills, or null when it fills none. */\n project?: SparseProject | null;\n /** The day the order is promised to arrive, or null when no one has said. */\n promiseDeliveryDate?: string | null;\n /** The day the order is promised to ship, or null when no one has said. */\n promiseShipDate?: string | null;\n /** Where the order stands: DRAFT, AWAITING_3PL, CANCELLED, or OPEN, SHIPPED or DELIVERED, each PARTIAL, FULL or OVERAGE against the requested quantities. */\n status?: FulfillmentOrderStatus;\n /** The order's fulfillment by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: FulfillmentThirdParty;\n /** Where the order ships to. */\n toLocation?: SparseLocationWithIntegration | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderClosedAtSource = \"CANCELLED\" | \"MANUAL_CLOSE\" | \"SHIPMENT_COMPLETE\" | \"THIRD_PARTY_FIN\";\n\nexport interface FulfillmentOrderDataSnapshot {\n /** The contact as it stood when the order was sent to a 3PL, or null when the order named none. */\n contact?: FulfillmentContactSnapshot | null;\n}\n\nexport interface FulfillmentOrderItem {\n /** How many units are on shipments that have been delivered. */\n deliveredQuantity?: number;\n /** The line item's unique identifier. */\n id?: string;\n /** The item the line asks for. */\n item?: SparseItem;\n /** The line item's key. */\n key?: string;\n /** How many units sit on the order's outbound shipments that have not shipped. */\n pendingQuantity?: number;\n /** How many units a 3PL reported under a serial that conflicts with the asset record, held until someone resolves them. */\n quarantinedQuantity?: number;\n /** How many units of the item the order asks for. */\n requestedQuantity?: number;\n /** How many units are on shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** How far the line's units have got, such as OPEN_PARTIAL or DELIVERED_FULL, and DRAFT while the order is a draft. */\n status?: FulfillmentOrderLineItemStatus;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface FulfillmentThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider, which then ships it. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type IntegrationCategory = \"CRM\" | \"ERP\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type IntegrationID = \"HUBSPOT\" | \"NETSUITE\" | \"NONE\" | \"QBO\" | \"SFDC\";\n\nexport interface Item {\n /** Whether a BULK item records serial numbers on its units, which is false for SERVICE and DEVICE items. */\n acceptsBulkSerials?: boolean;\n /** The number of assets of a DEVICE item, and null for other types. */\n assetCount?: number | null;\n /** A free-form description of the item. */\n description?: string | null;\n /** The item's unique identifier. */\n id?: string;\n /** The item's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** When the item was last changed. */\n lastUpdatedAt?: string | null;\n /** The person who last changed the item. */\n lastUpdatedBy?: SparsePerson;\n /** The item's display name. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n}\n\nexport interface ItemAccounting {\n /** The default share of overhead for one unit. */\n allocatedIndirect?: Currency | null;\n /** The default parts cost for one unit. */\n billOfMaterials?: Currency | null;\n /** The ISO 4217 code the default cost amounts are denominated in, or null when none is recorded. */\n costCurrencyCode?: CurrencyCode | null;\n /** The default method one unit is depreciated by. */\n depreciationModel?: Depreciation;\n /** The default labor cost to build one unit. */\n directLabor?: Currency | null;\n /** The default shipping cost to receive one unit. */\n freightInbound?: Currency | null;\n /** The default shipping cost to deliver one unit. */\n freightOutbound?: Currency | null;\n /** The default cost to install one unit. */\n installation?: Currency | null;\n /** The default financing cost for one unit. */\n interest?: Currency | null;\n /** The default value one unit keeps at the end of its useful life. */\n salvageValue?: Currency | null;\n /** A single default cost for one unit, used instead of the cost components. */\n simpleCostBasis?: Currency | null;\n /** The default import duty paid on one unit. */\n tariffs?: Currency | null;\n /** The default tax paid on one unit. */\n tax?: Currency | null;\n /** The default cost of goods sold for one unit, which is the simple cost basis when set and otherwise the sum of the cost components. */\n totalCOGS?: Currency | null;\n /** The default number of months one unit is depreciated over. */\n usefulLife?: number | null;\n}\n\nexport interface ItemBOMItem {\n /** The BULK part the bill of materials uses. */\n item?: SparseItem;\n /** The number of the part one unit of the item uses. */\n quantity?: number;\n}\n\nexport interface ItemDetail {\n /** Whether a BULK item records serial numbers on its units, which is false for SERVICE and DEVICE items. */\n acceptsBulkSerials?: boolean;\n /** The default costs and depreciation for a unit of a DEVICE or BULK item. */\n accounting?: ItemAccounting;\n /** The number of assets of a DEVICE item, and null for other types. */\n assetCount?: number | null;\n /** The bill of materials, the BULK parts one unit of the item is built from, or null when it has none. */\n bom?: ItemBOMItem[] | null;\n /** The pricing a project line item's billing plan starts from when it sells the item, or null when the item has none. */\n defaultPricing?: ItemPricing | null;\n /** A free-form description of the item. */\n description?: string | null;\n /** The custom fields each asset of a DEVICE item can hold. */\n fields?: ItemField[];\n /** Whether each unit of the item is tracked as its own asset, which is true for a DEVICE item. */\n hasAssets?: boolean;\n /** The item's unique identifier. */\n id?: string;\n /** The item's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** The number of inventory movements of a BULK item, and null for other types. */\n inventoryMovementCount?: number | null;\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** Whether the item is physical, which is true for DEVICE and BULK items. */\n isPhysical?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** When the item was last changed. */\n lastUpdatedAt?: string | null;\n /** The person who last changed the item. */\n lastUpdatedBy?: SparsePerson;\n /** The item's display name. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n}\n\nexport interface ItemField {\n /** The field's unique identifier. */\n id?: string;\n /** The field's key, which the item field endpoints take as fieldKey. */\n key?: string;\n /** The field's display name. */\n label?: string;\n /** The number of assets that hold a value for the field. */\n metadataCount?: number;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n /** The kind of value the field holds. */\n type?: ItemFieldType;\n}\n\nexport interface ItemFieldOrderingUpdateItem {\n /** The ID of the item field to move. */\n fieldId: string;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n}\n\n/** The kind of value an item's custom field holds. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ItemFieldType = \"BOOLEAN\" | \"DATE\" | \"DATE_TIME\" | \"INTEGER\" | \"MULTILINE_TEXT\" | \"NUMBER\" | \"TEXT\" | \"TIME\";\n\nexport interface ItemListing {\n /** The page of records. */\n results?: Item[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface ItemPricing {\n /** How often a PERIODIC charge recurs. */\n chargeFrequency?: BillingFrequency | null;\n /** PERIODIC to charge on a recurring cadence, or MILESTONE to charge when a milestone is reached. */\n chargeSchedule?: BillingSchedule | null;\n /** The default price for the whole line, used when pricingMode is FIXED. */\n fixedPrice?: Currency | null;\n /** How often the charges are invoiced. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends. */\n invoiceMode?: BillingTiming | null;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price for the line whatever its quantity. */\n pricingMode?: PricingMode | null;\n /** The default price for each unit, used when pricingMode is PER_UNIT. */\n unitPrice?: Currency | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ItemType = \"marked_bulk\" | \"service\" | \"tracked_device\" | \"unmarked_bulk\";\n\nexport type Location = SparseLocationWithIntegration & {\n /** The number of active projects at the location. */\n activeProjectCount?: number;\n /** The number of assets currently at the location. */\n assetCount?: number;\n /** The number of incomplete projects at the location. */\n incompleteProjectCount?: number;\n /** The number of past projects at the location. */\n pastProjectCount?: number;\n /** The number of upcoming projects at the location. */\n upcomingProjectCount?: number;\n};\n\nexport interface LocationListing {\n /** The page of records. */\n results?: Location[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type LocationType = \"SITE\" | \"ZONE\" | null;\n\nexport interface Metadata {\n errors: Error[] | null;\n /** What the client should know about its request, beside any error. A notice never fails a request. */\n notices?: Notice[];\n /** The identifier to quote when asking Hardfin about this request. */\n requestId: string;\n /** How long the server took to answer. */\n requestTime: string;\n statusCode: number;\n}\n\nexport interface MetadataLocationComponents {\n /** The first line of the street address. */\n addressLine1?: string | null;\n /** The second line of the street address, such as a suite. */\n addressLine2?: string | null;\n /** The city. */\n city?: string | null;\n /** The country. */\n country?: string | null;\n /** The whole address on one line. */\n formattedAddress?: string | null;\n /** The postal or ZIP code. */\n postalCode?: string | null;\n /** The state or region. */\n state?: string | null;\n}\n\nexport interface MetadataLocationSite {\n /** The location's structured address, which a zone reads from its parent site. */\n address?: MetadataLocationComponents | null;\n /** Google's place ID for the address, when it was found through Google. */\n googlePlaceId?: string | null;\n /** The location's latitude, sent as a decimal string. */\n latitude?: string | null;\n /** The location's longitude, sent as a decimal string. */\n longitude?: string | null;\n /** The person or business that receives shipments at the location. */\n shippingName?: string | null;\n}\n\nexport interface MetadataMilestonePhaseEntry {\n /** The phase's name, which its charge takes as a label, 255 characters or less. */\n name?: string;\n /** The share of the line item's total the phase bills, from 0 to 100. */\n percentage?: string | null;\n}\n\nexport interface MetadataMilestonePhases {\n /** The phases, in order. */\n entries?: MetadataMilestonePhaseEntry[];\n /** PERCENTAGE, the only way a phase's share is expressed. */\n mode?: string;\n}\n\nexport interface NonNegativeCurrency {\n /** The exact value as a decimal string with at least two decimal places, which cannot be negative. */\n amount?: string;\n /** The value's ISO 4217 currency code. */\n isoCode?: CurrencyCode;\n}\n\nexport interface Notice {\n /** What the notice is about. API_VERSION_OUTDATED means an earlier version of the endpoint answered, because X-API-Version is behind its last change. Ignore a code that is not recognized. */\n code: string;\n /** The X-API-Version to move to so the notice stops. */\n latestVersion: string;\n message: string;\n}\n\nexport interface PaymentTerm {\n /** The payment term's identifier. */\n id?: string;\n /** The payment term's key. */\n key?: string;\n /** The payment term's name as people read it. */\n label?: string;\n /** The number of days after the invoice date that payment is due. */\n netDays?: number;\n /** The payment term's machine name. */\n value?: string;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type PricingMode = \"FIXED\" | \"PER_UNIT\";\n\nexport type Project = SparseProject & {\n /** The day the customer accepted the project. */\n acceptanceDate?: string | null;\n /** The workflow the project is on, with the project's current stage marked active, or null when it has no workflow. */\n activeWorkflow?: SparseActiveWorkflow | null;\n /** The project's annual recurring revenue, with one total for each currency its recurring line items are priced in. */\n annualRecurringRevenue?: Currency[];\n /** The billing address the project's invoices use in place of the customer's. */\n billingAddress?: string | null;\n /** The billing contact email the project's invoices use in place of the customer's. */\n billingContactEmail?: string | null;\n /** The billing contact name the project's invoices use in place of the customer's. */\n billingContactName?: string | null;\n /** The billing contact phone number the project's invoices use in place of the customer's. */\n billingContactPhone?: string | null;\n /** The number of charges on the project's line items. */\n chargeCount?: number;\n /** What follows the project for its customer: it was renewed, the customer kept a later-ending project, or nothing followed. */\n completionClassification?: ProjectCompletionClassification;\n /** The day the contract was signed. */\n contractSignedOn?: string | null;\n /** The number of costs recorded against the project. */\n costCount?: number;\n /** The project's single currency and the field that established it, or null when no currency-bearing field is set. */\n currency?: ProjectCurrency | null;\n /** The customer the project is for. */\n customer?: SparseCustomer | null;\n /** The project's default location, which counts among its locations even when no line item names it. */\n defaultLocation?: SparseLocationWithParent | null;\n /** The project's description. */\n description?: string | null;\n /** The discount applied to the project. */\n discount?: Currency | null;\n /** The number of files attached to the project. */\n fileCount?: number;\n /** The day the project goes live. */\n goLiveDate?: string | null;\n /** The day of the installation. */\n installDate?: string | null;\n /** The number of the project's charges that have been invoiced. */\n invoicedChargeCount?: number;\n /** The project's line items, each an item the project sells or provides as a service. */\n items?: ProjectLineItem[];\n /** Every location the project names: the ones its line items ask for, and its default location. */\n locations?: SparseLocationWithParent[];\n /** The memo new invoices for the project carry. */\n memo?: string | null;\n /** The number of notes on the project. */\n noteCount?: number;\n /** The project's payment term. */\n paymentTerm?: PaymentTerm | null;\n /** The project this one renews. */\n previousProject?: SparseProject | null;\n /** Whether the items the project asks for have been fulfilled, judged across all of its line items. */\n projectFulfillmentStatus?: ProjectFulfillmentStatus;\n /** The customer's purchase order number, which new invoices for the project carry. */\n purchaseOrderNumber?: string | null;\n /** The day of the site visit. */\n siteVisitDate?: string | null;\n /** How the project relates to the customer's earlier projects: a renewal of a prior project, new business, or an expansion. */\n startClassification?: ProjectStartClassification;\n /** The number of tickets on the project. */\n ticketCount?: number;\n /** The number of time activities recorded against the project. */\n timeActivityCount?: number;\n /** The contract's total value, as entered on the project. */\n totalContractValue?: Currency | null;\n /** The day of the training. */\n trainingDate?: string | null;\n /** The number of URL links attached to the project. */\n urlLinkCount?: number;\n};\n\nexport interface ProjectChargeRequestItem {\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge to update, or null to add a new one, and no two charges in the list send the same one. */\n id?: string | null;\n /** True when a person added, edited or split the charge, and false when it follows the line item's billing plan unchanged. */\n isCustomModified?: boolean;\n /** The charge's display name, such as the period it covers or the milestone it follows, which is required and 255 characters or less once the spaces around it are trimmed. */\n label?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The number of units the charge bills, which is at least 1 when unitPrice is sent and 2,147,483,647 or less. */\n quantity?: number;\n /** The charge's position among its line item's charges, in ascending order, which is zero or more and sent by one charge in the list. */\n sequence?: number;\n /** The last day of the period the charge covers, on or after servicePeriodStart. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** The charge's status: PLANNED, BILLABLE, INVOICED or CANCELLED. A charge becomes billable, invoiced or cancelled only through its own actions, so a new charge must be sent as PLANNED and a stored charge may keep its status or go back to PLANNED, which clears its billable and cancellation details. */\n status?: ChargeStatus;\n /** The amount the charge bills, which equals unitPrice times quantity when unitPrice is sent. */\n totalPrice?: NonNegativeCurrency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable, and is TIME when omitted. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit, in the currency of totalPrice, and is null on a FIXED charge. */\n unitPrice?: NonNegativeCurrency | null;\n}\n\n/** What follows a project for its customer when it ends. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectCompletionClassification = \"CHURN\" | \"CONTRACTION\" | \"RENEWED\";\n\nexport interface ProjectCurrency {\n /** The ISO 4217 code of the project's currency. */\n isoCode?: CurrencyCode;\n /** What fixed the project's currency: an invoiced charge, the contract value, the line items, or the discount. */\n source?: ProjectCurrencySource;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectCurrencySource = \"DISCOUNT\" | \"INVOICED_CHARGE\" | \"LINE_ITEMS\" | \"PROJECT_VALUE\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectFulfillmentStatus = \"FULFILLED\" | \"OVER_FULFILLED\" | \"PARTIALLY_FULFILLED\" | \"UNFULFILLED\";\n\nexport interface ProjectItemBinding {\n /** The day a periodic line item's charge schedule is anchored on, which defaults to startOn. */\n activationDate?: string | null;\n /** The identifier that makes line items consecutive phases of one commitment when they send the same one, and is assigned when a new line item omits it. */\n aggregationKey?: string;\n /** The line item's single billing cadence, which fills chargeFrequency and invoiceFrequency on a periodic line item that omits them. */\n billingFrequency?: BillingFrequency | null;\n /** How often a periodic line item creates a charge, and is refused unless chargeSchedule is PERIODIC. */\n chargeFrequency?: BillingFrequency | null;\n /** PERIODIC when charges recur at a regular frequency, or MILESTONE when each charge follows a project milestone. */\n chargeSchedule?: BillingSchedule | null;\n /** A free-form note about the line item, 65,536 characters or less. */\n details?: string | null;\n /** The last day of the line item's service window, on or after startOn. A line item's dates change only through the project, because the line item update does not take them. */\n endOn?: string | null;\n /** The flat price when pricingMode is FIXED, and is not sent together with unitPrice. */\n fixedPrice?: NonNegativeCurrency | null;\n /** The line item to update, or omitted to add a new one. */\n id?: string | null;\n /** How often a periodic line item's charges are invoiced, which is never more often than chargeFrequency. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends, and is refused unless chargeSchedule is PERIODIC. */\n invoiceMode?: BillingTiming | null;\n /** The catalog item the line item is for. */\n itemId: string;\n /** The location the line item is for. */\n locationId?: string | null;\n /** The named phases of a milestone line item and each one's share of its total. */\n milestonePhases?: MetadataMilestonePhases | null;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price whatever the quantity. */\n pricingMode?: PricingMode | null;\n /** The number of units the line item covers, which is zero or more. */\n quantity?: number;\n /** The first day of the line item's own service window, sent together with endOn. A line item's dates change only through the project, because the line item update does not take them. */\n startOn?: string | null;\n /** A negotiated total for a periodic line item that replaces the computed one, in the project's currency. */\n totalOverride?: NonNegativeCurrency | null;\n /** SALE to sell the item, which only a physical item allows, or SERVICE to provide it as a service. */\n transactionType: TransactionType;\n /** The price of one unit for each charge, and is not sent together with fixedPrice. */\n unitPrice?: NonNegativeCurrency | null;\n}\n\nexport interface ProjectLineItem {\n /** The day a periodic line item's charge schedule is anchored on, or null while chargeMode is PENDING and on a milestone line item. */\n activationDate?: string | null;\n /** The identifier shared by line items that are consecutive phases of one commitment, and unique to a line item that stands alone. */\n aggregationKey?: string;\n /** The line item's single billing cadence, which predates chargeFrequency and invoiceFrequency. */\n billingFrequency?: BillingFrequency | null;\n /** How often a periodic line item creates a charge, and is null on a milestone line item. */\n chargeFrequency?: BillingFrequency | null;\n /** CONFIRMED when the line item's charges carry dates, or PENDING when its activation date is not yet known and they do not. */\n chargeMode?: ChargeMode;\n /** PERIODIC when charges recur at a regular frequency, or MILESTONE when each charge follows a project milestone, and is null until the line item has a billing plan. */\n chargeSchedule?: BillingSchedule | null;\n /** The line item's charges, in sequence order. */\n charges?: Charge[];\n /** A free-form note about the line item. */\n details?: string | null;\n /** The last day of the line item's service window. */\n endOn?: string | null;\n /** The flat price when pricingMode is FIXED: the amount of each charge on a periodic line item, and the total its phases split on a milestone one. */\n fixedPrice?: Currency | null;\n /** True when any of the line item's charges is invoiced, which stops the line item from being removed. */\n hasInvoicedCharges?: boolean;\n /** The line item's unique identifier. */\n id?: string;\n /** How often a periodic line item's charges are invoiced, which is never more often than chargeFrequency. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends, on a periodic line item. */\n invoiceMode?: BillingTiming | null;\n /** The catalog item the line item is for. */\n item?: SparseItem;\n /** The line item's key. */\n key?: string;\n /** The location the line item is for, or null when it has none. */\n location?: SparseLocationWithParent | null;\n /** The named phases of a milestone line item and each one's share of its total, or null on any other line item. */\n milestonePhases?: MetadataMilestonePhases | null;\n /** The line item's position among the line items sharing its aggregationKey, counted from 1 in order of startOn. */\n phaseRowNumber?: number;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price whatever the quantity, and is null until the line item has a billing plan. */\n pricingMode?: PricingMode | null;\n /** The number of units the line item covers. */\n quantity?: number | null;\n /** The first day of the line item's own service window, or null when it has no dates. */\n startOn?: string | null;\n /** A negotiated total for a periodic line item that replaces the computed one, or null to use the computed total. */\n totalOverride?: Currency | null;\n /** SALE when the item is sold, or SERVICE when it is provided as a service. */\n transactionType?: TransactionType;\n /** The price of one unit for each charge, or null when the line item is priced at a fixed price. */\n unitPrice?: Currency | null;\n}\n\nexport interface ProjectListing {\n /** The page of records. */\n results?: Project[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** How a project relates to the customer's earlier projects when it starts. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStartClassification = \"EXPANSION\" | \"NEW_BUSINESS\" | \"RENEWAL\";\n\n/** Where a project stands against its dates, which is computed and never stored. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStatus = \"ACTIVE\" | \"DATE_RANGE_INCOMPLETE\" | \"PAST\" | \"UPCOMING\";\n\n/** A project status the project list and the fulfillment report filter by. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStatusFilter = \"ACTIVE\" | \"DATE_RANGE_INCOMPLETE\" | \"PAST\" | \"UPCOMING\";\n\nexport interface PurchaseOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** The carrier the supplier ships the order with, or null when none is named. */\n carrier?: CarrierDetails | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** The supplier's own number for the order, or null when it has none. */\n externalPurchaseOrderNumber?: string | null;\n /** The number of files attached to the order. */\n fileCount?: number;\n /** The location the supplier ships from, or null when none is on record. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The purchase order's unique identifier. */\n id?: string;\n /** The order's lines. */\n items?: PurchaseOrderLineItem[];\n /** The purchase order's key, which the purchase order endpoints take as purchaseOrderKey. */\n key?: string;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When an inbound shipment for the order was last delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When an inbound shipment for the order was last received, or null while none has been. */\n mostRecentReceivedAt?: string | null;\n /** When an inbound shipment for the order last shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** A note about the order, or null. */\n orderNotes?: string | null;\n /** The day the supplier promised the order would arrive, or null when it has not said. */\n promiseDeliveryDate?: string | null;\n /** The day the supplier promised to ship the order, or null when it has not said. */\n promiseShipDate?: string | null;\n /** The number the purchase order is known by, which an inbound shipment names to fill it. */\n purchaseOrderNumber?: string;\n /** Where the order is in its life, by the furthest stage any of its lines has reached on the order's inbound shipments. */\n status?: PurchaseOrderStatus;\n /** The company the items are ordered from. */\n supplier?: SparseCustomer;\n /** The order's receiving by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: PurchaseOrderThirdParty;\n /** The location the order is delivered to. */\n toLocation?: SparseLocationWithIntegration;\n}\n\nexport interface PurchaseOrderItem {\n /** The ID of the physical item the line orders, which may appear on only one line. */\n itemId: string;\n /** How many units of the item to order, which must be greater than 0. */\n requestedQuantity: number;\n}\n\nexport interface PurchaseOrderLineItem {\n /** How many units are on the order's inbound shipments that have been delivered and not yet received. */\n deliveredQuantity?: number;\n /** The line's unique identifier. */\n id?: string;\n /** The item the line orders. */\n item?: SparseItem;\n /** The line's key. */\n key?: string;\n /** How many units are on the order's inbound shipments that have not yet shipped. */\n openQuantity?: number;\n /** How many units have been received on the order's inbound shipments. */\n receivedQuantity?: number;\n /** How many units of the item were ordered. */\n requestedQuantity?: number;\n /** How many units are on the order's inbound shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** The furthest stage the line's units have reached on the order's inbound shipments, and whether fewer, exactly, or more units than were ordered reached it. */\n status?: PurchaseOrderLineItemStatus;\n}\n\n/** The status of a line item on a purchase order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `DELIVERED_FULL` | The ordered units have been delivered | | `DELIVERED_OVERAGE` | More units than were ordered have been delivered | | `DELIVERED_PARTIAL` | Fewer units than were ordered have been delivered | | `DRAFT` | None of the line's units are on a shipment yet | | `OPEN_FULL` | The ordered units are on shipments that have not left | | `OPEN_OVERAGE` | More units than were ordered are on shipments that have not left | | `OPEN_PARTIAL` | Fewer units than were ordered are on shipments that have not left | | `RECEIVED_FULL` | The ordered units have been received | | `RECEIVED_OVERAGE` | More units than were ordered have been received | | `RECEIVED_PARTIAL` | Fewer units than were ordered have been received | | `SHIPPED_FULL` | The ordered units have shipped | | `SHIPPED_OVERAGE` | More units than were ordered have shipped | | `SHIPPED_PARTIAL` | Fewer units than were ordered have shipped | */\nexport type PurchaseOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface PurchaseOrderListing {\n /** The page of records. */\n results?: PurchaseOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface PurchaseOrderResync3PLFilesResult {\n /** How many of those files the 3PL did not accept, which a later resync tries again. */\n failedFiles?: number;\n /** How many of those files the 3PL accepted. */\n successfulFiles?: number;\n /** How many of the order's files the 3PL had not yet received. */\n totalFiles?: number;\n}\n\n/** The status of a purchase order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `AWAITING_3PL` | The order was sent to a third-party logistics provider, which has not yet reported a shipment | | `CANCELLED` | The order was cancelled | | `DELIVERED_FULL` | Every line's ordered units have been delivered | | `DELIVERED_OVERAGE` | Every line's ordered units have been delivered, and some line delivered more than was ordered | | `DELIVERED_PARTIAL` | Units have been delivered, and not every line has been delivered in full | | `DRAFT` | No units are on a shipment yet, and the order can still be edited or cancelled | | `OPEN_FULL` | Every line's ordered units are on shipments that have not left | | `OPEN_OVERAGE` | Every line's ordered units are on shipments that have not left, and some line has more than was ordered | | `OPEN_PARTIAL` | Units are on shipments that have not left, and not every line is there in full | | `RECEIVED_FULL` | Every line's ordered units have been received | | `RECEIVED_OVERAGE` | Every line's ordered units have been received, and some line received more than was ordered | | `RECEIVED_PARTIAL` | Units have been received, and not every line has been received in full | | `SHIPPED_FULL` | Every line's ordered units have shipped | | `SHIPPED_OVERAGE` | Every line's ordered units have shipped, and some line shipped more than was ordered | | `SHIPPED_PARTIAL` | Units have shipped, and not every line has shipped in full | */\nexport type PurchaseOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface PurchaseOrderThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider, which then receives it and keeps it from being edited. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** The condition that stops a resolution the hold's type allows from running. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineResolutionBlockReason = \"SERIAL_ALREADY_TAKEN\";\n\n/** How a user resolved a quarantined serial. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineResolutionKind = \"ACCEPTED_SERIAL\" | \"CORRECTED_SERIAL\" | \"CREATED_ASSET\" | \"KEPT_HARDFIN_ITEM\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineType = \"DUPLICATE_ALREADY_EXISTS\" | \"DUPLICATE_IN_ORDER\" | \"MISSING_SERIAL\" | \"SERIAL_PATTERN_MISMATCH\" | \"SKU_TRANSMUTATION\" | \"UNKNOWN_SERIAL\";\n\n/** The item type a request asks an item to become. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type RequestedItemType = \"BULK\" | \"DEVICE\" | \"SERVICE\";\n\nexport interface ReturnOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** The carrier the items are returned with, or null when none is named. */\n carrier?: CarrierDetails | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** The exchange the order belongs to, or null when it was not created as part of one. */\n exchangeGroup?: SparseExchangeGroup | null;\n /** The number of files attached to the order. */\n fileCount?: number;\n /** The location the items are returned from, or null when none is on record. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The return order's unique identifier. */\n id?: string;\n /** The order's lines. */\n items?: ReturnOrderOrderItem[];\n /** The return order's key, which the return order endpoints take as returnOrderKey. */\n key?: string;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When a shipment for the order was last delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When a shipment for the order was last received, or null while none has been. */\n mostRecentReceivedAt?: string | null;\n /** When a shipment for the order last shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** A note about the order, or null. */\n orderNotes?: string | null;\n /** The day the items were promised to arrive, or null when none was promised. */\n promiseDeliveryDate?: string | null;\n /** The day the items were promised to ship, or null when none was promised. */\n promiseShipDate?: string | null;\n /** The number the return order is known by, which a shipment names to fill it. */\n returnOrderNumber?: string;\n /** A description of why the items are coming back, or null when none was given. */\n returnReason?: string | null;\n /** Why the items are coming back. */\n returnType?: ReturnOrderType;\n /** Where the order is in its life, by the furthest stage any of its lines has reached on the order's shipments. */\n status?: ReturnOrderStatus;\n /** The order's receiving by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: ReturnOrderThirdParty;\n /** The location the items are returned to. */\n toLocation?: SparseLocationWithIntegration;\n}\n\nexport interface ReturnOrderItem {\n /** The ID of the physical item the line returns, which may appear on only one line. */\n itemId: string;\n /** How many units of the item to return, which must be greater than 0. */\n requestedQuantity: number;\n}\n\n/** The status of a line item on a return order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `DELIVERED_FULL` | The requested units have been delivered | | `DELIVERED_OVERAGE` | More units than were requested have been delivered | | `DELIVERED_PARTIAL` | Fewer units than were requested have been delivered | | `DRAFT` | None of the line's units are on a shipment yet | | `OPEN_FULL` | The requested units are on shipments that have not left | | `OPEN_OVERAGE` | More units than were requested are on shipments that have not left | | `OPEN_PARTIAL` | Fewer units than were requested are on shipments that have not left | | `RECEIVED_FULL` | The requested units have been received | | `RECEIVED_OVERAGE` | More units than were requested have been received | | `RECEIVED_PARTIAL` | Fewer units than were requested have been received | | `SHIPPED_FULL` | The requested units have shipped | | `SHIPPED_OVERAGE` | More units than were requested have shipped | | `SHIPPED_PARTIAL` | Fewer units than were requested have shipped | */\nexport type ReturnOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface ReturnOrderListing {\n /** The page of records. */\n results?: ReturnOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface ReturnOrderOrderItem {\n /** How many units are on the order's shipments that have been delivered and not yet received. */\n deliveredQuantity?: number;\n /** The line's unique identifier. */\n id?: string;\n /** The item the line returns. */\n item?: SparseItem;\n /** The line's key. */\n key?: string;\n /** How many units are on the order's shipments that have not yet shipped. */\n openQuantity?: number;\n /** How many units have been received on the order's shipments. */\n receivedQuantity?: number;\n /** How many units of the item are to come back. */\n requestedQuantity?: number;\n /** How many units are on the order's shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** The furthest stage the line's units have reached on the order's shipments, and whether fewer, exactly, or more units than were requested reached it. */\n status?: ReturnOrderLineItemStatus;\n}\n\nexport interface ReturnOrderResync3PLFilesResult {\n /** How many of those files the 3PL did not accept, which a later resync tries again. */\n failedFiles?: number;\n /** How many of those files the 3PL accepted. */\n successfulFiles?: number;\n /** How many of the order's files the 3PL had not yet received. */\n totalFiles?: number;\n}\n\n/** The status of a return order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `AWAITING_3PL` | The order was sent to a third-party logistics provider, which has not yet reported a shipment | | `CANCELLED` | The order was cancelled | | `DELIVERED_FULL` | Every line's requested units have been delivered | | `DELIVERED_OVERAGE` | Every line's requested units have been delivered, and some line delivered more than was requested | | `DELIVERED_PARTIAL` | Units have been delivered, and not every line has been delivered in full | | `DRAFT` | No units are on a shipment yet, and the order can still be edited or cancelled | | `OPEN_FULL` | Every line's requested units are on shipments that have not left | | `OPEN_OVERAGE` | Every line's requested units are on shipments that have not left, and some line has more than was requested | | `OPEN_PARTIAL` | Units are on shipments that have not left, and not every line is there in full | | `RECEIVED_FULL` | Every line's requested units have been received | | `RECEIVED_OVERAGE` | Every line's requested units have been received, and some line received more than was requested | | `RECEIVED_PARTIAL` | Units have been received, and not every line has been received in full | | `SHIPPED_FULL` | Every line's requested units have shipped | | `SHIPPED_OVERAGE` | Every line's requested units have shipped, and some line shipped more than was requested | | `SHIPPED_PARTIAL` | Units have shipped, and not every line has shipped in full | */\nexport type ReturnOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface ReturnOrderThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider, which then receives it and keeps it from being edited. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ReturnOrderType = \"CUSTOMER_CANCELLATION\" | \"DAMAGED\" | \"DEFECTIVE\" | \"END_OF_SERVICE\" | \"INCORRECT_SPEC\" | \"NOT_NEEDED\" | \"OTHER\" | \"PROVISIONING\" | \"UPGRADE\" | \"WRONG_ITEM\";\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type ScrappedState = \"all\" | \"false\" | \"true\";\n\nexport interface SharedBool {\n /** Whether the operation completed. */\n success?: boolean;\n}\n\nexport interface SharedIntegration {\n /** The Hardfin error code of the failed sync, or null when the sync did not fail. */\n errorCode?: number | null;\n /** The integrated system, such as SFDC or HUBSPOT. */\n id?: IntegrationID;\n /** Whether the last sync with the external system failed. */\n inError?: boolean;\n /** Whether a sync with the external system is pending. */\n isSyncing?: boolean;\n /** The system's display name. */\n label?: string;\n /** A URL to the linked record in the external system. */\n link?: string | null;\n /** Whether the record differs from the external system and needs a person to review it. */\n needsReview?: boolean;\n /** The kind of system, CRM or ERP. */\n type?: IntegrationCategory;\n}\n\nexport interface Shipment {\n /** Why the shipment was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the shipment was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** The ID of the user who cancelled the shipment, or null while it has not been cancelled. */\n cancelledBy?: string | null;\n /** Who carries the shipment, or null when no carrier is named. */\n carrier?: CarrierDetails | null;\n /** When the shipment was created. */\n createdAt?: string;\n /** Who created the shipment. */\n createdBy?: SparsePerson;\n /** How long the shipment spent in each stage. */\n cycleTime?: ShipmentCycleTime;\n /** When the shipment arrived, or null while it has not. */\n deliveredAt?: string | null;\n /** The IANA time zone deliveredAt was recorded in, or null when none was recorded. */\n deliveredAtTimezone?: string | null;\n /** The note written when the shipment was delivered, or null. */\n deliveryNote?: string | null;\n /** The sum of the lines' estimated values, or null when no line has an estimate. */\n estimatedTotalValue?: string | null;\n /** When the carrier now expects to deliver, or null when it says nothing. */\n eta?: string | null;\n /** The day the shipment is expected to arrive, or null when no one has said. */\n expectedDeliveredOn?: string | null;\n /** The day the shipment is expected to leave, or null when no one has said. */\n expectedShippedOn?: string | null;\n /** Where the shipment leaves from, or null when an inbound shipment names no origin. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The fulfillment order an outbound shipment fills, or null when it fills none. */\n fulfillmentOrder?: SparseFulfillment | null;\n /** The shipment's unique identifier. */\n id?: string;\n /** The shipment's line items. */\n items?: ShipmentLineItem[];\n /** The shipment's key, which the shipment endpoints take as shipmentKey. */\n key?: string;\n /** The purchase order an inbound shipment fills, or null when it fills none. */\n purchaseOrder?: SparsePurchaseOrder | null;\n /** The note written when the shipment was received, or null. */\n receiptNote?: string | null;\n /** When an inbound shipment's items were received, or null while they have not been. */\n receivedAt?: string | null;\n /** The IANA time zone receivedAt was recorded in, or null when none was recorded. */\n receivedAtTimezone?: string | null;\n /** The return order an inbound shipment fills, or null when it fills none. */\n returnOrder?: SparseReturnOrder | null;\n /** The carrier's service the shipment travels on, or null when the carrier names none. */\n serviceLevelName?: string | null;\n /** The note written about the shipment itself, or null. */\n shipmentNote?: string | null;\n /** The number the shipment is known by. */\n shipmentNumber?: string;\n /** Whether the shipment is INBOUND to the organization or OUTBOUND from it. */\n shipmentType?: ShipmentType | null;\n /** When the shipment left, or null while it has not. */\n shippedAt?: string | null;\n /** The IANA time zone shippedAt was recorded in, or null when none was recorded. */\n shippedAtTimezone?: string | null;\n /** What the shipment cost to send, or null when no cost is recorded. */\n shippingCost?: Currency | null;\n /** Where the shipment is in its life: OPEN, SHIPPED, DELIVERED, RECEIVED or CANCELLED. */\n status?: ShipmentStatus;\n /** Whether a third-party provider holds the shipment, which refuses changes made through the API. */\n thirdPartyBound?: boolean;\n /** How many days the shipment has held its status, or null once it is received or cancelled. */\n timeInStatusDays?: string | null;\n /** Where the shipment is going. */\n toLocation?: SparseLocationWithIntegration;\n /** What the shipment's assets are worth, or null when it has none to value. */\n totalValue?: string | null;\n}\n\nexport interface ShipmentCycleTime {\n /** The days from the shipment's creation to its ship time, or null while it has not shipped. */\n createdToShippedDays?: string | null;\n /** The days from the shipment's ship time to its delivery, or null while it has not been delivered. */\n shippedToDeliveredDays?: string | null;\n}\n\nexport interface ShipmentItem {\n /** The line's identifier in another system, or null when it has none. */\n externalReference?: string | null;\n /** The ID of the item the line carries. */\n itemId?: string;\n /** How many units the line ships, which an outbound shipment requires above 0 and an inbound shipment may leave null. */\n quantity?: number | null;\n /** The serial numbers of the units, for an item that is tracked by serial. */\n serials?: string[];\n}\n\nexport interface ShipmentLineItem {\n /** What the line was estimated to be worth while the shipment was open, or null when no estimate was made. */\n estimatedValue?: string | null;\n /** The line's identifier in the system that reported it, or null when it has none. */\n externalReference?: string | null;\n /** The item the line carries. */\n item?: SparseItem;\n /** The number of serial numbers in pendingSerials. */\n pendingSerialCount?: number;\n /** The serial numbers a third-party provider has reported but not yet confirmed as shipped. */\n pendingSerials?: string[];\n /** How many units the line ships, or null when the line was added without one. */\n quantity?: number | null;\n /** How many units arrived, or null until an inbound shipment is received. */\n receivedQuantity?: number | null;\n /** The number of serial numbers in serials. */\n serialCount?: number;\n /** The serial numbers of the line's units, which is empty for an item that is not tracked by serial. */\n serials?: string[];\n /** What the line's assets are worth, or null when it has none to value. */\n value?: string | null;\n}\n\nexport interface ShipmentListing {\n /** The shipments on the page. */\n results?: Shipment[];\n /** The number of shipments the filters match, across every page. */\n totalCount?: number;\n}\n\nexport interface ShipmentReceiveItem {\n /** The line's identifier in another system, or null when it has none. */\n externalReference?: string | null;\n /** The ID of the item that arrived, which may be named once. */\n itemId?: string;\n /** How many units arrived, which is required and may be 0 for a line that did not arrive. */\n quantity?: number | null;\n /** The serial numbers of the units that arrived, for an item that is tracked by serial. */\n serials?: string[];\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ShipmentStatus = \"CANCELLED\" | \"DELIVERED\" | \"OPEN\" | \"RECEIVED\" | \"SHIPPED\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ShipmentType = \"INBOUND\" | \"OUTBOUND\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type SortOrder = \"ASC\" | \"DESC\";\n\nexport interface SparseActiveWorkflow {\n id?: string;\n key?: string;\n name?: string;\n stages?: SparseWorkflowStage[];\n}\n\nexport interface SparseAsset {\n /** Whether the asset works, is broken, awaits review, or has been scrapped. */\n functionalStatus?: AssetFunctionalStatus;\n /** The asset's unique identifier. */\n id?: string;\n /** The day the asset entered inventory. */\n inInventoryDate?: string;\n /** Whether the asset is archived. */\n isArchived?: boolean;\n /** Whether the asset has shipped and not yet been delivered. */\n isInTransit?: boolean;\n /** The catalog item the asset is a unit of. */\n item?: SparseItem;\n /** The asset's key, which the asset endpoints take as assetKey. */\n key?: string;\n /** The asset's serial number, unique within its item. */\n serial?: string;\n}\n\nexport interface SparseContact {\n /** A note about the contact, or null. */\n comments?: string | null;\n /** When the contact was created. */\n createdAt?: string;\n /** The customer the contact works for. */\n customer?: SparseCustomer;\n /** The contact's email address, or null. */\n email?: string | null;\n /** The contact's first name. */\n firstName?: string;\n /** The contact's unique identifier. */\n id?: string;\n /** Whether the contact is archived. */\n isArchived?: boolean;\n /** The contact's key. */\n key?: string;\n /** The contact's last name. */\n lastName?: string;\n /** The contact's phone number, or null. */\n phone?: string | null;\n /** The contact's job title, or null. */\n title?: string | null;\n /** When the contact last changed. */\n updatedAt?: string;\n}\n\nexport interface SparseCustomer {\n /** The customer's unique identifier. */\n id?: string;\n /** Whether the customer is archived. */\n isArchived?: boolean;\n /** Whether the company is a customer. */\n isCustomer?: boolean;\n /** Whether the company is a supplier. */\n isSupplier?: boolean;\n /** The customer's key, which the customer endpoints take as customerKey. */\n key?: string;\n /** The customer's display name. */\n name?: string;\n}\n\nexport interface SparseExchangeGroup {\n /** The number the exchange is known by. */\n exchangeNumber?: string;\n /** The fulfillment orders that send replacement units. */\n fulfillmentOrders?: SparseExchangeGroupFulfillment[];\n /** The exchange's unique identifier. */\n id?: string;\n /** The exchange's key. */\n key?: string;\n /** The return orders that bring units back. */\n returnOrders?: SparseExchangeGroupReturnOrder[];\n /** Where the exchange stands: DRAFT, IN_PROGRESS, COMPLETE or CANCELLED. */\n status?: ExchangeGroupStatus;\n}\n\nexport interface SparseExchangeGroupFulfillment {\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** The fulfillment order's key. */\n key?: string;\n}\n\nexport interface SparseExchangeGroupReturnOrder {\n /** The return order's unique identifier. */\n id?: string;\n /** The return order's key. */\n key?: string;\n /** The number the return order is known by. */\n returnOrderNumber?: string;\n}\n\nexport interface SparseFulfillment {\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** Whether a third-party provider fulfills the order. */\n isThirdPartyFulfilled?: boolean;\n /** The fulfillment order's key. */\n key?: string;\n}\n\nexport interface SparseItem {\n /** Whether each unit of the item is tracked as its own asset, which is true for a DEVICE item. */\n hasAssets?: boolean;\n /** The item's unique identifier. */\n id?: string;\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** Whether the item is physical, which is true for DEVICE and BULK items. */\n isPhysical?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** The item's display name. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n /** The unit the item's quantities are counted in. */\n unitOfMeasure?: UnitOfMeasure;\n}\n\nexport type SparseLocation = MetadataLocationSite & {\n /** The number of archived zones at a site. */\n archivedZoneCount?: number;\n /** The customer a zone is designated for, such as for reservations, provisioning or a 3PL. */\n consignee?: SparseCustomer | null;\n /** The customer the location is assigned to, which a zone reads from its parent site, or null for your organization's own locations. */\n customer?: SparseCustomer | null;\n /** A free-form description of a zone. */\n description?: string | null;\n /** The location's unique identifier. */\n id?: string;\n /** Whether Google resolved the site's address, which is always false for a zone. */\n isAddressGeocoded?: boolean;\n /** Whether the location is archived. */\n isArchived?: boolean;\n /** Whether assets at the location count as inventory for reporting. */\n isInventory?: boolean;\n /** Whether a zone sets its own isInventory rather than inheriting its parent site's. */\n isInventoryOverride?: boolean;\n /** Whether a third-party logistics (3PL) provider fulfills orders from the location. */\n isThirdPartyEnabled?: boolean;\n /** Whether assets make only occasional or temporary stops at the location, which hides it from location lists by default. */\n isTransient?: boolean;\n /** The location's key, which the location endpoints take as locationKey. */\n key?: string;\n /** The location's display name. */\n name?: string;\n /** The 3PL provider's identifier for the location. */\n thirdPartyIdentifier?: string | null;\n /** SITE for a site, or ZONE for a zone within a site. */\n type?: LocationType;\n /** The number of zones at a site. */\n zoneCount?: number;\n /** The site's zones. */\n zones?: SparseZone[];\n};\n\nexport type SparseLocationWithIntegration = SparseLocationWithParent & {\n /** The location's links to integrated systems. */\n integrations?: SharedIntegration[];\n};\n\nexport type SparseLocationWithParent = SparseLocation & {\n /** The site a zone belongs to, or null for a site. */\n parentLocation?: SparseLocation | null;\n};\n\nexport interface SparseOrganization {\n /** The organization's ID */\n id?: string;\n /** The public identifier that can be used in URLs */\n key?: string;\n /** The name of the organization */\n name?: string;\n}\n\nexport interface SparsePerson {\n /** The person's first name. */\n firstName?: string | null;\n /** The person's unique identifier. */\n id?: string;\n /** The person's key. */\n key?: string;\n /** The person's last name. */\n lastName?: string | null;\n}\n\nexport interface SparseProject {\n /** The customer the project is for. */\n customer?: SparseCustomer | null;\n /** The day the project ends. */\n endOn?: string | null;\n /** The project's unique identifier. */\n id?: string;\n /** The project's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** Whether the project is archived. */\n isArchived?: boolean;\n /** The project's key. */\n key?: string;\n /** The project's display name. */\n name?: string;\n /** The name of the project's payment term. */\n paymentTermLabel?: string | null;\n /** The customer's purchase order number, which new invoices for the project carry. */\n purchaseOrderNumber?: string | null;\n /** The day the project starts. */\n startOn?: string | null;\n /** Whether the project is upcoming, active, or past, judged from its dates. */\n status?: ProjectStatus;\n}\n\nexport interface SparsePurchaseOrder {\n /** The supplier's own number for the purchase order, or null when it has none. */\n externalPurchaseOrderNumber?: string | null;\n /** The purchase order's unique identifier. */\n id?: string;\n /** The purchase order's key. */\n key?: string;\n /** The number the purchase order is known by. */\n purchaseOrderNumber?: string;\n}\n\nexport interface SparseReturnOrder {\n /** The return order's unique identifier. */\n id?: string;\n /** The return order's key. */\n key?: string;\n /** The number the return order is known by. */\n returnOrderNumber?: string;\n}\n\nexport interface SparseShipment {\n /** When the shipment arrived, or null while it has not. */\n deliveredAt?: string | null;\n /** The shipment's unique identifier. */\n id?: string;\n /** The shipment's key. */\n key?: string;\n /** The number the shipment is known by. */\n shipmentNumber?: string;\n /** What kind of movement the shipment carries. */\n shipmentType?: string;\n /** When the shipment left, or null while it has not. */\n shippedAt?: string | null;\n}\n\nexport interface SparseWorkflowStage {\n active?: boolean;\n id?: string;\n key?: string;\n name?: string;\n order?: number;\n}\n\nexport interface SparseZone {\n /** The number of assets in the zone. */\n assetCount?: number;\n /** The customer the zone is designated for, such as for reservations, provisioning or a 3PL. */\n consignee?: SparseCustomer | null;\n /** A free-form description of the zone. */\n description?: string | null;\n /** The zone's unique identifier. */\n id?: string;\n /** Whether the zone is archived. */\n isArchived?: boolean;\n /** Whether assets in the zone count as inventory for reporting. */\n isInventory?: boolean;\n /** The zone's key. */\n key?: string;\n /** The zone's display name, unique within its site. */\n name?: string;\n}\n\nexport interface Token {\n /** When the API key was created, the application was connected, or the person signed in. */\n createdAt?: string;\n /** When the access token or session expires, or null for an API key, which does not. */\n expiresAt?: string | null;\n /** The API key's public identifier or the application's client_id, or null for a session. */\n identifier?: string | null;\n /** The API key's label or the application's name, or null when there is none. */\n label?: string | null;\n /** When the API key was last regenerated or the access token was issued, or null for a session. */\n lastRegeneratedAt?: string | null;\n /** The organization the credential acts in. */\n organization?: SparseOrganization;\n /** The person the credential acts for. */\n person?: SparsePerson;\n scopes?: string[];\n /** The kind of credential. */\n type?: CredentialType;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type TransactionType = \"SALE\" | \"SERVICE\";\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type TransientState = \"all\" | \"false\" | \"true\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type TransitStatus = \"IN_TRANSIT\" | \"IN_TRANSIT_TO_FIELD\" | \"IN_TRANSIT_TO_INVENTORY\" | \"NOT_IN_TRANSIT\";\n\nexport interface URLLink {\n /** When the link was created. */\n createdAt?: string;\n /** The URL link's unique identifier. */\n id?: string;\n /** The URL link's key, which the URL link endpoints take as linkKey. */\n key?: string;\n /** The link's display name, or null when the link shows its address instead. */\n name?: string | null;\n /** When the link was last changed. */\n updatedAt?: string;\n /** The address the link points to. */\n url?: string;\n}\n\n/** The unit a quantity is counted in, sent as its UNECE Recommendation 20 code. A request may also name the unit or give its symbol, such as each or kg. See: https://unece.org/trade/uncefact/cl-recommendations Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `BG` | Bag | | `BO` | Bottle | | `BX` | Box | | `C62` | Unit | | `CMK` | Square centimeter (cm2) | | `CMT` | Centimeter (cm) | | `CR` | Crate | | `CS` | Case | | `CT` | Carton | | `DMQ` | Cubic decimeter (dm3) | | `DR` | Drum | | `DZN` | Dozen (doz) | | `EA` | Each (ea) | | `EN` | Envelope | | `FOT` | Foot (ft) | | `FTK` | Square foot (ft2) | | `FTQ` | Cubic foot (ft3) | | `GLL` | Gallon (gal) | | `GRM` | Gram (g) | | `GRO` | Gross | | `H87` | Piece (pc) | | `INH` | Inch (in) | | `INK` | Square inch (in2) | | `INQ` | Cubic inch (in3) | | `KG` | Keg | | `KGM` | Kilogram (kg) | | `KMT` | Kilometer (km) | | `KT` | Kit | | `LBR` | Pound (lb) | | `LO` | Lot | | `LTR` | Liter (L) | | `MGM` | Milligram (mg) | | `MLT` | Milliliter (mL) | | `MMK` | Square millimeter (mm2) | | `MMT` | Millimeter (mm) | | `MTK` | Square meter (m2) | | `MTQ` | Cubic meter (m3) | | `MTR` | Meter (m) | | `ONZ` | Ounce (oz) | | `OZA` | Fluid ounce (fl oz) | | `PK` | Pack | | `PR` | Pair (pr) | | `PTI` | Pint (pt) | | `PX` | Pallet | | `QTI` | Quart (qt) | | `RL` | Reel | | `RO` | Roll | | `SET` | Set | | `SMI` | Mile (mi) | | `ST` | Sheet | | `STN` | Ton US (NT) | | `SV` | Skid | | `TNE` | Tonne metric (t) | | `TU` | Tube | | `YDK` | Square yard (yd2) | | `YDQ` | Cubic yard (yd3) | | `YRD` | Yard (yd) | */\nexport type UnitOfMeasure = \"BG\" | \"BO\" | \"BX\" | \"C62\" | \"CMK\" | \"CMT\" | \"CR\" | \"CS\" | \"CT\" | \"DMQ\" | \"DR\" | \"DZN\" | \"EA\" | \"EN\" | \"FOT\" | \"FTK\" | \"FTQ\" | \"GLL\" | \"GRM\" | \"GRO\" | \"H87\" | \"INH\" | \"INK\" | \"INQ\" | \"KG\" | \"KGM\" | \"KMT\" | \"KT\" | \"LBR\" | \"LO\" | \"LTR\" | \"MGM\" | \"MLT\" | \"MMK\" | \"MMT\" | \"MTK\" | \"MTQ\" | \"MTR\" | \"ONZ\" | \"OZA\" | \"PK\" | \"PR\" | \"PTI\" | \"PX\" | \"QTI\" | \"RL\" | \"RO\" | \"SET\" | \"SMI\" | \"ST\" | \"STN\" | \"SV\" | \"TNE\" | \"TU\" | \"YDK\" | \"YDQ\" | \"YRD\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type UsefulLifeRevisionReason = \"CHANGE_IN_USE\" | \"DAMAGE\" | \"OBSOLESCENCE\" | \"OTHER\" | \"REASSESSMENT\" | \"REFURBISHMENT\" | \"REGULATORY\";\n\nexport interface Workflow {\n /** When the workflow was created. */\n createdAt?: string;\n /** The workflow's identifier. */\n id?: string;\n /** Whether this is the organization's default workflow. At most one workflow is the default. */\n isDefault?: boolean;\n /** The workflow's key. */\n key?: string;\n /** The workflow's name. */\n name?: string;\n /** The stages a project on this workflow moves through, in order. */\n stages?: WorkflowStage[];\n /** When the workflow was last changed. */\n updatedAt?: string;\n}\n\nexport interface WorkflowStage {\n /** When the stage was created. */\n createdAt?: string;\n /** The stage's identifier. */\n id?: string;\n /** The number of projects on the stage. */\n inUseCount?: number;\n /** The stage's key. */\n key?: string;\n /** The stage's name. */\n name?: string;\n /** The stage's position in its workflow. A lower value comes first. */\n orderIndex?: number;\n /** When the stage was last changed. */\n updatedAt?: string;\n}\n";
2932
+ const API_TYPES = "// Types for the Hardfin API, version 2026-10-22, generated from its published document.\n// Regenerate them with hardfin types after upgrading the CLI.\n\n/** ApiError is one entry in a response's errors. */\nexport interface ApiError {\n error: string;\n statusCode: number;\n}\n\n/** ApiEnvelope is the shape every response takes, with the record or records in data. */\nexport interface ApiEnvelope<T> {\n data: T;\n metadata: {\n errors?: ApiError[] | null;\n requestId?: string;\n requestTime?: string;\n statusCode?: number;\n pagination?: unknown;\n };\n}\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type ArchivedState = \"all\" | \"false\" | \"true\";\n\nexport type Asset = SparseAsset & AssetLocationData & {\n /** The asset's cost basis, depreciation, and accounting history. */\n accounting?: AssetAccountingDetails;\n /** The asset's recent events, such as shipments and deliveries. */\n activity?: AssetEvent[];\n /** A free-form description of the asset. */\n description?: string | null;\n /** The number of files attached to the asset. */\n fileCount?: number;\n /** The day the asset entered inventory. */\n inInventoryDate?: string;\n /** The asset's value for each custom field its item defines. */\n metadata?: AssetMetadataFieldWrapper[];\n /** Who owns the asset now. */\n ownership?: AssetOwnership;\n /** The project the asset is assigned to, or null when it is unassigned. */\n project?: SparseProject | null;\n /** How and when the asset was scrapped, or null when it has not been. */\n scrappedContext?: AssetScrappedContext | null;\n /** The number of tickets about the asset. */\n ticketCount?: number;\n /** The number of links attached to the asset. */\n urlLinkCount?: number;\n};\n\nexport interface AssetAccountingDetails {\n /** The asset's inventory cost basis, before deployment costs, which is what inventory is relieved by when the asset leaves it. */\n acquisitionCogs?: Currency | null;\n /** The asset's share of overhead. */\n allocatedIndirect?: Currency | null;\n /** The problems that keep the asset's accounting from being computed, such as a missing cost basis. */\n assetExceptions?: AssetExceptionType[];\n /** The parts cost. */\n billOfMaterials?: Currency | null;\n /** The cost basis on the books now, the acquisition basis in inventory and the deployed basis once the asset is a fixed asset. */\n capitalizedCosts?: Currency | null;\n /** The capitalizations and impairments made to the asset's cost after it was acquired. */\n costAdjustments?: AssetCostAdjustment[];\n /** The ISO 4217 code every cost amount on the asset is denominated in. */\n costCurrencyCode?: CurrencyCode;\n /** The method the asset is depreciated by. */\n depreciationModel?: Depreciation;\n /** The asset's book value month by month, from its inventory month, or null while it has an accounting exception. */\n depreciationPeriods?: AssetDepreciationChartPeriod[] | null;\n /** The labor cost to build the asset. */\n directLabor?: Currency | null;\n /** The shipping cost to receive the asset. */\n freightInbound?: Currency | null;\n /** The shipping cost to deploy the asset, a deployment cost. */\n freightOutbound?: Currency | null;\n /** The day the asset was put into service and began depreciating. */\n inServiceDate?: string | null;\n /** The cost to install the asset, a deployment cost. */\n installation?: Currency | null;\n /** The financing cost of the asset. */\n interest?: Currency | null;\n /** Whether the asset's cost currency can no longer be changed. Closing an accounting period, the first accounting true-up, or recording a cost adjustment locks it for good. A sale with a sale price, or a scrap with a disposal price, also locks it. That lock lifts when the sale is deleted, its sale price is cleared, or the asset is unscrapped, as long as no other priced sale or priced scrap remains. */\n isCostCurrencyLocked?: boolean;\n /** Whether Hardfin sets the in-service date itself rather than keeping one a person entered. */\n isInServiceDateManagedAutomatically?: boolean;\n /** The value the asset keeps at the end of its useful life. */\n salvageValue?: Currency | null;\n /** A single cost entered in place of the cost components. */\n simpleCostBasis?: Currency | null;\n /** The import duty paid on the asset. */\n tariffs?: Currency | null;\n /** The tax paid on the asset. */\n tax?: Currency | null;\n /** The deployed cost basis, including deployment costs, which is what is capitalized once the asset is put into service. */\n totalPotentialCOGS?: Currency | null;\n /** The number of months the asset is depreciated over. */\n usefulLife?: number | null;\n /** The changes made to the asset's useful life. */\n usefulLifeRevisions?: AssetUsefulLifeRevision[];\n}\n\nexport interface AssetCostAdjustment {\n /** CAPITALIZATION to add to the cost basis, or IMPAIRMENT to write it down. */\n adjustmentType?: CostAdjustmentType;\n /** The size of the adjustment. */\n amount?: Currency;\n /** When the adjustment was recorded. */\n createdAt?: string;\n /** The person who recorded the adjustment. */\n createdBy?: SparsePerson;\n /** The day the adjustment takes effect. */\n effectiveDate?: string;\n /** The cost adjustment's key. */\n key?: string;\n /** Free-form detail about the adjustment. */\n notes?: string | null;\n /** Why the cost changed. */\n reason?: CostAdjustmentReason;\n}\n\nexport interface AssetDepreciationChartPeriod {\n /** The depreciation charged from the in-service date through the end of the period. */\n accumulated?: Currency;\n /** The asset's value on the books at the end of the period. */\n bookValue?: Currency;\n /** The last day the period covers, which is the end of its month except for a final period cut short by a sale, a scrap, or today. */\n date?: string;\n /** The depreciation charged in the period. */\n depreciation?: Currency;\n}\n\nexport interface AssetEvent {\n /** When the event was recorded. */\n createdAt?: string;\n /** The IANA time zone the event's times were entered in. */\n eventTimezone?: string;\n /** When the event is expected to happen, or null when no one has said. */\n expectedAt?: string | null;\n /** The event's unique identifier. */\n id?: string;\n /** Whether the event has to happen for its group to complete. */\n isRequired?: boolean;\n /** When the event happened, or null while it has not. */\n occurredAt?: string | null;\n /** The day the event was promised to a customer, or null when none was. */\n promiseDate?: string | null;\n /** The event's values a person set, such as carrier tracking. */\n properties?: AssetEventProperty[];\n /** The event's position within its group. */\n sequence?: number;\n /** When someone marked the event as happened in Hardfin, or null while it has not happened. */\n triggeredAt?: string | null;\n /** What kind of event this is. */\n type?: AssetEventType;\n}\n\nexport interface AssetEventConfiguration {\n /** The properties an event of the type carries. */\n properties?: AssetEventProperty[];\n /** The kind of event the configuration describes. */\n type?: AssetEventType;\n}\n\nexport interface AssetEventGroup {\n /** The kind of group this is, and the events it carries. */\n configuration?: AssetEventGroupConfiguration;\n /** Where the movement ends, or null when the group does not move the asset. */\n destination?: SparseLocationWithParent | null;\n /** The events the group has recorded so far. */\n events?: AssetEvent[];\n /** The event group's unique identifier. */\n id?: string;\n /** The event group's key, which the event group endpoints take as eventGroupKey. */\n key?: string;\n /** Where the movement started, or null when the group does not move the asset. */\n origin?: SparseLocationWithParent | null;\n /** The shipment the movement travels on, or null when it travels on none. */\n shipment?: SparseShipment | null;\n}\n\nexport interface AssetEventGroupConfiguration {\n /** The events a group of the kind carries, in the order they happen. */\n events?: AssetEventConfiguration[];\n /** The configuration's unique identifier. */\n id?: string;\n /** The configuration's key. */\n key?: string;\n /** What the configuration is called, such as ship and deliver. */\n name?: string;\n}\n\nexport interface AssetEventProperty {\n /** The event property's unique identifier. */\n id?: string;\n /** Whether Hardfin sets the property itself rather than a person, which responses leave out. */\n isSystemProperty?: boolean;\n /** The property's display name. */\n label?: string;\n /** The kind of value the property holds, such as CARRIER_TRACKING or CACHED_LOCATION. */\n type?: string;\n /** The property's value, whose JSON shape depends on the property's type. */\n value?: unknown[] | boolean | number | Record<string, unknown> | string | null;\n}\n\nexport interface AssetEventType {\n /** The event type's unique identifier. */\n id?: string;\n /** The event type's name, such as Ship or Deliver. */\n name?: string;\n /** Whether an event of this type only happens as part of a group, such as a shipment. */\n requiresEventGroup?: boolean;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetExceptionType = \"DEPLOYMENT_WITHOUT_ACQUISITION\" | \"DISPOSAL_DATE_BEFORE_INVENTORY\" | \"FIRST_ASSIGNMENT_BEFORE_INVENTORY\" | \"FIRST_MOVEMENT_BEFORE_INVENTORY\" | \"FIRST_SALE_DATE_BEFORE_INVENTORY\" | \"IN_SERVICE_DATE_BEFORE_INVENTORY\" | \"MISSING_COST_BASIS\" | \"MISSING_USEFUL_LIFE\" | \"SALVAGE_EXCEEDS_50_PERCENT\" | \"UNKNOWN\";\n\nexport interface AssetFile {\n /** The file's unique identifier. */\n id?: string;\n /** Whether the file is readable with any organization's API key. */\n isPublic?: boolean;\n /** The file's key, which the file endpoints take as fileKey. */\n key?: string;\n /** The file's media type, or an empty string when the upload named none. */\n mimeType?: string;\n /** The name the file had when it was uploaded. */\n name?: string;\n /** The file's size in bytes. */\n size?: number;\n /** The file type the file was uploaded as. */\n type?: string;\n /** When the file was uploaded. */\n uploadedAt?: string;\n}\n\n/** Whether an asset works, is broken, awaits review, or has been scrapped. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetFunctionalStatus = \"FUNCTIONAL\" | \"NEEDS_REVIEW\" | \"NON-FUNCTIONAL\" | \"SCRAPPED\";\n\nexport interface AssetFunctionalStatusHistoryItem {\n /** When the asset left the status, or null while it still holds it. */\n end?: string | null;\n /** When the asset took the status. */\n start?: string;\n /** Whether the asset worked, was broken, awaited review, or had been scrapped through the period. */\n status?: AssetFunctionalStatus;\n}\n\nexport interface AssetListing {\n /** The page of records. */\n results?: Asset[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface AssetLocationData {\n /** Where the asset is, or null while it is in transit. */\n currentLocation?: SparseLocationWithParent | null;\n /** Whether the asset has shipped and not yet been delivered. */\n inTransit?: boolean;\n /** Where the asset is headed while it is in transit, or null when it is not in transit. */\n nextLocation?: SparseLocationWithParent | null;\n /** The location the asset was at before its current one, or null when it has not moved. */\n previousLocation?: SparseLocationWithParent | null;\n}\n\nexport interface AssetMetadataField {\n /** The item field's unique identifier. */\n id?: string;\n /** The item field's key. */\n key?: string;\n /** The field's display name. */\n label?: string;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n /** The kind of value the field holds, which decides the JSON type of its value. */\n type?: ItemFieldType;\n}\n\nexport type AssetMetadataFieldWrapper = {\n field?: {\n type?: \"BOOLEAN\";\n };\n value?: boolean | null;\n} | {\n field?: {\n type?: \"DATE\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"DATE_TIME\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"INTEGER\";\n };\n value?: number | null;\n} | {\n field?: {\n type?: \"MULTILINE_TEXT\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"NUMBER\";\n };\n value?: number | null;\n} | {\n field?: {\n type?: \"TEXT\";\n };\n value?: string | null;\n} | {\n field?: {\n type?: \"TIME\";\n };\n value?: string | null;\n};\n\nexport interface AssetMoveToPlan {\n /** The ID of the asset to move. */\n assetId: string;\n /** When the asset reaches its destination, or null when the move only ships. */\n deliverAt?: string | null;\n /** The client's own name for the move, which the plan echoes back beside its answer. */\n id: string;\n /** When the asset leaves its origin, or null when the move only delivers. */\n shipAt?: string | null;\n}\n\nexport interface AssetOwnership {\n /** The customer that owns the asset, or null when your organization owns it. */\n customer?: SparseCustomer | null;\n /** The day the asset's current owner took ownership, or null when its ownership has never changed. */\n ownershipChangeDate?: string | null;\n}\n\nexport interface AssetOwnershipHistoryItem {\n /** When the segment was recorded. */\n createdAt?: string;\n /** The customer that owned the asset during the segment, or null when your organization did. */\n customer?: SparseCustomer | null;\n /** The day the segment's owner took ownership. */\n date?: string;\n /** The ownership segment's unique identifier. */\n id?: string;\n /** The ownership segment's key, which the segment endpoints take as segmentKey. */\n key?: string;\n /** When the segment was last changed. */\n lastModifiedAt?: string;\n /** What the owner paid for the asset, or null when no price was recorded. */\n salePrice?: Currency | null;\n}\n\nexport interface AssetPlannedIntersection {\n /** The ID of the event group the move would collide with, or null when none names one. */\n aegId?: string | null;\n /** The key of the event group the move would collide with, or null when none names one. */\n aegKey?: string | null;\n /** When the colliding movement ends, or null while it has no end. */\n end?: string | null;\n /** When the colliding movement starts. */\n start?: string;\n}\n\nexport interface AssetPlannedMove {\n /** The client's own name for the move, echoed from the plan it asked about. */\n id?: string;\n /** The movement the move would collide with, or null when it collides with none. */\n intersection?: AssetPlannedIntersection | null;\n /** Whether the move can be carried out as asked. */\n isValid?: boolean;\n}\n\n/** A project assignment the asset list filters by. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AssetProjectStatusFilter = \"ACTIVE\" | \"NONE\" | \"PAST\" | \"UPCOMING\";\n\nexport interface AssetProposedMultiMove {\n /** The ID of the asset to move. */\n assetId: string;\n /** When the asset reaches its destination, and one of shipAt or deliverAt is required. */\n deliverAt?: string | null;\n /** The IANA time zone name the delivery time was entered in, such as America/Denver; when omitted, the delivery time's clock time is read in the organization's time zone. */\n deliverAtTimezone?: string | null;\n /** The ID of the location the asset arrives at. */\n destinationId: string;\n /** The ID of the location the asset leaves. */\n originId: string;\n /** When the asset leaves its origin, and one of shipAt or deliverAt is required. */\n shipAt?: string | null;\n /** The IANA time zone name the ship time was entered in, such as America/Denver; when omitted, the ship time's clock time is read in the organization's time zone. */\n shipAtTimezone?: string | null;\n}\n\nexport interface AssetScrappedContext {\n /** The day the asset was scrapped. */\n disposalDate?: string;\n /** What the scrapped asset was sold for, or null when it was not sold. */\n disposalPrice?: Currency | null;\n /** Why the asset was scrapped. */\n disposalReason?: string | null;\n}\n\nexport interface AssetShippingData {\n /** When Hardfin recorded the update. */\n createdAt?: string;\n /** The tracking update's unique identifier. */\n id?: string;\n /** The tracking update's key. */\n key?: string;\n /** Where the carrier reported the shipment, or null when it reported nowhere. */\n location?: AssetShippingDataLocation | null;\n /** When the carrier says the update happened. */\n reportedAt?: string;\n /** The carrier's status for the shipment at that point. */\n status?: string;\n /** What the carrier wrote about the update. */\n statusText?: string;\n /** The carrier's finer status, or null when it reported none. */\n substatus?: string | null;\n /** When Hardfin last changed the update. */\n updatedAt?: string;\n}\n\nexport interface AssetShippingDataListing {\n /** Who carries the shipment and the number it is tracked by, or null when neither is named. */\n carrier?: CarrierDetails | null;\n /** When the carrier now expects to deliver, or null when it says nothing. */\n eta?: string | null;\n /** When the carrier first expected to deliver, or null when it said nothing. */\n originalEta?: string | null;\n /** The carrier's service the shipment travels on, or null when it names none. */\n serviceLevelName?: string | null;\n /** What the carrier has reported, newest first. */\n shippingHistory?: AssetShippingData[];\n}\n\nexport interface AssetShippingDataLocation {\n /** The city the carrier reported. */\n city?: string;\n /** The country the carrier reported. */\n country?: string;\n /** The state or region the carrier reported. */\n state?: string;\n /** The postal code the carrier reported. */\n zip?: string;\n}\n\nexport interface AssetUpdateMetadataItem {\n /** The ID of the item field to set on the asset. */\n fieldId: string;\n /** The field's new value, in the JSON type the field's type calls for, or null to clear it. */\n value?: unknown[] | boolean | number | Record<string, unknown> | string | null;\n}\n\nexport interface AssetUsefulLifeRevision {\n /** When the revision was recorded. */\n createdAt?: string;\n /** The person who recorded the revision. */\n createdBy?: SparsePerson;\n /** The day the new useful life takes effect. */\n effectiveDate?: string;\n /** The revision's key. */\n key?: string;\n /** Free-form detail about the revision. */\n notes?: string | null;\n /** Why the useful life changed. */\n reason?: UsefulLifeRevisionReason;\n /** The asset's new useful life in months. */\n usefulLifeMonths?: number;\n}\n\n/** A machine-readable predicate describing why an entity needs attention. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AttentionReason = \"DELIVERED_NOT_RECEIVED\" | \"OPEN_NOT_SHIPPED\" | \"SHIPPED_NOT_DELIVERED\";\n\n/** An ordinal severity for the needs-attention signal, which flags a record that has sat in a non-terminal state longer than expected. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type AttentionSeverity = \"CRITICAL\" | \"NOTICE\" | \"WARNING\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingFrequency = \"ANNUALLY\" | \"BIENNIALLY\" | \"BIWEEKLY\" | \"DAILY\" | \"MONTHLY\" | \"ONCE\" | \"QUADRENNIALLY\" | \"QUARTERLY\" | \"QUINQUENNIALLY\" | \"SEMIANNUALLY\" | \"TRIENNIALLY\" | \"WEEKLY\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingSchedule = \"MILESTONE\" | \"PERIODIC\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type BillingTiming = \"ADVANCE\" | \"ARREARS\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type Carrier = \"airterra\" | \"apc_postal\" | \"apg\" | \"aramex\" | \"asendia_us\" | \"australia_post\" | \"axlehire\" | \"better_trucks\" | \"borderguru\" | \"boxberry\" | \"bring\" | \"canada_post\" | \"cdl\" | \"chronopost\" | \"colissimo\" | \"collect_plus\" | \"correios_br\" | \"correos_espana\" | \"couriersplease\" | \"deutsche_post\" | \"dhl_benelux\" | \"dhl_ecommerce\" | \"dhl_express\" | \"dhl_germany\" | \"dhl_germany_c2c\" | \"dpd_de\" | \"dpd_uk\" | \"estafeta\" | \"fastway_australia\" | \"fedex\" | \"globegistics\" | \"gls_us\" | \"gophr\" | \"gso\" | \"hermes_germany_b2c\" | \"hermes_uk\" | \"hongkong_post\" | \"la_poste\" | \"lasership\" | \"lso\" | \"mondial_relay\" | \"new_zealand_post\" | \"nippon_express\" | \"ontrac\" | \"orangeds\" | \"other\" | \"parcel\" | \"parcelforce\" | \"passport\" | \"pcf\" | \"pitney_bowes\" | \"poste_italiane\" | \"posti\" | \"purolator\" | \"royal_mail\" | \"royal_mail_sf\" | \"rr_donnelley\" | \"russian_post\" | \"sendle\" | \"shippo\" | \"skypostal\" | \"stuart\" | \"swyft\" | \"uds\" | \"ups\" | \"usps\" | \"veho\" | \"x_delivery\" | \"yodel\";\n\nexport interface CarrierDetails {\n /** The carrier's name, which is accepted only when type is other. */\n name?: string | null;\n /** The number the carrier tracks the shipment by, or null when it has none. */\n trackingNumber?: string | null;\n /** The carrier, or null when none is named. */\n type?: Carrier | null;\n}\n\nexport interface Charge {\n /** The moment the charge became billable, or null while it has not. */\n actualBillableAt?: string | null;\n /** The day the charge became billable, or null while it has not. */\n billingEligibleDate?: string | null;\n /** Why the charge was cancelled, or null when none was given or it is not cancelled. */\n cancellationReason?: string | null;\n /** The moment the charge was cancelled, or null when it is not cancelled. */\n cancelledAt?: string | null;\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge's unique identifier. */\n id?: string;\n /** True when the charge was split off another charge or a client saved it as custom, and false otherwise. */\n isCustomModified?: boolean;\n /** The charge's key. */\n key?: string;\n /** The charge's display name, such as the period it covers or the milestone it follows. */\n label?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The number of units the charge bills. */\n quantity?: number;\n /** The charge's position among its line item's charges, in ascending order. */\n sequence?: number;\n /** The last day of the period the charge covers. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** PLANNED before the charge can be invoiced, BILLABLE once it can, INVOICED once it is on an invoice, or CANCELLED when it will not be billed. */\n status?: ChargeStatus;\n /** The amount the charge bills. */\n totalPrice?: Currency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit behind the charge, or null when totalPrice was not computed from one. */\n unitPrice?: Currency | null;\n}\n\nexport interface ChargeListItem {\n /** The moment the charge became billable, or null while it has not. */\n actualBillableAt?: string | null;\n /** Why the charge was cancelled, or null when none was given or it is not cancelled. */\n cancellationReason?: string | null;\n /** The moment the charge was cancelled, or null when it is not cancelled. */\n cancelledAt?: string | null;\n /** The line item's schedule: PERIODIC when its charges recur at a regular frequency, or MILESTONE when each follows a project milestone. */\n chargeSchedule?: BillingSchedule;\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge's unique identifier. */\n id?: string;\n /** The item the charge's line item bills for. */\n item?: SparseItem;\n /** The charge's key. */\n key?: string;\n /** The charge's display name, such as the period it covers or the milestone it follows. */\n label?: string;\n /** CONFIRMED when a periodic line item has an activation date or the line item is a milestone one, or PENDING when a periodic line item's activation date is not yet known, and a PERIODIC charge can be marked billable only once it is CONFIRMED. */\n lineItemChargeMode?: ChargeMode;\n /** The key of the line item the charge belongs to. */\n lineItemKey?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The project the charge belongs to, which carries the charge's customer. */\n project?: SparseProject;\n /** The number of units the charge bills. */\n quantity?: number;\n /** The last day of the period the charge covers. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** The number of its line item's charges that share the charge's label and service period, which is 1 for a charge that was never split. */\n splitCount?: number;\n /** The charge's position, counted from 1 by expected billable date, among its line item's charges that share its label and service period. */\n splitIndex?: number;\n /** PLANNED before the charge can be invoiced, BILLABLE once it can, INVOICED once it is on an invoice, or CANCELLED when it will not be billed. */\n status?: ChargeStatus;\n /** The amount the charge bills. */\n totalPrice?: Currency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit behind the charge, or null when totalPrice was not computed from one. */\n unitPrice?: Currency | null;\n}\n\nexport interface ChargeMarkedBillable {\n /** The PLANNED charge created for the quantity not billed, or null when the whole charge was billed. */\n newCharge?: Charge | null;\n /** The charge the request named, which holds the quantity billed now and is BILLABLE. */\n updatedCharge?: Charge;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeMode = \"CONFIRMED\" | \"PENDING\";\n\nexport interface ChargePage {\n /** The charges on this page. */\n results?: ChargeListItem[];\n /** The number of charges the filters match, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeStatus = \"BILLABLE\" | \"CANCELLED\" | \"INVOICED\" | \"PLANNED\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ChargeTriggerType = \"EVENT\" | \"MANUAL\" | \"TIME\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CompanyType = \"CUSTOMER\" | \"MANUFACTURER\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostAdjustmentReason = \"ADDITION\" | \"BETTERMENT\" | \"DAMAGE\" | \"INSTALLATION\" | \"LIFE_EXTENSION\" | \"MARKET_DECLINE\" | \"OBSOLESCENCE\" | \"OTHER\" | \"REGULATORY\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostAdjustmentType = \"CAPITALIZATION\" | \"IMPAIRMENT\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CostBasisMode = \"ADVANCED\" | \"SIMPLE\" | null;\n\n/** The kind of credential a request was made with. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `API_KEY` | An API key, for an integration that runs unattended | | `OAUTH` | An OAuth access token, issued to an application a person connected | | `SESSION` | A person signed in to Hardfin in a browser | */\nexport type CredentialType = \"API_KEY\" | \"OAUTH\" | \"SESSION\";\n\nexport interface Currency {\n /** The exact value as a decimal string, sent with at most two decimal places. */\n amount?: string;\n /** The value's ISO 4217 currency code. */\n isoCode?: CurrencyCode;\n}\n\n/** An ISO 4217 alpha currency code. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type CurrencyCode = \"CAD\" | \"EUR\" | \"GBP\" | \"USD\";\n\nexport type Customer = SparseCustomer & {\n /** The number of the customer's active projects. */\n activeProjectCt?: number;\n /** The number of unscrapped assets the customer owns. */\n assetCount?: number;\n /** The number of unscrapped assets at the customer's sites and their zones. */\n assetsAtLocation?: number;\n /** The address invoices are sent to. */\n billingAddress?: string | null;\n /** The person who receives the customer's invoices. */\n billingContact?: CustomerBillingContact | null;\n /** A free-form note about the customer. */\n comment?: string | null;\n /** The customer's web domain, used to look up its logo. */\n domain?: string | null;\n /** The customer's identifier in another system. */\n externalId?: string | null;\n /** The number of the customer's projects missing a start or end date. */\n incompleteProjectCt?: number;\n /** The customer's links to integrated systems, with a null link for the organization's CRM when the customer is not linked to it. */\n integrations?: SharedIntegration[];\n /** The number of the customer's sites. */\n locationCount?: number;\n /** The customer's sites. */\n locations?: SparseLocationWithParent[];\n /** The storage key of the customer's logo file. */\n logoFileKey?: string | null;\n /** The number of the customer's past projects. */\n pastProjectCt?: number;\n /** The number of the customer's upcoming projects. */\n upcomingProjectCt?: number;\n};\n\nexport interface CustomerBillingContact {\n /** The billing contact's email address. */\n email?: string | null;\n /** The billing contact's name. */\n name?: string | null;\n /** The billing contact's phone number. */\n phone?: string | null;\n}\n\nexport interface CustomerListing {\n /** The page of records. */\n results?: Customer[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type Depreciation = \"DOUBLE_DECLINING\" | \"STRAIGHT_LINE\" | \"SUM_YEAR\" | \"UNIT_OF_PRODUCTION\" | null;\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type EntityType = \"ASSET\" | \"BILLING\" | \"BILLING_PLAN\" | \"CHARGE\" | \"CONTACT\" | \"COST\" | \"CUSTOMER\" | \"FULFILLMENT_ORDER\" | \"INVOICE\" | \"ITEM\" | \"LOCATION\" | \"ORGANIZATION\" | \"PERSON\" | \"PROJECT\" | \"PURCHASE_ORDER\" | \"RETURN_ORDER\" | \"SHIPMENT\" | \"TIME_RECORD\";\n\nexport interface Error {\n error: string;\n statusCode: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ExchangeGroupStatus = \"CANCELLED\" | \"COMPLETE\" | \"DRAFT\" | \"IN_PROGRESS\";\n\nexport interface File {\n /** The file's unique identifier. */\n id?: string;\n /** The file's key, which the file endpoints take as fileKey. */\n key?: string;\n /** The file's media type, or empty when the upload named none. */\n mimeType?: string;\n /** The file's name as it was uploaded. */\n name?: string;\n /** The file's size in bytes. */\n size?: number;\n /** When the file was uploaded. */\n uploadedAt?: string;\n}\n\nexport interface FileNewUpload {\n /** The uploaded file's unique identifier. */\n fileId?: string;\n /** The uploaded file's key, which the file endpoints take as fileKey. */\n fileKey?: string;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FrontendItemType = \"BULK\" | \"DEVICE\" | \"SERVICE\";\n\nexport interface FulfillmentContactSnapshot {\n /** The contact as the 3PL received it. */\n data?: FulfillmentContactSnapshotData;\n /** When the contact was copied. */\n savedAt?: string;\n}\n\nexport interface FulfillmentContactSnapshotData {\n /** The customer the contact belonged to when the order was sent, or null. */\n company?: SparseCustomer | null;\n /** The contact's email address when the order was sent, or null. */\n email?: string | null;\n /** The contact's first name when the order was sent, or null. */\n firstName?: string | null;\n /** The contact's last name when the order was sent, or null. */\n lastName?: string | null;\n /** The contact's phone number when the order was sent, or null. */\n phone?: string | null;\n}\n\nexport interface FulfillmentCycleTime {\n /** The days from the order's creation until it opened, or null while it has not opened. */\n createdToOpenedDays?: string | null;\n /** The days from the first shipment shipping until the order closed, or null until both happen. */\n firstShipmentShippedToCloseDays?: string | null;\n /** The days from the order opening until its first shipment shipped, or null until both happen. */\n openToFirstShipmentShippedDays?: string | null;\n}\n\nexport interface FulfillmentItem {\n /** The ID of the physical item the line asks for, which may appear on only one line. */\n itemId: string;\n /** How many units of the item the order asks for, above 0. */\n requestedQuantity: number;\n}\n\nexport interface FulfillmentListing {\n /** The page of records. */\n results?: FulfillmentOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface FulfillmentOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** When the order closed, or null while it is open. */\n closedAt?: string | null;\n /** What closed the order: SHIPMENT_COMPLETE, MANUAL_CLOSE, THIRD_PARTY_FIN or CANCELLED, or null while it is open. */\n closedAtSource?: FulfillmentOrderClosedAtSource | null;\n /** Who closed the order, the system user when it closed on its own, or null while it is open. */\n closedBy?: SparsePerson | null;\n /** The person at the destination the order is for, or null. */\n contact?: SparseContact | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** How long the order spent in each stage. */\n cycleTime?: FulfillmentCycleTime;\n /** The exchange the order is part of, or null when it is not part of one. */\n exchangeGroup?: SparseExchangeGroup | null;\n /** How many files are attached to the order. */\n fileCount?: number;\n /** When the order's first outbound shipment was created, cancelled shipments included, or null while it has none. */\n firstShipmentOpenedAt?: string | null;\n /** When the order's first outbound shipment shipped, cancelled shipments included, or null while none has. */\n firstShipmentShippedAt?: string | null;\n /** Where the order ships from. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** The order's line items. */\n items?: FulfillmentOrderItem[];\n /** The fulfillment order's key, which the fulfillment endpoints take as fulfillmentKey. */\n key?: string;\n /** When the order's latest outbound shipment was created, cancelled shipments included, or null while it has none. */\n lastShipmentOpenedAt?: string | null;\n /** When the order's latest outbound shipment shipped, cancelled shipments included, or null while none has. */\n lastShipmentShippedAt?: string | null;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When the order's latest shipment that is not cancelled was delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When the order's latest shipment that is not cancelled shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** When the order opened, which is when it was sent to a 3PL or when its first shipment was created, or null while it has not. */\n openedAt?: string | null;\n /** What Hardfin sent to a 3PL with the order, or null when it was never sent or named no contact. */\n orderDataSnapshot?: FulfillmentOrderDataSnapshot | null;\n /** The note written about the order, or null. */\n orderNotes?: string | null;\n /** The project the order fills, or null when it fills none. */\n project?: SparseProject | null;\n /** The day the order is promised to arrive, or null when no one has said. */\n promiseDeliveryDate?: string | null;\n /** The day the order is promised to ship, or null when no one has said. */\n promiseShipDate?: string | null;\n /** Where the order stands: DRAFT, AWAITING_3PL, CANCELLED, or OPEN, SHIPPED or DELIVERED, each PARTIAL, FULL or OVERAGE against the requested quantities. */\n status?: FulfillmentOrderStatus;\n /** The order's fulfillment by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: FulfillmentThirdParty;\n /** Where the order ships to. */\n toLocation?: SparseLocationWithIntegration | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderClosedAtSource = \"CANCELLED\" | \"MANUAL_CLOSE\" | \"SHIPMENT_COMPLETE\" | \"THIRD_PARTY_FIN\";\n\nexport interface FulfillmentOrderDataSnapshot {\n /** The contact as it stood when the order was sent to a 3PL. */\n contact?: FulfillmentContactSnapshot | null;\n}\n\nexport interface FulfillmentOrderItem {\n /** How many units are on shipments that have been delivered. */\n deliveredQuantity?: number;\n /** The line item's unique identifier. */\n id?: string;\n /** The item the line asks for. */\n item?: SparseItem;\n /** The line item's key. */\n key?: string;\n /** How many units sit on the order's outbound shipments that have not shipped. */\n pendingQuantity?: number;\n /** How many units a 3PL reported under a serial that conflicts with the asset record, held until someone resolves them. */\n quarantinedQuantity?: number;\n /** How many units of the item the order asks for. */\n requestedQuantity?: number;\n /** How many units are on shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** How far the line's units have got, such as OPEN_PARTIAL or DELIVERED_FULL, or DRAFT while none of its units is on a shipment. */\n status?: FulfillmentOrderLineItemStatus;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type FulfillmentOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface FulfillmentThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider, which then ships it. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type IntegrationCategory = \"CRM\" | \"ERP\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type IntegrationID = \"HUBSPOT\" | \"NETSUITE\" | \"NONE\" | \"QBO\" | \"SFDC\";\n\nexport interface Item {\n /** Whether a BULK item records serial numbers on its units, which is false for SERVICE and DEVICE items. */\n acceptsBulkSerials?: boolean;\n /** The number of unscrapped assets of a DEVICE item, and null for other types. */\n assetCount?: number | null;\n /** A free-form description of the item. */\n description?: string | null;\n /** The item's unique identifier. */\n id?: string;\n /** The item's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** When the item was last changed. */\n lastUpdatedAt?: string | null;\n /** The person who last changed the item. */\n lastUpdatedBy?: SparsePerson;\n /** The item's display name, unique within your organization in any case. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization in any case. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n}\n\nexport interface ItemAccounting {\n /** The default share of overhead for one unit. */\n allocatedIndirect?: Currency | null;\n /** The default parts cost for one unit. */\n billOfMaterials?: Currency | null;\n /** The ISO 4217 code the default cost amounts are denominated in, or null when none is recorded. */\n costCurrencyCode?: CurrencyCode | null;\n /** The default method one unit is depreciated by. */\n depreciationModel?: Depreciation;\n /** The default labor cost to build one unit. */\n directLabor?: Currency | null;\n /** The default shipping cost to receive one unit. */\n freightInbound?: Currency | null;\n /** The default shipping cost to deliver one unit. */\n freightOutbound?: Currency | null;\n /** The default cost to install one unit. */\n installation?: Currency | null;\n /** The default financing cost for one unit. */\n interest?: Currency | null;\n /** The default value one unit keeps at the end of its useful life. */\n salvageValue?: Currency | null;\n /** A single default cost for one unit, used instead of the cost components. */\n simpleCostBasis?: Currency | null;\n /** The default import duty paid on one unit. */\n tariffs?: Currency | null;\n /** The default tax paid on one unit. */\n tax?: Currency | null;\n /** The default cost of goods sold for one unit, which is the simple cost basis when set and otherwise the sum of the cost components. */\n totalCOGS?: Currency | null;\n /** The default number of months one unit is depreciated over. */\n usefulLife?: number | null;\n}\n\nexport interface ItemBOMItem {\n /** The BULK part the bill of materials uses. */\n item?: SparseItem;\n /** The number of the part one unit of the item uses. */\n quantity?: number;\n}\n\nexport interface ItemDetail {\n /** Whether a BULK item records serial numbers on its units, which is false for SERVICE and DEVICE items. */\n acceptsBulkSerials?: boolean;\n /** The default costs and depreciation for a unit of a DEVICE item. */\n accounting?: ItemAccounting;\n /** The number of unscrapped assets of a DEVICE item, and null for other types. */\n assetCount?: number | null;\n /** The bill of materials, the BULK parts one unit of the item is built from, or null when it has none. */\n bom?: ItemBOMItem[] | null;\n /** The pricing a project line item's billing plan starts from when it sells the item, or null when the item has none. */\n defaultPricing?: ItemPricing | null;\n /** A free-form description of the item. */\n description?: string | null;\n /** The custom fields each asset of a DEVICE item can hold. */\n fields?: ItemField[];\n /** Whether each unit of the item is tracked as its own asset, which is true for a DEVICE item. */\n hasAssets?: boolean;\n /** The item's unique identifier. */\n id?: string;\n /** The item's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** The number of inventory movements of a BULK item, and null for other types. */\n inventoryMovementCount?: number | null;\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** Whether the item is physical, which is true for DEVICE and BULK items. */\n isPhysical?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** When the item was last changed. */\n lastUpdatedAt?: string | null;\n /** The person who last changed the item. */\n lastUpdatedBy?: SparsePerson;\n /** The item's display name, unique within your organization in any case. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization in any case. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n}\n\nexport interface ItemField {\n /** The field's unique identifier. */\n id?: string;\n /** The field's key, which the item field endpoints take as fieldKey. */\n key?: string;\n /** The field's display name. */\n label?: string;\n /** The number of assets that hold a value for the field. */\n metadataCount?: number;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n /** The kind of value the field holds. */\n type?: ItemFieldType;\n}\n\nexport interface ItemFieldOrderingUpdateItem {\n /** The ID of the item field to move. */\n fieldId: string;\n /** The field's position within its section, starting at 0. */\n order?: number;\n /** The group the field is shown in, starting at 0. */\n section?: number;\n}\n\n/** The kind of value an item's custom field holds. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ItemFieldType = \"BOOLEAN\" | \"DATE\" | \"DATE_TIME\" | \"INTEGER\" | \"MULTILINE_TEXT\" | \"NUMBER\" | \"TEXT\" | \"TIME\";\n\nexport interface ItemListing {\n /** The page of records. */\n results?: Item[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface ItemPricing {\n /** How often a PERIODIC charge recurs. */\n chargeFrequency?: BillingFrequency | null;\n /** PERIODIC to charge on a recurring cadence, or MILESTONE to charge when a milestone is reached. */\n chargeSchedule?: BillingSchedule | null;\n /** The default price for the whole line, used when pricingMode is FIXED. */\n fixedPrice?: Currency | null;\n /** How often the charges are invoiced. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends. */\n invoiceMode?: BillingTiming | null;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price for the line whatever its quantity. */\n pricingMode?: PricingMode | null;\n /** The default price for each unit, used when pricingMode is PER_UNIT. */\n unitPrice?: Currency | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ItemType = \"marked_bulk\" | \"service\" | \"tracked_device\" | \"unmarked_bulk\";\n\nexport type Location = SparseLocationWithIntegration & {\n /** The number of active projects at the location. */\n activeProjectCount?: number;\n /** The number of assets currently at the location. */\n assetCount?: number;\n /** The number of incomplete projects at the location. */\n incompleteProjectCount?: number;\n /** The number of past projects at the location. */\n pastProjectCount?: number;\n /** The number of upcoming projects at the location. */\n upcomingProjectCount?: number;\n};\n\nexport interface LocationListing {\n /** The page of records. */\n results?: Location[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type LocationType = \"SITE\" | \"ZONE\" | null;\n\nexport interface Metadata {\n errors: Error[] | null;\n /** What the client should know about its request, beside any error. A notice never fails a request. */\n notices?: Notice[];\n /** The identifier to quote when asking Hardfin about this request. */\n requestId: string;\n /** How long the server took to answer. */\n requestTime: string;\n statusCode: number;\n}\n\nexport interface MetadataLocationComponents {\n /** The first line of the street address. */\n addressLine1?: string | null;\n /** The second line of the street address, such as a suite. */\n addressLine2?: string | null;\n /** The city. */\n city?: string | null;\n /** The country. */\n country?: string | null;\n /** The whole address on one line. */\n formattedAddress?: string | null;\n /** The postal or ZIP code. */\n postalCode?: string | null;\n /** The state or region. */\n state?: string | null;\n}\n\nexport interface MetadataLocationSite {\n /** The location's structured address, which is null for a zone. */\n address?: MetadataLocationComponents | null;\n /** Google's place ID for the address, when it was found through Google. */\n googlePlaceId?: string | null;\n /** The location's latitude, sent as a decimal string. */\n latitude?: string | null;\n /** The location's longitude, sent as a decimal string. */\n longitude?: string | null;\n /** The person or business that receives shipments at the location. */\n shippingName?: string | null;\n}\n\nexport interface MetadataMilestonePhaseEntry {\n /** The phase's name, which its charge takes as a label, 255 characters or less. */\n name?: string;\n /** The share of the line item's total the phase bills, from 0 to 100. */\n percentage?: string | null;\n}\n\nexport interface MetadataMilestonePhases {\n /** The phases, in order. */\n entries?: MetadataMilestonePhaseEntry[];\n /** PERCENTAGE, the only way a phase's share is expressed. */\n mode?: string;\n}\n\nexport interface NonNegativeCurrency {\n /** The exact value as a decimal string, which cannot be negative, sent with at most two decimal places. */\n amount?: string;\n /** The value's ISO 4217 currency code. */\n isoCode?: CurrencyCode;\n}\n\nexport interface Notice {\n /** What the notice is about. API_VERSION_OUTDATED means X-API-Version is behind the endpoint's last change. UNKNOWN_FIELD means the request sent a query parameter or body field the endpoint does not read, and it was ignored. Ignore a code that is not recognized. */\n code: string;\n /** The query parameter, or the body field's path, that the endpoint ignored. Sent with UNKNOWN_FIELD only, and left out of the notice that counts the unknown fields past the first 20. */\n field?: string;\n /** The X-API-Version to move to so the notice stops. Sent with API_VERSION_OUTDATED only. */\n latestVersion?: string;\n /** A sentence describing the notice for a person to read. */\n message: string;\n}\n\nexport interface PaymentTerm {\n /** The payment term's identifier. */\n id?: string;\n /** The payment term's key. */\n key?: string;\n /** The payment term's name as people read it. */\n label?: string;\n /** The number of days after the invoice date that payment is due. */\n netDays?: number;\n /** The payment term's machine name. */\n value?: string;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type PricingMode = \"FIXED\" | \"PER_UNIT\";\n\nexport type Project = SparseProject & {\n /** The day the customer accepted the project. */\n acceptanceDate?: string | null;\n /** The workflow the project is on, with the project's current stage marked active, or null when it has no workflow. */\n activeWorkflow?: SparseActiveWorkflow | null;\n /** The project's annual recurring revenue, with one total for each currency its recurring line items are priced in. */\n annualRecurringRevenue?: Currency[];\n /** The billing address the project's invoices use in place of the customer's. */\n billingAddress?: string | null;\n /** The billing contact email the project's invoices use in place of the customer's. */\n billingContactEmail?: string | null;\n /** The billing contact name the project's invoices use in place of the customer's. */\n billingContactName?: string | null;\n /** The billing contact phone number the project's invoices use in place of the customer's. */\n billingContactPhone?: string | null;\n /** The number of charges on the project's line items. */\n chargeCount?: number;\n /** What follows the project for its customer: it was renewed, the customer kept a later-ending project, or nothing followed. */\n completionClassification?: ProjectCompletionClassification;\n /** The day the contract was signed. */\n contractSignedOn?: string | null;\n /** The number of costs recorded against the project. */\n costCount?: number;\n /** The project's single currency and the field that established it, or null when no currency-bearing field is set. */\n currency?: ProjectCurrency | null;\n /** The customer the project is for. */\n customer?: SparseCustomer | null;\n /** The project's default location, which counts among its locations even when no line item names it. */\n defaultLocation?: SparseLocationWithParent | null;\n /** The project's description. */\n description?: string | null;\n /** The discount applied to the project. */\n discount?: Currency | null;\n /** The number of files attached to the project. */\n fileCount?: number;\n /** The day the project goes live. */\n goLiveDate?: string | null;\n /** The day of the installation. */\n installDate?: string | null;\n /** The number of the project's charges that have been invoiced. */\n invoicedChargeCount?: number;\n /** The project's line items, each an item the project sells or provides as a service. */\n items?: ProjectLineItem[];\n /** Every location the project names: the ones its line items ask for, and its default location. */\n locations?: SparseLocationWithParent[];\n /** The memo new invoices for the project carry. */\n memo?: string | null;\n /** The number of notes on the project. */\n noteCount?: number;\n /** The project's payment term. */\n paymentTerm?: PaymentTerm | null;\n /** The project this one renews. */\n previousProject?: SparseProject | null;\n /** Whether the items the project asks for have been fulfilled, judged across all of its line items. */\n projectFulfillmentStatus?: ProjectFulfillmentStatus;\n /** The customer's purchase order number, which new invoices for the project carry. */\n purchaseOrderNumber?: string | null;\n /** The day of the site visit. */\n siteVisitDate?: string | null;\n /** How the project relates to the customer's earlier projects: a renewal of a prior project, new business, or an expansion. */\n startClassification?: ProjectStartClassification;\n /** The number of tickets on the project. */\n ticketCount?: number;\n /** The number of time activities recorded against the project. */\n timeActivityCount?: number;\n /** The contract's total value, as entered on the project. */\n totalContractValue?: Currency | null;\n /** The day of the training. */\n trainingDate?: string | null;\n /** The number of URL links attached to the project. */\n urlLinkCount?: number;\n};\n\nexport interface ProjectChargeRequestItem {\n /** The day the charge is planned to become billable, or null when it has no dates yet. */\n expectedBillableDate?: string | null;\n /** The charge to update, or null to add a new one, and no two charges in the list send the same one. */\n id?: string | null;\n /** True when a person added, edited or split the charge, and false when it follows the line item's billing plan unchanged. */\n isCustomModified?: boolean;\n /** The charge's display name, such as the period it covers or the milestone it follows, which is required and 255 characters or less once the spaces around it are trimmed. */\n label?: string;\n /** PER_UNIT when the charge bills a unit price for each unit, or FIXED when it bills a flat amount. */\n pricingMode?: PricingMode;\n /** The number of units the charge bills, which is at least 1 when unitPrice is sent and 2,147,483,647 or less. */\n quantity?: number;\n /** The charge's position among its line item's charges, in ascending order, which is zero or more and sent by one charge in the list. */\n sequence?: number;\n /** The last day of the period the charge covers, on or after servicePeriodStart. */\n servicePeriodEnd?: string | null;\n /** The first day of the period the charge covers, or null when the charge has no dates yet. */\n servicePeriodStart?: string | null;\n /** The charge's status: PLANNED, BILLABLE, INVOICED or CANCELLED. A charge becomes billable, invoiced or cancelled only through its own actions, so a new charge must be sent as PLANNED and a stored charge may keep its status or go back to PLANNED, which clears its billable and cancellation details. */\n status?: ChargeStatus;\n /** The amount the charge bills, which equals unitPrice times quantity when unitPrice is sent. */\n totalPrice?: NonNegativeCurrency;\n /** TIME when the charge becomes billable on expectedBillableDate, or MANUAL when a person marks it billable, and is TIME when omitted. EVENT is refused. */\n triggerType?: ChargeTriggerType;\n /** The price of one unit, in the currency of totalPrice, and is null on a FIXED charge. */\n unitPrice?: NonNegativeCurrency | null;\n}\n\n/** What follows a project for its customer when it ends. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectCompletionClassification = \"CHURN\" | \"CONTRACTION\" | \"RENEWED\";\n\nexport interface ProjectCurrency {\n /** The ISO 4217 code of the project's currency. */\n isoCode?: CurrencyCode;\n /** What fixed the project's currency: an invoiced charge, the contract value, the line items, or the discount. */\n source?: ProjectCurrencySource;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectCurrencySource = \"DISCOUNT\" | \"INVOICED_CHARGE\" | \"LINE_ITEMS\" | \"PROJECT_VALUE\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectFulfillmentStatus = \"FULFILLED\" | \"OVER_FULFILLED\" | \"PARTIALLY_FULFILLED\" | \"UNFULFILLED\";\n\nexport interface ProjectItemBinding {\n /** The day a periodic line item's charge schedule is anchored on, from 1970-01-01 through 2099-12-31, which defaults to startOn. */\n activationDate?: string | null;\n /** The identifier that makes line items consecutive phases of one commitment when they send the same one, and is assigned when a new line item omits it. */\n aggregationKey?: string;\n /** The line item's single billing cadence, which fills chargeFrequency and invoiceFrequency on a periodic line item that omits them. */\n billingFrequency?: BillingFrequency | null;\n /** How often a periodic line item creates a charge, and is refused unless chargeSchedule is PERIODIC. */\n chargeFrequency?: BillingFrequency | null;\n /** PERIODIC when charges recur at a regular frequency, or MILESTONE when each charge follows a project milestone. */\n chargeSchedule?: BillingSchedule | null;\n /** A free-form note about the line item, 65,536 characters or less. */\n details?: string | null;\n /** The last day of the line item's service window, on or after startOn and no later than 2099-12-31. A line item's dates change only through the project, because the line item update does not take them. */\n endOn?: string | null;\n /** The flat price when pricingMode is FIXED, and is not sent together with unitPrice. */\n fixedPrice?: NonNegativeCurrency | null;\n /** The line item to update, or omitted to add a new one. */\n id?: string | null;\n /** How often a periodic line item's charges are invoiced, which is never more often than chargeFrequency. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends, and is refused unless chargeSchedule is PERIODIC. */\n invoiceMode?: BillingTiming | null;\n /** The catalog item the line item is for. */\n itemId: string;\n /** The location the line item is for. */\n locationId?: string | null;\n /** The named phases of a milestone line item and each one's share of its total. */\n milestonePhases?: MetadataMilestonePhases | null;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price whatever the quantity. */\n pricingMode?: PricingMode | null;\n /** The number of units the line item covers, which is zero or more. */\n quantity?: number;\n /** The first day of the line item's own service window, from 1970-01-01 through 2099-12-31, sent together with endOn on a new line item, while a line item sent with its id may send either alone. A line item's dates change only through the project, because the line item update does not take them. */\n startOn?: string | null;\n /** A negotiated total for a periodic line item that replaces the computed one, in the project's currency. */\n totalOverride?: NonNegativeCurrency | null;\n /** SALE to sell the item, which only a physical item allows, or SERVICE to provide it as a service. */\n transactionType: TransactionType;\n /** The price of one unit for each charge, and is not sent together with fixedPrice. */\n unitPrice?: NonNegativeCurrency | null;\n}\n\nexport interface ProjectLineItem {\n /** The day a periodic line item's charge schedule is anchored on, or null while chargeMode is PENDING and on a milestone line item. */\n activationDate?: string | null;\n /** The identifier shared by line items that are consecutive phases of one commitment, and unique to a line item that stands alone. */\n aggregationKey?: string;\n /** The line item's single billing cadence, which predates chargeFrequency and invoiceFrequency. */\n billingFrequency?: BillingFrequency | null;\n /** How often a periodic line item creates a charge, and is null on a milestone line item. */\n chargeFrequency?: BillingFrequency | null;\n /** CONFIRMED when a periodic line item has an activation date or the line item is a milestone one, or PENDING when a periodic line item's activation date is not yet known. */\n chargeMode?: ChargeMode;\n /** PERIODIC when charges recur at a regular frequency, or MILESTONE when each charge follows a project milestone, and is null until the line item has a billing plan. */\n chargeSchedule?: BillingSchedule | null;\n /** The line item's charges, in sequence order. */\n charges?: Charge[];\n /** A free-form note about the line item. */\n details?: string | null;\n /** The last day of the line item's service window. */\n endOn?: string | null;\n /** The flat price when pricingMode is FIXED: the amount of each charge on a periodic line item, and the total its phases split on a milestone one. */\n fixedPrice?: Currency | null;\n /** True when any of the line item's charges is invoiced, which stops the line item from being removed. */\n hasInvoicedCharges?: boolean;\n /** The line item's unique identifier. */\n id?: string;\n /** How often a periodic line item's charges are invoiced, which is never more often than chargeFrequency. */\n invoiceFrequency?: BillingFrequency | null;\n /** ADVANCE to invoice a period before it starts, or ARREARS to invoice it after it ends, on a periodic line item. */\n invoiceMode?: BillingTiming | null;\n /** The catalog item the line item is for. */\n item?: SparseItem;\n /** The line item's key. */\n key?: string;\n /** The location the line item is for, or null when it has none. */\n location?: SparseLocationWithParent | null;\n /** The named phases of a milestone line item and each one's share of its total, or null on any other line item. */\n milestonePhases?: MetadataMilestonePhases | null;\n /** The line item's position among the line items sharing its aggregationKey, counted from 1 in order of startOn. */\n phaseRowNumber?: number;\n /** PER_UNIT to charge the unit price for each unit, or FIXED to charge the fixed price whatever the quantity, and is null until the line item has a billing plan. */\n pricingMode?: PricingMode | null;\n /** The number of units the line item covers. */\n quantity?: number | null;\n /** The first day of the line item's own service window, or null when it has no dates. */\n startOn?: string | null;\n /** A negotiated total for a periodic line item that replaces the computed one, or null to use the computed total. */\n totalOverride?: Currency | null;\n /** SALE when the item is sold, or SERVICE when it is provided as a service. */\n transactionType?: TransactionType;\n /** The price of one unit for each charge, or null when the line item is priced at a fixed price. */\n unitPrice?: Currency | null;\n}\n\nexport interface ProjectListing {\n /** The page of records. */\n results?: Project[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\n/** How a project relates to the customer's earlier projects when it starts. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStartClassification = \"EXPANSION\" | \"NEW_BUSINESS\" | \"RENEWAL\";\n\n/** Where a project stands against its dates, which is computed and never stored. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStatus = \"ACTIVE\" | \"DATE_RANGE_INCOMPLETE\" | \"PAST\" | \"UPCOMING\";\n\n/** A project status the project list and the fulfillment report filter by. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ProjectStatusFilter = \"ACTIVE\" | \"DATE_RANGE_INCOMPLETE\" | \"PAST\" | \"UPCOMING\";\n\nexport interface PurchaseOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** The carrier the supplier ships the order with, or null when none is named. */\n carrier?: CarrierDetails | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** The supplier's own number for the order, or null when it has none. */\n externalPurchaseOrderNumber?: string | null;\n /** The number of files attached to the order. */\n fileCount?: number;\n /** The location the supplier ships from, or null when none is on record. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The purchase order's unique identifier. */\n id?: string;\n /** The order's lines. */\n items?: PurchaseOrderLineItem[];\n /** The purchase order's key, which the purchase order endpoints take as purchaseOrderKey. */\n key?: string;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When an inbound shipment for the order was last delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When an inbound shipment for the order was last received, or null while none has been. */\n mostRecentReceivedAt?: string | null;\n /** When an inbound shipment for the order last shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** A note about the order, or null. */\n orderNotes?: string | null;\n /** The day the supplier promised the order would arrive, or null when it has not said. */\n promiseDeliveryDate?: string | null;\n /** The day the supplier promised to ship the order, or null when it has not said. */\n promiseShipDate?: string | null;\n /** The number the purchase order is known by, which an inbound shipment names to fill it. */\n purchaseOrderNumber?: string;\n /** Where the order is in its life, by the furthest stage any of its lines has reached on the order's inbound shipments. */\n status?: PurchaseOrderStatus;\n /** The company the items are ordered from. */\n supplier?: SparseCustomer;\n /** The order's receiving by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: PurchaseOrderThirdParty;\n /** The location the order is delivered to. */\n toLocation?: SparseLocationWithIntegration;\n}\n\nexport interface PurchaseOrderItem {\n /** The ID of the physical item the line orders, which may appear on only one line. */\n itemId: string;\n /** How many units of the item to order, which must be greater than 0. */\n requestedQuantity: number;\n}\n\nexport interface PurchaseOrderLineItem {\n /** How many units are on the order's inbound shipments that have been delivered and not yet received. */\n deliveredQuantity?: number;\n /** The line's unique identifier. */\n id?: string;\n /** The item the line orders. */\n item?: SparseItem;\n /** The line's key. */\n key?: string;\n /** How many units are on the order's inbound shipments that have not yet shipped. */\n openQuantity?: number;\n /** How many units have been received on the order's inbound shipments. */\n receivedQuantity?: number;\n /** How many units of the item were ordered. */\n requestedQuantity?: number;\n /** How many units are on the order's inbound shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** The furthest stage the line's units have reached on the order's inbound shipments, and whether fewer, exactly, or more units than were ordered reached it. */\n status?: PurchaseOrderLineItemStatus;\n}\n\n/** The status of a line item on a purchase order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `DELIVERED_FULL` | The ordered units have been delivered | | `DELIVERED_OVERAGE` | More units than were ordered have been delivered | | `DELIVERED_PARTIAL` | Fewer units than were ordered have been delivered | | `DRAFT` | None of the line's units are on a shipment yet | | `OPEN_FULL` | The ordered units are on shipments that have not left | | `OPEN_OVERAGE` | More units than were ordered are on shipments that have not left | | `OPEN_PARTIAL` | Fewer units than were ordered are on shipments that have not left | | `RECEIVED_FULL` | The ordered units have been received | | `RECEIVED_OVERAGE` | More units than were ordered have been received | | `RECEIVED_PARTIAL` | Fewer units than were ordered have been received | | `SHIPPED_FULL` | The ordered units have shipped | | `SHIPPED_OVERAGE` | More units than were ordered have shipped | | `SHIPPED_PARTIAL` | Fewer units than were ordered have shipped | */\nexport type PurchaseOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface PurchaseOrderListing {\n /** The page of records. */\n results?: PurchaseOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface PurchaseOrderResync3PLFilesResult {\n /** How many of those files the 3PL did not accept, which a later resync tries again. */\n failedFiles?: number;\n /** How many of those files the 3PL accepted. */\n successfulFiles?: number;\n /** How many of the order's files the 3PL had not yet received. */\n totalFiles?: number;\n}\n\n/** The status of a purchase order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `AWAITING_3PL` | The order was sent to a third-party logistics provider, which has not yet reported a shipment | | `CANCELLED` | The order was cancelled | | `DELIVERED_FULL` | Every line's ordered units have been delivered | | `DELIVERED_OVERAGE` | Every line's ordered units have been delivered, and some line delivered more than was ordered | | `DELIVERED_PARTIAL` | Units have been delivered, and not every line has been delivered in full | | `DRAFT` | No units are on a shipment yet, and the order can still be edited or cancelled | | `OPEN_FULL` | Every line's ordered units are on shipments that have not left | | `OPEN_OVERAGE` | Every line's ordered units are on shipments that have not left, and some line has more than was ordered | | `OPEN_PARTIAL` | Units are on shipments that have not left, and not every line is there in full | | `RECEIVED_FULL` | Every line's ordered units have been received | | `RECEIVED_OVERAGE` | Every line's ordered units have been received, and some line received more than was ordered | | `RECEIVED_PARTIAL` | Units have been received, and not every line has been received in full | | `SHIPPED_FULL` | Every line's ordered units have shipped | | `SHIPPED_OVERAGE` | Every line's ordered units have shipped, and some line shipped more than was ordered | | `SHIPPED_PARTIAL` | Units have shipped, and not every line has shipped in full | */\nexport type PurchaseOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface PurchaseOrderThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider, which then receives it and keeps it from being edited. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** The condition that stops a resolution the hold's type allows from running. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineResolutionBlockReason = \"SERIAL_ALREADY_TAKEN\";\n\n/** How a user resolved a quarantined serial. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineResolutionKind = \"ACCEPTED_SERIAL\" | \"CORRECTED_SERIAL\" | \"CREATED_ASSET\" | \"KEPT_HARDFIN_ITEM\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type QuarantineType = \"DUPLICATE_ALREADY_EXISTS\" | \"DUPLICATE_IN_ORDER\" | \"MISSING_SERIAL\" | \"SERIAL_PATTERN_MISMATCH\" | \"SKU_TRANSMUTATION\" | \"UNKNOWN_SERIAL\";\n\n/** The item type a request asks an item to become. Accepted in any case. The listed spelling is the one the API sends back. */\nexport type RequestedItemType = \"BULK\" | \"DEVICE\" | \"SERVICE\";\n\nexport interface ReturnOrder {\n /** Why the order was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the order was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** Who cancelled the order, or null while it has not been cancelled. */\n cancelledBy?: SparsePerson | null;\n /** The carrier the items are returned with, or null when none is named. */\n carrier?: CarrierDetails | null;\n /** When the order was created. */\n createdAt?: string;\n /** Who created the order. */\n createdBy?: SparsePerson;\n /** The exchange the order belongs to, or null when it belongs to none. */\n exchangeGroup?: SparseExchangeGroup | null;\n /** The number of files attached to the order. */\n fileCount?: number;\n /** The location the items are returned from, or null when none is on record. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The return order's unique identifier. */\n id?: string;\n /** The order's lines. */\n items?: ReturnOrderOrderItem[];\n /** The return order's key, which the return order endpoints take as returnOrderKey. */\n key?: string;\n /** When the order last changed. */\n lastUpdatedAt?: string;\n /** Who last changed the order. */\n lastUpdatedBy?: SparsePerson;\n /** When a shipment for the order was last delivered, or null while none has been. */\n mostRecentDeliveredAt?: string | null;\n /** When a shipment for the order was last received, or null while none has been. */\n mostRecentReceivedAt?: string | null;\n /** When a shipment for the order last shipped, or null while none has. */\n mostRecentShippedAt?: string | null;\n /** A note about the order, or null. */\n orderNotes?: string | null;\n /** The day the items were promised to arrive, or null when none was promised. */\n promiseDeliveryDate?: string | null;\n /** The day the items were promised to ship, or null when none was promised. */\n promiseShipDate?: string | null;\n /** The number the return order is known by, which a shipment names to fill it. */\n returnOrderNumber?: string;\n /** A description of why the items are coming back, or null when none was given. */\n returnReason?: string | null;\n /** Why the items are coming back. */\n returnType?: ReturnOrderType;\n /** Where the order is in its life, by the furthest stage any of its lines has reached on the order's shipments. */\n status?: ReturnOrderStatus;\n /** The order's receiving by a third-party logistics (3PL) provider and its sync state. */\n thirdParty?: ReturnOrderThirdParty;\n /** The location the items are returned to. */\n toLocation?: SparseLocationWithIntegration;\n}\n\nexport interface ReturnOrderItem {\n /** The ID of the physical item the line returns, which may appear on only one line. */\n itemId: string;\n /** How many units of the item to return, which must be greater than 0. */\n requestedQuantity: number;\n}\n\n/** The status of a line item on a return order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `DELIVERED_FULL` | The requested units have been delivered | | `DELIVERED_OVERAGE` | More units than were requested have been delivered | | `DELIVERED_PARTIAL` | Fewer units than were requested have been delivered | | `DRAFT` | None of the line's units are on a shipment yet | | `OPEN_FULL` | The requested units are on shipments that have not left | | `OPEN_OVERAGE` | More units than were requested are on shipments that have not left | | `OPEN_PARTIAL` | Fewer units than were requested are on shipments that have not left | | `RECEIVED_FULL` | The requested units have been received | | `RECEIVED_OVERAGE` | More units than were requested have been received | | `RECEIVED_PARTIAL` | Fewer units than were requested have been received | | `SHIPPED_FULL` | The requested units have shipped | | `SHIPPED_OVERAGE` | More units than were requested have shipped | | `SHIPPED_PARTIAL` | Fewer units than were requested have shipped | */\nexport type ReturnOrderLineItemStatus = \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface ReturnOrderListing {\n /** The page of records. */\n results?: ReturnOrder[];\n /** The number of records that match the filters, across every page. */\n totalCount?: number;\n}\n\nexport interface ReturnOrderOrderItem {\n /** How many units are on the order's shipments that have been delivered and not yet received. */\n deliveredQuantity?: number;\n /** The line's unique identifier. */\n id?: string;\n /** The item the line returns. */\n item?: SparseItem;\n /** The line's key. */\n key?: string;\n /** How many units are on the order's shipments that have not yet shipped. */\n openQuantity?: number;\n /** How many units have been received on the order's shipments. */\n receivedQuantity?: number;\n /** How many units of the item are to come back. */\n requestedQuantity?: number;\n /** How many units are on the order's shipments that have shipped and not yet been delivered. */\n shippedQuantity?: number;\n /** The furthest stage the line's units have reached on the order's shipments, and whether fewer, exactly, or more units than were requested reached it. */\n status?: ReturnOrderLineItemStatus;\n}\n\nexport interface ReturnOrderResync3PLFilesResult {\n /** How many of those files the 3PL did not accept, which a later resync tries again. */\n failedFiles?: number;\n /** How many of those files the 3PL accepted. */\n successfulFiles?: number;\n /** How many of the order's files the 3PL had not yet received. */\n totalFiles?: number;\n}\n\n/** The status of a return order. Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `AWAITING_3PL` | The order was sent to a third-party logistics provider, which has not yet reported a shipment | | `CANCELLED` | The order was cancelled | | `DELIVERED_FULL` | Every line's requested units have been delivered | | `DELIVERED_OVERAGE` | Every line's requested units have been delivered, and some line delivered more than was requested | | `DELIVERED_PARTIAL` | Units have been delivered, and not every line has been delivered in full | | `DRAFT` | No units are on a shipment yet, and the order can still be edited or cancelled | | `OPEN_FULL` | Every line's requested units are on shipments that have not left | | `OPEN_OVERAGE` | Every line's requested units are on shipments that have not left, and some line has more than was requested | | `OPEN_PARTIAL` | Units are on shipments that have not left, and not every line is there in full | | `RECEIVED_FULL` | Every line's requested units have been received | | `RECEIVED_OVERAGE` | Every line's requested units have been received, and some line received more than was requested | | `RECEIVED_PARTIAL` | Units have been received, and not every line has been received in full | | `SHIPPED_FULL` | Every line's requested units have shipped | | `SHIPPED_OVERAGE` | Every line's requested units have shipped, and some line shipped more than was requested | | `SHIPPED_PARTIAL` | Units have shipped, and not every line has shipped in full | */\nexport type ReturnOrderStatus = \"AWAITING_3PL\" | \"CANCELLED\" | \"DELIVERED_FULL\" | \"DELIVERED_OVERAGE\" | \"DELIVERED_PARTIAL\" | \"DRAFT\" | \"OPEN_FULL\" | \"OPEN_OVERAGE\" | \"OPEN_PARTIAL\" | \"RECEIVED_FULL\" | \"RECEIVED_OVERAGE\" | \"RECEIVED_PARTIAL\" | \"SHIPPED_FULL\" | \"SHIPPED_OVERAGE\" | \"SHIPPED_PARTIAL\";\n\nexport interface ReturnOrderThirdParty {\n /** Whether the last sync with the 3PL provider failed. */\n hasSyncError?: boolean;\n /** Whether the order was sent to a 3PL provider to receive. */\n isEnabled?: boolean;\n /** When Hardfin last checked the order with its 3PL provider, or null when it has never checked. */\n lastSyncedAt?: string | null;\n /** When the 3PL provider last reported a change to the order, or null when it has reported none. */\n lastUpdateAt?: string | null;\n /** Why the last sync with the 3PL provider failed, or null when it did not. */\n syncErrorMessage?: string | null;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ReturnOrderType = \"CUSTOMER_CANCELLATION\" | \"DAMAGED\" | \"DEFECTIVE\" | \"END_OF_SERVICE\" | \"INCORRECT_SPEC\" | \"NOT_NEEDED\" | \"OTHER\" | \"PROVISIONING\" | \"UPGRADE\" | \"WRONG_ITEM\";\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type ScrappedState = \"all\" | \"false\" | \"true\";\n\nexport interface SharedBool {\n /** Whether the operation completed. */\n success?: boolean;\n}\n\nexport interface SharedIntegration {\n /** The Hardfin error code of the failed sync, or null when the sync did not fail. */\n errorCode?: number | null;\n /** The integrated system, such as SFDC or HUBSPOT. */\n id?: IntegrationID;\n /** Whether the last sync with the external system failed. */\n inError?: boolean;\n /** Whether a sync with the external system is pending. */\n isSyncing?: boolean;\n /** The system's display name. */\n label?: string;\n /** A URL to the linked record in the external system. */\n link?: string | null;\n /** Whether the record differs from the external system and needs a person to review it. */\n needsReview?: boolean;\n /** The kind of system, CRM or ERP. */\n type?: IntegrationCategory;\n}\n\nexport interface Shipment {\n /** Why the shipment was cancelled, or null while it has not been. */\n cancellationReason?: string | null;\n /** When the shipment was cancelled, or null while it has not been. */\n cancelledAt?: string | null;\n /** The ID of the user who cancelled the shipment, or null while it has not been cancelled. */\n cancelledBy?: string | null;\n /** Who carries the shipment, or null when no carrier is named. */\n carrier?: CarrierDetails | null;\n /** When the shipment was created. */\n createdAt?: string;\n /** Who created the shipment. */\n createdBy?: SparsePerson;\n /** How long the shipment spent in each stage. */\n cycleTime?: ShipmentCycleTime;\n /** When the shipment arrived, or null while it has not. */\n deliveredAt?: string | null;\n /** The IANA time zone deliveredAt was recorded in, or null when none was recorded. */\n deliveredAtTimezone?: string | null;\n /** The note written when the shipment was delivered, or null. */\n deliveryNote?: string | null;\n /** The sum of the lines' estimated values, or null when no line has an estimate. */\n estimatedTotalValue?: string | null;\n /** When the carrier now expects to deliver, or null when it says nothing. */\n eta?: string | null;\n /** The day the shipment is expected to arrive, or null when no one has said. */\n expectedDeliveredOn?: string | null;\n /** The day the shipment is expected to leave, or null when no one has said. */\n expectedShippedOn?: string | null;\n /** Where the shipment leaves from, or null when an inbound shipment names no origin. */\n fromLocation?: SparseLocationWithIntegration | null;\n /** The fulfillment order an outbound shipment fills, or null when it fills none. */\n fulfillmentOrder?: SparseFulfillment | null;\n /** The shipment's unique identifier. */\n id?: string;\n /** The shipment's line items. */\n items?: ShipmentLineItem[];\n /** The shipment's key, which the shipment endpoints take as shipmentKey. */\n key?: string;\n /** The purchase order an inbound shipment fills, or null when it fills none. */\n purchaseOrder?: SparsePurchaseOrder | null;\n /** The note written when the shipment was received, or null. */\n receiptNote?: string | null;\n /** When an inbound shipment's items were received, or null while they have not been. */\n receivedAt?: string | null;\n /** The IANA time zone receivedAt was recorded in, or null when none was recorded. */\n receivedAtTimezone?: string | null;\n /** The return order an inbound shipment fills, or null when it fills none. */\n returnOrder?: SparseReturnOrder | null;\n /** The carrier's service the shipment travels on, or null when the carrier names none. */\n serviceLevelName?: string | null;\n /** The note written about the shipment itself, or null. */\n shipmentNote?: string | null;\n /** The number the shipment is known by. */\n shipmentNumber?: string;\n /** Whether the shipment is INBOUND to the organization or OUTBOUND from it. */\n shipmentType?: ShipmentType | null;\n /** When the shipment left, or null while it has not. */\n shippedAt?: string | null;\n /** The IANA time zone shippedAt was recorded in, or null when none was recorded. */\n shippedAtTimezone?: string | null;\n /** What the shipment cost to send, or null when no cost is recorded. */\n shippingCost?: Currency | null;\n /** Where the shipment is in its life: OPEN, SHIPPED, DELIVERED, RECEIVED or CANCELLED. */\n status?: ShipmentStatus;\n /** Whether a third-party provider holds the shipment, which refuses API calls that ship, receive, or cancel it or change its line items. */\n thirdPartyBound?: boolean;\n /** How many days the shipment has held its status, or null once it is received, cancelled, or an outbound shipment is delivered. */\n timeInStatusDays?: string | null;\n /** Where the shipment is going. */\n toLocation?: SparseLocationWithIntegration;\n /** What the shipment's assets were worth when an outbound shipment shipped or an inbound one was received, or null before then or when it has none to value. */\n totalValue?: string | null;\n}\n\nexport interface ShipmentCycleTime {\n /** The days from the shipment's creation to its ship time, or null while it has not shipped. */\n createdToShippedDays?: string | null;\n /** The days from the shipment's ship time to its delivery, or null while it has not been delivered. */\n shippedToDeliveredDays?: string | null;\n}\n\nexport interface ShipmentItem {\n /** The line's identifier in another system, or null when it has none. */\n externalReference?: string | null;\n /** The ID of the item the line carries. */\n itemId: string;\n /** How many units the line ships, which creating an outbound shipment requires above 0 and an inbound shipment may leave null. */\n quantity?: number | null;\n /** The serial numbers of the units, for an item that is tracked by serial, which only marking the shipment as shipped records. */\n serials?: string[];\n}\n\nexport interface ShipmentLineItem {\n /** What the line was estimated to be worth while the shipment was open, or null when no estimate was made. */\n estimatedValue?: string | null;\n /** The line's identifier in the system that reported it, or null when it has none. */\n externalReference?: string | null;\n /** The item the line carries. */\n item?: SparseItem;\n /** The number of the line's pending serial numbers, counted in the shipment list too. */\n pendingSerialCount?: number;\n /** The serial numbers a third-party provider has reported but not yet confirmed as shipped, which is empty in the shipment list. */\n pendingSerials?: string[];\n /** How many units the line ships, or null when the line was added without one. */\n quantity?: number | null;\n /** How many units arrived, or null until an inbound shipment is received. */\n receivedQuantity?: number | null;\n /** The number of the line's serial numbers, counted in the shipment list too. */\n serialCount?: number;\n /** The serial numbers of the line's units, which is empty for an item that is not tracked by serial and in the shipment list. */\n serials?: string[];\n /** What the line's assets were worth when an outbound shipment shipped or an inbound one was received, or null before then or when it has none to value. */\n value?: string | null;\n}\n\nexport interface ShipmentListing {\n /** The shipments on the page. */\n results?: Shipment[];\n /** The number of shipments the filters match, across every page. */\n totalCount?: number;\n}\n\nexport interface ShipmentReceiveItem {\n /** The line's identifier in another system, or null when it has none. */\n externalReference?: string | null;\n /** The ID of the item that arrived, which may be named once. */\n itemId?: string;\n /** How many units arrived, which is required and may be 0 for a line that did not arrive. */\n quantity?: number | null;\n /** The serial numbers of the units that arrived, for an item that is tracked by serial. */\n serials?: string[];\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ShipmentStatus = \"CANCELLED\" | \"DELIVERED\" | \"OPEN\" | \"RECEIVED\" | \"SHIPPED\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type ShipmentType = \"INBOUND\" | \"OUTBOUND\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type SortOrder = \"ASC\" | \"DESC\";\n\nexport interface SparseActiveWorkflow {\n /** The workflow's unique identifier. */\n id?: string;\n /** The workflow's key. */\n key?: string;\n /** The workflow's display name. */\n name?: string;\n /** The workflow's stages. */\n stages?: SparseWorkflowStage[];\n}\n\nexport interface SparseAsset {\n /** Whether the asset works, is broken, awaits review, or has been scrapped. */\n functionalStatus?: AssetFunctionalStatus;\n /** The asset's unique identifier. */\n id?: string;\n /** The day the asset entered inventory. */\n inInventoryDate?: string;\n /** Whether the asset is archived. */\n isArchived?: boolean;\n /** Whether the asset has shipped and not yet been delivered. */\n isInTransit?: boolean;\n /** The catalog item the asset is a unit of. */\n item?: SparseItem;\n /** The asset's key, which the asset endpoints take as assetKey. */\n key?: string;\n /** The asset's serial number, unique within your organization. */\n serial?: string;\n}\n\nexport interface SparseContact {\n /** A note about the contact, or null. */\n comments?: string | null;\n /** When the contact was created. */\n createdAt?: string;\n /** The customer the contact works for. */\n customer?: SparseCustomer;\n /** The contact's email address, or null. */\n email?: string | null;\n /** The contact's first name. */\n firstName?: string;\n /** The contact's unique identifier. */\n id?: string;\n /** Whether the contact is archived. */\n isArchived?: boolean;\n /** The contact's key. */\n key?: string;\n /** The contact's last name. */\n lastName?: string;\n /** The contact's phone number, or null. */\n phone?: string | null;\n /** The contact's job title, or null. */\n title?: string | null;\n /** When the contact last changed. */\n updatedAt?: string;\n}\n\nexport interface SparseCustomer {\n /** The customer's unique identifier. */\n id?: string;\n /** Whether the customer is archived. */\n isArchived?: boolean;\n /** Whether the company is a customer. */\n isCustomer?: boolean;\n /** Whether the company is a supplier. */\n isSupplier?: boolean;\n /** The customer's key, which the customer endpoints take as customerKey. */\n key?: string;\n /** The customer's display name. */\n name?: string;\n}\n\nexport interface SparseExchangeGroup {\n /** The number the exchange is known by. */\n exchangeNumber?: string;\n /** The fulfillment orders that send replacement units. */\n fulfillmentOrders?: SparseExchangeGroupFulfillment[];\n /** The exchange's unique identifier. */\n id?: string;\n /** The exchange's key. */\n key?: string;\n /** The return orders that bring units back. */\n returnOrders?: SparseExchangeGroupReturnOrder[];\n /** Where the exchange stands: DRAFT, IN_PROGRESS, COMPLETE or CANCELLED. */\n status?: ExchangeGroupStatus;\n}\n\nexport interface SparseExchangeGroupFulfillment {\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** The fulfillment order's key. */\n key?: string;\n}\n\nexport interface SparseExchangeGroupReturnOrder {\n /** The return order's unique identifier. */\n id?: string;\n /** The return order's key. */\n key?: string;\n /** The number the return order is known by. */\n returnOrderNumber?: string;\n}\n\nexport interface SparseFulfillment {\n /** The number the fulfillment order is known by. */\n fulfillmentOrderNumber?: string;\n /** The fulfillment order's unique identifier. */\n id?: string;\n /** Whether a third-party provider fulfills the order. */\n isThirdPartyFulfilled?: boolean;\n /** The fulfillment order's key. */\n key?: string;\n}\n\nexport interface SparseItem {\n /** Whether each unit of the item is tracked as its own asset, which is true for a DEVICE item. */\n hasAssets?: boolean;\n /** The item's unique identifier. */\n id?: string;\n /** Whether the item is archived. */\n isArchived?: boolean;\n /** Whether the item is physical, which is true for DEVICE and BULK items. */\n isPhysical?: boolean;\n /** The item's key, which the item endpoints take as itemKey. */\n key?: string;\n /** The item's display name. */\n name?: string;\n /** Whether the item's units carry serial numbers, which is true for a DEVICE item and for a BULK item that accepts serials. */\n shouldRenderSerialFields?: boolean;\n /** The item's stock keeping unit, unique within your organization in any case. */\n sku?: string;\n /** SERVICE for a non-physical item, DEVICE for a physical item tracked by serial number, or BULK for a part tracked by quantity. */\n type?: FrontendItemType;\n /** The unit the item's quantities are counted in. */\n unitOfMeasure?: UnitOfMeasure;\n}\n\nexport type SparseLocation = MetadataLocationSite & {\n /** The number of archived zones at a site. */\n archivedZoneCount?: number;\n /** The customer a zone is designated for, such as for reservations, provisioning or a 3PL. */\n consignee?: SparseCustomer | null;\n /** The customer the location is assigned to, which a zone reads from its parent site, or null for your organization's own locations. */\n customer?: SparseCustomer | null;\n /** A free-form description of a zone. */\n description?: string | null;\n /** The location's unique identifier. */\n id?: string;\n /** Whether Google resolved the site's address, which is always false for a zone. */\n isAddressGeocoded?: boolean;\n /** Whether the location is archived. */\n isArchived?: boolean;\n /** Whether assets at the location count as inventory for reporting. */\n isInventory?: boolean;\n /** Whether a zone sets its own isInventory rather than inheriting its parent site's. */\n isInventoryOverride?: boolean;\n /** Whether a third-party logistics (3PL) provider fulfills orders from the location. */\n isThirdPartyEnabled?: boolean;\n /** Whether assets make only occasional or temporary stops at the location, which hides it from location lists by default. */\n isTransient?: boolean;\n /** The location's key, which the location endpoints take as locationKey. */\n key?: string;\n /** The location's display name. */\n name?: string;\n /** The 3PL provider's identifier for the location. */\n thirdPartyIdentifier?: string | null;\n /** SITE for a site, or ZONE for a zone within a site. */\n type?: LocationType;\n /** The number of zones at a site. */\n zoneCount?: number;\n /** The site's zones. */\n zones?: SparseZone[];\n};\n\nexport type SparseLocationWithIntegration = SparseLocationWithParent & {\n /** The location's links to integrated systems. */\n integrations?: SharedIntegration[];\n};\n\nexport type SparseLocationWithParent = SparseLocation & {\n /** The site a zone belongs to, or null for a site. */\n parentLocation?: SparseLocation | null;\n};\n\nexport interface SparseOrganization {\n /** The organization's ID */\n id?: string;\n /** The public identifier that can be used in URLs */\n key?: string;\n /** The name of the organization */\n name?: string;\n}\n\nexport interface SparsePerson {\n /** The person's first name. */\n firstName?: string | null;\n /** The person's unique identifier. */\n id?: string;\n /** The person's key. */\n key?: string;\n /** The person's last name. */\n lastName?: string | null;\n}\n\nexport interface SparseProject {\n /** The customer the project is for. */\n customer?: SparseCustomer | null;\n /** The day the project ends. */\n endOn?: string | null;\n /** The project's unique identifier. */\n id?: string;\n /** The project's links to integrated systems. */\n integrations?: SharedIntegration[];\n /** Whether the project is archived. */\n isArchived?: boolean;\n /** The project's key. */\n key?: string;\n /** The project's display name. */\n name?: string;\n /** The name of the project's payment term. */\n paymentTermLabel?: string | null;\n /** The customer's purchase order number, which new invoices for the project carry. */\n purchaseOrderNumber?: string | null;\n /** The day the project starts. */\n startOn?: string | null;\n /** Whether the project is upcoming, active, or past, judged from its dates. */\n status?: ProjectStatus;\n}\n\nexport interface SparsePurchaseOrder {\n /** The supplier's own number for the purchase order, or null when it has none. */\n externalPurchaseOrderNumber?: string | null;\n /** The purchase order's unique identifier. */\n id?: string;\n /** The purchase order's key. */\n key?: string;\n /** The number the purchase order is known by. */\n purchaseOrderNumber?: string;\n}\n\nexport interface SparseReturnOrder {\n /** The return order's unique identifier. */\n id?: string;\n /** The return order's key. */\n key?: string;\n /** The number the return order is known by. */\n returnOrderNumber?: string;\n}\n\nexport interface SparseShipment {\n /** When the shipment arrived, or null while it has not. */\n deliveredAt?: string | null;\n /** The shipment's unique identifier. */\n id?: string;\n /** The shipment's key. */\n key?: string;\n /** The number the shipment is known by. */\n shipmentNumber?: string;\n /** What kind of movement the shipment carries. */\n shipmentType?: string;\n /** When the shipment left, or null while it has not. */\n shippedAt?: string | null;\n}\n\nexport interface SparseWorkflowStage {\n /** True when the stage is the project's current stage. */\n active?: boolean;\n /** The stage's unique identifier. */\n id?: string;\n /** The stage's key. */\n key?: string;\n /** The stage's display name. */\n name?: string;\n /** The stage's position in its workflow. */\n order?: number;\n}\n\nexport interface SparseZone {\n /** The number of assets in the zone. */\n assetCount?: number;\n /** The customer the zone is designated for, such as for reservations, provisioning or a 3PL. */\n consignee?: SparseCustomer | null;\n /** A free-form description of the zone. */\n description?: string | null;\n /** The zone's unique identifier. */\n id?: string;\n /** Whether the zone is archived. */\n isArchived?: boolean;\n /** Whether assets in the zone count as inventory for reporting. */\n isInventory?: boolean;\n /** The zone's key. */\n key?: string;\n /** The zone's display name, unique within its site. */\n name?: string;\n}\n\nexport interface Token {\n /** When the API key was created, the application was connected, or the person signed in. */\n createdAt?: string;\n /** When the access token or session expires, or null for an API key, which does not. */\n expiresAt?: string | null;\n /** The API key's public identifier or the application's client_id, or null for a session. */\n identifier?: string | null;\n /** The API key's label or the application's name, or null when there is none. */\n label?: string | null;\n /** When the API key was last regenerated or the access token was issued, or null for a session. */\n lastRegeneratedAt?: string | null;\n /** The organization the credential acts in. */\n organization?: SparseOrganization;\n /** The person the credential acts for. */\n person?: SparsePerson;\n /** What the credential may do, within the person's own permissions. */\n scopes?: string[];\n /** The kind of credential. */\n type?: CredentialType;\n}\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type TransactionType = \"SALE\" | \"SERVICE\";\n\n/** Accepted in any case, and also as t, f, 1, 0, or 2 for all. The listed spelling is the one the API sends back. */\nexport type TransientState = \"all\" | \"false\" | \"true\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type TransitStatus = \"IN_TRANSIT\" | \"IN_TRANSIT_TO_FIELD\" | \"IN_TRANSIT_TO_INVENTORY\" | \"NOT_IN_TRANSIT\";\n\nexport interface URLLink {\n /** When the link was created. */\n createdAt?: string;\n /** The URL link's unique identifier. */\n id?: string;\n /** The URL link's key, which the URL link endpoints take as linkKey. */\n key?: string;\n /** The link's display name, or null when the link shows its address instead. */\n name?: string | null;\n /** When the link was last changed. */\n updatedAt?: string;\n /** The address the link points to. */\n url?: string;\n}\n\n/** The unit a quantity is counted in, sent as its UNECE Recommendation 20 code. A request may also name the unit or give its symbol, such as each or kg. See: https://unece.org/trade/uncefact/cl-recommendations Accepted in any case. The listed spelling is the one the API sends back. | Value | Description | | --- | --- | | `BG` | Bag | | `BO` | Bottle | | `BX` | Box | | `C62` | Unit | | `CMK` | Square centimeter (cm2) | | `CMT` | Centimeter (cm) | | `CR` | Crate | | `CS` | Case | | `CT` | Carton | | `DMQ` | Cubic decimeter (dm3) | | `DR` | Drum | | `DZN` | Dozen (doz) | | `EA` | Each (ea) | | `EN` | Envelope | | `FOT` | Foot (ft) | | `FTK` | Square foot (ft2) | | `FTQ` | Cubic foot (ft3) | | `GLL` | Gallon (gal) | | `GRM` | Gram (g) | | `GRO` | Gross | | `H87` | Piece (pc) | | `INH` | Inch (in) | | `INK` | Square inch (in2) | | `INQ` | Cubic inch (in3) | | `KGM` | Kilogram (kg) | | `KMT` | Kilometer (km) | | `KT` | Kit | | `LBR` | Pound (lb) | | `LO` | Lot | | `LTR` | Liter (L) | | `MGM` | Milligram (mg) | | `MLT` | Milliliter (mL) | | `MMK` | Square millimeter (mm2) | | `MMT` | Millimeter (mm) | | `MTK` | Square meter (m2) | | `MTQ` | Cubic meter (m3) | | `MTR` | Meter (m) | | `ONZ` | Ounce (oz) | | `OZA` | Fluid ounce (fl oz) | | `PK` | Pack | | `PR` | Pair (pr) | | `PTI` | Pint (pt) | | `PX` | Pallet | | `QTI` | Quart (qt) | | `RL` | Reel | | `RO` | Roll | | `SET` | Set | | `SMI` | Mile (mi) | | `ST` | Sheet | | `STN` | Ton US (NT) | | `SV` | Skid | | `TNE` | Tonne metric (t) | | `TU` | Tube | | `YDK` | Square yard (yd2) | | `YDQ` | Cubic yard (yd3) | | `YRD` | Yard (yd) | */\nexport type UnitOfMeasure = \"BG\" | \"BO\" | \"BX\" | \"C62\" | \"CMK\" | \"CMT\" | \"CR\" | \"CS\" | \"CT\" | \"DMQ\" | \"DR\" | \"DZN\" | \"EA\" | \"EN\" | \"FOT\" | \"FTK\" | \"FTQ\" | \"GLL\" | \"GRM\" | \"GRO\" | \"H87\" | \"INH\" | \"INK\" | \"INQ\" | \"KGM\" | \"KMT\" | \"KT\" | \"LBR\" | \"LO\" | \"LTR\" | \"MGM\" | \"MLT\" | \"MMK\" | \"MMT\" | \"MTK\" | \"MTQ\" | \"MTR\" | \"ONZ\" | \"OZA\" | \"PK\" | \"PR\" | \"PTI\" | \"PX\" | \"QTI\" | \"RL\" | \"RO\" | \"SET\" | \"SMI\" | \"ST\" | \"STN\" | \"SV\" | \"TNE\" | \"TU\" | \"YDK\" | \"YDQ\" | \"YRD\";\n\n/** Accepted in any case. The listed spelling is the one the API sends back. */\nexport type UsefulLifeRevisionReason = \"CHANGE_IN_USE\" | \"DAMAGE\" | \"OBSOLESCENCE\" | \"OTHER\" | \"REASSESSMENT\" | \"REFURBISHMENT\" | \"REGULATORY\";\n\nexport interface Workflow {\n /** When the workflow was created. */\n createdAt?: string;\n /** The workflow's identifier. */\n id?: string;\n /** Whether this is the organization's default workflow. At most one workflow is the default. */\n isDefault?: boolean;\n /** The workflow's key. */\n key?: string;\n /** The workflow's name. */\n name?: string;\n /** The stages a project on this workflow moves through, in order. */\n stages?: WorkflowStage[];\n /** When the workflow was last changed. */\n updatedAt?: string;\n}\n\nexport interface WorkflowStage {\n /** When the stage was created. */\n createdAt?: string;\n /** The stage's identifier. */\n id?: string;\n /** The number of projects on the stage. */\n inUseCount?: number;\n /** The stage's key. */\n key?: string;\n /** The stage's name. */\n name?: string;\n /** The stage's position in its workflow. A lower value comes first. */\n orderIndex?: number;\n /** When the stage was last changed. */\n updatedAt?: string;\n}\n";
2933
2933
  //#endregion
2934
2934
  //#region src/command/types.ts
2935
2935
  const typesCommand = defineCommand({
@@ -4726,7 +4726,7 @@ const surfaceCommands = [
4726
4726
  {
4727
4727
  name: "with-functional-statuses",
4728
4728
  queryName: "withFunctionalStatuses",
4729
- description: "The functional statuses to list, where SCRAPPED lists scrapped assets",
4729
+ description: "The functional statuses to list, where SCRAPPED lists scrapped assets only when scrapped is true or all, since scrapped defaults to false",
4730
4730
  valueName: "value",
4731
4731
  repeatable: true,
4732
4732
  schema: z.array(toEnum([
@@ -4840,7 +4840,7 @@ const surfaceCommands = [
4840
4840
  {
4841
4841
  name: "allocated-indirect-value",
4842
4842
  jsonPath: ["allocatedIndirect", "amount"],
4843
- description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --allocated-indirect-iso-code",
4843
+ description: "One unit's share of overhead, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --allocated-indirect-iso-code",
4844
4844
  valueName: "value",
4845
4845
  together: ["allocated-indirect-iso-code"],
4846
4846
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -4869,7 +4869,7 @@ const surfaceCommands = [
4869
4869
  {
4870
4870
  name: "bill-of-materials-value",
4871
4871
  jsonPath: ["billOfMaterials", "amount"],
4872
- description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --bill-of-materials-iso-code",
4872
+ description: "The parts cost of one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --bill-of-materials-iso-code",
4873
4873
  valueName: "value",
4874
4874
  together: ["bill-of-materials-iso-code"],
4875
4875
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -4931,7 +4931,7 @@ const surfaceCommands = [
4931
4931
  {
4932
4932
  name: "direct-labor-value",
4933
4933
  jsonPath: ["directLabor", "amount"],
4934
- description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --direct-labor-iso-code",
4934
+ description: "The labor cost to build one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --direct-labor-iso-code",
4935
4935
  valueName: "value",
4936
4936
  together: ["direct-labor-iso-code"],
4937
4937
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -4960,7 +4960,7 @@ const surfaceCommands = [
4960
4960
  {
4961
4961
  name: "freight-inbound-value",
4962
4962
  jsonPath: ["freightInbound", "amount"],
4963
- description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-inbound-iso-code",
4963
+ description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-inbound-iso-code",
4964
4964
  valueName: "value",
4965
4965
  together: ["freight-inbound-iso-code"],
4966
4966
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -4989,7 +4989,7 @@ const surfaceCommands = [
4989
4989
  {
4990
4990
  name: "freight-outbound-value",
4991
4991
  jsonPath: ["freightOutbound", "amount"],
4992
- description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-outbound-iso-code",
4992
+ description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-outbound-iso-code",
4993
4993
  valueName: "value",
4994
4994
  together: ["freight-outbound-iso-code"],
4995
4995
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5031,7 +5031,7 @@ const surfaceCommands = [
5031
5031
  {
5032
5032
  name: "in-service-date",
5033
5033
  jsonPath: ["inServiceDate"],
5034
- description: "The day the asset was put into service, which Hardfin sets itself when absent",
5034
+ description: "The day the asset was put into service, from 1970-01-01 through 2099-12-31, which Hardfin sets itself when absent",
5035
5035
  valueName: "value",
5036
5036
  nullable: true,
5037
5037
  schema: z.string()
@@ -5047,7 +5047,7 @@ const surfaceCommands = [
5047
5047
  {
5048
5048
  name: "installation-value",
5049
5049
  jsonPath: ["installation", "amount"],
5050
- description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --installation-iso-code",
5050
+ description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --installation-iso-code",
5051
5051
  valueName: "value",
5052
5052
  together: ["installation-iso-code"],
5053
5053
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5076,7 +5076,7 @@ const surfaceCommands = [
5076
5076
  {
5077
5077
  name: "interest-value",
5078
5078
  jsonPath: ["interest", "amount"],
5079
- description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --interest-iso-code",
5079
+ description: "The financing cost of one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --interest-iso-code",
5080
5080
  valueName: "value",
5081
5081
  together: ["interest-iso-code"],
5082
5082
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5121,7 +5121,7 @@ const surfaceCommands = [
5121
5121
  {
5122
5122
  name: "salvage-value-value",
5123
5123
  jsonPath: ["salvageValue", "amount"],
5124
- description: "The value one unit keeps at the end of its useful life, taken from the item when omitted and the item's accounting currency is the asset's: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --salvage-value-iso-code",
5124
+ description: "The value one unit keeps at the end of its useful life, taken from the item when omitted and the item's accounting currency is the asset's: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --salvage-value-iso-code",
5125
5125
  valueName: "value",
5126
5126
  together: ["salvage-value-iso-code"],
5127
5127
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5142,7 +5142,7 @@ const surfaceCommands = [
5142
5142
  {
5143
5143
  name: "serial",
5144
5144
  jsonPath: ["serial"],
5145
- description: "The asset's serial number, unique within its item",
5145
+ description: "The asset's serial number, unique within your organization",
5146
5146
  valueName: "value",
5147
5147
  required: true,
5148
5148
  schema: z.string()
@@ -5158,7 +5158,7 @@ const surfaceCommands = [
5158
5158
  {
5159
5159
  name: "simple-cost-basis-value",
5160
5160
  jsonPath: ["simpleCostBasis", "amount"],
5161
- description: "A single cost for one unit, which cannot be sent together with the cost components, and whose cluster is taken from the item when every cost field is omitted and the item's accounting currency is the asset's: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --simple-cost-basis-iso-code",
5161
+ description: "A single cost for one unit, which cannot be sent together with the cost components, and whose cluster is taken from the item when every cost field is omitted and the item's accounting currency is the asset's: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --simple-cost-basis-iso-code",
5162
5162
  valueName: "value",
5163
5163
  together: ["simple-cost-basis-iso-code"],
5164
5164
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5187,7 +5187,7 @@ const surfaceCommands = [
5187
5187
  {
5188
5188
  name: "tariffs-value",
5189
5189
  jsonPath: ["tariffs", "amount"],
5190
- description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tariffs-iso-code",
5190
+ description: "The import duty paid on one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tariffs-iso-code",
5191
5191
  valueName: "value",
5192
5192
  together: ["tariffs-iso-code"],
5193
5193
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5216,7 +5216,7 @@ const surfaceCommands = [
5216
5216
  {
5217
5217
  name: "tax-value",
5218
5218
  jsonPath: ["tax", "amount"],
5219
- description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tax-iso-code",
5219
+ description: "The tax paid on one unit, a cost component: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tax-iso-code",
5220
5220
  valueName: "value",
5221
5221
  together: ["tax-iso-code"],
5222
5222
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5531,7 +5531,7 @@ const surfaceCommands = [
5531
5531
  {
5532
5532
  name: "allocated-indirect",
5533
5533
  jsonPath: ["allocatedIndirect"],
5534
- description: "One unit's share of overhead, a cost component. Takes only null, which clears it",
5534
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5535
5535
  valueName: "null",
5536
5536
  nullable: true,
5537
5537
  schema: z.null()
@@ -5539,7 +5539,7 @@ const surfaceCommands = [
5539
5539
  {
5540
5540
  name: "allocated-indirect-value",
5541
5541
  jsonPath: ["allocatedIndirect", "amount"],
5542
- description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --allocated-indirect-iso-code",
5542
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --allocated-indirect-iso-code",
5543
5543
  valueName: "value",
5544
5544
  together: ["allocated-indirect-iso-code"],
5545
5545
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5547,7 +5547,7 @@ const surfaceCommands = [
5547
5547
  {
5548
5548
  name: "allocated-indirect-iso-code",
5549
5549
  jsonPath: ["allocatedIndirect", "isoCode"],
5550
- description: "One unit's share of overhead, a cost component: the value's ISO 4217 currency code, given with --allocated-indirect-value",
5550
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --allocated-indirect-value",
5551
5551
  valueName: "value",
5552
5552
  together: ["allocated-indirect-value"],
5553
5553
  schema: toEnum([
@@ -5560,7 +5560,7 @@ const surfaceCommands = [
5560
5560
  {
5561
5561
  name: "bill-of-materials",
5562
5562
  jsonPath: ["billOfMaterials"],
5563
- description: "The parts cost of one unit, a cost component. Takes only null, which clears it",
5563
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5564
5564
  valueName: "null",
5565
5565
  nullable: true,
5566
5566
  schema: z.null()
@@ -5568,7 +5568,7 @@ const surfaceCommands = [
5568
5568
  {
5569
5569
  name: "bill-of-materials-value",
5570
5570
  jsonPath: ["billOfMaterials", "amount"],
5571
- description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --bill-of-materials-iso-code",
5571
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --bill-of-materials-iso-code",
5572
5572
  valueName: "value",
5573
5573
  together: ["bill-of-materials-iso-code"],
5574
5574
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5576,7 +5576,7 @@ const surfaceCommands = [
5576
5576
  {
5577
5577
  name: "bill-of-materials-iso-code",
5578
5578
  jsonPath: ["billOfMaterials", "isoCode"],
5579
- description: "The parts cost of one unit, a cost component: the value's ISO 4217 currency code, given with --bill-of-materials-value",
5579
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --bill-of-materials-value",
5580
5580
  valueName: "value",
5581
5581
  together: ["bill-of-materials-value"],
5582
5582
  schema: toEnum([
@@ -5589,7 +5589,7 @@ const surfaceCommands = [
5589
5589
  {
5590
5590
  name: "cost-currency-code",
5591
5591
  jsonPath: ["costCurrencyCode"],
5592
- description: "The ISO 4217 code every cost amount is denominated in, which must match the amounts sent and cannot be null. It is the only way to change the currency. A change keeps the held amounts and relabels them without conversion, and an asset whose currency is locked refuses it",
5592
+ description: "The ISO 4217 code every cost amount is denominated in, which must match the amounts sent and cannot be null. It is the only way to change the currency. A change keeps the held amounts and relabels them without conversion, and on an asset whose currency is locked it is refused",
5593
5593
  valueName: "value",
5594
5594
  schema: toEnum([
5595
5595
  "CAD",
@@ -5614,7 +5614,7 @@ const surfaceCommands = [
5614
5614
  {
5615
5615
  name: "direct-labor",
5616
5616
  jsonPath: ["directLabor"],
5617
- description: "The labor cost to build one unit, a cost component. Takes only null, which clears it",
5617
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5618
5618
  valueName: "null",
5619
5619
  nullable: true,
5620
5620
  schema: z.null()
@@ -5622,7 +5622,7 @@ const surfaceCommands = [
5622
5622
  {
5623
5623
  name: "direct-labor-value",
5624
5624
  jsonPath: ["directLabor", "amount"],
5625
- description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --direct-labor-iso-code",
5625
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --direct-labor-iso-code",
5626
5626
  valueName: "value",
5627
5627
  together: ["direct-labor-iso-code"],
5628
5628
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5630,7 +5630,7 @@ const surfaceCommands = [
5630
5630
  {
5631
5631
  name: "direct-labor-iso-code",
5632
5632
  jsonPath: ["directLabor", "isoCode"],
5633
- description: "The labor cost to build one unit, a cost component: the value's ISO 4217 currency code, given with --direct-labor-value",
5633
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --direct-labor-value",
5634
5634
  valueName: "value",
5635
5635
  together: ["direct-labor-value"],
5636
5636
  schema: toEnum([
@@ -5643,7 +5643,7 @@ const surfaceCommands = [
5643
5643
  {
5644
5644
  name: "freight-inbound",
5645
5645
  jsonPath: ["freightInbound"],
5646
- description: "The shipping cost to receive one unit, a cost component. Takes only null, which clears it",
5646
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5647
5647
  valueName: "null",
5648
5648
  nullable: true,
5649
5649
  schema: z.null()
@@ -5651,7 +5651,7 @@ const surfaceCommands = [
5651
5651
  {
5652
5652
  name: "freight-inbound-value",
5653
5653
  jsonPath: ["freightInbound", "amount"],
5654
- description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-inbound-iso-code",
5654
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-inbound-iso-code",
5655
5655
  valueName: "value",
5656
5656
  together: ["freight-inbound-iso-code"],
5657
5657
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5659,7 +5659,7 @@ const surfaceCommands = [
5659
5659
  {
5660
5660
  name: "freight-inbound-iso-code",
5661
5661
  jsonPath: ["freightInbound", "isoCode"],
5662
- description: "The shipping cost to receive one unit, a cost component: the value's ISO 4217 currency code, given with --freight-inbound-value",
5662
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --freight-inbound-value",
5663
5663
  valueName: "value",
5664
5664
  together: ["freight-inbound-value"],
5665
5665
  schema: toEnum([
@@ -5672,7 +5672,7 @@ const surfaceCommands = [
5672
5672
  {
5673
5673
  name: "freight-outbound",
5674
5674
  jsonPath: ["freightOutbound"],
5675
- description: "The shipping cost to deploy one unit, a deployment cost component. Takes only null, which clears it",
5675
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5676
5676
  valueName: "null",
5677
5677
  nullable: true,
5678
5678
  schema: z.null()
@@ -5680,7 +5680,7 @@ const surfaceCommands = [
5680
5680
  {
5681
5681
  name: "freight-outbound-value",
5682
5682
  jsonPath: ["freightOutbound", "amount"],
5683
- description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-outbound-iso-code",
5683
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-outbound-iso-code",
5684
5684
  valueName: "value",
5685
5685
  together: ["freight-outbound-iso-code"],
5686
5686
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5688,7 +5688,7 @@ const surfaceCommands = [
5688
5688
  {
5689
5689
  name: "freight-outbound-iso-code",
5690
5690
  jsonPath: ["freightOutbound", "isoCode"],
5691
- description: "The shipping cost to deploy one unit, a deployment cost component: the value's ISO 4217 currency code, given with --freight-outbound-value",
5691
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --freight-outbound-value",
5692
5692
  valueName: "value",
5693
5693
  together: ["freight-outbound-value"],
5694
5694
  schema: toEnum([
@@ -5701,7 +5701,7 @@ const surfaceCommands = [
5701
5701
  {
5702
5702
  name: "in-service-date",
5703
5703
  jsonPath: ["inServiceDate"],
5704
- description: "The day the asset was put into service and began depreciating, or null to clear it",
5704
+ description: "The day the asset was put into service and began depreciating, from 1970-01-01 through 2099-12-31, or null to clear it",
5705
5705
  valueName: "value",
5706
5706
  nullable: true,
5707
5707
  schema: z.string()
@@ -5709,7 +5709,7 @@ const surfaceCommands = [
5709
5709
  {
5710
5710
  name: "installation",
5711
5711
  jsonPath: ["installation"],
5712
- description: "The cost to install one unit, a deployment cost component. Takes only null, which clears it",
5712
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5713
5713
  valueName: "null",
5714
5714
  nullable: true,
5715
5715
  schema: z.null()
@@ -5717,7 +5717,7 @@ const surfaceCommands = [
5717
5717
  {
5718
5718
  name: "installation-value",
5719
5719
  jsonPath: ["installation", "amount"],
5720
- description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --installation-iso-code",
5720
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --installation-iso-code",
5721
5721
  valueName: "value",
5722
5722
  together: ["installation-iso-code"],
5723
5723
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5725,7 +5725,7 @@ const surfaceCommands = [
5725
5725
  {
5726
5726
  name: "installation-iso-code",
5727
5727
  jsonPath: ["installation", "isoCode"],
5728
- description: "The cost to install one unit, a deployment cost component: the value's ISO 4217 currency code, given with --installation-value",
5728
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --installation-value",
5729
5729
  valueName: "value",
5730
5730
  together: ["installation-value"],
5731
5731
  schema: toEnum([
@@ -5738,7 +5738,7 @@ const surfaceCommands = [
5738
5738
  {
5739
5739
  name: "interest",
5740
5740
  jsonPath: ["interest"],
5741
- description: "The financing cost of one unit, a cost component. Takes only null, which clears it",
5741
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5742
5742
  valueName: "null",
5743
5743
  nullable: true,
5744
5744
  schema: z.null()
@@ -5746,7 +5746,7 @@ const surfaceCommands = [
5746
5746
  {
5747
5747
  name: "interest-value",
5748
5748
  jsonPath: ["interest", "amount"],
5749
- description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --interest-iso-code",
5749
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --interest-iso-code",
5750
5750
  valueName: "value",
5751
5751
  together: ["interest-iso-code"],
5752
5752
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5754,7 +5754,7 @@ const surfaceCommands = [
5754
5754
  {
5755
5755
  name: "interest-iso-code",
5756
5756
  jsonPath: ["interest", "isoCode"],
5757
- description: "The financing cost of one unit, a cost component: the value's ISO 4217 currency code, given with --interest-value",
5757
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --interest-value",
5758
5758
  valueName: "value",
5759
5759
  together: ["interest-value"],
5760
5760
  schema: toEnum([
@@ -5783,7 +5783,7 @@ const surfaceCommands = [
5783
5783
  {
5784
5784
  name: "salvage-value-value",
5785
5785
  jsonPath: ["salvageValue", "amount"],
5786
- description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --salvage-value-iso-code",
5786
+ description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --salvage-value-iso-code",
5787
5787
  valueName: "value",
5788
5788
  together: ["salvage-value-iso-code"],
5789
5789
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5804,7 +5804,7 @@ const surfaceCommands = [
5804
5804
  {
5805
5805
  name: "simple-cost-basis",
5806
5806
  jsonPath: ["simpleCostBasis"],
5807
- description: "A single cost for one unit, which cannot be sent together with the cost components. Takes only null, which clears it",
5807
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them. Takes only null, which clears it",
5808
5808
  valueName: "null",
5809
5809
  nullable: true,
5810
5810
  schema: z.null()
@@ -5812,7 +5812,7 @@ const surfaceCommands = [
5812
5812
  {
5813
5813
  name: "simple-cost-basis-value",
5814
5814
  jsonPath: ["simpleCostBasis", "amount"],
5815
- description: "A single cost for one unit, which cannot be sent together with the cost components: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --simple-cost-basis-iso-code",
5815
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --simple-cost-basis-iso-code",
5816
5816
  valueName: "value",
5817
5817
  together: ["simple-cost-basis-iso-code"],
5818
5818
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5820,7 +5820,7 @@ const surfaceCommands = [
5820
5820
  {
5821
5821
  name: "simple-cost-basis-iso-code",
5822
5822
  jsonPath: ["simpleCostBasis", "isoCode"],
5823
- description: "A single cost for one unit, which cannot be sent together with the cost components: the value's ISO 4217 currency code, given with --simple-cost-basis-value",
5823
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them: the value's ISO 4217 currency code, given with --simple-cost-basis-value",
5824
5824
  valueName: "value",
5825
5825
  together: ["simple-cost-basis-value"],
5826
5826
  schema: toEnum([
@@ -5833,7 +5833,7 @@ const surfaceCommands = [
5833
5833
  {
5834
5834
  name: "tariffs",
5835
5835
  jsonPath: ["tariffs"],
5836
- description: "The import duty paid on one unit, a cost component. Takes only null, which clears it",
5836
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5837
5837
  valueName: "null",
5838
5838
  nullable: true,
5839
5839
  schema: z.null()
@@ -5841,7 +5841,7 @@ const surfaceCommands = [
5841
5841
  {
5842
5842
  name: "tariffs-value",
5843
5843
  jsonPath: ["tariffs", "amount"],
5844
- description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tariffs-iso-code",
5844
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tariffs-iso-code",
5845
5845
  valueName: "value",
5846
5846
  together: ["tariffs-iso-code"],
5847
5847
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5849,7 +5849,7 @@ const surfaceCommands = [
5849
5849
  {
5850
5850
  name: "tariffs-iso-code",
5851
5851
  jsonPath: ["tariffs", "isoCode"],
5852
- description: "The import duty paid on one unit, a cost component: the value's ISO 4217 currency code, given with --tariffs-value",
5852
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --tariffs-value",
5853
5853
  valueName: "value",
5854
5854
  together: ["tariffs-value"],
5855
5855
  schema: toEnum([
@@ -5862,7 +5862,7 @@ const surfaceCommands = [
5862
5862
  {
5863
5863
  name: "tax",
5864
5864
  jsonPath: ["tax"],
5865
- description: "The tax paid on one unit, a cost component. Takes only null, which clears it",
5865
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
5866
5866
  valueName: "null",
5867
5867
  nullable: true,
5868
5868
  schema: z.null()
@@ -5870,7 +5870,7 @@ const surfaceCommands = [
5870
5870
  {
5871
5871
  name: "tax-value",
5872
5872
  jsonPath: ["tax", "amount"],
5873
- description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tax-iso-code",
5873
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tax-iso-code",
5874
5874
  valueName: "value",
5875
5875
  together: ["tax-iso-code"],
5876
5876
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -5878,7 +5878,7 @@ const surfaceCommands = [
5878
5878
  {
5879
5879
  name: "tax-iso-code",
5880
5880
  jsonPath: ["tax", "isoCode"],
5881
- description: "The tax paid on one unit, a cost component: the value's ISO 4217 currency code, given with --tax-value",
5881
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --tax-value",
5882
5882
  valueName: "value",
5883
5883
  together: ["tax-value"],
5884
5884
  schema: toEnum([
@@ -6008,7 +6008,7 @@ const surfaceCommands = [
6008
6008
  {
6009
6009
  name: "amount-value",
6010
6010
  jsonPath: ["amount", "amount"],
6011
- description: "How much the adjustment changes the cost basis by, in the asset's cost currency, which must be greater than zero: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --amount-iso-code",
6011
+ description: "How much the adjustment changes the cost basis by, in the asset's cost currency, which must be greater than zero: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --amount-iso-code",
6012
6012
  valueName: "value",
6013
6013
  required: true,
6014
6014
  together: ["amount-iso-code"],
@@ -6266,7 +6266,7 @@ const surfaceCommands = [
6266
6266
  {
6267
6267
  name: "sale-price-value",
6268
6268
  jsonPath: ["salePrice", "amount"],
6269
- description: "What the customer paid for the asset: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --sale-price-iso-code",
6269
+ description: "What the customer paid for the asset: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --sale-price-iso-code",
6270
6270
  valueName: "value",
6271
6271
  together: ["sale-price-iso-code"],
6272
6272
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -6378,7 +6378,7 @@ const surfaceCommands = [
6378
6378
  {
6379
6379
  name: "sale-price-value",
6380
6380
  jsonPath: ["salePrice", "amount"],
6381
- description: "What the owner paid for the asset: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --sale-price-iso-code",
6381
+ description: "What the owner paid for the asset: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --sale-price-iso-code",
6382
6382
  valueName: "value",
6383
6383
  together: ["sale-price-iso-code"],
6384
6384
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -6456,7 +6456,7 @@ const surfaceCommands = [
6456
6456
  {
6457
6457
  name: "disposal-price",
6458
6458
  jsonPath: ["disposalPrice"],
6459
- description: "What the scrapped asset was sold for. Takes only null, which clears it",
6459
+ description: "What the scrapped asset was sold for, left out when it was not sold, and refused even as null for an asset a customer owns. Takes only null, which clears it",
6460
6460
  valueName: "null",
6461
6461
  nullable: true,
6462
6462
  schema: z.null()
@@ -6464,7 +6464,7 @@ const surfaceCommands = [
6464
6464
  {
6465
6465
  name: "disposal-price-value",
6466
6466
  jsonPath: ["disposalPrice", "amount"],
6467
- description: "What the scrapped asset was sold for: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --disposal-price-iso-code",
6467
+ description: "What the scrapped asset was sold for, left out when it was not sold, and refused even as null for an asset a customer owns: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --disposal-price-iso-code",
6468
6468
  valueName: "value",
6469
6469
  together: ["disposal-price-iso-code"],
6470
6470
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -6472,7 +6472,7 @@ const surfaceCommands = [
6472
6472
  {
6473
6473
  name: "disposal-price-iso-code",
6474
6474
  jsonPath: ["disposalPrice", "isoCode"],
6475
- description: "What the scrapped asset was sold for: the value's ISO 4217 currency code, given with --disposal-price-value",
6475
+ description: "What the scrapped asset was sold for, left out when it was not sold, and refused even as null for an asset a customer owns: the value's ISO 4217 currency code, given with --disposal-price-value",
6476
6476
  valueName: "value",
6477
6477
  together: ["disposal-price-value"],
6478
6478
  schema: toEnum([
@@ -6861,7 +6861,7 @@ const surfaceCommands = [
6861
6861
  {
6862
6862
  name: "total-price-override",
6863
6863
  jsonPath: ["totalPriceOverride"],
6864
- description: "The amount to bill now when a FIXED charge is split, from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT. Takes only null, which clears it",
6864
+ description: "The amount to bill now, which is required when a FIXED charge is split, must be in the charge's currency, is from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT. Takes only null, which clears it",
6865
6865
  valueName: "null",
6866
6866
  nullable: true,
6867
6867
  schema: z.null()
@@ -6869,7 +6869,7 @@ const surfaceCommands = [
6869
6869
  {
6870
6870
  name: "total-price-override-value",
6871
6871
  jsonPath: ["totalPriceOverride", "amount"],
6872
- description: "The amount to bill now when a FIXED charge is split, from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --total-price-override-iso-code",
6872
+ description: "The amount to bill now, which is required when a FIXED charge is split, must be in the charge's currency, is from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --total-price-override-iso-code",
6873
6873
  valueName: "value",
6874
6874
  together: ["total-price-override-iso-code"],
6875
6875
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -6877,7 +6877,7 @@ const surfaceCommands = [
6877
6877
  {
6878
6878
  name: "total-price-override-iso-code",
6879
6879
  jsonPath: ["totalPriceOverride", "isoCode"],
6880
- description: "The amount to bill now when a FIXED charge is split, from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT: the value's ISO 4217 currency code, given with --total-price-override-value",
6880
+ description: "The amount to bill now, which is required when a FIXED charge is split, must be in the charge's currency, is from 0 to the charge's total price, and is refused when the charge is not split or is priced PER_UNIT: the value's ISO 4217 currency code, given with --total-price-override-value",
6881
6881
  valueName: "value",
6882
6882
  together: ["total-price-override-value"],
6883
6883
  schema: toEnum([
@@ -7011,7 +7011,7 @@ const surfaceCommands = [
7011
7011
  {
7012
7012
  name: "sync-statuses",
7013
7013
  queryName: "syncStatuses",
7014
- description: "The CRM sync statuses to return: in-sync, out-of-sync, or not-linked",
7014
+ description: "The integration sync statuses to return: in-sync, out-of-sync, or not-linked",
7015
7015
  valueName: "value",
7016
7016
  repeatable: true,
7017
7017
  schema: z.array(toEnum([
@@ -7419,7 +7419,7 @@ const surfaceCommands = [
7419
7419
  {
7420
7420
  name: "fulfillment-order-keys",
7421
7421
  queryName: "fulfillmentOrderKeys",
7422
- description: "The keys of the fulfillment orders to list",
7422
+ description: "The keys of the fulfillment orders to list, and an order named here or in fulfillmentOrderIds is listed",
7423
7423
  valueName: "value",
7424
7424
  repeatable: true,
7425
7425
  schema: z.array(z.string())
@@ -7427,7 +7427,7 @@ const surfaceCommands = [
7427
7427
  {
7428
7428
  name: "fulfillment-order-ids",
7429
7429
  queryName: "fulfillmentOrderIds",
7430
- description: "The IDs of the fulfillment orders to list",
7430
+ description: "The IDs of the fulfillment orders to list, and an order named here or in fulfillmentOrderKeys is listed",
7431
7431
  valueName: "uuid",
7432
7432
  repeatable: true,
7433
7433
  schema: z.array(z.uuid())
@@ -7464,7 +7464,7 @@ const surfaceCommands = [
7464
7464
  {
7465
7465
  name: "from-location-ids",
7466
7466
  queryName: "fromLocationIds",
7467
- description: "The IDs of locations, and orders shipping from one of them are listed",
7467
+ description: "The IDs of locations, and orders shipping from one of them are listed, as are orders any other from filter matches",
7468
7468
  valueName: "uuid",
7469
7469
  repeatable: true,
7470
7470
  schema: z.array(z.uuid())
@@ -7472,7 +7472,7 @@ const surfaceCommands = [
7472
7472
  {
7473
7473
  name: "to-location-ids",
7474
7474
  queryName: "toLocationIds",
7475
- description: "The IDs of locations, and orders shipping to one of them are listed",
7475
+ description: "The IDs of locations, and orders shipping to one of them are listed, as are orders any other to filter matches",
7476
7476
  valueName: "uuid",
7477
7477
  repeatable: true,
7478
7478
  schema: z.array(z.uuid())
@@ -7480,7 +7480,7 @@ const surfaceCommands = [
7480
7480
  {
7481
7481
  name: "from-customer-ids",
7482
7482
  queryName: "fromCustomerIds",
7483
- description: "The IDs of customers, and orders shipping from a location assigned to one of them are listed",
7483
+ description: "The IDs of customers, and orders shipping from a location assigned to one of them are listed, as are orders any other from filter matches",
7484
7484
  valueName: "uuid",
7485
7485
  repeatable: true,
7486
7486
  schema: z.array(z.uuid())
@@ -7488,7 +7488,7 @@ const surfaceCommands = [
7488
7488
  {
7489
7489
  name: "to-customer-ids",
7490
7490
  queryName: "toCustomerIds",
7491
- description: "The IDs of customers, and orders shipping to a location assigned to one of them are listed",
7491
+ description: "The IDs of customers, and orders shipping to a location assigned to one of them are listed, as are orders any other to filter matches",
7492
7492
  valueName: "uuid",
7493
7493
  repeatable: true,
7494
7494
  schema: z.array(z.uuid())
@@ -7496,7 +7496,7 @@ const surfaceCommands = [
7496
7496
  {
7497
7497
  name: "from-location-company-types",
7498
7498
  queryName: "fromLocationCompanyTypes",
7499
- description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
7499
+ description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other from filter matches is listed too",
7500
7500
  valueName: "value",
7501
7501
  repeatable: true,
7502
7502
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -7504,7 +7504,7 @@ const surfaceCommands = [
7504
7504
  {
7505
7505
  name: "to-location-company-types",
7506
7506
  queryName: "toLocationCompanyTypes",
7507
- description: "The kind of site listed orders ship to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
7507
+ description: "The kind of site listed orders ship to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other to filter matches is listed too",
7508
7508
  valueName: "value",
7509
7509
  repeatable: true,
7510
7510
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -7660,7 +7660,7 @@ const surfaceCommands = [
7660
7660
  {
7661
7661
  name: "item",
7662
7662
  jsonPath: ["items"],
7663
- description: "items",
7663
+ description: "The order's full set of line items, from 1 to 50, replacing the lines it had",
7664
7664
  valueName: "itemId=,requestedQuantity=",
7665
7665
  repeatable: true,
7666
7666
  element: ["itemId", "requestedQuantity"],
@@ -7672,7 +7672,7 @@ const surfaceCommands = [
7672
7672
  {
7673
7673
  name: "order-notes",
7674
7674
  jsonPath: ["orderNotes"],
7675
- description: "A note about the order, or null to clear it, and the one field an order that left draft accepts until a 3PL holds it",
7675
+ description: "A note about the order, or null to clear it, and the one field an order that left draft accepts when sent alone, unless it ships from a 3PL location",
7676
7676
  valueName: "value",
7677
7677
  nullable: true,
7678
7678
  schema: z.string()
@@ -7960,7 +7960,7 @@ const surfaceCommands = [
7960
7960
  {
7961
7961
  name: "exclude-linked-integration",
7962
7962
  queryName: "excludeLinkedIntegration",
7963
- description: "An integration whose already-linked items to leave out",
7963
+ description: "QBO or NETSUITE, to leave out the items already linked to that integration",
7964
7964
  valueName: "value",
7965
7965
  schema: toEnum([
7966
7966
  "HUBSPOT",
@@ -8000,7 +8000,7 @@ const surfaceCommands = [
8000
8000
  {
8001
8001
  name: "name",
8002
8002
  jsonPath: ["name"],
8003
- description: "The item's display name",
8003
+ description: "The item's display name, unique within your organization in any case",
8004
8004
  valueName: "value",
8005
8005
  required: true,
8006
8006
  schema: z.string()
@@ -8008,7 +8008,7 @@ const surfaceCommands = [
8008
8008
  {
8009
8009
  name: "sku",
8010
8010
  jsonPath: ["sku"],
8011
- description: "The item's stock keeping unit, unique within your organization",
8011
+ description: "The item's stock keeping unit, unique within your organization in any case",
8012
8012
  valueName: "value",
8013
8013
  required: true,
8014
8014
  schema: z.string()
@@ -8028,7 +8028,7 @@ const surfaceCommands = [
8028
8028
  {
8029
8029
  name: "unit-of-measure",
8030
8030
  jsonPath: ["unitOfMeasure"],
8031
- description: "The unit a BULK item's quantities are counted in, which SERVICE and DEVICE items ignore",
8031
+ description: "The unit a BULK item's quantities are counted in, required for a BULK item and ignored for SERVICE and DEVICE items",
8032
8032
  valueName: "value",
8033
8033
  schema: toEnum([
8034
8034
  "BG",
@@ -8055,7 +8055,6 @@ const surfaceCommands = [
8055
8055
  "INH",
8056
8056
  "INK",
8057
8057
  "INQ",
8058
- "KG",
8059
8058
  "KGM",
8060
8059
  "KMT",
8061
8060
  "KT",
@@ -8130,7 +8129,7 @@ const surfaceCommands = [
8130
8129
  {
8131
8130
  name: "accepts-bulk-serials",
8132
8131
  jsonPath: ["acceptsBulkSerials"],
8133
- description: "Whether a BULK item records serial numbers on its units, read only beside type",
8132
+ description: "Whether a BULK item records serial numbers on its units, read only beside type, and false when type is sent without it",
8134
8133
  negatable: true,
8135
8134
  nullable: true,
8136
8135
  schema: z.boolean()
@@ -8172,14 +8171,14 @@ const surfaceCommands = [
8172
8171
  {
8173
8172
  name: "name",
8174
8173
  jsonPath: ["name"],
8175
- description: "The item's new display name, which cannot be empty",
8174
+ description: "The item's new display name, which cannot be empty and must be unique within your organization in any case",
8176
8175
  valueName: "value",
8177
8176
  schema: z.string()
8178
8177
  },
8179
8178
  {
8180
8179
  name: "sku",
8181
8180
  jsonPath: ["sku"],
8182
- description: "The item's new stock keeping unit, which cannot be empty and must be unique within your organization",
8181
+ description: "The item's new stock keeping unit, which cannot be empty and must be unique within your organization in any case",
8183
8182
  valueName: "value",
8184
8183
  schema: z.string()
8185
8184
  },
@@ -8232,7 +8231,7 @@ const surfaceCommands = [
8232
8231
  {
8233
8232
  name: "allocated-indirect",
8234
8233
  jsonPath: ["allocatedIndirect"],
8235
- description: "One unit's share of overhead, a cost component. Takes only null, which clears it",
8234
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8236
8235
  valueName: "null",
8237
8236
  nullable: true,
8238
8237
  schema: z.null()
@@ -8240,7 +8239,7 @@ const surfaceCommands = [
8240
8239
  {
8241
8240
  name: "allocated-indirect-value",
8242
8241
  jsonPath: ["allocatedIndirect", "amount"],
8243
- description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --allocated-indirect-iso-code",
8242
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --allocated-indirect-iso-code",
8244
8243
  valueName: "value",
8245
8244
  together: ["allocated-indirect-iso-code"],
8246
8245
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8248,7 +8247,7 @@ const surfaceCommands = [
8248
8247
  {
8249
8248
  name: "allocated-indirect-iso-code",
8250
8249
  jsonPath: ["allocatedIndirect", "isoCode"],
8251
- description: "One unit's share of overhead, a cost component: the value's ISO 4217 currency code, given with --allocated-indirect-value",
8250
+ description: "One unit's share of overhead, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --allocated-indirect-value",
8252
8251
  valueName: "value",
8253
8252
  together: ["allocated-indirect-value"],
8254
8253
  schema: toEnum([
@@ -8261,7 +8260,7 @@ const surfaceCommands = [
8261
8260
  {
8262
8261
  name: "bill-of-materials",
8263
8262
  jsonPath: ["billOfMaterials"],
8264
- description: "The parts cost of one unit, a cost component. Takes only null, which clears it",
8263
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8265
8264
  valueName: "null",
8266
8265
  nullable: true,
8267
8266
  schema: z.null()
@@ -8269,7 +8268,7 @@ const surfaceCommands = [
8269
8268
  {
8270
8269
  name: "bill-of-materials-value",
8271
8270
  jsonPath: ["billOfMaterials", "amount"],
8272
- description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --bill-of-materials-iso-code",
8271
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --bill-of-materials-iso-code",
8273
8272
  valueName: "value",
8274
8273
  together: ["bill-of-materials-iso-code"],
8275
8274
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8277,7 +8276,7 @@ const surfaceCommands = [
8277
8276
  {
8278
8277
  name: "bill-of-materials-iso-code",
8279
8278
  jsonPath: ["billOfMaterials", "isoCode"],
8280
- description: "The parts cost of one unit, a cost component: the value's ISO 4217 currency code, given with --bill-of-materials-value",
8279
+ description: "The parts cost of one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --bill-of-materials-value",
8281
8280
  valueName: "value",
8282
8281
  together: ["bill-of-materials-value"],
8283
8282
  schema: toEnum([
@@ -8290,7 +8289,7 @@ const surfaceCommands = [
8290
8289
  {
8291
8290
  name: "cost-currency-code",
8292
8291
  jsonPath: ["costCurrencyCode"],
8293
- description: "The ISO 4217 code every cost amount is denominated in, which must match the amounts sent and cannot be null. It is the only way to change the currency. A change keeps the held amounts and relabels them without conversion, and an asset whose currency is locked refuses it",
8292
+ description: "The ISO 4217 code every cost amount is denominated in, which must match the amounts sent and cannot be null. It is the only way to change the currency. A change keeps the held amounts and relabels them without conversion, and on an asset whose currency is locked it is refused",
8294
8293
  valueName: "value",
8295
8294
  schema: toEnum([
8296
8295
  "CAD",
@@ -8315,7 +8314,7 @@ const surfaceCommands = [
8315
8314
  {
8316
8315
  name: "direct-labor",
8317
8316
  jsonPath: ["directLabor"],
8318
- description: "The labor cost to build one unit, a cost component. Takes only null, which clears it",
8317
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8319
8318
  valueName: "null",
8320
8319
  nullable: true,
8321
8320
  schema: z.null()
@@ -8323,7 +8322,7 @@ const surfaceCommands = [
8323
8322
  {
8324
8323
  name: "direct-labor-value",
8325
8324
  jsonPath: ["directLabor", "amount"],
8326
- description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --direct-labor-iso-code",
8325
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --direct-labor-iso-code",
8327
8326
  valueName: "value",
8328
8327
  together: ["direct-labor-iso-code"],
8329
8328
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8331,7 +8330,7 @@ const surfaceCommands = [
8331
8330
  {
8332
8331
  name: "direct-labor-iso-code",
8333
8332
  jsonPath: ["directLabor", "isoCode"],
8334
- description: "The labor cost to build one unit, a cost component: the value's ISO 4217 currency code, given with --direct-labor-value",
8333
+ description: "The labor cost to build one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --direct-labor-value",
8335
8334
  valueName: "value",
8336
8335
  together: ["direct-labor-value"],
8337
8336
  schema: toEnum([
@@ -8344,7 +8343,7 @@ const surfaceCommands = [
8344
8343
  {
8345
8344
  name: "freight-inbound",
8346
8345
  jsonPath: ["freightInbound"],
8347
- description: "The shipping cost to receive one unit, a cost component. Takes only null, which clears it",
8346
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8348
8347
  valueName: "null",
8349
8348
  nullable: true,
8350
8349
  schema: z.null()
@@ -8352,7 +8351,7 @@ const surfaceCommands = [
8352
8351
  {
8353
8352
  name: "freight-inbound-value",
8354
8353
  jsonPath: ["freightInbound", "amount"],
8355
- description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-inbound-iso-code",
8354
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-inbound-iso-code",
8356
8355
  valueName: "value",
8357
8356
  together: ["freight-inbound-iso-code"],
8358
8357
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8360,7 +8359,7 @@ const surfaceCommands = [
8360
8359
  {
8361
8360
  name: "freight-inbound-iso-code",
8362
8361
  jsonPath: ["freightInbound", "isoCode"],
8363
- description: "The shipping cost to receive one unit, a cost component: the value's ISO 4217 currency code, given with --freight-inbound-value",
8362
+ description: "The shipping cost to receive one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --freight-inbound-value",
8364
8363
  valueName: "value",
8365
8364
  together: ["freight-inbound-value"],
8366
8365
  schema: toEnum([
@@ -8373,7 +8372,7 @@ const surfaceCommands = [
8373
8372
  {
8374
8373
  name: "freight-outbound",
8375
8374
  jsonPath: ["freightOutbound"],
8376
- description: "The shipping cost to deploy one unit, a deployment cost component. Takes only null, which clears it",
8375
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8377
8376
  valueName: "null",
8378
8377
  nullable: true,
8379
8378
  schema: z.null()
@@ -8381,7 +8380,7 @@ const surfaceCommands = [
8381
8380
  {
8382
8381
  name: "freight-outbound-value",
8383
8382
  jsonPath: ["freightOutbound", "amount"],
8384
- description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --freight-outbound-iso-code",
8383
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --freight-outbound-iso-code",
8385
8384
  valueName: "value",
8386
8385
  together: ["freight-outbound-iso-code"],
8387
8386
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8389,7 +8388,7 @@ const surfaceCommands = [
8389
8388
  {
8390
8389
  name: "freight-outbound-iso-code",
8391
8390
  jsonPath: ["freightOutbound", "isoCode"],
8392
- description: "The shipping cost to deploy one unit, a deployment cost component: the value's ISO 4217 currency code, given with --freight-outbound-value",
8391
+ description: "The shipping cost to deploy one unit, a deployment cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --freight-outbound-value",
8393
8392
  valueName: "value",
8394
8393
  together: ["freight-outbound-value"],
8395
8394
  schema: toEnum([
@@ -8402,7 +8401,7 @@ const surfaceCommands = [
8402
8401
  {
8403
8402
  name: "installation",
8404
8403
  jsonPath: ["installation"],
8405
- description: "The cost to install one unit, a deployment cost component. Takes only null, which clears it",
8404
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8406
8405
  valueName: "null",
8407
8406
  nullable: true,
8408
8407
  schema: z.null()
@@ -8410,7 +8409,7 @@ const surfaceCommands = [
8410
8409
  {
8411
8410
  name: "installation-value",
8412
8411
  jsonPath: ["installation", "amount"],
8413
- description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --installation-iso-code",
8412
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --installation-iso-code",
8414
8413
  valueName: "value",
8415
8414
  together: ["installation-iso-code"],
8416
8415
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8418,7 +8417,7 @@ const surfaceCommands = [
8418
8417
  {
8419
8418
  name: "installation-iso-code",
8420
8419
  jsonPath: ["installation", "isoCode"],
8421
- description: "The cost to install one unit, a deployment cost component: the value's ISO 4217 currency code, given with --installation-value",
8420
+ description: "The cost to install one unit, a deployment cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --installation-value",
8422
8421
  valueName: "value",
8423
8422
  together: ["installation-value"],
8424
8423
  schema: toEnum([
@@ -8431,7 +8430,7 @@ const surfaceCommands = [
8431
8430
  {
8432
8431
  name: "interest",
8433
8432
  jsonPath: ["interest"],
8434
- description: "The financing cost of one unit, a cost component. Takes only null, which clears it",
8433
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8435
8434
  valueName: "null",
8436
8435
  nullable: true,
8437
8436
  schema: z.null()
@@ -8439,7 +8438,7 @@ const surfaceCommands = [
8439
8438
  {
8440
8439
  name: "interest-value",
8441
8440
  jsonPath: ["interest", "amount"],
8442
- description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --interest-iso-code",
8441
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --interest-iso-code",
8443
8442
  valueName: "value",
8444
8443
  together: ["interest-iso-code"],
8445
8444
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8447,7 +8446,7 @@ const surfaceCommands = [
8447
8446
  {
8448
8447
  name: "interest-iso-code",
8449
8448
  jsonPath: ["interest", "isoCode"],
8450
- description: "The financing cost of one unit, a cost component: the value's ISO 4217 currency code, given with --interest-value",
8449
+ description: "The financing cost of one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --interest-value",
8451
8450
  valueName: "value",
8452
8451
  together: ["interest-value"],
8453
8452
  schema: toEnum([
@@ -8468,7 +8467,7 @@ const surfaceCommands = [
8468
8467
  {
8469
8468
  name: "salvage-value-value",
8470
8469
  jsonPath: ["salvageValue", "amount"],
8471
- description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --salvage-value-iso-code",
8470
+ description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --salvage-value-iso-code",
8472
8471
  valueName: "value",
8473
8472
  together: ["salvage-value-iso-code"],
8474
8473
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8489,7 +8488,7 @@ const surfaceCommands = [
8489
8488
  {
8490
8489
  name: "simple-cost-basis",
8491
8490
  jsonPath: ["simpleCostBasis"],
8492
- description: "A single cost for one unit, which cannot be sent together with the cost components. Takes only null, which clears it",
8491
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them. Takes only null, which clears it",
8493
8492
  valueName: "null",
8494
8493
  nullable: true,
8495
8494
  schema: z.null()
@@ -8497,7 +8496,7 @@ const surfaceCommands = [
8497
8496
  {
8498
8497
  name: "simple-cost-basis-value",
8499
8498
  jsonPath: ["simpleCostBasis", "amount"],
8500
- description: "A single cost for one unit, which cannot be sent together with the cost components: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --simple-cost-basis-iso-code",
8499
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --simple-cost-basis-iso-code",
8501
8500
  valueName: "value",
8502
8501
  together: ["simple-cost-basis-iso-code"],
8503
8502
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8505,7 +8504,7 @@ const surfaceCommands = [
8505
8504
  {
8506
8505
  name: "simple-cost-basis-iso-code",
8507
8506
  jsonPath: ["simpleCostBasis", "isoCode"],
8508
- description: "A single cost for one unit, which cannot be sent together with the cost components: the value's ISO 4217 currency code, given with --simple-cost-basis-value",
8507
+ description: "A single cost for one unit, which clears the cost components and cannot be sent together with them: the value's ISO 4217 currency code, given with --simple-cost-basis-value",
8509
8508
  valueName: "value",
8510
8509
  together: ["simple-cost-basis-value"],
8511
8510
  schema: toEnum([
@@ -8518,7 +8517,7 @@ const surfaceCommands = [
8518
8517
  {
8519
8518
  name: "tariffs",
8520
8519
  jsonPath: ["tariffs"],
8521
- description: "The import duty paid on one unit, a cost component. Takes only null, which clears it",
8520
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8522
8521
  valueName: "null",
8523
8522
  nullable: true,
8524
8523
  schema: z.null()
@@ -8526,7 +8525,7 @@ const surfaceCommands = [
8526
8525
  {
8527
8526
  name: "tariffs-value",
8528
8527
  jsonPath: ["tariffs", "amount"],
8529
- description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tariffs-iso-code",
8528
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tariffs-iso-code",
8530
8529
  valueName: "value",
8531
8530
  together: ["tariffs-iso-code"],
8532
8531
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8534,7 +8533,7 @@ const surfaceCommands = [
8534
8533
  {
8535
8534
  name: "tariffs-iso-code",
8536
8535
  jsonPath: ["tariffs", "isoCode"],
8537
- description: "The import duty paid on one unit, a cost component: the value's ISO 4217 currency code, given with --tariffs-value",
8536
+ description: "The import duty paid on one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --tariffs-value",
8538
8537
  valueName: "value",
8539
8538
  together: ["tariffs-value"],
8540
8539
  schema: toEnum([
@@ -8547,7 +8546,7 @@ const surfaceCommands = [
8547
8546
  {
8548
8547
  name: "tax",
8549
8548
  jsonPath: ["tax"],
8550
- description: "The tax paid on one unit, a cost component. Takes only null, which clears it",
8549
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis. Takes only null, which clears it",
8551
8550
  valueName: "null",
8552
8551
  nullable: true,
8553
8552
  schema: z.null()
@@ -8555,7 +8554,7 @@ const surfaceCommands = [
8555
8554
  {
8556
8555
  name: "tax-value",
8557
8556
  jsonPath: ["tax", "amount"],
8558
- description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --tax-iso-code",
8557
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --tax-iso-code",
8559
8558
  valueName: "value",
8560
8559
  together: ["tax-iso-code"],
8561
8560
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -8563,7 +8562,7 @@ const surfaceCommands = [
8563
8562
  {
8564
8563
  name: "tax-iso-code",
8565
8564
  jsonPath: ["tax", "isoCode"],
8566
- description: "The tax paid on one unit, a cost component: the value's ISO 4217 currency code, given with --tax-value",
8565
+ description: "The tax paid on one unit, a cost component, and sending it clears simpleCostBasis: the value's ISO 4217 currency code, given with --tax-value",
8567
8566
  valueName: "value",
8568
8567
  together: ["tax-value"],
8569
8568
  schema: toEnum([
@@ -8673,7 +8672,7 @@ const surfaceCommands = [
8673
8672
  {
8674
8673
  name: "label",
8675
8674
  jsonPath: ["label"],
8676
- description: "The field's display name",
8675
+ description: "The field's display name, unique within its item",
8677
8676
  valueName: "value",
8678
8677
  required: true,
8679
8678
  schema: z.string()
@@ -8685,7 +8684,7 @@ const surfaceCommands = [
8685
8684
  valueName: "number",
8686
8685
  required: true,
8687
8686
  nullable: true,
8688
- schema: toNumber(z.number().int())
8687
+ schema: toNumber(z.number().int().min(0).max(2147483647))
8689
8688
  },
8690
8689
  {
8691
8690
  name: "section",
@@ -8694,7 +8693,7 @@ const surfaceCommands = [
8694
8693
  valueName: "number",
8695
8694
  required: true,
8696
8695
  nullable: true,
8697
- schema: toNumber(z.number().int())
8696
+ schema: toNumber(z.number().int().min(0).max(2147483647))
8698
8697
  }
8699
8698
  ],
8700
8699
  body: { "fields": {
@@ -8723,7 +8722,7 @@ const surfaceCommands = [
8723
8722
  bodyFlags: [{
8724
8723
  name: "label",
8725
8724
  jsonPath: ["label"],
8726
- description: "The field's new display name, which cannot be empty",
8725
+ description: "The field's new display name, which cannot be empty and must be unique within its item",
8727
8726
  valueName: "value",
8728
8727
  schema: z.string()
8729
8728
  }],
@@ -8823,7 +8822,7 @@ const surfaceCommands = [
8823
8822
  {
8824
8823
  name: "search",
8825
8824
  queryName: "search",
8826
- description: "Text to match against location and customer names",
8825
+ description: "Text to match against site, zone and customer names and site addresses, in any case",
8827
8826
  valueName: "value",
8828
8827
  schema: z.string()
8829
8828
  },
@@ -8844,7 +8843,7 @@ const surfaceCommands = [
8844
8843
  {
8845
8844
  name: "sync-statuses",
8846
8845
  queryName: "syncStatuses",
8847
- description: "The CRM sync statuses to return: in-sync, out-of-sync, or not-linked",
8846
+ description: "The integration sync statuses to return: in-sync, out-of-sync, or not-linked",
8848
8847
  valueName: "value",
8849
8848
  repeatable: true,
8850
8849
  schema: z.array(toEnum([
@@ -8956,7 +8955,7 @@ const surfaceCommands = [
8956
8955
  {
8957
8956
  name: "is-inventory",
8958
8957
  jsonPath: ["isInventory"],
8959
- description: "Whether assets at the location count as inventory for reporting",
8958
+ description: "Whether assets at the location count as inventory for reporting, which a site passes to each of its zones without isInventoryOverride",
8960
8959
  negatable: true,
8961
8960
  schema: z.boolean()
8962
8961
  },
@@ -8977,7 +8976,7 @@ const surfaceCommands = [
8977
8976
  {
8978
8977
  name: "name",
8979
8978
  jsonPath: ["name"],
8980
- description: "The location's display name",
8979
+ description: "The location's display name, unique in any case among your organization's sites for the same customer or among a site's zones, and never shared by a site and its zones",
8981
8980
  valueName: "value",
8982
8981
  required: true,
8983
8982
  schema: z.string()
@@ -9139,7 +9138,7 @@ const surfaceCommands = [
9139
9138
  {
9140
9139
  name: "is-archived",
9141
9140
  jsonPath: ["isArchived"],
9142
- description: "Whether the location is archived, and archiving a site archives its zones",
9141
+ description: "Whether the location is archived, and archiving or unarchiving a site does the same to all of its zones",
9143
9142
  negatable: true,
9144
9143
  nullable: true,
9145
9144
  schema: z.boolean()
@@ -9147,7 +9146,7 @@ const surfaceCommands = [
9147
9146
  {
9148
9147
  name: "is-inventory",
9149
9148
  jsonPath: ["isInventory"],
9150
- description: "Whether assets at the location count as inventory for reporting",
9149
+ description: "Whether assets at the location count as inventory for reporting, which a site passes to each of its zones without isInventoryOverride",
9151
9150
  negatable: true,
9152
9151
  nullable: true,
9153
9152
  schema: z.boolean()
@@ -9155,7 +9154,7 @@ const surfaceCommands = [
9155
9154
  {
9156
9155
  name: "is-inventory-override",
9157
9156
  jsonPath: ["isInventoryOverride"],
9158
- description: "Whether a zone sets its own isInventory rather than inheriting its parent site's, which a site refuses",
9157
+ description: "Whether a zone sets its own isInventory rather than inheriting its parent site's, which a site refuses, and which becomes true when a zone is sent isInventory without it",
9159
9158
  negatable: true,
9160
9159
  nullable: true,
9161
9160
  schema: z.boolean()
@@ -9171,14 +9170,14 @@ const surfaceCommands = [
9171
9170
  {
9172
9171
  name: "name",
9173
9172
  jsonPath: ["name"],
9174
- description: "The location's display name",
9173
+ description: "The location's display name, unique in any case among your organization's sites for the same customer or among a site's zones, never shared by a site and its zones, and taken from the address instead for a transient site with an address",
9175
9174
  valueName: "value",
9176
9175
  schema: z.string()
9177
9176
  },
9178
9177
  {
9179
9178
  name: "type",
9180
9179
  jsonPath: ["type"],
9181
- description: "SITE for a site, or ZONE for a zone within a site",
9180
+ description: "SITE for a site, or ZONE for a zone within a site, and must be the location's current type, since a type cannot be changed",
9182
9181
  valueName: "value",
9183
9182
  nullable: true,
9184
9183
  schema: toEnum(["SITE", "ZONE"])
@@ -9324,7 +9323,7 @@ const surfaceCommands = [
9324
9323
  {
9325
9324
  name: "search",
9326
9325
  queryName: "search",
9327
- description: "Text of three or more characters to find in the project's name or description, its customer's name, or the items and locations of its line items",
9326
+ description: "Text of three or more characters, with shorter text ignored, to find in the project's name or description, its customer's name, its line items' locations, the names of the asset-carrying items its line items ask for, or the items of the assets it holds",
9328
9327
  valueName: "value",
9329
9328
  schema: z.string()
9330
9329
  },
@@ -9339,7 +9338,7 @@ const surfaceCommands = [
9339
9338
  {
9340
9339
  name: "item-ids",
9341
9340
  queryName: "itemIds",
9342
- description: "The IDs of the items whose projects to list, which are the projects with a line item for the item or holding one of its assets",
9341
+ description: "The IDs of the items whose projects to list, which are the projects with a line item for the item when it carries assets, or holding one of its assets",
9343
9342
  valueName: "uuid",
9344
9343
  repeatable: true,
9345
9344
  schema: z.array(z.uuid())
@@ -9612,7 +9611,7 @@ const surfaceCommands = [
9612
9611
  {
9613
9612
  name: "name",
9614
9613
  jsonPath: ["name"],
9615
- description: "The project's name, which no other project in the organization may share",
9614
+ description: "The project's name, which no other project in the organization may share, ignoring case",
9616
9615
  valueName: "value",
9617
9616
  required: true,
9618
9617
  schema: z.string()
@@ -9644,7 +9643,7 @@ const surfaceCommands = [
9644
9643
  {
9645
9644
  name: "total-contract-value-value",
9646
9645
  jsonPath: ["totalContractValue", "amount"],
9647
- description: "The contract's total value: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --total-contract-value-iso-code",
9646
+ description: "The contract's total value: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --total-contract-value-iso-code",
9648
9647
  valueName: "value",
9649
9648
  together: ["total-contract-value-iso-code"],
9650
9649
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -9838,7 +9837,7 @@ const surfaceCommands = [
9838
9837
  {
9839
9838
  name: "discount-value",
9840
9839
  jsonPath: ["discount", "amount"],
9841
- description: "The discount applied to the project: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --discount-iso-code",
9840
+ description: "The discount applied to the project: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --discount-iso-code",
9842
9841
  valueName: "value",
9843
9842
  together: ["discount-iso-code"],
9844
9843
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -10037,7 +10036,7 @@ const surfaceCommands = [
10037
10036
  {
10038
10037
  name: "name",
10039
10038
  jsonPath: ["name"],
10040
- description: "The project's new name, which no other project in the organization may share",
10039
+ description: "The project's new name, which no other project in the organization may share, ignoring case",
10041
10040
  valueName: "value",
10042
10041
  nullable: true,
10043
10042
  schema: z.string()
@@ -10093,7 +10092,7 @@ const surfaceCommands = [
10093
10092
  {
10094
10093
  name: "total-contract-value-value",
10095
10094
  jsonPath: ["totalContractValue", "amount"],
10096
- description: "The contract's total value: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --total-contract-value-iso-code",
10095
+ description: "The contract's total value: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --total-contract-value-iso-code",
10097
10096
  valueName: "value",
10098
10097
  together: ["total-contract-value-iso-code"],
10099
10098
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -10233,7 +10232,7 @@ const surfaceCommands = [
10233
10232
  {
10234
10233
  name: "activation-date",
10235
10234
  jsonPath: ["activationDate"],
10236
- description: "The day a periodic line item's charge schedule is anchored on",
10235
+ description: "The day a periodic line item's charge schedule is anchored on, from 1970-01-01 through 2099-12-31",
10237
10236
  valueName: "value",
10238
10237
  nullable: true,
10239
10238
  schema: z.string()
@@ -10299,7 +10298,7 @@ const surfaceCommands = [
10299
10298
  {
10300
10299
  name: "charge",
10301
10300
  jsonPath: ["charges"],
10302
- description: "The line item's whole charge list, which replaces the charges it has, or omitted to leave them as they are. An INVOICED charge stays as it is stored, whatever the list sends for it. Takes expectedBillableDate=, id=, isCustomModified=, label=, pricingMode=, quantity=, sequence=, servicePeriodEnd=, servicePeriodStart=, status=, totalPrice.amount=, totalPrice.isoCode=, triggerType=, unitPrice=, unitPrice.amount=, unitPrice.isoCode=",
10301
+ description: "The line item's whole charge list, which replaces the charges it has, or omitted to leave them as they are. An INVOICED charge must stay in the list, because leaving it out is refused, and keeps its stored values whatever the list sends. Takes expectedBillableDate=, id=, isCustomModified=, label=, pricingMode=, quantity=, sequence=, servicePeriodEnd=, servicePeriodStart=, status=, totalPrice.amount=, totalPrice.isoCode=, triggerType=, unitPrice=, unitPrice.amount=, unitPrice.isoCode=",
10303
10302
  valueName: "field=value,...",
10304
10303
  repeatable: true,
10305
10304
  element: [
@@ -10383,7 +10382,7 @@ const surfaceCommands = [
10383
10382
  {
10384
10383
  name: "fixed-price-value",
10385
10384
  jsonPath: ["fixedPrice", "amount"],
10386
- description: "The flat price when pricingMode is FIXED, and is not sent together with unitPrice: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --fixed-price-iso-code",
10385
+ description: "The flat price when pricingMode is FIXED, and is not sent together with unitPrice: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --fixed-price-iso-code",
10387
10386
  valueName: "value",
10388
10387
  together: ["fixed-price-iso-code"],
10389
10388
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -10505,7 +10504,7 @@ const surfaceCommands = [
10505
10504
  {
10506
10505
  name: "total-override-value",
10507
10506
  jsonPath: ["totalOverride", "amount"],
10508
- description: "A negotiated total for a periodic line item that replaces the computed one, in the project's currency: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --total-override-iso-code",
10507
+ description: "A negotiated total for a periodic line item that replaces the computed one, in the project's currency: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --total-override-iso-code",
10509
10508
  valueName: "value",
10510
10509
  together: ["total-override-iso-code"],
10511
10510
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -10542,7 +10541,7 @@ const surfaceCommands = [
10542
10541
  {
10543
10542
  name: "unit-price-value",
10544
10543
  jsonPath: ["unitPrice", "amount"],
10545
- description: "The price of one unit for each charge, and is not sent together with fixedPrice: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --unit-price-iso-code",
10544
+ description: "The price of one unit for each charge, and is not sent together with fixedPrice: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --unit-price-iso-code",
10546
10545
  valueName: "value",
10547
10546
  together: ["unit-price-iso-code"],
10548
10547
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -10762,7 +10761,7 @@ const surfaceCommands = [
10762
10761
  {
10763
10762
  name: "from-location-ids",
10764
10763
  queryName: "fromLocationIds",
10765
- description: "The IDs of locations, and orders shipping from one of them are listed",
10764
+ description: "The IDs of locations, and orders shipping from one of them are listed, as are orders any other from filter matches",
10766
10765
  valueName: "uuid",
10767
10766
  repeatable: true,
10768
10767
  schema: z.array(z.uuid())
@@ -10770,7 +10769,7 @@ const surfaceCommands = [
10770
10769
  {
10771
10770
  name: "to-location-ids",
10772
10771
  queryName: "toLocationIds",
10773
- description: "The IDs of locations, and orders delivered to one of them are listed",
10772
+ description: "The IDs of locations, and orders delivered to one of them are listed, as are orders any other to filter matches",
10774
10773
  valueName: "uuid",
10775
10774
  repeatable: true,
10776
10775
  schema: z.array(z.uuid())
@@ -10778,7 +10777,7 @@ const surfaceCommands = [
10778
10777
  {
10779
10778
  name: "from-customer-ids",
10780
10779
  queryName: "fromCustomerIds",
10781
- description: "The IDs of customers, and orders shipping from a location assigned to one of them are listed",
10780
+ description: "The IDs of customers, and orders shipping from a location assigned to one of them are listed, as are orders any other from filter matches",
10782
10781
  valueName: "uuid",
10783
10782
  repeatable: true,
10784
10783
  schema: z.array(z.uuid())
@@ -10786,7 +10785,7 @@ const surfaceCommands = [
10786
10785
  {
10787
10786
  name: "to-customer-ids",
10788
10787
  queryName: "toCustomerIds",
10789
- description: "The IDs of customers, and orders delivered to a location assigned to one of them are listed",
10788
+ description: "The IDs of customers, and orders delivered to a location assigned to one of them are listed, as are orders any other to filter matches",
10790
10789
  valueName: "uuid",
10791
10790
  repeatable: true,
10792
10791
  schema: z.array(z.uuid())
@@ -10794,7 +10793,7 @@ const surfaceCommands = [
10794
10793
  {
10795
10794
  name: "from-location-company-types",
10796
10795
  queryName: "fromLocationCompanyTypes",
10797
- description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
10796
+ description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other from filter matches is listed too",
10798
10797
  valueName: "value",
10799
10798
  repeatable: true,
10800
10799
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -10802,7 +10801,7 @@ const surfaceCommands = [
10802
10801
  {
10803
10802
  name: "to-location-company-types",
10804
10803
  queryName: "toLocationCompanyTypes",
10805
- description: "The kind of site listed orders are delivered to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
10804
+ description: "The kind of site listed orders are delivered to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other to filter matches is listed too",
10806
10805
  valueName: "value",
10807
10806
  repeatable: true,
10808
10807
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -11170,7 +11169,7 @@ const surfaceCommands = [
11170
11169
  {
11171
11170
  name: "order-notes",
11172
11171
  jsonPath: ["orderNotes"],
11173
- description: "A note about the order, which is the one field that can change after the order leaves draft, until it is received or cancelled",
11172
+ description: "A note about the order, which a request sending only the note can change after the order leaves draft, until any of it is received, it is cancelled, or it is sent to a 3PL",
11174
11173
  valueName: "value",
11175
11174
  nullable: true,
11176
11175
  schema: z.string()
@@ -11512,7 +11511,7 @@ const surfaceCommands = [
11512
11511
  {
11513
11512
  name: "from-location-ids",
11514
11513
  queryName: "fromLocationIds",
11515
- description: "The IDs of locations, and orders returned from one of them are listed",
11514
+ description: "The IDs of locations, and orders returned from one of them are listed, as are orders any other from filter matches",
11516
11515
  valueName: "uuid",
11517
11516
  repeatable: true,
11518
11517
  schema: z.array(z.uuid())
@@ -11520,7 +11519,7 @@ const surfaceCommands = [
11520
11519
  {
11521
11520
  name: "to-location-ids",
11522
11521
  queryName: "toLocationIds",
11523
- description: "The IDs of locations, and orders returned to one of them are listed",
11522
+ description: "The IDs of locations, and orders returned to one of them are listed, as are orders any other to filter matches",
11524
11523
  valueName: "uuid",
11525
11524
  repeatable: true,
11526
11525
  schema: z.array(z.uuid())
@@ -11528,7 +11527,7 @@ const surfaceCommands = [
11528
11527
  {
11529
11528
  name: "from-customer-ids",
11530
11529
  queryName: "fromCustomerIds",
11531
- description: "The IDs of customers, and orders returned from a location assigned to one of them are listed",
11530
+ description: "The IDs of customers, and orders returned from a location assigned to one of them are listed, as are orders any other from filter matches",
11532
11531
  valueName: "uuid",
11533
11532
  repeatable: true,
11534
11533
  schema: z.array(z.uuid())
@@ -11536,7 +11535,7 @@ const surfaceCommands = [
11536
11535
  {
11537
11536
  name: "to-customer-ids",
11538
11537
  queryName: "toCustomerIds",
11539
- description: "The IDs of customers, and orders returned to a location assigned to one of them are listed",
11538
+ description: "The IDs of customers, and orders returned to a location assigned to one of them are listed, as are orders any other to filter matches",
11540
11539
  valueName: "uuid",
11541
11540
  repeatable: true,
11542
11541
  schema: z.array(z.uuid())
@@ -11544,7 +11543,7 @@ const surfaceCommands = [
11544
11543
  {
11545
11544
  name: "from-location-company-types",
11546
11545
  queryName: "fromLocationCompanyTypes",
11547
- description: "The kind of site listed orders are returned from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
11546
+ description: "The kind of site listed orders are returned from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other from filter matches is listed too",
11548
11547
  valueName: "value",
11549
11548
  repeatable: true,
11550
11549
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -11552,7 +11551,7 @@ const surfaceCommands = [
11552
11551
  {
11553
11552
  name: "to-location-company-types",
11554
11553
  queryName: "toLocationCompanyTypes",
11555
- description: "The kind of site listed orders are returned to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
11554
+ description: "The kind of site listed orders are returned to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and an order any other to filter matches is listed too",
11556
11555
  valueName: "value",
11557
11556
  repeatable: true,
11558
11557
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -11923,7 +11922,7 @@ const surfaceCommands = [
11923
11922
  {
11924
11923
  name: "order-notes",
11925
11924
  jsonPath: ["orderNotes"],
11926
- description: "A note about the order, which can change after the order leaves draft until it is received or cancelled, unless a 3PL runs its destination",
11925
+ description: "A note about the order, which a request sending only the note can change after the order leaves draft until it is received or cancelled, unless a 3PL runs its destination",
11927
11926
  valueName: "value",
11928
11927
  nullable: true,
11929
11928
  schema: z.string()
@@ -12237,7 +12236,7 @@ const surfaceCommands = [
12237
12236
  {
12238
12237
  name: "search",
12239
12238
  queryName: "search",
12240
- description: "Text to find in the shipment's number, its order numbers, its reference number, its locations' names, or its items' names and SKUs",
12239
+ description: "Text to find in the shipment's number, its order numbers, its tracking number, its locations' names, or its items' names and SKUs",
12241
12240
  valueName: "value",
12242
12241
  schema: z.string()
12243
12242
  },
@@ -12276,7 +12275,7 @@ const surfaceCommands = [
12276
12275
  {
12277
12276
  name: "from-location-ids",
12278
12277
  queryName: "fromLocationIds",
12279
- description: "The IDs of locations, and shipments leaving from one of them are listed",
12278
+ description: "The IDs of locations, and shipments leaving from one of them are listed, as are shipments any other from filter matches",
12280
12279
  valueName: "uuid",
12281
12280
  repeatable: true,
12282
12281
  schema: z.array(z.uuid())
@@ -12284,7 +12283,7 @@ const surfaceCommands = [
12284
12283
  {
12285
12284
  name: "to-location-ids",
12286
12285
  queryName: "toLocationIds",
12287
- description: "The IDs of locations, and shipments going to one of them are listed",
12286
+ description: "The IDs of locations, and shipments going to one of them are listed, as are shipments any other to filter matches",
12288
12287
  valueName: "uuid",
12289
12288
  repeatable: true,
12290
12289
  schema: z.array(z.uuid())
@@ -12292,7 +12291,7 @@ const surfaceCommands = [
12292
12291
  {
12293
12292
  name: "from-customer-ids",
12294
12293
  queryName: "fromCustomerIds",
12295
- description: "The IDs of customers, and shipments leaving from a location assigned to one of them are listed",
12294
+ description: "The IDs of customers, and shipments leaving from a location assigned to one of them are listed, as are shipments any other from filter matches",
12296
12295
  valueName: "uuid",
12297
12296
  repeatable: true,
12298
12297
  schema: z.array(z.uuid())
@@ -12300,7 +12299,7 @@ const surfaceCommands = [
12300
12299
  {
12301
12300
  name: "to-customer-ids",
12302
12301
  queryName: "toCustomerIds",
12303
- description: "The IDs of customers, and shipments going to a location assigned to one of them are listed",
12302
+ description: "The IDs of customers, and shipments going to a location assigned to one of them are listed, as are shipments any other to filter matches",
12304
12303
  valueName: "uuid",
12305
12304
  repeatable: true,
12306
12305
  schema: z.array(z.uuid())
@@ -12308,7 +12307,7 @@ const surfaceCommands = [
12308
12307
  {
12309
12308
  name: "from-location-company-types",
12310
12309
  queryName: "fromLocationCompanyTypes",
12311
- description: "The kind of site listed shipments leave from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
12310
+ description: "The kind of site listed shipments leave from, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and a shipment any other from filter matches is listed too",
12312
12311
  valueName: "value",
12313
12312
  repeatable: true,
12314
12313
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -12316,7 +12315,7 @@ const surfaceCommands = [
12316
12315
  {
12317
12316
  name: "to-location-company-types",
12318
12317
  queryName: "toLocationCompanyTypes",
12319
- description: "The kind of site listed shipments go to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, and naming both filters nothing",
12318
+ description: "The kind of site listed shipments go to, a CUSTOMER site or one of the organization's own MANUFACTURER sites, naming both filters nothing, and a shipment any other to filter matches is listed too",
12320
12319
  valueName: "value",
12321
12320
  repeatable: true,
12322
12321
  schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
@@ -12503,6 +12502,7 @@ const surfaceCommands = [
12503
12502
  "serials": ["array"]
12504
12503
  },
12505
12504
  elementLists: ["serials"],
12505
+ elementRequired: ["itemId"],
12506
12506
  schema: z.array(z.string())
12507
12507
  },
12508
12508
  {
@@ -12564,7 +12564,7 @@ const surfaceCommands = [
12564
12564
  {
12565
12565
  name: "shipping-cost-value",
12566
12566
  jsonPath: ["shippingCost", "amount"],
12567
- description: "What the shipment cost to send: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --shipping-cost-iso-code",
12567
+ description: "What the shipment cost to send: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --shipping-cost-iso-code",
12568
12568
  valueName: "value",
12569
12569
  together: ["shipping-cost-iso-code"],
12570
12570
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -12826,6 +12826,7 @@ const surfaceCommands = [
12826
12826
  "serials": ["array"]
12827
12827
  },
12828
12828
  elementLists: ["serials"],
12829
+ elementRequired: ["itemId"],
12829
12830
  schema: z.array(z.string())
12830
12831
  },
12831
12832
  {
@@ -12863,7 +12864,7 @@ const surfaceCommands = [
12863
12864
  {
12864
12865
  name: "shipped-at",
12865
12866
  jsonPath: ["shippedAt"],
12866
- description: "When the shipment left, or null while it has not",
12867
+ description: "When the shipment left, which cannot be cleared and, on an outbound shipment, can only be corrected after it has shipped",
12867
12868
  valueName: "value",
12868
12869
  nullable: true,
12869
12870
  schema: z.string()
@@ -12887,7 +12888,7 @@ const surfaceCommands = [
12887
12888
  {
12888
12889
  name: "shipping-cost-value",
12889
12890
  jsonPath: ["shippingCost", "amount"],
12890
- description: "What the shipment cost to send: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --shipping-cost-iso-code",
12891
+ description: "What the shipment cost to send: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --shipping-cost-iso-code",
12891
12892
  valueName: "value",
12892
12893
  together: ["shipping-cost-iso-code"],
12893
12894
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -13142,6 +13143,7 @@ const surfaceCommands = [
13142
13143
  "serials": ["array"]
13143
13144
  },
13144
13145
  elementLists: ["serials"],
13146
+ elementRequired: ["itemId"],
13145
13147
  schema: z.array(z.string())
13146
13148
  },
13147
13149
  {
@@ -13187,7 +13189,7 @@ const surfaceCommands = [
13187
13189
  {
13188
13190
  name: "shipping-cost-value",
13189
13191
  jsonPath: ["shippingCost", "amount"],
13190
- description: "What the shipment cost to send: the exact value as a decimal string with at least two decimal places, which cannot be negative, given with --shipping-cost-iso-code",
13192
+ description: "What the shipment cost to send: the exact value as a decimal string, which cannot be negative, sent with at most two decimal places, given with --shipping-cost-iso-code",
13191
13193
  valueName: "value",
13192
13194
  together: ["shipping-cost-iso-code"],
13193
13195
  schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
@@ -13734,5 +13736,5 @@ async function toReported(error, isJSON, resolved, level = "error") {
13734
13736
  //#endregion
13735
13737
  export { toCli, toParseExitCode, toReported, wasReportAttempted, writeCrash };
13736
13738
 
13737
- //# sourceMappingURL=program-CYp6XF8D.js.map
13738
- //# debugId=2061590a-8bec-56a7-864d-cb1435ccb994
13739
+ //# sourceMappingURL=program-CC8Iqb14.js.map
13740
+ //# debugId=1159525d-9f84-5132-8555-15d762625efb