{"ok":true,"commandType":"update-sales-invoice","module":"Sales","mode":"write","summary":"Update sales invoice header/contact fields and supported detail rows.","payloadSchema":{"docNo":"required existing document number (selector)","reason":"required business reason","docDate":"optional Document date. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","debtorCode":"optional Customer/debtor code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","debtorName":"optional Customer display name. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","agent":"optional Sales agent code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","salesAgent":"optional Sales agent code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","salesAgentCode":"optional Sales agent code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","deliverAddress1":"optional Delivery address line 1. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","ref":"optional Reference. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","description":"optional Header description. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","displayTerm":"optional Credit term. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","term":"optional Credit term. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","phone1":"optional Phone. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","phone":"optional Phone. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","attention":"optional Attention/contact. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","contact":"optional Attention/contact. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","branchCode":"optional Branch code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","currencyCode":"optional Currency code. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","currencyRate":"optional Currency rate. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","withholdingTaxVersion":"optional Optional native enum only when this document exposes the field. Omission preserves the existing value. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","note":"optional Note. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","remark1":"optional Remark 1. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","remark2":"optional Remark 2. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","remark3":"optional Remark 3. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","remark4":"optional Remark 4. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","refDocNo":"optional Reference document number. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","shipVia":"optional Shipping method. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","shipInfo":"optional Shipping info. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","salesLocation":"optional Sales location where supported. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","location":"optional Sales location where supported. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","userDefinedFields":"optional Existing SDK-materialized UDF fields; exact reload verification required. Omitted stays unchanged; null or empty clears only optional string/nullable fields.","Master":"optional header object of public SDK scalar fields","nativeFields":"optional native header container: { Master: { SDKField: value } }","validateOnly":"optional boolean; true runs native preflight without Save, returning saved:false; no persistence proof","detailMode":"explicit update | append | replace | delete when editing lines; omit lines and detailMode for header-only updates","lines":"optional detail array; update/delete select existing rows by dtlKey; append adds rows; replace replaces the detail set"},"examplePayload":{"docNo":"IV-000001","reason":"Correct customer reference","ref":"Updated reference"},"examples":[],"payloadEnums":{},"requiredPayloadFields":["docNo","reason"],"conditionalPayloadRules":{},"notes":"Install local-mvp-2026.09.30.01 or later on the selected connector before using this update contract; cloud publication does not install or upgrade customer connectors. Check installed capabilities first; never trial writes against an older or unconfirmed build. Strict Sales update: editable SDK scalar fields via friendly fields, Master or nativeFields.Master; details via lines with explicit detailMode and existing dtlKey for update/delete. Omitted fields stay unchanged; explicit null/empty clears only optional fields. Unknown, unavailable, calculated, system and lifecycle fields are rejected before Save. Existing UDFs must be present in the SDK schema; no invented columns. validateOnly:true runs native preflight without Save and is not persistence certification. Save success requires a fresh SDK reload with writeVerification.matched=true, identity and linkage verification. saved:true with ok:false means a persisted mismatch or failed verification, not rollback; inspect the existing document and never recreate it automatically. Existing payment, transfer, package and eInvoice protections remain. Runtime get-document fields/fieldCapabilities expose SDK field discovery and fields.readErrors; availability varies by document and account book. Native acceptance covers reference/detail descriptions across eight Sales types and one final-build Sales Order price change, not all fields or SDK versions. Generic native UDF saves remain unproven. Cash Sale creation did not persist its fixture payment; this is a separate unresolved create-path issue. Update acceptance covers that existing unpaid Cash Sale only, not paid-CS support. See docs/document-update-fields.md.","nativePayload":{"supported":true,"sections":[{"name":"Master","fields":[{"name":"DocNo","type":"string","description":"Existing document/detail selector, not a writable key.","aliases":["docNo"]},{"name":"DocDate","type":"date","description":"Document date.","aliases":["docDate"]},{"name":"DebtorCode","type":"string","description":"Customer/debtor code.","aliases":["debtorCode"]},{"name":"DebtorName","type":"string","description":"Customer display name.","aliases":["debtorName"]},{"name":"Agent","type":"string","description":"Sales agent code.","aliases":["agent","salesAgent","salesAgentCode"]},{"name":"DeliverAddr1","type":"string","description":"Delivery address line 1.","aliases":["deliverAddress1"]},{"name":"Ref","type":"string","description":"Reference.","aliases":["ref"]},{"name":"Description","type":"string","description":"Header description.","aliases":["description"]},{"name":"DisplayTerm","type":"string","description":"Credit term.","aliases":["displayTerm","term"]},{"name":"Phone1","type":"string","description":"Phone.","aliases":["phone1","phone"]},{"name":"Attention","type":"string","description":"Attention/contact.","aliases":["attention","contact"]},{"name":"BranchCode","type":"string","description":"Branch code.","aliases":["branchCode"]},{"name":"CurrencyCode","type":"string","description":"Currency code.","aliases":["currencyCode"]},{"name":"CurrencyRate","type":"number","description":"Currency rate.","aliases":["currencyRate"]},{"name":"WithholdingTaxVersion","type":"number","description":"Optional native enum only when this document exposes the field. Omission preserves the existing value.","aliases":["withholdingTaxVersion"]},{"name":"Note","type":"string","description":"Note.","aliases":["note"]},{"name":"Remark1","type":"string","description":"Remark 1.","aliases":["remark1"]},{"name":"Remark2","type":"string","description":"Remark 2.","aliases":["remark2"]},{"name":"Remark3","type":"string","description":"Remark 3.","aliases":["remark3"]},{"name":"Remark4","type":"string","description":"Remark 4.","aliases":["remark4"]},{"name":"RefDocNo","type":"string","description":"Reference document number.","aliases":["refDocNo"]},{"name":"ShipVia","type":"string","description":"Shipping method.","aliases":["shipVia"]},{"name":"ShipInfo","type":"string","description":"Shipping info.","aliases":["shipInfo"]},{"name":"SalesLocation","type":"string","description":"Sales location where supported.","aliases":["salesLocation","location"]},{"name":"UserDefinedFields","type":"object","description":"Existing SDK-materialized UDF fields; exact reload verification required.","aliases":["userDefinedFields"]}]},{"name":"Details","fields":[{"name":"DtlKey","type":"number","description":"Existing document/detail selector, not a writable key.","aliases":["dtlKey"]},{"name":"AccNo","type":"string","description":"Posting GL account.","aliases":["accNo","accountNo"]},{"name":"ItemCode","type":"string","description":"Stock item code.","aliases":["itemCode"]},{"name":"UOM","type":"string","description":"Unit of measure.","aliases":["uom"]},{"name":"Location","type":"string","description":"Stock location.","aliases":["location"]},{"name":"Description","type":"string","description":"Line description.","aliases":["description"]},{"name":"Desc2","type":"string","description":"Line description 2.","aliases":["desc2"]},{"name":"FurtherDescription","type":"string","description":"Further description.","aliases":["furtherDescription"]},{"name":"ProjNo","type":"string","description":"Project code.","aliases":["projNo","project"]},{"name":"DeptNo","type":"string","description":"Department code.","aliases":["deptNo","department"]},{"name":"Qty","type":"number","description":"Quantity.","aliases":["qty"]},{"name":"FOCQty","type":"number","description":"FOC quantity.","aliases":["focQty"]},{"name":"UnitPrice","type":"number","description":"Unit price.","aliases":["unitPrice"]},{"name":"Discount","type":"string","description":"Discount.","aliases":["discount"]},{"name":"TaxCode","type":"string","description":"Tax code.","aliases":["taxCode"]},{"name":"TaxRate","type":"number","description":"Tax rate.","aliases":["taxRate"]},{"name":"WithholdingTaxVersion","type":"number","description":"Optional native enum only when this document exposes the field. Omission preserves the existing value.","aliases":["withholdingTaxVersion"]},{"name":"TaxAdjustment","type":"number","description":"Tax adjustment.","aliases":["taxAdjustment"]},{"name":"BatchNo","type":"string","description":"Batch number.","aliases":["batchNo"]},{"name":"SerialNo","type":"string","description":"Serial number where supported.","aliases":["serialNo"]},{"name":"DeliveryDate","type":"date","description":"Delivery date.","aliases":["deliveryDate"]},{"name":"SalesExemptionNo","type":"string","description":"Sales exemption number.","aliases":["salesExemptionNo"]},{"name":"UserDefinedFields","type":"object","description":"Existing SDK-materialized UDF fields; exact reload verification required.","aliases":["userDefinedFields"]}]},{"name":"KnockOffDetails","fields":[]},{"name":"TransferDetails","fields":[]},{"name":"PaymentDetails","fields":[]},{"name":"Options","fields":[]}],"schemaOnly":true}}