# ENG-1547 — Tarefa de separação do almoxarifado sem embalagem

## Problema

A migration da ENG-1439 adicionou o constraint `picking_orders_started_paused_require_shipping_packaging`, exigindo `shipping_packaging_id` para qualquer tarefa nos estados `STARTED` ou `PAUSED`. Isso também bloqueia tarefas do almoxarifado, que não utilizam embalagem de expedição.

O código já diferencia tarefas de expedição por meio dos `StockIOs` relacionados, inclusive nos vínculos indiretos via `picking_order_products`. A regra de embalagem deve acompanhar esse critério, e não o estado da tarefa isoladamente.

## Decisão

Remover o constraint global e aplicar a obrigatoriedade de embalagem no backend somente quando a tarefa possuir `StockIO` do setor de expedição.

Essa regra será reutilizada nas requests e nos services de início. O almoxarifado continuará podendo iniciar e pausar tarefas sem embalagem. A expedição continuará exigindo embalagem antes de alterar o status ou iniciar os `StockIOs`.

## Mensagem funcional

Quando uma tarefa de expedição for iniciada sem embalagem, a API retornará uma mensagem funcional e traduzida:

> Selecione uma embalagem de expedição para iniciar esta tarefa.

A mensagem será aplicada tanto à validação da request quanto à exceção de domínio, evitando que o usuário receba SQLSTATE ou detalhes internos do banco.

## Fluxo

1. A request identifica a tarefa pela rota.
2. Se não houver embalagem e existir `StockIO` de expedição, a API responde com erro de validação amigável.
3. O service repete a proteção para chamadas internas ou sem request.
4. Para tarefas do almoxarifado, o service inicia a tarefa normalmente sem associar embalagem.
5. A migration remove o constraint universal legado.

## Testes

- Iniciar tarefa do almoxarifado sem embalagem.
- Iniciar tarefa de expedição sem embalagem pela rota V2.
- Rejeitar início sem embalagem pelo service.
- Preservar início de expedição com embalagem.
- Garantir mensagem funcional na resposta.
- Cobrir tarefas com relação direta e indireta quando o fluxo V2 estiver disponível no checkout.

## Fora de escopo

- Alterações no app mobile ou web.
- Criação de coluna redundante para indicar necessidade de embalagem.
- Trigger PostgreSQL para duplicar a regra de setor no banco.
