@go-labs-sg/bb 2.33.2 → 2.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/command-manifest.json +398 -1
- package/command-reference.md +57 -1
- package/dist/index.js +2862 -1324
- package/package.json +1 -1
- package/role-aware-agent-guide.md +2 -0
package/README.md
CHANGED
|
@@ -12,6 +12,16 @@ For AI agents using this CLI: do not execute mutations until the user explicitly
|
|
|
12
12
|
|
|
13
13
|
**Registry:** [`@go-labs-sg/bb`](https://www.npmjs.com/package/@go-labs-sg/bb)
|
|
14
14
|
|
|
15
|
+
## Company discovery and reuse
|
|
16
|
+
|
|
17
|
+
`bb company search --query "a star" [--page 2]` searches stored BB companies and QuickBooks company customers, including inactive records. Results identify `bb`, `qbo`, or `both`; punctuation/spacing normalization is for suggestions only. Search does not write to either system.
|
|
18
|
+
|
|
19
|
+
After reviewing a result, `bb company use --companyId <bbId>` reuses BB and resolves its QBO customer. `bb company use --quickbooksId <qboId>` imports the existing QBO name/website when BB is missing. Supply both IDs to explicitly connect two unlinked records whose names differ; existing company details are preserved. If QBO has no website, add `--website <url>` for the BB import only.
|
|
20
|
+
|
|
21
|
+
The shared API rechecks existing records at submission. Canonical matches reuse records; fuzzy matches require an explicit choice or `--confirmDistinct true` to confirm a separate legal entity. Inactive companies and conflicting links require review, never implicit reactivation. QBO project/sub-customers are not company-import candidates. Provider failures are not treated as missing records.
|
|
22
|
+
|
|
23
|
+
`bb company use` and `bb company create` are state-changing, potentially external-writing commands. In non-interactive mode their existing permission gates require `--allow-state-change --allow-external-write`. Deploy the backend before publishing this CLI change. See [company discovery details](../api/docs/company-discovery.md) for limits and retry behaviour.
|
|
24
|
+
|
|
15
25
|
## Shared catalogue editing
|
|
16
26
|
|
|
17
27
|
All active authenticated users can edit suppliers, inventory items and item categories. Normal-user supplier updates submit a revision for approval in the shared API; item/category edits apply immediately. Lead/Admin supplier edits bypass human review. `bb supplier update` returns the server-owned approval/synchronization result without issuing another approval request. New supplier usage stays on hold during review and linked QuickBooks synchronization; existing usage continues with the last approved details until the edit is approved. Creator identity and delete/archive permissions are unchanged.
|
|
@@ -286,6 +296,52 @@ Bill creation determines its required permissions from the parsed input, for bot
|
|
|
286
296
|
|
|
287
297
|
**Contact-person estimate email:** `bb budget estimate send --payload '<json>'` calls the same `email.sendEstimateToContactPerson` procedure as the web composer. The payload requires `budgetId`, `estimateId`, optional `estimateDocNumber`, `to`, `cc`, `replyTo`, `subject`, HTML `content`, and HTML `signature`. It durably queues worker delivery of the QuickBooks PDF, standard terms, and Budget Builder budget attachments, and returns the outbound-email and operation IDs immediately. Worker retries reuse one provider idempotency key; the budget becomes `ESTIMATE_SENT` only after Resend accepts the email. The command requires interactive `CONFIRM`; inspect the budget, recipients, and HTML first.
|
|
288
298
|
|
|
299
|
+
### Acceptance invoice splits and grouped sending
|
|
300
|
+
|
|
301
|
+
After `bb budget won mark` (or an accepted status update), the JSON result includes an `invoiceSetup` prompt for QuickBooks-backed estimates. Choose the split amounts and each split's contractual due date; invoice creation does not wait for those due dates. There is no separate split-approval request.
|
|
302
|
+
|
|
303
|
+
1. `bb customer-invoice splits <budgetId>` returns the current revision, row IDs, billing defaults, and invoice approval/delivery states.
|
|
304
|
+
2. `bb customer-invoice preview-splits --payload '<json>'` previews amounts including GST and due-date changes, without writes.
|
|
305
|
+
3. `bb customer-invoice save-splits --payload '<json>'` saves that setup only. It does not create QBO invoices or request invoice approval. Re-read `splits` for the new revision and instalment IDs.
|
|
306
|
+
4. `bb customer-invoice create-splits --payload '{"budgetId":"budget_1","expectedRevision":2,"instalmentIds":["row_1","row_2"]}'` creates selected ready invoices in QBO. Non-admin creation automatically requests admin approval **after creation**; admin creation auto-approves. No customer email is sent.
|
|
307
|
+
5. An admin uses the existing `bb customer-invoice approve <batchId>` action for each pending invoice batch. Approval does not send the invoice to the customer.
|
|
308
|
+
6. The user re-reads `splits`, then runs `bb customer-invoice send-group --payload '{"budgetId":"budget_1","expectedRevision":2,"instalmentIds":["row_1","row_2"]}'` to send approved invoices together in one email. Select one row for individual sending. Alternatively, use `--all-approved --payload '{"budgetId":"budget_1","expectedRevision":2}'` to select all approved, unsent invoices in that budget. Do not combine `--all-approved` with `instalmentIds`.
|
|
309
|
+
|
|
310
|
+
Preview/save use this shape, populated from the current `splits` result and the signed terms (IDs, addresses, and dates below are examples only):
|
|
311
|
+
|
|
312
|
+
```json
|
|
313
|
+
{
|
|
314
|
+
"budgetId": "budget_1",
|
|
315
|
+
"expectedRevision": 1,
|
|
316
|
+
"scope": "BASE",
|
|
317
|
+
"changeReason": "Confirmed invoice split and due dates from signed estimate",
|
|
318
|
+
"definition": {
|
|
319
|
+
"rows": [
|
|
320
|
+
{ "key": "deposit", "label": "Deposit", "amount": { "type": "PERCENTAGE", "value": 70 }, "due": { "type": "CONFIRMATION" }, "issue": { "type": "ACCEPTANCE" } },
|
|
321
|
+
{ "key": "balance", "label": "Balance", "amount": { "type": "PERCENTAGE", "value": 30 }, "due": { "type": "FIXED_DATE", "date": "2026-12-01" }, "issue": { "type": "ACCEPTANCE" } }
|
|
322
|
+
],
|
|
323
|
+
"reminderLeadDays": 7,
|
|
324
|
+
"billingRestriction": ""
|
|
325
|
+
},
|
|
326
|
+
"billing": {
|
|
327
|
+
"legalEntityName": "Customer legal entity",
|
|
328
|
+
"purchaseOrder": "PO-reference",
|
|
329
|
+
"billingAddress": "Customer billing address",
|
|
330
|
+
"to": "billing@example.invalid",
|
|
331
|
+
"cc": [],
|
|
332
|
+
"replyTo": "owner@example.invalid",
|
|
333
|
+
"deliveryMethod": "EMAIL",
|
|
334
|
+
"uploadUrl": null
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Use the exact current revision (or `null` only when no schedule exists). Fixed amounts use **pre-GST cents**; percentages use percentage points. Event-relative due rules are `EVENT_START` or `EVENT_END` with `offsetDays`. Preview and resolve missing dates, past-due review or unresolved amounts rather than inventing replacements.
|
|
340
|
+
|
|
341
|
+
Non-interactive save requires `--allow-state-change`; creation requires `--allow-state-change --allow-financial-write --allow-external-write --allow-email` (approval-request email, not customer invoice delivery); grouped sending requires `--allow-state-change --allow-email --allow-external-write`. These flags acknowledge effects, not role permissions or user authorisation. Both ordinary users and admins still need server-granted project access. Pending/rejected invoices cannot be sent; a mixed selection is rejected rather than silently dropping invoices. Sending uses each issued invoice's original billing revision, not later edits. Invoices with different original billing instructions must be sent in separate groups. Do not blindly retry uncertain QBO or email outcomes.
|
|
342
|
+
|
|
343
|
+
These commands require the matching API deployment and a new CLI release; changing this repository does not publish the CLI or deploy production.
|
|
344
|
+
|
|
289
345
|
### Quotation amounts and line allocations
|
|
290
346
|
|
|
291
347
|
Quotation create and update payloads use `amountWithoutGst` for the supplier subtotal and `gstAmount` for GST. Keep GST separate; do not add it to `amountWithoutGst`. When a quotation covers more than one budget item, `lineAmounts` is required and must contain each selected item exactly once. The line amounts must sum to `amountWithoutGst`.
|
package/command-manifest.json
CHANGED
|
@@ -3829,6 +3829,275 @@
|
|
|
3829
3829
|
"effects": ["state-change", "financial-write"],
|
|
3830
3830
|
"legacyTarget": "import-qbo-customer-invoice"
|
|
3831
3831
|
},
|
|
3832
|
+
{
|
|
3833
|
+
"path": ["customer-invoice", "splits"],
|
|
3834
|
+
"legacyAliases": [
|
|
3835
|
+
"get-customer-invoice-splits",
|
|
3836
|
+
"get_customer_invoice_splits"
|
|
3837
|
+
],
|
|
3838
|
+
"summary": "Review acceptance invoice splits, due dates, approval states and saved billing details. Arguments: <budgetId>.",
|
|
3839
|
+
"globalOptions": [
|
|
3840
|
+
{
|
|
3841
|
+
"name": "--help",
|
|
3842
|
+
"description": "Show help for this command."
|
|
3843
|
+
},
|
|
3844
|
+
{
|
|
3845
|
+
"name": "--quiet",
|
|
3846
|
+
"description": "Suppress non-error diagnostics."
|
|
3847
|
+
},
|
|
3848
|
+
{
|
|
3849
|
+
"name": "--debug",
|
|
3850
|
+
"description": "Emit sanitized diagnostic traces."
|
|
3851
|
+
},
|
|
3852
|
+
{
|
|
3853
|
+
"name": "--api-url",
|
|
3854
|
+
"description": "Override the Budget Builder API base URL."
|
|
3855
|
+
},
|
|
3856
|
+
{
|
|
3857
|
+
"name": "--no-browser",
|
|
3858
|
+
"description": "Print the authorization URL without opening a browser."
|
|
3859
|
+
},
|
|
3860
|
+
{
|
|
3861
|
+
"name": "--allow-state-change",
|
|
3862
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
3863
|
+
},
|
|
3864
|
+
{
|
|
3865
|
+
"name": "--allow-email",
|
|
3866
|
+
"description": "Allow sending email in non-interactive use."
|
|
3867
|
+
},
|
|
3868
|
+
{
|
|
3869
|
+
"name": "--allow-external-write",
|
|
3870
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
3871
|
+
},
|
|
3872
|
+
{
|
|
3873
|
+
"name": "--allow-delete",
|
|
3874
|
+
"description": "Allow deleting data in non-interactive use."
|
|
3875
|
+
},
|
|
3876
|
+
{
|
|
3877
|
+
"name": "--allow-financial-write",
|
|
3878
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
3879
|
+
}
|
|
3880
|
+
],
|
|
3881
|
+
"argumentMode": "legacy-passthrough",
|
|
3882
|
+
"effects": [],
|
|
3883
|
+
"legacyTarget": "get-customer-invoice-splits"
|
|
3884
|
+
},
|
|
3885
|
+
{
|
|
3886
|
+
"path": ["customer-invoice", "preview-splits"],
|
|
3887
|
+
"legacyAliases": [
|
|
3888
|
+
"preview-customer-invoice-splits",
|
|
3889
|
+
"preview_customer_invoice_splits"
|
|
3890
|
+
],
|
|
3891
|
+
"summary": "Preview splits, GST totals and due-date changes without writes. Requires --payload with the schedule save input.",
|
|
3892
|
+
"globalOptions": [
|
|
3893
|
+
{
|
|
3894
|
+
"name": "--help",
|
|
3895
|
+
"description": "Show help for this command."
|
|
3896
|
+
},
|
|
3897
|
+
{
|
|
3898
|
+
"name": "--quiet",
|
|
3899
|
+
"description": "Suppress non-error diagnostics."
|
|
3900
|
+
},
|
|
3901
|
+
{
|
|
3902
|
+
"name": "--debug",
|
|
3903
|
+
"description": "Emit sanitized diagnostic traces."
|
|
3904
|
+
},
|
|
3905
|
+
{
|
|
3906
|
+
"name": "--api-url",
|
|
3907
|
+
"description": "Override the Budget Builder API base URL."
|
|
3908
|
+
},
|
|
3909
|
+
{
|
|
3910
|
+
"name": "--no-browser",
|
|
3911
|
+
"description": "Print the authorization URL without opening a browser."
|
|
3912
|
+
},
|
|
3913
|
+
{
|
|
3914
|
+
"name": "--allow-state-change",
|
|
3915
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
3916
|
+
},
|
|
3917
|
+
{
|
|
3918
|
+
"name": "--allow-email",
|
|
3919
|
+
"description": "Allow sending email in non-interactive use."
|
|
3920
|
+
},
|
|
3921
|
+
{
|
|
3922
|
+
"name": "--allow-external-write",
|
|
3923
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
3924
|
+
},
|
|
3925
|
+
{
|
|
3926
|
+
"name": "--allow-delete",
|
|
3927
|
+
"description": "Allow deleting data in non-interactive use."
|
|
3928
|
+
},
|
|
3929
|
+
{
|
|
3930
|
+
"name": "--allow-financial-write",
|
|
3931
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
3932
|
+
}
|
|
3933
|
+
],
|
|
3934
|
+
"argumentMode": "legacy-passthrough",
|
|
3935
|
+
"effects": [],
|
|
3936
|
+
"legacyTarget": "preview-customer-invoice-splits"
|
|
3937
|
+
},
|
|
3938
|
+
{
|
|
3939
|
+
"path": ["customer-invoice", "save-splits"],
|
|
3940
|
+
"legacyAliases": [
|
|
3941
|
+
"save-customer-invoice-splits",
|
|
3942
|
+
"save_customer_invoice_splits"
|
|
3943
|
+
],
|
|
3944
|
+
"summary": "Save split amounts and separate due dates after estimate acceptance. Requires --payload; does not create invoices or request approval.",
|
|
3945
|
+
"globalOptions": [
|
|
3946
|
+
{
|
|
3947
|
+
"name": "--help",
|
|
3948
|
+
"description": "Show help for this command."
|
|
3949
|
+
},
|
|
3950
|
+
{
|
|
3951
|
+
"name": "--quiet",
|
|
3952
|
+
"description": "Suppress non-error diagnostics."
|
|
3953
|
+
},
|
|
3954
|
+
{
|
|
3955
|
+
"name": "--debug",
|
|
3956
|
+
"description": "Emit sanitized diagnostic traces."
|
|
3957
|
+
},
|
|
3958
|
+
{
|
|
3959
|
+
"name": "--api-url",
|
|
3960
|
+
"description": "Override the Budget Builder API base URL."
|
|
3961
|
+
},
|
|
3962
|
+
{
|
|
3963
|
+
"name": "--no-browser",
|
|
3964
|
+
"description": "Print the authorization URL without opening a browser."
|
|
3965
|
+
},
|
|
3966
|
+
{
|
|
3967
|
+
"name": "--allow-state-change",
|
|
3968
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
3969
|
+
},
|
|
3970
|
+
{
|
|
3971
|
+
"name": "--allow-email",
|
|
3972
|
+
"description": "Allow sending email in non-interactive use."
|
|
3973
|
+
},
|
|
3974
|
+
{
|
|
3975
|
+
"name": "--allow-external-write",
|
|
3976
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
3977
|
+
},
|
|
3978
|
+
{
|
|
3979
|
+
"name": "--allow-delete",
|
|
3980
|
+
"description": "Allow deleting data in non-interactive use."
|
|
3981
|
+
},
|
|
3982
|
+
{
|
|
3983
|
+
"name": "--allow-financial-write",
|
|
3984
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
3985
|
+
}
|
|
3986
|
+
],
|
|
3987
|
+
"argumentMode": "legacy-passthrough",
|
|
3988
|
+
"effects": ["state-change"],
|
|
3989
|
+
"legacyTarget": "save-customer-invoice-splits"
|
|
3990
|
+
},
|
|
3991
|
+
{
|
|
3992
|
+
"path": ["customer-invoice", "create-splits"],
|
|
3993
|
+
"legacyAliases": [
|
|
3994
|
+
"create-customer-invoice-splits",
|
|
3995
|
+
"create_customer_invoice_splits"
|
|
3996
|
+
],
|
|
3997
|
+
"summary": "Create selected split invoices in QBO, then request admin approval for non-admin creators or auto-approve admin creators. Requires --payload with budgetId, expectedRevision, instalmentIds. Never sends customer invoices.",
|
|
3998
|
+
"globalOptions": [
|
|
3999
|
+
{
|
|
4000
|
+
"name": "--help",
|
|
4001
|
+
"description": "Show help for this command."
|
|
4002
|
+
},
|
|
4003
|
+
{
|
|
4004
|
+
"name": "--quiet",
|
|
4005
|
+
"description": "Suppress non-error diagnostics."
|
|
4006
|
+
},
|
|
4007
|
+
{
|
|
4008
|
+
"name": "--debug",
|
|
4009
|
+
"description": "Emit sanitized diagnostic traces."
|
|
4010
|
+
},
|
|
4011
|
+
{
|
|
4012
|
+
"name": "--api-url",
|
|
4013
|
+
"description": "Override the Budget Builder API base URL."
|
|
4014
|
+
},
|
|
4015
|
+
{
|
|
4016
|
+
"name": "--no-browser",
|
|
4017
|
+
"description": "Print the authorization URL without opening a browser."
|
|
4018
|
+
},
|
|
4019
|
+
{
|
|
4020
|
+
"name": "--allow-state-change",
|
|
4021
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
4022
|
+
},
|
|
4023
|
+
{
|
|
4024
|
+
"name": "--allow-email",
|
|
4025
|
+
"description": "Allow sending email in non-interactive use."
|
|
4026
|
+
},
|
|
4027
|
+
{
|
|
4028
|
+
"name": "--allow-external-write",
|
|
4029
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
4030
|
+
},
|
|
4031
|
+
{
|
|
4032
|
+
"name": "--allow-delete",
|
|
4033
|
+
"description": "Allow deleting data in non-interactive use."
|
|
4034
|
+
},
|
|
4035
|
+
{
|
|
4036
|
+
"name": "--allow-financial-write",
|
|
4037
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
4038
|
+
}
|
|
4039
|
+
],
|
|
4040
|
+
"argumentMode": "legacy-passthrough",
|
|
4041
|
+
"effects": ["state-change", "financial-write", "external-write", "email"],
|
|
4042
|
+
"legacyTarget": "create-customer-invoice-splits"
|
|
4043
|
+
},
|
|
4044
|
+
{
|
|
4045
|
+
"path": ["customer-invoice", "send-group"],
|
|
4046
|
+
"legacyAliases": [
|
|
4047
|
+
"send-customer-invoice-group",
|
|
4048
|
+
"send_customer_invoice_group"
|
|
4049
|
+
],
|
|
4050
|
+
"summary": "Send selected approved invoices together in one email. Requires --payload with budgetId, expectedRevision, instalmentIds, or --all-approved without instalmentIds. Pass one instalment for individual sending.",
|
|
4051
|
+
"globalOptions": [
|
|
4052
|
+
{
|
|
4053
|
+
"name": "--help",
|
|
4054
|
+
"description": "Show help for this command."
|
|
4055
|
+
},
|
|
4056
|
+
{
|
|
4057
|
+
"name": "--quiet",
|
|
4058
|
+
"description": "Suppress non-error diagnostics."
|
|
4059
|
+
},
|
|
4060
|
+
{
|
|
4061
|
+
"name": "--debug",
|
|
4062
|
+
"description": "Emit sanitized diagnostic traces."
|
|
4063
|
+
},
|
|
4064
|
+
{
|
|
4065
|
+
"name": "--api-url",
|
|
4066
|
+
"description": "Override the Budget Builder API base URL."
|
|
4067
|
+
},
|
|
4068
|
+
{
|
|
4069
|
+
"name": "--no-browser",
|
|
4070
|
+
"description": "Print the authorization URL without opening a browser."
|
|
4071
|
+
},
|
|
4072
|
+
{
|
|
4073
|
+
"name": "--allow-state-change",
|
|
4074
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
4075
|
+
},
|
|
4076
|
+
{
|
|
4077
|
+
"name": "--allow-email",
|
|
4078
|
+
"description": "Allow sending email in non-interactive use."
|
|
4079
|
+
},
|
|
4080
|
+
{
|
|
4081
|
+
"name": "--allow-external-write",
|
|
4082
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
4083
|
+
},
|
|
4084
|
+
{
|
|
4085
|
+
"name": "--allow-delete",
|
|
4086
|
+
"description": "Allow deleting data in non-interactive use."
|
|
4087
|
+
},
|
|
4088
|
+
{
|
|
4089
|
+
"name": "--allow-financial-write",
|
|
4090
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
4091
|
+
},
|
|
4092
|
+
{
|
|
4093
|
+
"name": "--all-approved",
|
|
4094
|
+
"description": "Select all approved unsent invoices; payload must contain only budgetId and expectedRevision."
|
|
4095
|
+
}
|
|
4096
|
+
],
|
|
4097
|
+
"argumentMode": "legacy-passthrough",
|
|
4098
|
+
"effects": ["state-change", "email", "external-write"],
|
|
4099
|
+
"legacyTarget": "send-customer-invoice-group"
|
|
4100
|
+
},
|
|
3832
4101
|
{
|
|
3833
4102
|
"path": ["customer-invoice", "create"],
|
|
3834
4103
|
"legacyAliases": ["create-customer-invoice", "create_customer_invoice"],
|
|
@@ -4790,10 +5059,134 @@
|
|
|
4790
5059
|
"effects": [],
|
|
4791
5060
|
"legacyTarget": "get-company"
|
|
4792
5061
|
},
|
|
5062
|
+
{
|
|
5063
|
+
"path": ["company", "search"],
|
|
5064
|
+
"legacyAliases": ["search-existing-companies", "search_existing_companies"],
|
|
5065
|
+
"summary": "Search BB and QuickBooks companies without writes. --query <name> [--page <number>].",
|
|
5066
|
+
"globalOptions": [
|
|
5067
|
+
{
|
|
5068
|
+
"name": "--help",
|
|
5069
|
+
"description": "Show help for this command."
|
|
5070
|
+
},
|
|
5071
|
+
{
|
|
5072
|
+
"name": "--quiet",
|
|
5073
|
+
"description": "Suppress non-error diagnostics."
|
|
5074
|
+
},
|
|
5075
|
+
{
|
|
5076
|
+
"name": "--debug",
|
|
5077
|
+
"description": "Emit sanitized diagnostic traces."
|
|
5078
|
+
},
|
|
5079
|
+
{
|
|
5080
|
+
"name": "--api-url",
|
|
5081
|
+
"description": "Override the Budget Builder API base URL."
|
|
5082
|
+
},
|
|
5083
|
+
{
|
|
5084
|
+
"name": "--no-browser",
|
|
5085
|
+
"description": "Print the authorization URL without opening a browser."
|
|
5086
|
+
},
|
|
5087
|
+
{
|
|
5088
|
+
"name": "--allow-state-change",
|
|
5089
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
5090
|
+
},
|
|
5091
|
+
{
|
|
5092
|
+
"name": "--allow-email",
|
|
5093
|
+
"description": "Allow sending email in non-interactive use."
|
|
5094
|
+
},
|
|
5095
|
+
{
|
|
5096
|
+
"name": "--allow-external-write",
|
|
5097
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
5098
|
+
},
|
|
5099
|
+
{
|
|
5100
|
+
"name": "--allow-delete",
|
|
5101
|
+
"description": "Allow deleting data in non-interactive use."
|
|
5102
|
+
},
|
|
5103
|
+
{
|
|
5104
|
+
"name": "--allow-financial-write",
|
|
5105
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
5106
|
+
},
|
|
5107
|
+
{
|
|
5108
|
+
"name": "--query",
|
|
5109
|
+
"description": "Company name to search in BB and QuickBooks."
|
|
5110
|
+
},
|
|
5111
|
+
{
|
|
5112
|
+
"name": "--page",
|
|
5113
|
+
"description": "Results page (eight companies per page)."
|
|
5114
|
+
}
|
|
5115
|
+
],
|
|
5116
|
+
"argumentMode": "legacy-passthrough",
|
|
5117
|
+
"effects": [],
|
|
5118
|
+
"legacyTarget": "search-existing-companies"
|
|
5119
|
+
},
|
|
5120
|
+
{
|
|
5121
|
+
"path": ["company", "use"],
|
|
5122
|
+
"legacyAliases": ["use-existing-company", "use_existing_company"],
|
|
5123
|
+
"summary": "Reuse a company in BB and QuickBooks, creating only its missing counterpart. Supply --companyId <bbId> and/or --quickbooksId <qboId>; both explicitly connect records with different names. --website <url> fills a missing QBO import website only. --confirmDistinct true confirms no similar record represents this entity.",
|
|
5124
|
+
"globalOptions": [
|
|
5125
|
+
{
|
|
5126
|
+
"name": "--help",
|
|
5127
|
+
"description": "Show help for this command."
|
|
5128
|
+
},
|
|
5129
|
+
{
|
|
5130
|
+
"name": "--quiet",
|
|
5131
|
+
"description": "Suppress non-error diagnostics."
|
|
5132
|
+
},
|
|
5133
|
+
{
|
|
5134
|
+
"name": "--debug",
|
|
5135
|
+
"description": "Emit sanitized diagnostic traces."
|
|
5136
|
+
},
|
|
5137
|
+
{
|
|
5138
|
+
"name": "--api-url",
|
|
5139
|
+
"description": "Override the Budget Builder API base URL."
|
|
5140
|
+
},
|
|
5141
|
+
{
|
|
5142
|
+
"name": "--no-browser",
|
|
5143
|
+
"description": "Print the authorization URL without opening a browser."
|
|
5144
|
+
},
|
|
5145
|
+
{
|
|
5146
|
+
"name": "--allow-state-change",
|
|
5147
|
+
"description": "Allow a Budget Builder state change in non-interactive use."
|
|
5148
|
+
},
|
|
5149
|
+
{
|
|
5150
|
+
"name": "--allow-email",
|
|
5151
|
+
"description": "Allow sending email in non-interactive use."
|
|
5152
|
+
},
|
|
5153
|
+
{
|
|
5154
|
+
"name": "--allow-external-write",
|
|
5155
|
+
"description": "Allow writes to external systems in non-interactive use."
|
|
5156
|
+
},
|
|
5157
|
+
{
|
|
5158
|
+
"name": "--allow-delete",
|
|
5159
|
+
"description": "Allow deleting data in non-interactive use."
|
|
5160
|
+
},
|
|
5161
|
+
{
|
|
5162
|
+
"name": "--allow-financial-write",
|
|
5163
|
+
"description": "Allow financial-record changes in non-interactive use."
|
|
5164
|
+
},
|
|
5165
|
+
{
|
|
5166
|
+
"name": "--companyId",
|
|
5167
|
+
"description": "Existing BB company ID; combine with quickbooksId to explicitly connect both records."
|
|
5168
|
+
},
|
|
5169
|
+
{
|
|
5170
|
+
"name": "--quickbooksId",
|
|
5171
|
+
"description": "Existing QBO customer ID; alone imports or reuses its BB company."
|
|
5172
|
+
},
|
|
5173
|
+
{
|
|
5174
|
+
"name": "--website",
|
|
5175
|
+
"description": "Website only when missing from a QBO-only import."
|
|
5176
|
+
},
|
|
5177
|
+
{
|
|
5178
|
+
"name": "--confirmDistinct",
|
|
5179
|
+
"description": "Set true only when similar records do not represent this legal entity."
|
|
5180
|
+
}
|
|
5181
|
+
],
|
|
5182
|
+
"argumentMode": "legacy-passthrough",
|
|
5183
|
+
"effects": ["state-change", "external-write"],
|
|
5184
|
+
"legacyTarget": "use-existing-company"
|
|
5185
|
+
},
|
|
4793
5186
|
{
|
|
4794
5187
|
"path": ["company", "create"],
|
|
4795
5188
|
"legacyAliases": ["create-company", "create_company"],
|
|
4796
|
-
"summary": "Create
|
|
5189
|
+
"summary": "Create or reuse a company in BB and QuickBooks. --name <name> --website <url>. Similar names require --confirmDistinct true; inactive companies are never reactivated.",
|
|
4797
5190
|
"globalOptions": [
|
|
4798
5191
|
{
|
|
4799
5192
|
"name": "--help",
|
|
@@ -4834,6 +5227,10 @@
|
|
|
4834
5227
|
{
|
|
4835
5228
|
"name": "--allow-financial-write",
|
|
4836
5229
|
"description": "Allow financial-record changes in non-interactive use."
|
|
5230
|
+
},
|
|
5231
|
+
{
|
|
5232
|
+
"name": "--confirmDistinct",
|
|
5233
|
+
"description": "Set true to confirm a separate legal entity despite similar names."
|
|
4837
5234
|
}
|
|
4838
5235
|
],
|
|
4839
5236
|
"argumentMode": "legacy-passthrough",
|
package/command-reference.md
CHANGED
|
@@ -617,6 +617,46 @@ Legacy aliases: `import-qbo-customer-invoice`, `import_qbo_customer_invoice`.
|
|
|
617
617
|
|
|
618
618
|
Effects: state-change, financial-write.
|
|
619
619
|
|
|
620
|
+
## `bb customer-invoice splits`
|
|
621
|
+
|
|
622
|
+
Review acceptance invoice splits, due dates, approval states and saved billing details. Arguments: <budgetId>.
|
|
623
|
+
|
|
624
|
+
Legacy aliases: `get-customer-invoice-splits`, `get_customer_invoice_splits`.
|
|
625
|
+
|
|
626
|
+
Effects: none.
|
|
627
|
+
|
|
628
|
+
## `bb customer-invoice preview-splits`
|
|
629
|
+
|
|
630
|
+
Preview splits, GST totals and due-date changes without writes. Requires --payload with the schedule save input.
|
|
631
|
+
|
|
632
|
+
Legacy aliases: `preview-customer-invoice-splits`, `preview_customer_invoice_splits`.
|
|
633
|
+
|
|
634
|
+
Effects: none.
|
|
635
|
+
|
|
636
|
+
## `bb customer-invoice save-splits`
|
|
637
|
+
|
|
638
|
+
Save split amounts and separate due dates after estimate acceptance. Requires --payload; does not create invoices or request approval.
|
|
639
|
+
|
|
640
|
+
Legacy aliases: `save-customer-invoice-splits`, `save_customer_invoice_splits`.
|
|
641
|
+
|
|
642
|
+
Effects: state-change.
|
|
643
|
+
|
|
644
|
+
## `bb customer-invoice create-splits`
|
|
645
|
+
|
|
646
|
+
Create selected split invoices in QBO, then request admin approval for non-admin creators or auto-approve admin creators. Requires --payload with budgetId, expectedRevision, instalmentIds. Never sends customer invoices.
|
|
647
|
+
|
|
648
|
+
Legacy aliases: `create-customer-invoice-splits`, `create_customer_invoice_splits`.
|
|
649
|
+
|
|
650
|
+
Effects: state-change, financial-write, external-write, email.
|
|
651
|
+
|
|
652
|
+
## `bb customer-invoice send-group`
|
|
653
|
+
|
|
654
|
+
Send selected approved invoices together in one email. Requires --payload with budgetId, expectedRevision, instalmentIds, or --all-approved without instalmentIds. Pass one instalment for individual sending.
|
|
655
|
+
|
|
656
|
+
Legacy aliases: `send-customer-invoice-group`, `send_customer_invoice_group`.
|
|
657
|
+
|
|
658
|
+
Effects: state-change, email, external-write.
|
|
659
|
+
|
|
620
660
|
## `bb customer-invoice create`
|
|
621
661
|
|
|
622
662
|
Create Customer Invoice.
|
|
@@ -769,9 +809,25 @@ Legacy aliases: `get-company`, `get_company`.
|
|
|
769
809
|
|
|
770
810
|
Effects: none.
|
|
771
811
|
|
|
812
|
+
## `bb company search`
|
|
813
|
+
|
|
814
|
+
Search BB and QuickBooks companies without writes. --query <name> [--page <number>].
|
|
815
|
+
|
|
816
|
+
Legacy aliases: `search-existing-companies`, `search_existing_companies`.
|
|
817
|
+
|
|
818
|
+
Effects: none.
|
|
819
|
+
|
|
820
|
+
## `bb company use`
|
|
821
|
+
|
|
822
|
+
Reuse a company in BB and QuickBooks, creating only its missing counterpart. Supply --companyId <bbId> and/or --quickbooksId <qboId>; both explicitly connect records with different names. --website <url> fills a missing QBO import website only. --confirmDistinct true confirms no similar record represents this entity.
|
|
823
|
+
|
|
824
|
+
Legacy aliases: `use-existing-company`, `use_existing_company`.
|
|
825
|
+
|
|
826
|
+
Effects: state-change, external-write.
|
|
827
|
+
|
|
772
828
|
## `bb company create`
|
|
773
829
|
|
|
774
|
-
Create
|
|
830
|
+
Create or reuse a company in BB and QuickBooks. --name <name> --website <url>. Similar names require --confirmDistinct true; inactive companies are never reactivated.
|
|
775
831
|
|
|
776
832
|
Legacy aliases: `create-company`, `create_company`.
|
|
777
833
|
|