-- Previne duplicatas em missao_logistica_itens por race condition no findOrCreateItem
-- (dois operadores confirmando o mesmo produto simultaneamente na sessão livre WMS).
--
-- IMPORTANTE: missao_logistica_itens é compartilhada por TODOS os tipos de missão.
-- Em separação/carregamento o MESMO produto aparece legitimamente várias vezes na
-- mesma missão (uma linha por pedido/referência), então a unicidade (missao, produto)
-- NÃO vale na tabela toda — só nos itens WMS, que o ConfirmarAlocacaoLaboratorio
-- carimba com referencia_tipo='ALOCACAO_WMS' (um item por missão+produto; o endereço
-- fica no movimento wms_movimentos, não no item).
--
-- Partial index escopado a WMS: exclui produto_id NULL e só cobre itens de alocação WMS.
--
-- Em produção (tabela grande), criar CONCURRENTLY para não travar escritas:
--   CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS uq_itens_missao_produto
--       ON missao_logistica_itens (missao_logistica_id, produto_id)
--       WHERE produto_id IS NOT NULL AND referencia_tipo = 'ALOCACAO_WMS';
CREATE UNIQUE INDEX IF NOT EXISTS uq_itens_missao_produto
    ON missao_logistica_itens (missao_logistica_id, produto_id)
    WHERE produto_id IS NOT NULL AND referencia_tipo = 'ALOCACAO_WMS';
