Blame | Last modification | View Log | RSS feed
-- Reconcile inventory.currentinventorysnapshot with scan truth-- Only for active tag_listing items, skips zero rows-- Step 1: Detect drift (use this output for email alert)-- Returns items where snapshot != scan truth (both under-counted and phantom)SELECT scan_truth.itemId item_id, scan_truth.currentWarehouseId warehouse_id,scan_truth.avail AS scan_avail, IFNULL(cis.availability, 0) AS snap_avail,(scan_truth.avail - IFNULL(cis.availability, 0)) AS deltaFROM (SELECT ii.itemId, ii.currentWarehouseId,SUM(CASE WHEN s.type IN ('PURCHASE','SALE_RET','MARKED_GOOD') THEN s.quantityWHEN s.type IN ('SALE','LOST_IN_WAREHOUSE','PURCHASE_RETURN','MARKED_USED','MARKED_BAD') THEN -s.quantityELSE 0 END) availFROM warehouse.inventoryItem iiJOIN warehouse.scanNew s ON s.inventoryItemId = ii.idJOIN catalog.tag_listing tl ON tl.item_id = ii.itemId AND tl.active = 1WHERE ii.currentWarehouseId > 0GROUP BY ii.itemId, ii.currentWarehouseIdHAVING avail > 0) scan_truthLEFT JOIN inventory.currentinventorysnapshot cisON cis.item_id = scan_truth.itemId AND cis.warehouse_id = scan_truth.currentWarehouseIdWHERE IFNULL(cis.availability, -1) != scan_truth.avail;-- Step 2: Sync — upsert scan truth for active tag_listing items with positive stockINSERT INTO inventory.currentinventorysnapshot (item_id, warehouse_id, availability)SELECT scan_truth.itemId, scan_truth.currentWarehouseId, scan_truth.availFROM (SELECT ii.itemId, ii.currentWarehouseId,SUM(CASE WHEN s.type IN ('PURCHASE','SALE_RET','MARKED_GOOD') THEN s.quantityWHEN s.type IN ('SALE','LOST_IN_WAREHOUSE','PURCHASE_RETURN','MARKED_USED','MARKED_BAD') THEN -s.quantityELSE 0 END) availFROM warehouse.inventoryItem iiJOIN warehouse.scanNew s ON s.inventoryItemId = ii.idJOIN catalog.tag_listing tl ON tl.item_id = ii.itemId AND tl.active = 1WHERE ii.currentWarehouseId > 0GROUP BY ii.itemId, ii.currentWarehouseIdHAVING avail > 0) scan_truthLEFT JOIN inventory.currentinventorysnapshot cisON cis.item_id = scan_truth.itemId AND cis.warehouse_id = scan_truth.currentWarehouseIdWHERE IFNULL(cis.availability, -1) != scan_truth.availON DUPLICATE KEY UPDATE availability = VALUES(availability);-- Step 3: Zero out phantom stock for tag_listing items (snapshot > 0 but scans say 0 or item not in tag_listing)UPDATE inventory.currentinventorysnapshot cisSET cis.availability = 0WHERE cis.availability > 0AND (cis.item_id NOT IN (SELECT DISTINCT item_id FROM catalog.tag_listing WHERE active = 1)OR NOT EXISTS (SELECT 1 FROM warehouse.inventoryItem iiJOIN warehouse.scanNew s ON s.inventoryItemId = ii.idWHERE ii.itemId = cis.item_id AND ii.currentWarehouseId = cis.warehouse_idGROUP BY ii.itemId, ii.currentWarehouseIdHAVING SUM(CASE WHEN s.type IN ('PURCHASE','SALE_RET','MARKED_GOOD') THEN s.quantityWHEN s.type IN ('SALE','LOST_IN_WAREHOUSE','PURCHASE_RETURN','MARKED_USED','MARKED_BAD') THEN -s.quantityELSE 0 END) > 0));