-- =====================================================
-- Migration 005: campos de origem/destino p/ operacao_tipo=movimentacao
-- Feature: operacao-wms / movimentacao (decisão A2 do 12-movimentacao-prd.md)
-- Data: 2026-06-24
-- =====================================================
--
-- A movimentação transfere N un. de um produto DE um endereço (origem) PARA outro
-- (destino). É a única operação WMS com DUAS localizações por movimento. As demais
-- (alocacao, inventario_*) seguem usando localizacao_codigo (= destino/local único)
-- e deixam estas colunas NULL.
--
-- Aditiva e idempotente (IF NOT EXISTS): rodar 2x é seguro. Postgres.
-- Block columns sem DEFAULT (feedback_block_columns); customerControl=true.
-- =====================================================

ALTER TABLE wms_movimentos
    ADD COLUMN IF NOT EXISTS localizacao_codigo_origem  VARCHAR(64);
        -- só movimentacao: endereço DE onde saiu (NULL nas demais operações)
ALTER TABLE wms_movimentos
    ADD COLUMN IF NOT EXISTS localizacao_codigo_destino VARCHAR(64);
        -- só movimentacao: endereço PARA onde foi (NULL nas demais operações)

-- Índices para consulta/rastreio por endereço de origem e destino, escopados por
-- tenant (block). Parciais (WHERE NOT NULL) — só indexam linhas de movimentacao.
CREATE INDEX IF NOT EXISTS idx_wms_movimentos_loc_origem
    ON wms_movimentos (localizacao_codigo_origem, block)
    WHERE localizacao_codigo_origem IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_wms_movimentos_loc_destino
    ON wms_movimentos (localizacao_codigo_destino, block)
    WHERE localizacao_codigo_destino IS NOT NULL;
