[{"data":1,"prerenderedAt":351},["ShallowReactive",2],{"navigation":3,"/changelog/2026/26-06-23-allocation-splitting-and-bills":174},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Docs",false,"/docs","docs",[10,14,37,60,98,106,137,159],{"title":11,"path":7,"stem":12,"icon":13},"Landing","docs/index","lucide:house",{"title":15,"path":16,"stem":17,"children":18,"icon":6},"Concepts","/docs/concepts","docs/concepts/1.index",[19,21,25,29,33],{"title":20,"path":16,"stem":17},"Introduction",{"title":22,"path":23,"stem":24},"External IDs","/docs/concepts/xids","docs/concepts/2.xids",{"title":26,"path":27,"stem":28},"Attributes","/docs/concepts/attributes","docs/concepts/attributes",{"title":30,"path":31,"stem":32},"Barcodes","/docs/concepts/barcodes","docs/concepts/barcodes",{"title":34,"path":35,"stem":36},"Capabilities","/docs/concepts/capabilities","docs/concepts/capabilities",{"title":38,"icon":6,"path":39,"stem":40,"children":41},"Configuration","/docs/configure","docs/configure/index",[42,43,47,51,56],{"title":20,"path":39,"stem":40},{"title":44,"path":45,"stem":46},"Devices","/docs/configure/devices","docs/configure/devices",{"title":48,"path":49,"stem":50},"Pack Stations","/docs/configure/pack-stations","docs/configure/pack-stations",{"title":52,"path":53,"stem":54,"icon":55},"Packaging","/docs/configure/packaging","docs/configure/packaging","lucide:package",{"title":57,"path":58,"stem":59},"Quarantine Locations","/docs/configure/quarantine-locations","docs/configure/quarantine-locations",{"title":61,"icon":6,"path":62,"stem":63,"children":64},"Developers","/docs/developer","docs/developer/index",[65,66,91],{"title":61,"path":62,"stem":63},{"title":67,"path":68,"stem":69,"children":70,"icon":90},"API","/docs/developer/graphql","docs/developer/graphql/1.index",[71,74,78,82,86],{"title":72,"path":68,"stem":69,"icon":73},"Overview","lucide:rocket",{"title":75,"path":76,"stem":77},"Getting started with the Jungle API","/docs/developer/graphql/getting-started","docs/developer/graphql/2.getting-started",{"title":79,"path":80,"stem":81},"API Keys","/docs/developer/graphql/obtaining-keys","docs/developer/graphql/3.obtaining-keys",{"title":83,"path":84,"stem":85},"GraphQL Reference","/docs/developer/graphql/schema","docs/developer/graphql/5.schema",{"title":87,"path":88,"stem":89},"Jungle Platform API - Global Features","/docs/developer/graphql/api-global-features","docs/developer/graphql/api-global-features","file-icons:graphql",{"title":92,"path":93,"stem":94,"children":95,"icon":6},"SDKs","/docs/developer/sdk","docs/developer/sdk/1.index",[96],{"title":97,"path":93,"stem":94},"Node.js",{"title":99,"path":100,"stem":101,"children":102,"order":104,"parent":67,"group":105,"icon":6},"Feeds","/docs/feed","docs/feed/01.index",[103],{"title":72,"path":100,"stem":101,"order":104,"parent":67,"group":105},2,"feedgroup",{"title":107,"path":108,"stem":109,"children":110},"Guides","/docs/guide","docs/guide/index",[111,112,117,121,125,129,133],{"title":107,"path":108,"stem":109},{"title":113,"path":114,"stem":115,"icon":116},"Attachments","/docs/guide/attachments","docs/guide/attachments","lucide:paperclip",{"title":118,"path":119,"stem":120},"Configuring Jungle For Your Organisation","/docs/guide/configuring-jungle-for-your-warehouse","docs/guide/configuring-jungle-for-your-warehouse",{"title":122,"path":123,"stem":124},"Updating Inventory","/docs/guide/inventory-update","docs/guide/inventory-update",{"title":126,"path":127,"stem":128},"Use Case - Orders with fulfilments","/docs/guide/orders","docs/guide/orders",{"title":130,"path":131,"stem":132},"Quickstart","/docs/guide/quickstart","docs/guide/quickstart",{"title":134,"path":135,"stem":136},"Tagging Objects","/docs/guide/tagging","docs/guide/tagging",{"title":138,"path":139,"stem":140,"children":141,"icon":6},"Types","/docs/objects","docs/objects/index",[142,143,147,151,155],{"title":138,"path":139,"stem":140},{"title":144,"path":145,"stem":146},"Location","/docs/objects/locations","docs/objects/locations",{"title":148,"path":149,"stem":150},"Product","/docs/objects/products","docs/objects/products",{"title":152,"path":153,"stem":154},"Purchase Order","/docs/objects/purchase-orders","docs/objects/purchase-orders",{"title":156,"path":157,"stem":158},"Supplier Return","/docs/objects/supplier-returns","docs/objects/supplier-returns",{"title":160,"icon":6,"path":161,"stem":162,"children":163},"Policy","/docs/policy","docs/policy/index",[164,165,170],{"title":160,"path":161,"stem":162},{"title":166,"path":167,"stem":168,"icon":169},"Privacy","/docs/policy/general-privacy","docs/policy/general-privacy","lucide:shield",{"title":171,"path":172,"stem":173},"Terms of Service","/docs/policy/general-terms","docs/policy/general-terms",{"id":175,"title":176,"body":177,"date":336,"description":337,"extension":338,"meta":339,"navigation":340,"path":341,"seo":342,"stem":343,"tags":344,"type":349,"version":349,"__hash__":350},"changelog/changelog/2026/26-06-23-allocation-splitting-and-bills.md","Flexible allocation splitting and bill editing",{"type":178,"value":179,"toc":333},"minimark",[180,198,209,301],[181,182,183,184,188,189,193,194,197],"p",{},"Allocation splitting is no longer limited to orders. A new ",[185,186,187],"code",{},"allocationSplit"," mutation lets you split ",[190,191,192],"strong",{},"any"," allocation — orders, transfers, or purchase returns — by breaking out line-item quantities into a new allocation. The order-only ",[185,195,196],{},"orderAllocationSplit"," is now deprecated in its favour.",[181,199,200,201,204,205,208],{},"Bills can now be ",[190,202,203],{},"edited after creation"," with a new ",[185,206,207],{},"billUpdate"," mutation, covering reference, supplier, dates, locations billed to, line items, and costs. Sensible guards apply: a line item's quantity can be reduced but not below what's already been received, and already-received line items can't be removed.",[210,211,212],"changelog-improvements",{},[213,214,215,223,230,237,244,251,258,273,280,295],"ul",{},[216,217,218,219,222],"li",{},"Purchase orders and bills now support a ",[190,220,221],{},"transaction currency"," and exchange rate, for recording purchases from foreign suppliers in the currency they invoice in.",[216,224,225,226,229],{},"A bill can now be associated with ",[190,227,228],{},"multiple locations",", reflecting purchases that span more than one site.",[216,231,232,233,236],{},"A new ",[185,234,235],{},"purchaseReturnUpdate"," mutation allows updating a purchase return's reference after creation.",[216,238,239,240,243],{},"Purchase returns now expose a scannable ",[185,241,242],{},"idQR"," identifier, consistent with other objects.",[216,245,246,247,250],{},"Replenishment can now ",[190,248,249],{},"pick to an intermediate location"," (such as a trolley) and then put items away to their pick faces, for warehouses where replenishment stock and pick faces are far apart.",[216,252,253,254,257],{},"Replenishment can now be ",[190,255,256],{},"scoped to a sub-location"," (such as an aisle or zone), so multiple operators can replenish different areas without overlapping work.",[216,259,260,261,264,265,268,269,272],{},"A sales channel product now supports a ",[185,262,263],{},"quantityAvailableAdjustment"," to extend availability for ",[190,266,267],{},"pre-order and oversell",", or hold stock back as a ",[190,270,271],{},"buffer"," when negative.",[216,274,275,276,279],{},"Packing from a location holding unassigned inventory now ",[190,277,278],{},"automatically reassigns"," that stock, instead of requiring it to be assigned first. If there isn't enough, a clear error names the location and the available versus required quantity.",[216,281,282,283,286,287,290,291,294],{},"Job line items now expose explicit ",[185,284,285],{},"locationFrom"," and ",[185,288,289],{},"locationTo"," fields, so you can tell where stock was picked from versus where it was moved to during picks, putaways, and receives. The ambiguous single ",[185,292,293],{},"location"," field is deprecated.",[216,296,232,297,300],{},[190,298,299],{},"brand feed"," is available for bulk export and syncing of brand records, with created and modified date filters.",[302,303,304],"changelog-fixes",{},[213,305,306,309,312,315,318,321,324,327,330],{},[216,307,308],{},"Enabling inventory assignment on a location that already holds stock now automatically re-evaluates waiting allocations and fills them from that location, instead of leaving them stuck.",[216,310,311],{},"Receiving large items that need to be split out for immediate shipping now completes reliably as a single atomic operation.",[216,313,314],{},"Unreceiving an item before scanning its location during a receive no longer leaves orphaned state that blocked the purchase order from closing.",[216,316,317],{},"Shipments can no longer become permanently stuck after creation; a stuck shipment now recovers automatically on its next action.",[216,319,320],{},"Purchase order status changes (such as re-accepting a closed order, or adding and removing line items on an approved order) now keep expected inbound quantities accurate.",[216,322,323],{},"Fixed bill total price calculation on creation and update.",[216,325,326],{},"Inventory movement search no longer returns duplicate results for products that match on multiple tags or barcodes.",[216,328,329],{},"Fixed a customer contact update issue that could write values into the wrong fields, or wipe an address field that wasn't part of the update.",[216,331,332],{},"Setting inventory at a location now correctly reports failure instead of always reporting success.",{"title":334,"searchDepth":104,"depth":104,"links":335},"",[],"2026-06-23T00:00:00.000Z","Split any allocation regardless of its source, and edit bills after creation.","md",{},true,"/changelog/2026/26-06-23-allocation-splitting-and-bills",{"title":176,"description":337},"changelog/2026/26-06-23-allocation-splitting-and-bills",[345,346,347,348],"allocation","bill","fulfilment","purchase order",null,"d64ujg2P2iDRI2gjydu4DIfNDwdAnS30D9JEUWd4qRM",1782188177514]