DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'uq_inventory_product_warehouse' ) THEN ALTER TABLE inventory ADD CONSTRAINT uq_inventory_product_warehouse UNIQUE (product_id, warehouse_id); END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'ck_inventory_qty_nonnegative' ) THEN ALTER TABLE inventory ADD CONSTRAINT ck_inventory_qty_nonnegative CHECK (quantity >= 0 AND locked_quantity >= 0 AND locked_quantity <= quantity); END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'ck_purchase_order_items_qty' ) THEN ALTER TABLE purchase_order_items ADD CONSTRAINT ck_purchase_order_items_qty CHECK (quantity > 0 AND received_quantity >= 0 AND received_quantity <= quantity); END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'ck_sales_order_items_qty' ) THEN ALTER TABLE sales_order_items ADD CONSTRAINT ck_sales_order_items_qty CHECK (quantity > 0 AND delivered_quantity >= 0 AND delivered_quantity <= quantity); END IF; END $$; CREATE INDEX IF NOT EXISTS idx_purchase_orders_status ON purchase_orders (status); CREATE INDEX IF NOT EXISTS idx_purchase_orders_supplier_status ON purchase_orders (supplier_id, status); CREATE INDEX IF NOT EXISTS idx_purchase_order_items_order_id ON purchase_order_items (order_id); CREATE INDEX IF NOT EXISTS idx_purchase_order_items_product_id ON purchase_order_items (product_id); CREATE INDEX IF NOT EXISTS idx_sales_orders_status ON sales_orders (status); CREATE INDEX IF NOT EXISTS idx_sales_orders_customer_status ON sales_orders (customer_id, status); CREATE INDEX IF NOT EXISTS idx_sales_order_items_order_id ON sales_order_items (order_id); CREATE INDEX IF NOT EXISTS idx_sales_order_items_product_id ON sales_order_items (product_id); CREATE INDEX IF NOT EXISTS idx_inventory_warehouse_product ON inventory (warehouse_id, product_id); CREATE INDEX IF NOT EXISTS idx_stock_movements_warehouse_created ON stock_movements (warehouse_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_stock_movements_reference ON stock_movements (reference_type, reference_id); CREATE INDEX IF NOT EXISTS idx_stock_movements_reference_no ON stock_movements (reference_no);