When despatches had to ship lot-tracked goods without batch data (see Allow Un-batched Despatches), that stock lives under the special UNBATCHED lot. The inventory sync is what heals this: as soon as the 3PL reports real batch detail for a product, the product's UNBATCHED bucket at that location is cleared while the true batches are written - keeping both would count the same physical stock twice. You will see this on the report as an adjustment line on the UNBATCHED lot alongside the new batch lines.
Sometimes one SKU is in dispute and a full sync is overkill. Sync Stock runs the inventory sync for just that product, with all the same rules (batch level, Stock Master, report lines) scoped to it:
Each run produces its own report under Operations > Inventory Syncs and its own Sync Log entry linked to the product. Where the provider has a by-SKU endpoint (Sprint does), this also fetches the freshest per-batch detail available.
Three equivalent triggers, all role-gated to Ops and above, all logged to the instance chatter as manual runs:
Overnight sync, 3PL-master, apply immediately. the 3PL reports 412 (product, batch) lines. 396 match Odoo exactly (unchanged). Batch N-M33916/25142 shows 46 at the 3PL vs 50 in Odoo - an adjustment of -4 posts, traceable in the product's move history to the sync reference SYNC/00023. Two brand-new batches from yesterday's goods-in appear as new lots with expiry dates. One SKU the 3PL reports ("PACKING-TAPE") has no Odoo product - an error line on the report, nothing changed, and you decide whether it should exist in Odoo at all.