@hardfin/cli 0.1.1-dev.69 → 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.
- package/README.md +61 -21
- package/dist/{check-CDkHR_Qt.js → check-CvjTUx-K.js} +81 -79
- package/dist/cli.js +5 -5
- package/dist/completion-tree.json +1 -1
- package/dist/{notice-Bq9ifPV6.js → notice-D6mbHF9O.js} +4 -4
- package/dist/{program-eT-hgKX0.js → program-CC8Iqb14.js} +297 -240
- package/package.json +1 -1
|
@@ -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]="
|
|
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
|
|
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";
|
|
@@ -15,77 +15,6 @@ import { spawn, spawnSync } from "node:child_process";
|
|
|
15
15
|
import { createInterface } from "node:readline/promises";
|
|
16
16
|
import { createServer } from "node:http";
|
|
17
17
|
import { createInterface as createInterface$1 } from "node:readline";
|
|
18
|
-
//#region src/cli/parser.ts
|
|
19
|
-
/** toParser builds the parser from the registry, and hands whatever it parses to onRun. */
|
|
20
|
-
function toParser(entries, onRun, isSilent = false) {
|
|
21
|
-
const program = new Command();
|
|
22
|
-
program.name("hardfin").description("Call the Hardfin API from a terminal or an agent").version(version$1, "-v, --version").enablePositionalOptions();
|
|
23
|
-
toQuietParser(program, isSilent);
|
|
24
|
-
for (const flag of GLOBAL_FLAGS) program.option(`--${flag.name} <${flag.valueName}>`, flag.description);
|
|
25
|
-
for (const command of entries) program.addCommand(toProgram(program, command, onRun, isSilent), { hidden: command.hidden });
|
|
26
|
-
return program;
|
|
27
|
-
}
|
|
28
|
-
/** toProgram wires one registry command into the parser. */
|
|
29
|
-
function toProgram(root, command, onRun, isSilent) {
|
|
30
|
-
const program = new Command(command.name).summary(command.summary).description(command.description ?? command.summary);
|
|
31
|
-
toQuietParser(program, isSilent);
|
|
32
|
-
for (const argument of command.arguments) {
|
|
33
|
-
const name = argument.variadic ? `${argument.name}...` : argument.name;
|
|
34
|
-
program.argument(argument.required ? `<${name}>` : `[${name}]`, argument.description);
|
|
35
|
-
}
|
|
36
|
-
for (const flag of command.flags) {
|
|
37
|
-
const short = flag.short ? `-${flag.short}, ` : "";
|
|
38
|
-
const value = flag.valueName ? ` <${flag.valueName}>` : "";
|
|
39
|
-
const option = new Option(`${short}--${flag.name}${value}`, flag.description);
|
|
40
|
-
if (flag.negatable) program.addOption(new Option(`--no-${flag.name}`, `${flag.description}, turned off`));
|
|
41
|
-
if (flag.repeatable) option.argParser(collect);
|
|
42
|
-
if (!flag.repeatable && flag.valueName) option.argParser(toOnce(flag.name));
|
|
43
|
-
if (flag.defaultValue !== void 0) option.default(flag.defaultValue);
|
|
44
|
-
program.addOption(option);
|
|
45
|
-
}
|
|
46
|
-
for (const example of command.examples) program.addHelpText("after", `\n${example.description}:\n $ ${example.command}`);
|
|
47
|
-
for (const subcommand of command.subcommands ?? []) program.addCommand(toProgram(root, subcommand, onRun, isSilent), { hidden: subcommand.hidden });
|
|
48
|
-
if (!command.run) return program;
|
|
49
|
-
program.action((...parsed) => {
|
|
50
|
-
const flags = parsed[parsed.length - 2] ?? {};
|
|
51
|
-
return onRun({
|
|
52
|
-
command,
|
|
53
|
-
args: parsed.slice(0, parsed.length - 2).flatMap(toArgumentList),
|
|
54
|
-
flags,
|
|
55
|
-
globals: root.opts()
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
return program;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* toQuietParser has the parser hand back its mistakes, so they are answered like any other
|
|
62
|
-
* failure. A silent parser also keeps its help and version to itself, for a caller that only
|
|
63
|
-
* wants to know what a command line means.
|
|
64
|
-
*/
|
|
65
|
-
function toQuietParser(program, isSilent) {
|
|
66
|
-
program.exitOverride().configureOutput({ outputError: () => void 0 });
|
|
67
|
-
if (isSilent) program.configureOutput({
|
|
68
|
-
writeOut: () => void 0,
|
|
69
|
-
writeErr: () => void 0
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
function toArgumentList(value) {
|
|
73
|
-
if (Array.isArray(value)) return value.map(String);
|
|
74
|
-
return value === void 0 ? [] : [toText(value)];
|
|
75
|
-
}
|
|
76
|
-
/** toOnce refuses a flag given a second time. */
|
|
77
|
-
function toOnce(name) {
|
|
78
|
-
let isGiven = false;
|
|
79
|
-
return (value) => {
|
|
80
|
-
if (isGiven) throw new InvalidArgumentError(`--${name} takes one value and is given more than once`);
|
|
81
|
-
isGiven = true;
|
|
82
|
-
return value;
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
function collect(value, previous) {
|
|
86
|
-
return [...previous ?? [], value];
|
|
87
|
-
}
|
|
88
|
-
//#endregion
|
|
89
18
|
//#region src/auth/jwt.ts
|
|
90
19
|
/**
|
|
91
20
|
* toClaims reads an access token's payload for display. Nothing here verifies the
|
|
@@ -1137,7 +1066,10 @@ function toCommandLines(command, parents) {
|
|
|
1137
1066
|
function toTaken(flag) {
|
|
1138
1067
|
const values = flag.schema.enum ?? flag.schema.items?.enum;
|
|
1139
1068
|
if (values) return `one of ${values.map((value) => `\`${value}\``).join(", ")}`;
|
|
1140
|
-
if (flag.element)
|
|
1069
|
+
if (flag.element) {
|
|
1070
|
+
const taken = flag.element.map((field) => `${field}=`).join(",");
|
|
1071
|
+
return flag.elementRequired ? `${taken}, each needing ${flag.elementRequired.map((field) => `${field}=`).join(",")}` : taken;
|
|
1072
|
+
}
|
|
1141
1073
|
return flag.valueName ?? "nothing";
|
|
1142
1074
|
}
|
|
1143
1075
|
async function runAgentGuide(input) {
|
|
@@ -1191,6 +1123,7 @@ function toDescribed(flag) {
|
|
|
1191
1123
|
elementMoney: sent.elementMoney,
|
|
1192
1124
|
elementEnums: sent.elementEnums,
|
|
1193
1125
|
elementPatterns: sent.elementPatterns,
|
|
1126
|
+
elementRequired: sent.elementRequired,
|
|
1194
1127
|
together: sent.together
|
|
1195
1128
|
};
|
|
1196
1129
|
return Object.fromEntries(Object.entries(described).filter(([, value]) => value !== void 0 && value !== false));
|
|
@@ -1247,6 +1180,84 @@ function toSummary(command, parents) {
|
|
|
1247
1180
|
};
|
|
1248
1181
|
}
|
|
1249
1182
|
//#endregion
|
|
1183
|
+
//#region src/cli/parser.ts
|
|
1184
|
+
/** toParser builds the parser from the registry, and hands whatever it parses to onRun. */
|
|
1185
|
+
function toParser(entries, onRun, isSilent = false) {
|
|
1186
|
+
const program = new Command();
|
|
1187
|
+
program.name("hardfin").description("Call the Hardfin API from a terminal or an agent").version(version$1, "-v, --version").enablePositionalOptions();
|
|
1188
|
+
toQuietParser(program, isSilent);
|
|
1189
|
+
for (const flag of GLOBAL_FLAGS) program.option(`--${flag.name} <${flag.valueName}>`, flag.description);
|
|
1190
|
+
for (const command of entries) program.addCommand(toProgram(program, command, onRun, isSilent), { hidden: command.hidden });
|
|
1191
|
+
return program;
|
|
1192
|
+
}
|
|
1193
|
+
/** toHelpDescription says in help whether a flag, or each element it carries, must be given. */
|
|
1194
|
+
function toHelpDescription(flag) {
|
|
1195
|
+
const described = toDescribed(flag);
|
|
1196
|
+
const required = described.required ? `Required. ${flag.description}` : flag.description;
|
|
1197
|
+
if (!described.elementRequired) return required;
|
|
1198
|
+
return `${required}. Each one needs ${described.elementRequired.map((field) => `${field}=`).join(", ")}`;
|
|
1199
|
+
}
|
|
1200
|
+
/** toProgram wires one registry command into the parser. */
|
|
1201
|
+
function toProgram(root, command, onRun, isSilent) {
|
|
1202
|
+
const program = new Command(command.name).summary(command.summary).description(command.description ?? command.summary);
|
|
1203
|
+
toQuietParser(program, isSilent);
|
|
1204
|
+
for (const argument of command.arguments) {
|
|
1205
|
+
const name = argument.variadic ? `${argument.name}...` : argument.name;
|
|
1206
|
+
program.argument(argument.required ? `<${name}>` : `[${name}]`, argument.description);
|
|
1207
|
+
}
|
|
1208
|
+
for (const flag of command.flags) {
|
|
1209
|
+
const short = flag.short ? `-${flag.short}, ` : "";
|
|
1210
|
+
const value = flag.valueName ? ` <${flag.valueName}>` : "";
|
|
1211
|
+
const option = new Option(`${short}--${flag.name}${value}`, toHelpDescription(flag));
|
|
1212
|
+
if (flag.negatable) program.addOption(new Option(`--no-${flag.name}`, `${flag.description}, turned off`));
|
|
1213
|
+
if (flag.repeatable) option.argParser(collect);
|
|
1214
|
+
if (!flag.repeatable && flag.valueName) option.argParser(toOnce(flag.name));
|
|
1215
|
+
if (flag.defaultValue !== void 0) option.default(flag.defaultValue);
|
|
1216
|
+
program.addOption(option);
|
|
1217
|
+
}
|
|
1218
|
+
for (const example of command.examples) program.addHelpText("after", `\n${example.description}:\n $ ${example.command}`);
|
|
1219
|
+
for (const subcommand of command.subcommands ?? []) program.addCommand(toProgram(root, subcommand, onRun, isSilent), { hidden: subcommand.hidden });
|
|
1220
|
+
if (!command.run) return program;
|
|
1221
|
+
program.action((...parsed) => {
|
|
1222
|
+
const flags = parsed[parsed.length - 2] ?? {};
|
|
1223
|
+
return onRun({
|
|
1224
|
+
command,
|
|
1225
|
+
args: parsed.slice(0, parsed.length - 2).flatMap(toArgumentList),
|
|
1226
|
+
flags,
|
|
1227
|
+
globals: root.opts()
|
|
1228
|
+
});
|
|
1229
|
+
});
|
|
1230
|
+
return program;
|
|
1231
|
+
}
|
|
1232
|
+
/**
|
|
1233
|
+
* toQuietParser has the parser hand back its mistakes, so they are answered like any other
|
|
1234
|
+
* failure. A silent parser also keeps its help and version to itself, for a caller that only
|
|
1235
|
+
* wants to know what a command line means.
|
|
1236
|
+
*/
|
|
1237
|
+
function toQuietParser(program, isSilent) {
|
|
1238
|
+
program.exitOverride().configureOutput({ outputError: () => void 0 });
|
|
1239
|
+
if (isSilent) program.configureOutput({
|
|
1240
|
+
writeOut: () => void 0,
|
|
1241
|
+
writeErr: () => void 0
|
|
1242
|
+
});
|
|
1243
|
+
}
|
|
1244
|
+
function toArgumentList(value) {
|
|
1245
|
+
if (Array.isArray(value)) return value.map(String);
|
|
1246
|
+
return value === void 0 ? [] : [toText(value)];
|
|
1247
|
+
}
|
|
1248
|
+
/** toOnce refuses a flag given a second time. */
|
|
1249
|
+
function toOnce(name) {
|
|
1250
|
+
let isGiven = false;
|
|
1251
|
+
return (value) => {
|
|
1252
|
+
if (isGiven) throw new InvalidArgumentError(`--${name} takes one value and is given more than once`);
|
|
1253
|
+
isGiven = true;
|
|
1254
|
+
return value;
|
|
1255
|
+
};
|
|
1256
|
+
}
|
|
1257
|
+
function collect(value, previous) {
|
|
1258
|
+
return [...previous ?? [], value];
|
|
1259
|
+
}
|
|
1260
|
+
//#endregion
|
|
1250
1261
|
//#region src/command/input.ts
|
|
1251
1262
|
/** InputFailure is a body given with --input that cannot be used, and says why. */
|
|
1252
1263
|
var InputFailure = class extends Error {
|
|
@@ -1421,6 +1432,11 @@ async function runOperation(operation, input) {
|
|
|
1421
1432
|
writeFailure("invalid_flag", built.message, input.isJSON);
|
|
1422
1433
|
return ExitCode.USAGE;
|
|
1423
1434
|
}
|
|
1435
|
+
const missingElementField = toMissingElementField(operation, built);
|
|
1436
|
+
if (missingElementField) {
|
|
1437
|
+
writeFailure("missing_flag", missingElementField, input.isJSON);
|
|
1438
|
+
return ExitCode.USAGE;
|
|
1439
|
+
}
|
|
1424
1440
|
const isBareAction = operation.method === "POST" && operation.pathParameters.length > 0 && !operation.upload;
|
|
1425
1441
|
const body = built === void 0 && isBareAction && operation.bodyFlags.length > 0 ? {} : built;
|
|
1426
1442
|
if (operation.bodyFlags.length > 0 && body === void 0) {
|
|
@@ -1581,6 +1597,29 @@ function toUnknownField(shape, value, path) {
|
|
|
1581
1597
|
if (unknown) return unknown;
|
|
1582
1598
|
}
|
|
1583
1599
|
}
|
|
1600
|
+
/**
|
|
1601
|
+
* toMissingElementField names the first element that lacks a field every element must carry,
|
|
1602
|
+
* whether the element came from its flag or from the --input body.
|
|
1603
|
+
*/
|
|
1604
|
+
function toMissingElementField(operation, body) {
|
|
1605
|
+
for (const flag of operation.bodyFlags) {
|
|
1606
|
+
const elements = toValueAt(body, flag.jsonPath);
|
|
1607
|
+
if (!flag.elementRequired || !Array.isArray(elements)) continue;
|
|
1608
|
+
for (const [index, element] of elements.entries()) {
|
|
1609
|
+
const missing = flag.elementRequired.filter((field) => !hasPath(element, [field]));
|
|
1610
|
+
if (missing.length > 0) return `${flag.jsonPath.join(".")}[${index}] needs ${missing.join(", ")}. Every --${flag.name} needs ${flag.elementRequired.map((field) => `${field}=`).join(", ")}`;
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
/** toValueAt reads the value a body holds at a field's path. */
|
|
1615
|
+
function toValueAt(body, path) {
|
|
1616
|
+
let holder = body;
|
|
1617
|
+
for (const name of path) {
|
|
1618
|
+
if (typeof holder !== "object" || holder === null) return;
|
|
1619
|
+
holder = holder[name];
|
|
1620
|
+
}
|
|
1621
|
+
return holder;
|
|
1622
|
+
}
|
|
1584
1623
|
/** hasPath reports whether a body already holds a value at a field's path. */
|
|
1585
1624
|
function hasPath(body, path) {
|
|
1586
1625
|
let holder = body;
|
|
@@ -2890,7 +2929,7 @@ function toFiles(directory) {
|
|
|
2890
2929
|
//#endregion
|
|
2891
2930
|
//#region src/command/types.generated.ts
|
|
2892
2931
|
/** API_TYPES is the TypeScript hardfin types prints. */
|
|
2893
|
-
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";
|
|
2894
2933
|
//#endregion
|
|
2895
2934
|
//#region src/command/types.ts
|
|
2896
2935
|
const typesCommand = defineCommand({
|
|
@@ -4687,7 +4726,7 @@ const surfaceCommands = [
|
|
|
4687
4726
|
{
|
|
4688
4727
|
name: "with-functional-statuses",
|
|
4689
4728
|
queryName: "withFunctionalStatuses",
|
|
4690
|
-
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",
|
|
4691
4730
|
valueName: "value",
|
|
4692
4731
|
repeatable: true,
|
|
4693
4732
|
schema: z.array(toEnum([
|
|
@@ -4784,7 +4823,7 @@ const surfaceCommands = [
|
|
|
4784
4823
|
defineOperation({
|
|
4785
4824
|
name: "create",
|
|
4786
4825
|
summary: "Create asset",
|
|
4787
|
-
example: "hardfin asset create --in-inventory-date <value> --item-id <uuid> --location-id <uuid>",
|
|
4826
|
+
example: "hardfin asset create --in-inventory-date <value> --item-id <uuid> --location-id <uuid> --serial <value>",
|
|
4788
4827
|
method: "POST",
|
|
4789
4828
|
path: "/asset",
|
|
4790
4829
|
pathParameters: [],
|
|
@@ -4801,7 +4840,7 @@ const surfaceCommands = [
|
|
|
4801
4840
|
{
|
|
4802
4841
|
name: "allocated-indirect-value",
|
|
4803
4842
|
jsonPath: ["allocatedIndirect", "amount"],
|
|
4804
|
-
description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
4805
4844
|
valueName: "value",
|
|
4806
4845
|
together: ["allocated-indirect-iso-code"],
|
|
4807
4846
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -4830,7 +4869,7 @@ const surfaceCommands = [
|
|
|
4830
4869
|
{
|
|
4831
4870
|
name: "bill-of-materials-value",
|
|
4832
4871
|
jsonPath: ["billOfMaterials", "amount"],
|
|
4833
|
-
description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
4834
4873
|
valueName: "value",
|
|
4835
4874
|
together: ["bill-of-materials-iso-code"],
|
|
4836
4875
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -4892,7 +4931,7 @@ const surfaceCommands = [
|
|
|
4892
4931
|
{
|
|
4893
4932
|
name: "direct-labor-value",
|
|
4894
4933
|
jsonPath: ["directLabor", "amount"],
|
|
4895
|
-
description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
4896
4935
|
valueName: "value",
|
|
4897
4936
|
together: ["direct-labor-iso-code"],
|
|
4898
4937
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -4921,7 +4960,7 @@ const surfaceCommands = [
|
|
|
4921
4960
|
{
|
|
4922
4961
|
name: "freight-inbound-value",
|
|
4923
4962
|
jsonPath: ["freightInbound", "amount"],
|
|
4924
|
-
description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
4925
4964
|
valueName: "value",
|
|
4926
4965
|
together: ["freight-inbound-iso-code"],
|
|
4927
4966
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -4950,7 +4989,7 @@ const surfaceCommands = [
|
|
|
4950
4989
|
{
|
|
4951
4990
|
name: "freight-outbound-value",
|
|
4952
4991
|
jsonPath: ["freightOutbound", "amount"],
|
|
4953
|
-
description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
4954
4993
|
valueName: "value",
|
|
4955
4994
|
together: ["freight-outbound-iso-code"],
|
|
4956
4995
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -4992,7 +5031,7 @@ const surfaceCommands = [
|
|
|
4992
5031
|
{
|
|
4993
5032
|
name: "in-service-date",
|
|
4994
5033
|
jsonPath: ["inServiceDate"],
|
|
4995
|
-
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",
|
|
4996
5035
|
valueName: "value",
|
|
4997
5036
|
nullable: true,
|
|
4998
5037
|
schema: z.string()
|
|
@@ -5008,7 +5047,7 @@ const surfaceCommands = [
|
|
|
5008
5047
|
{
|
|
5009
5048
|
name: "installation-value",
|
|
5010
5049
|
jsonPath: ["installation", "amount"],
|
|
5011
|
-
description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
5012
5051
|
valueName: "value",
|
|
5013
5052
|
together: ["installation-iso-code"],
|
|
5014
5053
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5037,7 +5076,7 @@ const surfaceCommands = [
|
|
|
5037
5076
|
{
|
|
5038
5077
|
name: "interest-value",
|
|
5039
5078
|
jsonPath: ["interest", "amount"],
|
|
5040
|
-
description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5041
5080
|
valueName: "value",
|
|
5042
5081
|
together: ["interest-iso-code"],
|
|
5043
5082
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5082,7 +5121,7 @@ const surfaceCommands = [
|
|
|
5082
5121
|
{
|
|
5083
5122
|
name: "salvage-value-value",
|
|
5084
5123
|
jsonPath: ["salvageValue", "amount"],
|
|
5085
|
-
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
|
|
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",
|
|
5086
5125
|
valueName: "value",
|
|
5087
5126
|
together: ["salvage-value-iso-code"],
|
|
5088
5127
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5103,7 +5142,7 @@ const surfaceCommands = [
|
|
|
5103
5142
|
{
|
|
5104
5143
|
name: "serial",
|
|
5105
5144
|
jsonPath: ["serial"],
|
|
5106
|
-
description: "The asset's serial number, unique within
|
|
5145
|
+
description: "The asset's serial number, unique within your organization",
|
|
5107
5146
|
valueName: "value",
|
|
5108
5147
|
required: true,
|
|
5109
5148
|
schema: z.string()
|
|
@@ -5119,7 +5158,7 @@ const surfaceCommands = [
|
|
|
5119
5158
|
{
|
|
5120
5159
|
name: "simple-cost-basis-value",
|
|
5121
5160
|
jsonPath: ["simpleCostBasis", "amount"],
|
|
5122
|
-
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
|
|
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",
|
|
5123
5162
|
valueName: "value",
|
|
5124
5163
|
together: ["simple-cost-basis-iso-code"],
|
|
5125
5164
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5148,7 +5187,7 @@ const surfaceCommands = [
|
|
|
5148
5187
|
{
|
|
5149
5188
|
name: "tariffs-value",
|
|
5150
5189
|
jsonPath: ["tariffs", "amount"],
|
|
5151
|
-
description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5152
5191
|
valueName: "value",
|
|
5153
5192
|
together: ["tariffs-iso-code"],
|
|
5154
5193
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5177,7 +5216,7 @@ const surfaceCommands = [
|
|
|
5177
5216
|
{
|
|
5178
5217
|
name: "tax-value",
|
|
5179
5218
|
jsonPath: ["tax", "amount"],
|
|
5180
|
-
description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5181
5220
|
valueName: "value",
|
|
5182
5221
|
together: ["tax-iso-code"],
|
|
5183
5222
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5307,6 +5346,11 @@ const surfaceCommands = [
|
|
|
5307
5346
|
"shipAt": ["string", "null"],
|
|
5308
5347
|
"shipAtTimezone": ["string", "null"]
|
|
5309
5348
|
},
|
|
5349
|
+
elementRequired: [
|
|
5350
|
+
"assetId",
|
|
5351
|
+
"destinationId",
|
|
5352
|
+
"originId"
|
|
5353
|
+
],
|
|
5310
5354
|
schema: z.array(z.string())
|
|
5311
5355
|
}],
|
|
5312
5356
|
body: { "fields": { "moves": { "items": { "fields": {
|
|
@@ -5350,6 +5394,7 @@ const surfaceCommands = [
|
|
|
5350
5394
|
"deliverAt": ["string", "null"],
|
|
5351
5395
|
"shipAt": ["string", "null"]
|
|
5352
5396
|
},
|
|
5397
|
+
elementRequired: ["assetId", "id"],
|
|
5353
5398
|
schema: z.array(z.string())
|
|
5354
5399
|
}],
|
|
5355
5400
|
body: { "fields": { "moves": { "items": { "fields": {
|
|
@@ -5441,6 +5486,7 @@ const surfaceCommands = [
|
|
|
5441
5486
|
"string",
|
|
5442
5487
|
"null"
|
|
5443
5488
|
] },
|
|
5489
|
+
elementRequired: ["fieldId"],
|
|
5444
5490
|
schema: z.array(z.string())
|
|
5445
5491
|
},
|
|
5446
5492
|
{
|
|
@@ -5485,7 +5531,7 @@ const surfaceCommands = [
|
|
|
5485
5531
|
{
|
|
5486
5532
|
name: "allocated-indirect",
|
|
5487
5533
|
jsonPath: ["allocatedIndirect"],
|
|
5488
|
-
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",
|
|
5489
5535
|
valueName: "null",
|
|
5490
5536
|
nullable: true,
|
|
5491
5537
|
schema: z.null()
|
|
@@ -5493,7 +5539,7 @@ const surfaceCommands = [
|
|
|
5493
5539
|
{
|
|
5494
5540
|
name: "allocated-indirect-value",
|
|
5495
5541
|
jsonPath: ["allocatedIndirect", "amount"],
|
|
5496
|
-
description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5497
5543
|
valueName: "value",
|
|
5498
5544
|
together: ["allocated-indirect-iso-code"],
|
|
5499
5545
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5501,7 +5547,7 @@ const surfaceCommands = [
|
|
|
5501
5547
|
{
|
|
5502
5548
|
name: "allocated-indirect-iso-code",
|
|
5503
5549
|
jsonPath: ["allocatedIndirect", "isoCode"],
|
|
5504
|
-
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",
|
|
5505
5551
|
valueName: "value",
|
|
5506
5552
|
together: ["allocated-indirect-value"],
|
|
5507
5553
|
schema: toEnum([
|
|
@@ -5514,7 +5560,7 @@ const surfaceCommands = [
|
|
|
5514
5560
|
{
|
|
5515
5561
|
name: "bill-of-materials",
|
|
5516
5562
|
jsonPath: ["billOfMaterials"],
|
|
5517
|
-
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",
|
|
5518
5564
|
valueName: "null",
|
|
5519
5565
|
nullable: true,
|
|
5520
5566
|
schema: z.null()
|
|
@@ -5522,7 +5568,7 @@ const surfaceCommands = [
|
|
|
5522
5568
|
{
|
|
5523
5569
|
name: "bill-of-materials-value",
|
|
5524
5570
|
jsonPath: ["billOfMaterials", "amount"],
|
|
5525
|
-
description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5526
5572
|
valueName: "value",
|
|
5527
5573
|
together: ["bill-of-materials-iso-code"],
|
|
5528
5574
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5530,7 +5576,7 @@ const surfaceCommands = [
|
|
|
5530
5576
|
{
|
|
5531
5577
|
name: "bill-of-materials-iso-code",
|
|
5532
5578
|
jsonPath: ["billOfMaterials", "isoCode"],
|
|
5533
|
-
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",
|
|
5534
5580
|
valueName: "value",
|
|
5535
5581
|
together: ["bill-of-materials-value"],
|
|
5536
5582
|
schema: toEnum([
|
|
@@ -5543,7 +5589,7 @@ const surfaceCommands = [
|
|
|
5543
5589
|
{
|
|
5544
5590
|
name: "cost-currency-code",
|
|
5545
5591
|
jsonPath: ["costCurrencyCode"],
|
|
5546
|
-
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
|
|
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",
|
|
5547
5593
|
valueName: "value",
|
|
5548
5594
|
schema: toEnum([
|
|
5549
5595
|
"CAD",
|
|
@@ -5568,7 +5614,7 @@ const surfaceCommands = [
|
|
|
5568
5614
|
{
|
|
5569
5615
|
name: "direct-labor",
|
|
5570
5616
|
jsonPath: ["directLabor"],
|
|
5571
|
-
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",
|
|
5572
5618
|
valueName: "null",
|
|
5573
5619
|
nullable: true,
|
|
5574
5620
|
schema: z.null()
|
|
@@ -5576,7 +5622,7 @@ const surfaceCommands = [
|
|
|
5576
5622
|
{
|
|
5577
5623
|
name: "direct-labor-value",
|
|
5578
5624
|
jsonPath: ["directLabor", "amount"],
|
|
5579
|
-
description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5580
5626
|
valueName: "value",
|
|
5581
5627
|
together: ["direct-labor-iso-code"],
|
|
5582
5628
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5584,7 +5630,7 @@ const surfaceCommands = [
|
|
|
5584
5630
|
{
|
|
5585
5631
|
name: "direct-labor-iso-code",
|
|
5586
5632
|
jsonPath: ["directLabor", "isoCode"],
|
|
5587
|
-
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",
|
|
5588
5634
|
valueName: "value",
|
|
5589
5635
|
together: ["direct-labor-value"],
|
|
5590
5636
|
schema: toEnum([
|
|
@@ -5597,7 +5643,7 @@ const surfaceCommands = [
|
|
|
5597
5643
|
{
|
|
5598
5644
|
name: "freight-inbound",
|
|
5599
5645
|
jsonPath: ["freightInbound"],
|
|
5600
|
-
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",
|
|
5601
5647
|
valueName: "null",
|
|
5602
5648
|
nullable: true,
|
|
5603
5649
|
schema: z.null()
|
|
@@ -5605,7 +5651,7 @@ const surfaceCommands = [
|
|
|
5605
5651
|
{
|
|
5606
5652
|
name: "freight-inbound-value",
|
|
5607
5653
|
jsonPath: ["freightInbound", "amount"],
|
|
5608
|
-
description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5609
5655
|
valueName: "value",
|
|
5610
5656
|
together: ["freight-inbound-iso-code"],
|
|
5611
5657
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5613,7 +5659,7 @@ const surfaceCommands = [
|
|
|
5613
5659
|
{
|
|
5614
5660
|
name: "freight-inbound-iso-code",
|
|
5615
5661
|
jsonPath: ["freightInbound", "isoCode"],
|
|
5616
|
-
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",
|
|
5617
5663
|
valueName: "value",
|
|
5618
5664
|
together: ["freight-inbound-value"],
|
|
5619
5665
|
schema: toEnum([
|
|
@@ -5626,7 +5672,7 @@ const surfaceCommands = [
|
|
|
5626
5672
|
{
|
|
5627
5673
|
name: "freight-outbound",
|
|
5628
5674
|
jsonPath: ["freightOutbound"],
|
|
5629
|
-
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",
|
|
5630
5676
|
valueName: "null",
|
|
5631
5677
|
nullable: true,
|
|
5632
5678
|
schema: z.null()
|
|
@@ -5634,7 +5680,7 @@ const surfaceCommands = [
|
|
|
5634
5680
|
{
|
|
5635
5681
|
name: "freight-outbound-value",
|
|
5636
5682
|
jsonPath: ["freightOutbound", "amount"],
|
|
5637
|
-
description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
5638
5684
|
valueName: "value",
|
|
5639
5685
|
together: ["freight-outbound-iso-code"],
|
|
5640
5686
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5642,7 +5688,7 @@ const surfaceCommands = [
|
|
|
5642
5688
|
{
|
|
5643
5689
|
name: "freight-outbound-iso-code",
|
|
5644
5690
|
jsonPath: ["freightOutbound", "isoCode"],
|
|
5645
|
-
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",
|
|
5646
5692
|
valueName: "value",
|
|
5647
5693
|
together: ["freight-outbound-value"],
|
|
5648
5694
|
schema: toEnum([
|
|
@@ -5655,7 +5701,7 @@ const surfaceCommands = [
|
|
|
5655
5701
|
{
|
|
5656
5702
|
name: "in-service-date",
|
|
5657
5703
|
jsonPath: ["inServiceDate"],
|
|
5658
|
-
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",
|
|
5659
5705
|
valueName: "value",
|
|
5660
5706
|
nullable: true,
|
|
5661
5707
|
schema: z.string()
|
|
@@ -5663,7 +5709,7 @@ const surfaceCommands = [
|
|
|
5663
5709
|
{
|
|
5664
5710
|
name: "installation",
|
|
5665
5711
|
jsonPath: ["installation"],
|
|
5666
|
-
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",
|
|
5667
5713
|
valueName: "null",
|
|
5668
5714
|
nullable: true,
|
|
5669
5715
|
schema: z.null()
|
|
@@ -5671,7 +5717,7 @@ const surfaceCommands = [
|
|
|
5671
5717
|
{
|
|
5672
5718
|
name: "installation-value",
|
|
5673
5719
|
jsonPath: ["installation", "amount"],
|
|
5674
|
-
description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
5675
5721
|
valueName: "value",
|
|
5676
5722
|
together: ["installation-iso-code"],
|
|
5677
5723
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5679,7 +5725,7 @@ const surfaceCommands = [
|
|
|
5679
5725
|
{
|
|
5680
5726
|
name: "installation-iso-code",
|
|
5681
5727
|
jsonPath: ["installation", "isoCode"],
|
|
5682
|
-
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",
|
|
5683
5729
|
valueName: "value",
|
|
5684
5730
|
together: ["installation-value"],
|
|
5685
5731
|
schema: toEnum([
|
|
@@ -5692,7 +5738,7 @@ const surfaceCommands = [
|
|
|
5692
5738
|
{
|
|
5693
5739
|
name: "interest",
|
|
5694
5740
|
jsonPath: ["interest"],
|
|
5695
|
-
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",
|
|
5696
5742
|
valueName: "null",
|
|
5697
5743
|
nullable: true,
|
|
5698
5744
|
schema: z.null()
|
|
@@ -5700,7 +5746,7 @@ const surfaceCommands = [
|
|
|
5700
5746
|
{
|
|
5701
5747
|
name: "interest-value",
|
|
5702
5748
|
jsonPath: ["interest", "amount"],
|
|
5703
|
-
description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5704
5750
|
valueName: "value",
|
|
5705
5751
|
together: ["interest-iso-code"],
|
|
5706
5752
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5708,7 +5754,7 @@ const surfaceCommands = [
|
|
|
5708
5754
|
{
|
|
5709
5755
|
name: "interest-iso-code",
|
|
5710
5756
|
jsonPath: ["interest", "isoCode"],
|
|
5711
|
-
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",
|
|
5712
5758
|
valueName: "value",
|
|
5713
5759
|
together: ["interest-value"],
|
|
5714
5760
|
schema: toEnum([
|
|
@@ -5737,7 +5783,7 @@ const surfaceCommands = [
|
|
|
5737
5783
|
{
|
|
5738
5784
|
name: "salvage-value-value",
|
|
5739
5785
|
jsonPath: ["salvageValue", "amount"],
|
|
5740
|
-
description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string with at
|
|
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",
|
|
5741
5787
|
valueName: "value",
|
|
5742
5788
|
together: ["salvage-value-iso-code"],
|
|
5743
5789
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5758,7 +5804,7 @@ const surfaceCommands = [
|
|
|
5758
5804
|
{
|
|
5759
5805
|
name: "simple-cost-basis",
|
|
5760
5806
|
jsonPath: ["simpleCostBasis"],
|
|
5761
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
5762
5808
|
valueName: "null",
|
|
5763
5809
|
nullable: true,
|
|
5764
5810
|
schema: z.null()
|
|
@@ -5766,7 +5812,7 @@ const surfaceCommands = [
|
|
|
5766
5812
|
{
|
|
5767
5813
|
name: "simple-cost-basis-value",
|
|
5768
5814
|
jsonPath: ["simpleCostBasis", "amount"],
|
|
5769
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
5770
5816
|
valueName: "value",
|
|
5771
5817
|
together: ["simple-cost-basis-iso-code"],
|
|
5772
5818
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5774,7 +5820,7 @@ const surfaceCommands = [
|
|
|
5774
5820
|
{
|
|
5775
5821
|
name: "simple-cost-basis-iso-code",
|
|
5776
5822
|
jsonPath: ["simpleCostBasis", "isoCode"],
|
|
5777
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
5778
5824
|
valueName: "value",
|
|
5779
5825
|
together: ["simple-cost-basis-value"],
|
|
5780
5826
|
schema: toEnum([
|
|
@@ -5787,7 +5833,7 @@ const surfaceCommands = [
|
|
|
5787
5833
|
{
|
|
5788
5834
|
name: "tariffs",
|
|
5789
5835
|
jsonPath: ["tariffs"],
|
|
5790
|
-
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",
|
|
5791
5837
|
valueName: "null",
|
|
5792
5838
|
nullable: true,
|
|
5793
5839
|
schema: z.null()
|
|
@@ -5795,7 +5841,7 @@ const surfaceCommands = [
|
|
|
5795
5841
|
{
|
|
5796
5842
|
name: "tariffs-value",
|
|
5797
5843
|
jsonPath: ["tariffs", "amount"],
|
|
5798
|
-
description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5799
5845
|
valueName: "value",
|
|
5800
5846
|
together: ["tariffs-iso-code"],
|
|
5801
5847
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5803,7 +5849,7 @@ const surfaceCommands = [
|
|
|
5803
5849
|
{
|
|
5804
5850
|
name: "tariffs-iso-code",
|
|
5805
5851
|
jsonPath: ["tariffs", "isoCode"],
|
|
5806
|
-
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",
|
|
5807
5853
|
valueName: "value",
|
|
5808
5854
|
together: ["tariffs-value"],
|
|
5809
5855
|
schema: toEnum([
|
|
@@ -5816,7 +5862,7 @@ const surfaceCommands = [
|
|
|
5816
5862
|
{
|
|
5817
5863
|
name: "tax",
|
|
5818
5864
|
jsonPath: ["tax"],
|
|
5819
|
-
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",
|
|
5820
5866
|
valueName: "null",
|
|
5821
5867
|
nullable: true,
|
|
5822
5868
|
schema: z.null()
|
|
@@ -5824,7 +5870,7 @@ const surfaceCommands = [
|
|
|
5824
5870
|
{
|
|
5825
5871
|
name: "tax-value",
|
|
5826
5872
|
jsonPath: ["tax", "amount"],
|
|
5827
|
-
description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
5828
5874
|
valueName: "value",
|
|
5829
5875
|
together: ["tax-iso-code"],
|
|
5830
5876
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -5832,7 +5878,7 @@ const surfaceCommands = [
|
|
|
5832
5878
|
{
|
|
5833
5879
|
name: "tax-iso-code",
|
|
5834
5880
|
jsonPath: ["tax", "isoCode"],
|
|
5835
|
-
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",
|
|
5836
5882
|
valueName: "value",
|
|
5837
5883
|
together: ["tax-value"],
|
|
5838
5884
|
schema: toEnum([
|
|
@@ -5941,7 +5987,7 @@ const surfaceCommands = [
|
|
|
5941
5987
|
subcommands: [defineOperation({
|
|
5942
5988
|
name: "create",
|
|
5943
5989
|
summary: "Create asset cost adjustment",
|
|
5944
|
-
example: "hardfin asset cost-adjustment create ast_4f9xk2mq7plr8stz --adjustment-type <value> --amount-value <value> --amount-iso-code <value>",
|
|
5990
|
+
example: "hardfin asset cost-adjustment create ast_4f9xk2mq7plr8stz --adjustment-type <value> --amount-value <value> --amount-iso-code <value> --effective-date <value> --reason <value>",
|
|
5945
5991
|
method: "POST",
|
|
5946
5992
|
path: "/asset/{assetKey}/cost-adjustment",
|
|
5947
5993
|
pathParameters: [{
|
|
@@ -5962,7 +6008,7 @@ const surfaceCommands = [
|
|
|
5962
6008
|
{
|
|
5963
6009
|
name: "amount-value",
|
|
5964
6010
|
jsonPath: ["amount", "amount"],
|
|
5965
|
-
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
|
|
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",
|
|
5966
6012
|
valueName: "value",
|
|
5967
6013
|
required: true,
|
|
5968
6014
|
together: ["amount-iso-code"],
|
|
@@ -6220,7 +6266,7 @@ const surfaceCommands = [
|
|
|
6220
6266
|
{
|
|
6221
6267
|
name: "sale-price-value",
|
|
6222
6268
|
jsonPath: ["salePrice", "amount"],
|
|
6223
|
-
description: "What the customer paid for the asset: the exact value as a decimal string with at
|
|
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",
|
|
6224
6270
|
valueName: "value",
|
|
6225
6271
|
together: ["sale-price-iso-code"],
|
|
6226
6272
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -6332,7 +6378,7 @@ const surfaceCommands = [
|
|
|
6332
6378
|
{
|
|
6333
6379
|
name: "sale-price-value",
|
|
6334
6380
|
jsonPath: ["salePrice", "amount"],
|
|
6335
|
-
description: "What the owner paid for the asset: the exact value as a decimal string with at
|
|
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",
|
|
6336
6382
|
valueName: "value",
|
|
6337
6383
|
together: ["sale-price-iso-code"],
|
|
6338
6384
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -6410,7 +6456,7 @@ const surfaceCommands = [
|
|
|
6410
6456
|
{
|
|
6411
6457
|
name: "disposal-price",
|
|
6412
6458
|
jsonPath: ["disposalPrice"],
|
|
6413
|
-
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",
|
|
6414
6460
|
valueName: "null",
|
|
6415
6461
|
nullable: true,
|
|
6416
6462
|
schema: z.null()
|
|
@@ -6418,7 +6464,7 @@ const surfaceCommands = [
|
|
|
6418
6464
|
{
|
|
6419
6465
|
name: "disposal-price-value",
|
|
6420
6466
|
jsonPath: ["disposalPrice", "amount"],
|
|
6421
|
-
description: "What the scrapped asset was sold for: the exact value as a decimal string with at
|
|
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",
|
|
6422
6468
|
valueName: "value",
|
|
6423
6469
|
together: ["disposal-price-iso-code"],
|
|
6424
6470
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -6426,7 +6472,7 @@ const surfaceCommands = [
|
|
|
6426
6472
|
{
|
|
6427
6473
|
name: "disposal-price-iso-code",
|
|
6428
6474
|
jsonPath: ["disposalPrice", "isoCode"],
|
|
6429
|
-
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",
|
|
6430
6476
|
valueName: "value",
|
|
6431
6477
|
together: ["disposal-price-value"],
|
|
6432
6478
|
schema: toEnum([
|
|
@@ -6815,7 +6861,7 @@ const surfaceCommands = [
|
|
|
6815
6861
|
{
|
|
6816
6862
|
name: "total-price-override",
|
|
6817
6863
|
jsonPath: ["totalPriceOverride"],
|
|
6818
|
-
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",
|
|
6819
6865
|
valueName: "null",
|
|
6820
6866
|
nullable: true,
|
|
6821
6867
|
schema: z.null()
|
|
@@ -6823,7 +6869,7 @@ const surfaceCommands = [
|
|
|
6823
6869
|
{
|
|
6824
6870
|
name: "total-price-override-value",
|
|
6825
6871
|
jsonPath: ["totalPriceOverride", "amount"],
|
|
6826
|
-
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
|
|
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",
|
|
6827
6873
|
valueName: "value",
|
|
6828
6874
|
together: ["total-price-override-iso-code"],
|
|
6829
6875
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -6831,7 +6877,7 @@ const surfaceCommands = [
|
|
|
6831
6877
|
{
|
|
6832
6878
|
name: "total-price-override-iso-code",
|
|
6833
6879
|
jsonPath: ["totalPriceOverride", "isoCode"],
|
|
6834
|
-
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",
|
|
6835
6881
|
valueName: "value",
|
|
6836
6882
|
together: ["total-price-override-value"],
|
|
6837
6883
|
schema: toEnum([
|
|
@@ -6965,7 +7011,7 @@ const surfaceCommands = [
|
|
|
6965
7011
|
{
|
|
6966
7012
|
name: "sync-statuses",
|
|
6967
7013
|
queryName: "syncStatuses",
|
|
6968
|
-
description: "The
|
|
7014
|
+
description: "The integration sync statuses to return: in-sync, out-of-sync, or not-linked",
|
|
6969
7015
|
valueName: "value",
|
|
6970
7016
|
repeatable: true,
|
|
6971
7017
|
schema: z.array(toEnum([
|
|
@@ -7373,7 +7419,7 @@ const surfaceCommands = [
|
|
|
7373
7419
|
{
|
|
7374
7420
|
name: "fulfillment-order-keys",
|
|
7375
7421
|
queryName: "fulfillmentOrderKeys",
|
|
7376
|
-
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",
|
|
7377
7423
|
valueName: "value",
|
|
7378
7424
|
repeatable: true,
|
|
7379
7425
|
schema: z.array(z.string())
|
|
@@ -7381,7 +7427,7 @@ const surfaceCommands = [
|
|
|
7381
7427
|
{
|
|
7382
7428
|
name: "fulfillment-order-ids",
|
|
7383
7429
|
queryName: "fulfillmentOrderIds",
|
|
7384
|
-
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",
|
|
7385
7431
|
valueName: "uuid",
|
|
7386
7432
|
repeatable: true,
|
|
7387
7433
|
schema: z.array(z.uuid())
|
|
@@ -7418,7 +7464,7 @@ const surfaceCommands = [
|
|
|
7418
7464
|
{
|
|
7419
7465
|
name: "from-location-ids",
|
|
7420
7466
|
queryName: "fromLocationIds",
|
|
7421
|
-
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",
|
|
7422
7468
|
valueName: "uuid",
|
|
7423
7469
|
repeatable: true,
|
|
7424
7470
|
schema: z.array(z.uuid())
|
|
@@ -7426,7 +7472,7 @@ const surfaceCommands = [
|
|
|
7426
7472
|
{
|
|
7427
7473
|
name: "to-location-ids",
|
|
7428
7474
|
queryName: "toLocationIds",
|
|
7429
|
-
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",
|
|
7430
7476
|
valueName: "uuid",
|
|
7431
7477
|
repeatable: true,
|
|
7432
7478
|
schema: z.array(z.uuid())
|
|
@@ -7434,7 +7480,7 @@ const surfaceCommands = [
|
|
|
7434
7480
|
{
|
|
7435
7481
|
name: "from-customer-ids",
|
|
7436
7482
|
queryName: "fromCustomerIds",
|
|
7437
|
-
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",
|
|
7438
7484
|
valueName: "uuid",
|
|
7439
7485
|
repeatable: true,
|
|
7440
7486
|
schema: z.array(z.uuid())
|
|
@@ -7442,7 +7488,7 @@ const surfaceCommands = [
|
|
|
7442
7488
|
{
|
|
7443
7489
|
name: "to-customer-ids",
|
|
7444
7490
|
queryName: "toCustomerIds",
|
|
7445
|
-
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",
|
|
7446
7492
|
valueName: "uuid",
|
|
7447
7493
|
repeatable: true,
|
|
7448
7494
|
schema: z.array(z.uuid())
|
|
@@ -7450,7 +7496,7 @@ const surfaceCommands = [
|
|
|
7450
7496
|
{
|
|
7451
7497
|
name: "from-location-company-types",
|
|
7452
7498
|
queryName: "fromLocationCompanyTypes",
|
|
7453
|
-
description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
7454
7500
|
valueName: "value",
|
|
7455
7501
|
repeatable: true,
|
|
7456
7502
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -7458,7 +7504,7 @@ const surfaceCommands = [
|
|
|
7458
7504
|
{
|
|
7459
7505
|
name: "to-location-company-types",
|
|
7460
7506
|
queryName: "toLocationCompanyTypes",
|
|
7461
|
-
description: "The kind of site listed orders ship to, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
7462
7508
|
valueName: "value",
|
|
7463
7509
|
repeatable: true,
|
|
7464
7510
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -7509,6 +7555,7 @@ const surfaceCommands = [
|
|
|
7509
7555
|
element: ["itemId", "requestedQuantity"],
|
|
7510
7556
|
elementUuids: ["itemId"],
|
|
7511
7557
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
7558
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
7512
7559
|
schema: z.array(z.string())
|
|
7513
7560
|
},
|
|
7514
7561
|
{
|
|
@@ -7613,18 +7660,19 @@ const surfaceCommands = [
|
|
|
7613
7660
|
{
|
|
7614
7661
|
name: "item",
|
|
7615
7662
|
jsonPath: ["items"],
|
|
7616
|
-
description: "items",
|
|
7663
|
+
description: "The order's full set of line items, from 1 to 50, replacing the lines it had",
|
|
7617
7664
|
valueName: "itemId=,requestedQuantity=",
|
|
7618
7665
|
repeatable: true,
|
|
7619
7666
|
element: ["itemId", "requestedQuantity"],
|
|
7620
7667
|
elementUuids: ["itemId"],
|
|
7621
7668
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
7669
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
7622
7670
|
schema: z.array(z.string())
|
|
7623
7671
|
},
|
|
7624
7672
|
{
|
|
7625
7673
|
name: "order-notes",
|
|
7626
7674
|
jsonPath: ["orderNotes"],
|
|
7627
|
-
description: "A note about the order, or null to clear it, and the one field an order that left draft accepts
|
|
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",
|
|
7628
7676
|
valueName: "value",
|
|
7629
7677
|
nullable: true,
|
|
7630
7678
|
schema: z.string()
|
|
@@ -7912,7 +7960,7 @@ const surfaceCommands = [
|
|
|
7912
7960
|
{
|
|
7913
7961
|
name: "exclude-linked-integration",
|
|
7914
7962
|
queryName: "excludeLinkedIntegration",
|
|
7915
|
-
description: "
|
|
7963
|
+
description: "QBO or NETSUITE, to leave out the items already linked to that integration",
|
|
7916
7964
|
valueName: "value",
|
|
7917
7965
|
schema: toEnum([
|
|
7918
7966
|
"HUBSPOT",
|
|
@@ -7952,7 +8000,7 @@ const surfaceCommands = [
|
|
|
7952
8000
|
{
|
|
7953
8001
|
name: "name",
|
|
7954
8002
|
jsonPath: ["name"],
|
|
7955
|
-
description: "The item's display name",
|
|
8003
|
+
description: "The item's display name, unique within your organization in any case",
|
|
7956
8004
|
valueName: "value",
|
|
7957
8005
|
required: true,
|
|
7958
8006
|
schema: z.string()
|
|
@@ -7960,7 +8008,7 @@ const surfaceCommands = [
|
|
|
7960
8008
|
{
|
|
7961
8009
|
name: "sku",
|
|
7962
8010
|
jsonPath: ["sku"],
|
|
7963
|
-
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",
|
|
7964
8012
|
valueName: "value",
|
|
7965
8013
|
required: true,
|
|
7966
8014
|
schema: z.string()
|
|
@@ -7980,7 +8028,7 @@ const surfaceCommands = [
|
|
|
7980
8028
|
{
|
|
7981
8029
|
name: "unit-of-measure",
|
|
7982
8030
|
jsonPath: ["unitOfMeasure"],
|
|
7983
|
-
description: "The unit a BULK item's quantities are counted in,
|
|
8031
|
+
description: "The unit a BULK item's quantities are counted in, required for a BULK item and ignored for SERVICE and DEVICE items",
|
|
7984
8032
|
valueName: "value",
|
|
7985
8033
|
schema: toEnum([
|
|
7986
8034
|
"BG",
|
|
@@ -8007,7 +8055,6 @@ const surfaceCommands = [
|
|
|
8007
8055
|
"INH",
|
|
8008
8056
|
"INK",
|
|
8009
8057
|
"INQ",
|
|
8010
|
-
"KG",
|
|
8011
8058
|
"KGM",
|
|
8012
8059
|
"KMT",
|
|
8013
8060
|
"KT",
|
|
@@ -8082,7 +8129,7 @@ const surfaceCommands = [
|
|
|
8082
8129
|
{
|
|
8083
8130
|
name: "accepts-bulk-serials",
|
|
8084
8131
|
jsonPath: ["acceptsBulkSerials"],
|
|
8085
|
-
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",
|
|
8086
8133
|
negatable: true,
|
|
8087
8134
|
nullable: true,
|
|
8088
8135
|
schema: z.boolean()
|
|
@@ -8111,6 +8158,7 @@ const surfaceCommands = [
|
|
|
8111
8158
|
"order": ["integer"],
|
|
8112
8159
|
"section": ["integer"]
|
|
8113
8160
|
},
|
|
8161
|
+
elementRequired: ["fieldId"],
|
|
8114
8162
|
schema: z.array(z.string())
|
|
8115
8163
|
},
|
|
8116
8164
|
{
|
|
@@ -8123,14 +8171,14 @@ const surfaceCommands = [
|
|
|
8123
8171
|
{
|
|
8124
8172
|
name: "name",
|
|
8125
8173
|
jsonPath: ["name"],
|
|
8126
|
-
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",
|
|
8127
8175
|
valueName: "value",
|
|
8128
8176
|
schema: z.string()
|
|
8129
8177
|
},
|
|
8130
8178
|
{
|
|
8131
8179
|
name: "sku",
|
|
8132
8180
|
jsonPath: ["sku"],
|
|
8133
|
-
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",
|
|
8134
8182
|
valueName: "value",
|
|
8135
8183
|
schema: z.string()
|
|
8136
8184
|
},
|
|
@@ -8183,7 +8231,7 @@ const surfaceCommands = [
|
|
|
8183
8231
|
{
|
|
8184
8232
|
name: "allocated-indirect",
|
|
8185
8233
|
jsonPath: ["allocatedIndirect"],
|
|
8186
|
-
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",
|
|
8187
8235
|
valueName: "null",
|
|
8188
8236
|
nullable: true,
|
|
8189
8237
|
schema: z.null()
|
|
@@ -8191,7 +8239,7 @@ const surfaceCommands = [
|
|
|
8191
8239
|
{
|
|
8192
8240
|
name: "allocated-indirect-value",
|
|
8193
8241
|
jsonPath: ["allocatedIndirect", "amount"],
|
|
8194
|
-
description: "One unit's share of overhead, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8195
8243
|
valueName: "value",
|
|
8196
8244
|
together: ["allocated-indirect-iso-code"],
|
|
8197
8245
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8199,7 +8247,7 @@ const surfaceCommands = [
|
|
|
8199
8247
|
{
|
|
8200
8248
|
name: "allocated-indirect-iso-code",
|
|
8201
8249
|
jsonPath: ["allocatedIndirect", "isoCode"],
|
|
8202
|
-
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",
|
|
8203
8251
|
valueName: "value",
|
|
8204
8252
|
together: ["allocated-indirect-value"],
|
|
8205
8253
|
schema: toEnum([
|
|
@@ -8212,7 +8260,7 @@ const surfaceCommands = [
|
|
|
8212
8260
|
{
|
|
8213
8261
|
name: "bill-of-materials",
|
|
8214
8262
|
jsonPath: ["billOfMaterials"],
|
|
8215
|
-
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",
|
|
8216
8264
|
valueName: "null",
|
|
8217
8265
|
nullable: true,
|
|
8218
8266
|
schema: z.null()
|
|
@@ -8220,7 +8268,7 @@ const surfaceCommands = [
|
|
|
8220
8268
|
{
|
|
8221
8269
|
name: "bill-of-materials-value",
|
|
8222
8270
|
jsonPath: ["billOfMaterials", "amount"],
|
|
8223
|
-
description: "The parts cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8224
8272
|
valueName: "value",
|
|
8225
8273
|
together: ["bill-of-materials-iso-code"],
|
|
8226
8274
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8228,7 +8276,7 @@ const surfaceCommands = [
|
|
|
8228
8276
|
{
|
|
8229
8277
|
name: "bill-of-materials-iso-code",
|
|
8230
8278
|
jsonPath: ["billOfMaterials", "isoCode"],
|
|
8231
|
-
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",
|
|
8232
8280
|
valueName: "value",
|
|
8233
8281
|
together: ["bill-of-materials-value"],
|
|
8234
8282
|
schema: toEnum([
|
|
@@ -8241,7 +8289,7 @@ const surfaceCommands = [
|
|
|
8241
8289
|
{
|
|
8242
8290
|
name: "cost-currency-code",
|
|
8243
8291
|
jsonPath: ["costCurrencyCode"],
|
|
8244
|
-
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
|
|
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",
|
|
8245
8293
|
valueName: "value",
|
|
8246
8294
|
schema: toEnum([
|
|
8247
8295
|
"CAD",
|
|
@@ -8266,7 +8314,7 @@ const surfaceCommands = [
|
|
|
8266
8314
|
{
|
|
8267
8315
|
name: "direct-labor",
|
|
8268
8316
|
jsonPath: ["directLabor"],
|
|
8269
|
-
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",
|
|
8270
8318
|
valueName: "null",
|
|
8271
8319
|
nullable: true,
|
|
8272
8320
|
schema: z.null()
|
|
@@ -8274,7 +8322,7 @@ const surfaceCommands = [
|
|
|
8274
8322
|
{
|
|
8275
8323
|
name: "direct-labor-value",
|
|
8276
8324
|
jsonPath: ["directLabor", "amount"],
|
|
8277
|
-
description: "The labor cost to build one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8278
8326
|
valueName: "value",
|
|
8279
8327
|
together: ["direct-labor-iso-code"],
|
|
8280
8328
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8282,7 +8330,7 @@ const surfaceCommands = [
|
|
|
8282
8330
|
{
|
|
8283
8331
|
name: "direct-labor-iso-code",
|
|
8284
8332
|
jsonPath: ["directLabor", "isoCode"],
|
|
8285
|
-
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",
|
|
8286
8334
|
valueName: "value",
|
|
8287
8335
|
together: ["direct-labor-value"],
|
|
8288
8336
|
schema: toEnum([
|
|
@@ -8295,7 +8343,7 @@ const surfaceCommands = [
|
|
|
8295
8343
|
{
|
|
8296
8344
|
name: "freight-inbound",
|
|
8297
8345
|
jsonPath: ["freightInbound"],
|
|
8298
|
-
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",
|
|
8299
8347
|
valueName: "null",
|
|
8300
8348
|
nullable: true,
|
|
8301
8349
|
schema: z.null()
|
|
@@ -8303,7 +8351,7 @@ const surfaceCommands = [
|
|
|
8303
8351
|
{
|
|
8304
8352
|
name: "freight-inbound-value",
|
|
8305
8353
|
jsonPath: ["freightInbound", "amount"],
|
|
8306
|
-
description: "The shipping cost to receive one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8307
8355
|
valueName: "value",
|
|
8308
8356
|
together: ["freight-inbound-iso-code"],
|
|
8309
8357
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8311,7 +8359,7 @@ const surfaceCommands = [
|
|
|
8311
8359
|
{
|
|
8312
8360
|
name: "freight-inbound-iso-code",
|
|
8313
8361
|
jsonPath: ["freightInbound", "isoCode"],
|
|
8314
|
-
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",
|
|
8315
8363
|
valueName: "value",
|
|
8316
8364
|
together: ["freight-inbound-value"],
|
|
8317
8365
|
schema: toEnum([
|
|
@@ -8324,7 +8372,7 @@ const surfaceCommands = [
|
|
|
8324
8372
|
{
|
|
8325
8373
|
name: "freight-outbound",
|
|
8326
8374
|
jsonPath: ["freightOutbound"],
|
|
8327
|
-
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",
|
|
8328
8376
|
valueName: "null",
|
|
8329
8377
|
nullable: true,
|
|
8330
8378
|
schema: z.null()
|
|
@@ -8332,7 +8380,7 @@ const surfaceCommands = [
|
|
|
8332
8380
|
{
|
|
8333
8381
|
name: "freight-outbound-value",
|
|
8334
8382
|
jsonPath: ["freightOutbound", "amount"],
|
|
8335
|
-
description: "The shipping cost to deploy one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
8336
8384
|
valueName: "value",
|
|
8337
8385
|
together: ["freight-outbound-iso-code"],
|
|
8338
8386
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8340,7 +8388,7 @@ const surfaceCommands = [
|
|
|
8340
8388
|
{
|
|
8341
8389
|
name: "freight-outbound-iso-code",
|
|
8342
8390
|
jsonPath: ["freightOutbound", "isoCode"],
|
|
8343
|
-
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",
|
|
8344
8392
|
valueName: "value",
|
|
8345
8393
|
together: ["freight-outbound-value"],
|
|
8346
8394
|
schema: toEnum([
|
|
@@ -8353,7 +8401,7 @@ const surfaceCommands = [
|
|
|
8353
8401
|
{
|
|
8354
8402
|
name: "installation",
|
|
8355
8403
|
jsonPath: ["installation"],
|
|
8356
|
-
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",
|
|
8357
8405
|
valueName: "null",
|
|
8358
8406
|
nullable: true,
|
|
8359
8407
|
schema: z.null()
|
|
@@ -8361,7 +8409,7 @@ const surfaceCommands = [
|
|
|
8361
8409
|
{
|
|
8362
8410
|
name: "installation-value",
|
|
8363
8411
|
jsonPath: ["installation", "amount"],
|
|
8364
|
-
description: "The cost to install one unit, a deployment cost component: the exact value as a decimal string with at
|
|
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",
|
|
8365
8413
|
valueName: "value",
|
|
8366
8414
|
together: ["installation-iso-code"],
|
|
8367
8415
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8369,7 +8417,7 @@ const surfaceCommands = [
|
|
|
8369
8417
|
{
|
|
8370
8418
|
name: "installation-iso-code",
|
|
8371
8419
|
jsonPath: ["installation", "isoCode"],
|
|
8372
|
-
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",
|
|
8373
8421
|
valueName: "value",
|
|
8374
8422
|
together: ["installation-value"],
|
|
8375
8423
|
schema: toEnum([
|
|
@@ -8382,7 +8430,7 @@ const surfaceCommands = [
|
|
|
8382
8430
|
{
|
|
8383
8431
|
name: "interest",
|
|
8384
8432
|
jsonPath: ["interest"],
|
|
8385
|
-
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",
|
|
8386
8434
|
valueName: "null",
|
|
8387
8435
|
nullable: true,
|
|
8388
8436
|
schema: z.null()
|
|
@@ -8390,7 +8438,7 @@ const surfaceCommands = [
|
|
|
8390
8438
|
{
|
|
8391
8439
|
name: "interest-value",
|
|
8392
8440
|
jsonPath: ["interest", "amount"],
|
|
8393
|
-
description: "The financing cost of one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8394
8442
|
valueName: "value",
|
|
8395
8443
|
together: ["interest-iso-code"],
|
|
8396
8444
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8398,7 +8446,7 @@ const surfaceCommands = [
|
|
|
8398
8446
|
{
|
|
8399
8447
|
name: "interest-iso-code",
|
|
8400
8448
|
jsonPath: ["interest", "isoCode"],
|
|
8401
|
-
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",
|
|
8402
8450
|
valueName: "value",
|
|
8403
8451
|
together: ["interest-value"],
|
|
8404
8452
|
schema: toEnum([
|
|
@@ -8419,7 +8467,7 @@ const surfaceCommands = [
|
|
|
8419
8467
|
{
|
|
8420
8468
|
name: "salvage-value-value",
|
|
8421
8469
|
jsonPath: ["salvageValue", "amount"],
|
|
8422
|
-
description: "The value one unit keeps at the end of its useful life: the exact value as a decimal string with at
|
|
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",
|
|
8423
8471
|
valueName: "value",
|
|
8424
8472
|
together: ["salvage-value-iso-code"],
|
|
8425
8473
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8440,7 +8488,7 @@ const surfaceCommands = [
|
|
|
8440
8488
|
{
|
|
8441
8489
|
name: "simple-cost-basis",
|
|
8442
8490
|
jsonPath: ["simpleCostBasis"],
|
|
8443
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
8444
8492
|
valueName: "null",
|
|
8445
8493
|
nullable: true,
|
|
8446
8494
|
schema: z.null()
|
|
@@ -8448,7 +8496,7 @@ const surfaceCommands = [
|
|
|
8448
8496
|
{
|
|
8449
8497
|
name: "simple-cost-basis-value",
|
|
8450
8498
|
jsonPath: ["simpleCostBasis", "amount"],
|
|
8451
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
8452
8500
|
valueName: "value",
|
|
8453
8501
|
together: ["simple-cost-basis-iso-code"],
|
|
8454
8502
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8456,7 +8504,7 @@ const surfaceCommands = [
|
|
|
8456
8504
|
{
|
|
8457
8505
|
name: "simple-cost-basis-iso-code",
|
|
8458
8506
|
jsonPath: ["simpleCostBasis", "isoCode"],
|
|
8459
|
-
description: "A single cost for one unit, which cannot be sent together with
|
|
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",
|
|
8460
8508
|
valueName: "value",
|
|
8461
8509
|
together: ["simple-cost-basis-value"],
|
|
8462
8510
|
schema: toEnum([
|
|
@@ -8469,7 +8517,7 @@ const surfaceCommands = [
|
|
|
8469
8517
|
{
|
|
8470
8518
|
name: "tariffs",
|
|
8471
8519
|
jsonPath: ["tariffs"],
|
|
8472
|
-
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",
|
|
8473
8521
|
valueName: "null",
|
|
8474
8522
|
nullable: true,
|
|
8475
8523
|
schema: z.null()
|
|
@@ -8477,7 +8525,7 @@ const surfaceCommands = [
|
|
|
8477
8525
|
{
|
|
8478
8526
|
name: "tariffs-value",
|
|
8479
8527
|
jsonPath: ["tariffs", "amount"],
|
|
8480
|
-
description: "The import duty paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8481
8529
|
valueName: "value",
|
|
8482
8530
|
together: ["tariffs-iso-code"],
|
|
8483
8531
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8485,7 +8533,7 @@ const surfaceCommands = [
|
|
|
8485
8533
|
{
|
|
8486
8534
|
name: "tariffs-iso-code",
|
|
8487
8535
|
jsonPath: ["tariffs", "isoCode"],
|
|
8488
|
-
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",
|
|
8489
8537
|
valueName: "value",
|
|
8490
8538
|
together: ["tariffs-value"],
|
|
8491
8539
|
schema: toEnum([
|
|
@@ -8498,7 +8546,7 @@ const surfaceCommands = [
|
|
|
8498
8546
|
{
|
|
8499
8547
|
name: "tax",
|
|
8500
8548
|
jsonPath: ["tax"],
|
|
8501
|
-
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",
|
|
8502
8550
|
valueName: "null",
|
|
8503
8551
|
nullable: true,
|
|
8504
8552
|
schema: z.null()
|
|
@@ -8506,7 +8554,7 @@ const surfaceCommands = [
|
|
|
8506
8554
|
{
|
|
8507
8555
|
name: "tax-value",
|
|
8508
8556
|
jsonPath: ["tax", "amount"],
|
|
8509
|
-
description: "The tax paid on one unit, a cost component: the exact value as a decimal string with at
|
|
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",
|
|
8510
8558
|
valueName: "value",
|
|
8511
8559
|
together: ["tax-iso-code"],
|
|
8512
8560
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -8514,7 +8562,7 @@ const surfaceCommands = [
|
|
|
8514
8562
|
{
|
|
8515
8563
|
name: "tax-iso-code",
|
|
8516
8564
|
jsonPath: ["tax", "isoCode"],
|
|
8517
|
-
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",
|
|
8518
8566
|
valueName: "value",
|
|
8519
8567
|
together: ["tax-value"],
|
|
8520
8568
|
schema: toEnum([
|
|
@@ -8594,7 +8642,7 @@ const surfaceCommands = [
|
|
|
8594
8642
|
defineOperation({
|
|
8595
8643
|
name: "create",
|
|
8596
8644
|
summary: "Create item field",
|
|
8597
|
-
example: "hardfin item field create item_7Hq2Lm9XcR4tWz8K --field-type <value> --label <value> --order <number>",
|
|
8645
|
+
example: "hardfin item field create item_7Hq2Lm9XcR4tWz8K --field-type <value> --label <value> --order <number> --section <number>",
|
|
8598
8646
|
method: "POST",
|
|
8599
8647
|
path: "/item/{itemKey}/field",
|
|
8600
8648
|
pathParameters: [{
|
|
@@ -8624,7 +8672,7 @@ const surfaceCommands = [
|
|
|
8624
8672
|
{
|
|
8625
8673
|
name: "label",
|
|
8626
8674
|
jsonPath: ["label"],
|
|
8627
|
-
description: "The field's display name",
|
|
8675
|
+
description: "The field's display name, unique within its item",
|
|
8628
8676
|
valueName: "value",
|
|
8629
8677
|
required: true,
|
|
8630
8678
|
schema: z.string()
|
|
@@ -8636,7 +8684,7 @@ const surfaceCommands = [
|
|
|
8636
8684
|
valueName: "number",
|
|
8637
8685
|
required: true,
|
|
8638
8686
|
nullable: true,
|
|
8639
|
-
schema: toNumber(z.number().int())
|
|
8687
|
+
schema: toNumber(z.number().int().min(0).max(2147483647))
|
|
8640
8688
|
},
|
|
8641
8689
|
{
|
|
8642
8690
|
name: "section",
|
|
@@ -8645,7 +8693,7 @@ const surfaceCommands = [
|
|
|
8645
8693
|
valueName: "number",
|
|
8646
8694
|
required: true,
|
|
8647
8695
|
nullable: true,
|
|
8648
|
-
schema: toNumber(z.number().int())
|
|
8696
|
+
schema: toNumber(z.number().int().min(0).max(2147483647))
|
|
8649
8697
|
}
|
|
8650
8698
|
],
|
|
8651
8699
|
body: { "fields": {
|
|
@@ -8674,7 +8722,7 @@ const surfaceCommands = [
|
|
|
8674
8722
|
bodyFlags: [{
|
|
8675
8723
|
name: "label",
|
|
8676
8724
|
jsonPath: ["label"],
|
|
8677
|
-
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",
|
|
8678
8726
|
valueName: "value",
|
|
8679
8727
|
schema: z.string()
|
|
8680
8728
|
}],
|
|
@@ -8774,7 +8822,7 @@ const surfaceCommands = [
|
|
|
8774
8822
|
{
|
|
8775
8823
|
name: "search",
|
|
8776
8824
|
queryName: "search",
|
|
8777
|
-
description: "Text to match against
|
|
8825
|
+
description: "Text to match against site, zone and customer names and site addresses, in any case",
|
|
8778
8826
|
valueName: "value",
|
|
8779
8827
|
schema: z.string()
|
|
8780
8828
|
},
|
|
@@ -8795,7 +8843,7 @@ const surfaceCommands = [
|
|
|
8795
8843
|
{
|
|
8796
8844
|
name: "sync-statuses",
|
|
8797
8845
|
queryName: "syncStatuses",
|
|
8798
|
-
description: "The
|
|
8846
|
+
description: "The integration sync statuses to return: in-sync, out-of-sync, or not-linked",
|
|
8799
8847
|
valueName: "value",
|
|
8800
8848
|
repeatable: true,
|
|
8801
8849
|
schema: z.array(toEnum([
|
|
@@ -8907,7 +8955,7 @@ const surfaceCommands = [
|
|
|
8907
8955
|
{
|
|
8908
8956
|
name: "is-inventory",
|
|
8909
8957
|
jsonPath: ["isInventory"],
|
|
8910
|
-
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",
|
|
8911
8959
|
negatable: true,
|
|
8912
8960
|
schema: z.boolean()
|
|
8913
8961
|
},
|
|
@@ -8928,7 +8976,7 @@ const surfaceCommands = [
|
|
|
8928
8976
|
{
|
|
8929
8977
|
name: "name",
|
|
8930
8978
|
jsonPath: ["name"],
|
|
8931
|
-
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",
|
|
8932
8980
|
valueName: "value",
|
|
8933
8981
|
required: true,
|
|
8934
8982
|
schema: z.string()
|
|
@@ -9090,7 +9138,7 @@ const surfaceCommands = [
|
|
|
9090
9138
|
{
|
|
9091
9139
|
name: "is-archived",
|
|
9092
9140
|
jsonPath: ["isArchived"],
|
|
9093
|
-
description: "Whether the location is archived, and archiving a site
|
|
9141
|
+
description: "Whether the location is archived, and archiving or unarchiving a site does the same to all of its zones",
|
|
9094
9142
|
negatable: true,
|
|
9095
9143
|
nullable: true,
|
|
9096
9144
|
schema: z.boolean()
|
|
@@ -9098,7 +9146,7 @@ const surfaceCommands = [
|
|
|
9098
9146
|
{
|
|
9099
9147
|
name: "is-inventory",
|
|
9100
9148
|
jsonPath: ["isInventory"],
|
|
9101
|
-
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",
|
|
9102
9150
|
negatable: true,
|
|
9103
9151
|
nullable: true,
|
|
9104
9152
|
schema: z.boolean()
|
|
@@ -9106,7 +9154,7 @@ const surfaceCommands = [
|
|
|
9106
9154
|
{
|
|
9107
9155
|
name: "is-inventory-override",
|
|
9108
9156
|
jsonPath: ["isInventoryOverride"],
|
|
9109
|
-
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",
|
|
9110
9158
|
negatable: true,
|
|
9111
9159
|
nullable: true,
|
|
9112
9160
|
schema: z.boolean()
|
|
@@ -9122,14 +9170,14 @@ const surfaceCommands = [
|
|
|
9122
9170
|
{
|
|
9123
9171
|
name: "name",
|
|
9124
9172
|
jsonPath: ["name"],
|
|
9125
|
-
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",
|
|
9126
9174
|
valueName: "value",
|
|
9127
9175
|
schema: z.string()
|
|
9128
9176
|
},
|
|
9129
9177
|
{
|
|
9130
9178
|
name: "type",
|
|
9131
9179
|
jsonPath: ["type"],
|
|
9132
|
-
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",
|
|
9133
9181
|
valueName: "value",
|
|
9134
9182
|
nullable: true,
|
|
9135
9183
|
schema: toEnum(["SITE", "ZONE"])
|
|
@@ -9275,7 +9323,7 @@ const surfaceCommands = [
|
|
|
9275
9323
|
{
|
|
9276
9324
|
name: "search",
|
|
9277
9325
|
queryName: "search",
|
|
9278
|
-
description: "Text of three or more characters to find in the project's name or description, its customer's name,
|
|
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",
|
|
9279
9327
|
valueName: "value",
|
|
9280
9328
|
schema: z.string()
|
|
9281
9329
|
},
|
|
@@ -9290,7 +9338,7 @@ const surfaceCommands = [
|
|
|
9290
9338
|
{
|
|
9291
9339
|
name: "item-ids",
|
|
9292
9340
|
queryName: "itemIds",
|
|
9293
|
-
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",
|
|
9294
9342
|
valueName: "uuid",
|
|
9295
9343
|
repeatable: true,
|
|
9296
9344
|
schema: z.array(z.uuid())
|
|
@@ -9344,7 +9392,7 @@ const surfaceCommands = [
|
|
|
9344
9392
|
defineOperation({
|
|
9345
9393
|
name: "create",
|
|
9346
9394
|
summary: "Create project",
|
|
9347
|
-
example: "hardfin project create --line-item
|
|
9395
|
+
example: "hardfin project create --line-item itemId=<value>,transactionType=<value>,aggregationKey=<value>,quantity=<value> --name <value>",
|
|
9348
9396
|
method: "POST",
|
|
9349
9397
|
path: "/project",
|
|
9350
9398
|
pathParameters: [],
|
|
@@ -9557,12 +9605,13 @@ const surfaceCommands = [
|
|
|
9557
9605
|
"totalOverride.amount": "^[^-]",
|
|
9558
9606
|
"unitPrice.amount": "^[^-]"
|
|
9559
9607
|
},
|
|
9608
|
+
elementRequired: ["itemId", "transactionType"],
|
|
9560
9609
|
schema: z.array(z.string())
|
|
9561
9610
|
},
|
|
9562
9611
|
{
|
|
9563
9612
|
name: "name",
|
|
9564
9613
|
jsonPath: ["name"],
|
|
9565
|
-
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",
|
|
9566
9615
|
valueName: "value",
|
|
9567
9616
|
required: true,
|
|
9568
9617
|
schema: z.string()
|
|
@@ -9594,7 +9643,7 @@ const surfaceCommands = [
|
|
|
9594
9643
|
{
|
|
9595
9644
|
name: "total-contract-value-value",
|
|
9596
9645
|
jsonPath: ["totalContractValue", "amount"],
|
|
9597
|
-
description: "The contract's total value: the exact value as a decimal string with at
|
|
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",
|
|
9598
9647
|
valueName: "value",
|
|
9599
9648
|
together: ["total-contract-value-iso-code"],
|
|
9600
9649
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -9695,7 +9744,7 @@ const surfaceCommands = [
|
|
|
9695
9744
|
defineOperation({
|
|
9696
9745
|
name: "update",
|
|
9697
9746
|
summary: "Patch project",
|
|
9698
|
-
example: "hardfin project update proj_7hq2lm9xcr4twz8k --line-item
|
|
9747
|
+
example: "hardfin project update proj_7hq2lm9xcr4twz8k --line-item itemId=<value>,transactionType=<value>,aggregationKey=<value>,quantity=<value>",
|
|
9699
9748
|
method: "PATCH",
|
|
9700
9749
|
path: "/project/{projectKey}",
|
|
9701
9750
|
pathParameters: [{
|
|
@@ -9788,7 +9837,7 @@ const surfaceCommands = [
|
|
|
9788
9837
|
{
|
|
9789
9838
|
name: "discount-value",
|
|
9790
9839
|
jsonPath: ["discount", "amount"],
|
|
9791
|
-
description: "The discount applied to the project: the exact value as a decimal string with at
|
|
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",
|
|
9792
9841
|
valueName: "value",
|
|
9793
9842
|
together: ["discount-iso-code"],
|
|
9794
9843
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -9973,6 +10022,7 @@ const surfaceCommands = [
|
|
|
9973
10022
|
"totalOverride.amount": "^[^-]",
|
|
9974
10023
|
"unitPrice.amount": "^[^-]"
|
|
9975
10024
|
},
|
|
10025
|
+
elementRequired: ["itemId", "transactionType"],
|
|
9976
10026
|
schema: z.array(z.string())
|
|
9977
10027
|
},
|
|
9978
10028
|
{
|
|
@@ -9986,7 +10036,7 @@ const surfaceCommands = [
|
|
|
9986
10036
|
{
|
|
9987
10037
|
name: "name",
|
|
9988
10038
|
jsonPath: ["name"],
|
|
9989
|
-
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",
|
|
9990
10040
|
valueName: "value",
|
|
9991
10041
|
nullable: true,
|
|
9992
10042
|
schema: z.string()
|
|
@@ -10042,7 +10092,7 @@ const surfaceCommands = [
|
|
|
10042
10092
|
{
|
|
10043
10093
|
name: "total-contract-value-value",
|
|
10044
10094
|
jsonPath: ["totalContractValue", "amount"],
|
|
10045
|
-
description: "The contract's total value: the exact value as a decimal string with at
|
|
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",
|
|
10046
10096
|
valueName: "value",
|
|
10047
10097
|
together: ["total-contract-value-iso-code"],
|
|
10048
10098
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -10182,7 +10232,7 @@ const surfaceCommands = [
|
|
|
10182
10232
|
{
|
|
10183
10233
|
name: "activation-date",
|
|
10184
10234
|
jsonPath: ["activationDate"],
|
|
10185
|
-
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",
|
|
10186
10236
|
valueName: "value",
|
|
10187
10237
|
nullable: true,
|
|
10188
10238
|
schema: z.string()
|
|
@@ -10248,7 +10298,7 @@ const surfaceCommands = [
|
|
|
10248
10298
|
{
|
|
10249
10299
|
name: "charge",
|
|
10250
10300
|
jsonPath: ["charges"],
|
|
10251
|
-
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
|
|
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=",
|
|
10252
10302
|
valueName: "field=value,...",
|
|
10253
10303
|
repeatable: true,
|
|
10254
10304
|
element: [
|
|
@@ -10332,7 +10382,7 @@ const surfaceCommands = [
|
|
|
10332
10382
|
{
|
|
10333
10383
|
name: "fixed-price-value",
|
|
10334
10384
|
jsonPath: ["fixedPrice", "amount"],
|
|
10335
|
-
description: "The flat price when pricingMode is FIXED, and is not sent together with unitPrice: the exact value as a decimal string with at
|
|
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",
|
|
10336
10386
|
valueName: "value",
|
|
10337
10387
|
together: ["fixed-price-iso-code"],
|
|
10338
10388
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -10454,7 +10504,7 @@ const surfaceCommands = [
|
|
|
10454
10504
|
{
|
|
10455
10505
|
name: "total-override-value",
|
|
10456
10506
|
jsonPath: ["totalOverride", "amount"],
|
|
10457
|
-
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
|
|
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",
|
|
10458
10508
|
valueName: "value",
|
|
10459
10509
|
together: ["total-override-iso-code"],
|
|
10460
10510
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -10491,7 +10541,7 @@ const surfaceCommands = [
|
|
|
10491
10541
|
{
|
|
10492
10542
|
name: "unit-price-value",
|
|
10493
10543
|
jsonPath: ["unitPrice", "amount"],
|
|
10494
|
-
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
|
|
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",
|
|
10495
10545
|
valueName: "value",
|
|
10496
10546
|
together: ["unit-price-iso-code"],
|
|
10497
10547
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -10711,7 +10761,7 @@ const surfaceCommands = [
|
|
|
10711
10761
|
{
|
|
10712
10762
|
name: "from-location-ids",
|
|
10713
10763
|
queryName: "fromLocationIds",
|
|
10714
|
-
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",
|
|
10715
10765
|
valueName: "uuid",
|
|
10716
10766
|
repeatable: true,
|
|
10717
10767
|
schema: z.array(z.uuid())
|
|
@@ -10719,7 +10769,7 @@ const surfaceCommands = [
|
|
|
10719
10769
|
{
|
|
10720
10770
|
name: "to-location-ids",
|
|
10721
10771
|
queryName: "toLocationIds",
|
|
10722
|
-
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",
|
|
10723
10773
|
valueName: "uuid",
|
|
10724
10774
|
repeatable: true,
|
|
10725
10775
|
schema: z.array(z.uuid())
|
|
@@ -10727,7 +10777,7 @@ const surfaceCommands = [
|
|
|
10727
10777
|
{
|
|
10728
10778
|
name: "from-customer-ids",
|
|
10729
10779
|
queryName: "fromCustomerIds",
|
|
10730
|
-
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",
|
|
10731
10781
|
valueName: "uuid",
|
|
10732
10782
|
repeatable: true,
|
|
10733
10783
|
schema: z.array(z.uuid())
|
|
@@ -10735,7 +10785,7 @@ const surfaceCommands = [
|
|
|
10735
10785
|
{
|
|
10736
10786
|
name: "to-customer-ids",
|
|
10737
10787
|
queryName: "toCustomerIds",
|
|
10738
|
-
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",
|
|
10739
10789
|
valueName: "uuid",
|
|
10740
10790
|
repeatable: true,
|
|
10741
10791
|
schema: z.array(z.uuid())
|
|
@@ -10743,7 +10793,7 @@ const surfaceCommands = [
|
|
|
10743
10793
|
{
|
|
10744
10794
|
name: "from-location-company-types",
|
|
10745
10795
|
queryName: "fromLocationCompanyTypes",
|
|
10746
|
-
description: "The kind of site listed orders ship from, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
10747
10797
|
valueName: "value",
|
|
10748
10798
|
repeatable: true,
|
|
10749
10799
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -10751,7 +10801,7 @@ const surfaceCommands = [
|
|
|
10751
10801
|
{
|
|
10752
10802
|
name: "to-location-company-types",
|
|
10753
10803
|
queryName: "toLocationCompanyTypes",
|
|
10754
|
-
description: "The kind of site listed orders are delivered to, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
10755
10805
|
valueName: "value",
|
|
10756
10806
|
repeatable: true,
|
|
10757
10807
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -10896,6 +10946,7 @@ const surfaceCommands = [
|
|
|
10896
10946
|
element: ["itemId", "requestedQuantity"],
|
|
10897
10947
|
elementUuids: ["itemId"],
|
|
10898
10948
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
10949
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
10899
10950
|
schema: z.array(z.string())
|
|
10900
10951
|
},
|
|
10901
10952
|
{
|
|
@@ -11112,12 +11163,13 @@ const surfaceCommands = [
|
|
|
11112
11163
|
element: ["itemId", "requestedQuantity"],
|
|
11113
11164
|
elementUuids: ["itemId"],
|
|
11114
11165
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
11166
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
11115
11167
|
schema: z.array(z.string())
|
|
11116
11168
|
},
|
|
11117
11169
|
{
|
|
11118
11170
|
name: "order-notes",
|
|
11119
11171
|
jsonPath: ["orderNotes"],
|
|
11120
|
-
description: "A note about the order, which
|
|
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",
|
|
11121
11173
|
valueName: "value",
|
|
11122
11174
|
nullable: true,
|
|
11123
11175
|
schema: z.string()
|
|
@@ -11459,7 +11511,7 @@ const surfaceCommands = [
|
|
|
11459
11511
|
{
|
|
11460
11512
|
name: "from-location-ids",
|
|
11461
11513
|
queryName: "fromLocationIds",
|
|
11462
|
-
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",
|
|
11463
11515
|
valueName: "uuid",
|
|
11464
11516
|
repeatable: true,
|
|
11465
11517
|
schema: z.array(z.uuid())
|
|
@@ -11467,7 +11519,7 @@ const surfaceCommands = [
|
|
|
11467
11519
|
{
|
|
11468
11520
|
name: "to-location-ids",
|
|
11469
11521
|
queryName: "toLocationIds",
|
|
11470
|
-
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",
|
|
11471
11523
|
valueName: "uuid",
|
|
11472
11524
|
repeatable: true,
|
|
11473
11525
|
schema: z.array(z.uuid())
|
|
@@ -11475,7 +11527,7 @@ const surfaceCommands = [
|
|
|
11475
11527
|
{
|
|
11476
11528
|
name: "from-customer-ids",
|
|
11477
11529
|
queryName: "fromCustomerIds",
|
|
11478
|
-
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",
|
|
11479
11531
|
valueName: "uuid",
|
|
11480
11532
|
repeatable: true,
|
|
11481
11533
|
schema: z.array(z.uuid())
|
|
@@ -11483,7 +11535,7 @@ const surfaceCommands = [
|
|
|
11483
11535
|
{
|
|
11484
11536
|
name: "to-customer-ids",
|
|
11485
11537
|
queryName: "toCustomerIds",
|
|
11486
|
-
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",
|
|
11487
11539
|
valueName: "uuid",
|
|
11488
11540
|
repeatable: true,
|
|
11489
11541
|
schema: z.array(z.uuid())
|
|
@@ -11491,7 +11543,7 @@ const surfaceCommands = [
|
|
|
11491
11543
|
{
|
|
11492
11544
|
name: "from-location-company-types",
|
|
11493
11545
|
queryName: "fromLocationCompanyTypes",
|
|
11494
|
-
description: "The kind of site listed orders are returned from, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
11495
11547
|
valueName: "value",
|
|
11496
11548
|
repeatable: true,
|
|
11497
11549
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -11499,7 +11551,7 @@ const surfaceCommands = [
|
|
|
11499
11551
|
{
|
|
11500
11552
|
name: "to-location-company-types",
|
|
11501
11553
|
queryName: "toLocationCompanyTypes",
|
|
11502
|
-
description: "The kind of site listed orders are returned to, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
11503
11555
|
valueName: "value",
|
|
11504
11556
|
repeatable: true,
|
|
11505
11557
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -11510,7 +11562,7 @@ const surfaceCommands = [
|
|
|
11510
11562
|
defineOperation({
|
|
11511
11563
|
name: "create",
|
|
11512
11564
|
summary: "Create return order",
|
|
11513
|
-
example: "hardfin return-order create --from-location-id <uuid> --item itemId=<value>,requestedQuantity=<value> --return-type <value>",
|
|
11565
|
+
example: "hardfin return-order create --from-location-id <uuid> --item itemId=<value>,requestedQuantity=<value> --return-type <value> --to-location-id <uuid>",
|
|
11514
11566
|
method: "POST",
|
|
11515
11567
|
path: "/return-order",
|
|
11516
11568
|
pathParameters: [],
|
|
@@ -11636,6 +11688,7 @@ const surfaceCommands = [
|
|
|
11636
11688
|
element: ["itemId", "requestedQuantity"],
|
|
11637
11689
|
elementUuids: ["itemId"],
|
|
11638
11690
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
11691
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
11639
11692
|
schema: z.array(z.string())
|
|
11640
11693
|
},
|
|
11641
11694
|
{
|
|
@@ -11863,12 +11916,13 @@ const surfaceCommands = [
|
|
|
11863
11916
|
element: ["itemId", "requestedQuantity"],
|
|
11864
11917
|
elementUuids: ["itemId"],
|
|
11865
11918
|
elementTypes: { "requestedQuantity": ["integer"] },
|
|
11919
|
+
elementRequired: ["itemId", "requestedQuantity"],
|
|
11866
11920
|
schema: z.array(z.string())
|
|
11867
11921
|
},
|
|
11868
11922
|
{
|
|
11869
11923
|
name: "order-notes",
|
|
11870
11924
|
jsonPath: ["orderNotes"],
|
|
11871
|
-
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",
|
|
11872
11926
|
valueName: "value",
|
|
11873
11927
|
nullable: true,
|
|
11874
11928
|
schema: z.string()
|
|
@@ -12182,7 +12236,7 @@ const surfaceCommands = [
|
|
|
12182
12236
|
{
|
|
12183
12237
|
name: "search",
|
|
12184
12238
|
queryName: "search",
|
|
12185
|
-
description: "Text to find in the shipment's number, its order numbers, its
|
|
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",
|
|
12186
12240
|
valueName: "value",
|
|
12187
12241
|
schema: z.string()
|
|
12188
12242
|
},
|
|
@@ -12221,7 +12275,7 @@ const surfaceCommands = [
|
|
|
12221
12275
|
{
|
|
12222
12276
|
name: "from-location-ids",
|
|
12223
12277
|
queryName: "fromLocationIds",
|
|
12224
|
-
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",
|
|
12225
12279
|
valueName: "uuid",
|
|
12226
12280
|
repeatable: true,
|
|
12227
12281
|
schema: z.array(z.uuid())
|
|
@@ -12229,7 +12283,7 @@ const surfaceCommands = [
|
|
|
12229
12283
|
{
|
|
12230
12284
|
name: "to-location-ids",
|
|
12231
12285
|
queryName: "toLocationIds",
|
|
12232
|
-
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",
|
|
12233
12287
|
valueName: "uuid",
|
|
12234
12288
|
repeatable: true,
|
|
12235
12289
|
schema: z.array(z.uuid())
|
|
@@ -12237,7 +12291,7 @@ const surfaceCommands = [
|
|
|
12237
12291
|
{
|
|
12238
12292
|
name: "from-customer-ids",
|
|
12239
12293
|
queryName: "fromCustomerIds",
|
|
12240
|
-
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",
|
|
12241
12295
|
valueName: "uuid",
|
|
12242
12296
|
repeatable: true,
|
|
12243
12297
|
schema: z.array(z.uuid())
|
|
@@ -12245,7 +12299,7 @@ const surfaceCommands = [
|
|
|
12245
12299
|
{
|
|
12246
12300
|
name: "to-customer-ids",
|
|
12247
12301
|
queryName: "toCustomerIds",
|
|
12248
|
-
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",
|
|
12249
12303
|
valueName: "uuid",
|
|
12250
12304
|
repeatable: true,
|
|
12251
12305
|
schema: z.array(z.uuid())
|
|
@@ -12253,7 +12307,7 @@ const surfaceCommands = [
|
|
|
12253
12307
|
{
|
|
12254
12308
|
name: "from-location-company-types",
|
|
12255
12309
|
queryName: "fromLocationCompanyTypes",
|
|
12256
|
-
description: "The kind of site listed shipments leave from, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
12257
12311
|
valueName: "value",
|
|
12258
12312
|
repeatable: true,
|
|
12259
12313
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -12261,7 +12315,7 @@ const surfaceCommands = [
|
|
|
12261
12315
|
{
|
|
12262
12316
|
name: "to-location-company-types",
|
|
12263
12317
|
queryName: "toLocationCompanyTypes",
|
|
12264
|
-
description: "The kind of site listed shipments go to, a CUSTOMER site or one of the organization's own MANUFACTURER sites,
|
|
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",
|
|
12265
12319
|
valueName: "value",
|
|
12266
12320
|
repeatable: true,
|
|
12267
12321
|
schema: z.array(toEnum(["CUSTOMER", "MANUFACTURER"]))
|
|
@@ -12448,6 +12502,7 @@ const surfaceCommands = [
|
|
|
12448
12502
|
"serials": ["array"]
|
|
12449
12503
|
},
|
|
12450
12504
|
elementLists: ["serials"],
|
|
12505
|
+
elementRequired: ["itemId"],
|
|
12451
12506
|
schema: z.array(z.string())
|
|
12452
12507
|
},
|
|
12453
12508
|
{
|
|
@@ -12509,7 +12564,7 @@ const surfaceCommands = [
|
|
|
12509
12564
|
{
|
|
12510
12565
|
name: "shipping-cost-value",
|
|
12511
12566
|
jsonPath: ["shippingCost", "amount"],
|
|
12512
|
-
description: "What the shipment cost to send: the exact value as a decimal string with at
|
|
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",
|
|
12513
12568
|
valueName: "value",
|
|
12514
12569
|
together: ["shipping-cost-iso-code"],
|
|
12515
12570
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -12771,6 +12826,7 @@ const surfaceCommands = [
|
|
|
12771
12826
|
"serials": ["array"]
|
|
12772
12827
|
},
|
|
12773
12828
|
elementLists: ["serials"],
|
|
12829
|
+
elementRequired: ["itemId"],
|
|
12774
12830
|
schema: z.array(z.string())
|
|
12775
12831
|
},
|
|
12776
12832
|
{
|
|
@@ -12808,7 +12864,7 @@ const surfaceCommands = [
|
|
|
12808
12864
|
{
|
|
12809
12865
|
name: "shipped-at",
|
|
12810
12866
|
jsonPath: ["shippedAt"],
|
|
12811
|
-
description: "When the shipment left,
|
|
12867
|
+
description: "When the shipment left, which cannot be cleared and, on an outbound shipment, can only be corrected after it has shipped",
|
|
12812
12868
|
valueName: "value",
|
|
12813
12869
|
nullable: true,
|
|
12814
12870
|
schema: z.string()
|
|
@@ -12832,7 +12888,7 @@ const surfaceCommands = [
|
|
|
12832
12888
|
{
|
|
12833
12889
|
name: "shipping-cost-value",
|
|
12834
12890
|
jsonPath: ["shippingCost", "amount"],
|
|
12835
|
-
description: "What the shipment cost to send: the exact value as a decimal string with at
|
|
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",
|
|
12836
12892
|
valueName: "value",
|
|
12837
12893
|
together: ["shipping-cost-iso-code"],
|
|
12838
12894
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -13087,6 +13143,7 @@ const surfaceCommands = [
|
|
|
13087
13143
|
"serials": ["array"]
|
|
13088
13144
|
},
|
|
13089
13145
|
elementLists: ["serials"],
|
|
13146
|
+
elementRequired: ["itemId"],
|
|
13090
13147
|
schema: z.array(z.string())
|
|
13091
13148
|
},
|
|
13092
13149
|
{
|
|
@@ -13132,7 +13189,7 @@ const surfaceCommands = [
|
|
|
13132
13189
|
{
|
|
13133
13190
|
name: "shipping-cost-value",
|
|
13134
13191
|
jsonPath: ["shippingCost", "amount"],
|
|
13135
|
-
description: "What the shipment cost to send: the exact value as a decimal string with at
|
|
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",
|
|
13136
13193
|
valueName: "value",
|
|
13137
13194
|
together: ["shipping-cost-iso-code"],
|
|
13138
13195
|
schema: z.string().regex(/* @__PURE__ */ new RegExp("^[^-]"))
|
|
@@ -13679,5 +13736,5 @@ async function toReported(error, isJSON, resolved, level = "error") {
|
|
|
13679
13736
|
//#endregion
|
|
13680
13737
|
export { toCli, toParseExitCode, toReported, wasReportAttempted, writeCrash };
|
|
13681
13738
|
|
|
13682
|
-
//# sourceMappingURL=program-
|
|
13683
|
-
//# debugId=
|
|
13739
|
+
//# sourceMappingURL=program-CC8Iqb14.js.map
|
|
13740
|
+
//# debugId=1159525d-9f84-5132-8555-15d762625efb
|