# Resolução de Conflitos – Merge main ← upstream/homologacao

**Data:** 2026-04-29  
**Branches:** `main` (HEAD) e `upstream/homologacao`  
**Regras aplicadas:** `prompts_dev/resolucao-conflitos.md`, `prompts_dev/guia-analise-qualidade.md` (estrutura do relatório)

**Arquivos com conflitos resolvidos:**

- `app/Http/Controllers/Administrativo/Cotefrete/EditarTransportadorasController.php`
- `app/Http/Controllers/Administrativo/ExtratoBoletosController.php`
- `app/Http/Controllers/DaCruz/FechamentoController.php`
- `public/assets/js/dacruz/fechamento-cotacao.js`
- `public/assets/js/dacruz/proposta.js`
- `resources/views/administrativo/extrato-boletos.blade.php`
- `resources/views/administrativo/sidenav.blade.php`

---

## 1. app/Http/Controllers/Administrativo/Cotefrete/EditarTransportadorasController.php

### Conflitos resolvidos

#### 1.1 Regras de validação `status` e campo CRM `origem_canal`

**Localização:** Array de regras de validação do update de transportadora.

**Main (HEAD):** `status` com `Rule::in(['Ativo', 'Inativo', 'Pendente', 'Teste'])` (produção).

**Homologação:** `status` apenas `Ativo`/`Inativo` e campo `origem_canal` nullable.

**Resolução:** Mantidos os quatro status da main e incluído `origem_canal` nullable da homologação.

**Motivo:** Preserva comportamento de produção nos status e incorpora o CRM sem conflito.

---

## 2. app/Http/Controllers/Administrativo/ExtratoBoletosController.php

### Conflitos resolvidos

#### 2.1 Argumento em `processarPagamentoBoletoCompleto` / `processarCancelamentoBoletoCompleto`

**Localização:** Bloco após `update` do boleto ao reconciliar com a Cora.

**Main (HEAD):** Passa `$boletoOriginal` (clone antes do `update`).

**Homologação:** Passa `$boleto` já atualizado.

**Resolução:** Mantido `$boletoOriginal` com formatação de `elseif` da homologação.

**Motivo:** Prioridade à main quando a semântica diverge; o clone preserva o estado usado pela mesma lógica do webhook.

---

## 3. app/Http/Controllers/DaCruz/FechamentoController.php

### Conflitos resolvidos

#### 3.1 `salvarMotorista`: cotação, motorista existente e `motorista_origem_uuid`

**Localização:** Início do fluxo após validação de contato.

**Main (HEAD):** Apenas `$uuid`, `$motoristaOrigemUuid`.

**Homologação:** Verificação `cotacaoPertenceTransportadora`, resolução de `motoristaExistente` por `motorista_id` ou UUIDs em `InfosComplementares`.

**Resolução:** Unificado: `$uuid`, `$motoristaOrigemUuid`, `$motoristaId` e todo o bloco de homologação usando `$uuid` (sem `uuid_cotacao` separado).

**Motivo:** Segurança e regras da homologação com compatibilidade ao backend que ainda usa `motorista_origem_uuid`.

#### 3.2 `selectMotoristas`: payload do Select2

**Localização:** `Cache::remember` – mapeamento dos motoristas.

**Main (HEAD):** Objeto completo com todos os campos para preenchimento do formulário.

**Homologação:** `montarPayloadMotoristaSelect` (payload enxuto).

**Resolução:** Mantido o map completo da main e adicionado `'motorista_id' => $m->id` em cada item.

**Motivo:** Evita regressão na UI do nome motorista; o vínculo rápido precisa de `motorista_id` numérico.

---

## 4. public/assets/js/dacruz/fechamento-cotacao.js

### Conflitos resolvidos

#### 4.1 `document.ready`: histórico e variável de origem

**Localização:** Início do `$(document).ready`.

**Resolução:** `motoristaOrigemUuidSelecionado` + `carregarHistoricoComunicacoesInicial()`.

**Motivo:** Comportamentos independentes; ambos necessários.

#### 4.2 Select2 nome motorista vs `inicializarMotoristaVincularSelect2`

**Resolução:** Bloco completo do Select2 em `#motorista-nome` (main) + chamada a `inicializarMotoristaVincularSelect2()`; no `change`, atualização de `data-motorista-id` quando houver `motorista_id`.

**Motivo:** Dois pontos de UX (formulário e vínculo); alinhamento com API que retorna `motorista_id`.

#### 4.3 `FormData` no submit do motorista

**Resolução:** Envio de `motorista_origem_uuid`, `motorista_id` (se houver) e `coleta_entrega_ambos`.

**Motivo:** Backend aceita os três; fusão das duas branches.

#### 4.4 Tratamento de erro AJAX

**Resolução:** Versão homologação com agregação de erros 422.

**Motivo:** Mensagens mais completas para validação.

---

## 5. public/assets/js/dacruz/proposta.js

### Conflitos resolvidos

#### 5.1 `changeColorInputs`

**Resolução:** Correção de cor em modo edição (main) + exclusão de `#sidebarFilter .form-control` (homolog) + `App.updateEnvioDisplayColor()`.

**Motivo:** Comportamentos compatíveis.

#### 5.2 Clique em `#nova_cotacao`

**Resolução:** Lógica concentrada em `ativarModoNovaCotacao()`; incluído no início da função o armazenamento de `posicao-antes-nova` que estava só no handler da main.

**Motivo:** Evita duplicação e preserva o fluxo de “descartar” da main com o evento `proposta:nova-cotacao-pronta` da homologação.

---

## 6. resources/views/administrativo/extrato-boletos.blade.php

### Conflitos resolvidos

#### 6.1 Título da página e botão “Atualizar Boletos”

**Resolução:** Título dinâmico com `$nomeTransportadora` e botão da homologação.

**Motivo:** Funcionalidade nova sem perder o fallback de título.

---

## 7. resources/views/administrativo/sidenav.blade.php

### Conflitos resolvidos

#### 7.1 Menu DaCruz, duplicatas e condicionais `sidenavBloqueados`

**Resolução:** Estrutura da homologação (`!in_array(..., $sidenavBloqueados, true)`); removidos blocos duplicados de Analytics/Atualizações e segundo menu DaCruz acoplado a `@if (('zapi'))`; Disparo com checagem correta; Manuais mantidos fora do `@if` de newsletter; newsletter com `!in_array('newsletter', ...)`.

**Motivo:** Corrige condicionais incorretas da main (`@if (('anuncios'))` sempre verdadeiro) e remove duplicidade de itens.

---

## 8. Resumo de prioridades

### Mantida / priorizada versão Main

- Status de transportadora (`Pendente`/`Teste`) e uso de `$boletoOriginal` no extrato.
- Payload completo do `selectMotoristas` para o formulário de motorista.
- Lógica visual de `changeColorInputs` e posição antes de nova cotação (via função unificada).

### Incorporada versão Homologação

- `origem_canal`, título extrato + botão atualizar, histórico de comunicações, `inicializarMotoristaVincularSelect2`, `coleta_entrega_ambos` e `motorista_id` no fechamento, `ativarModoNovaCotacao`, filtros do sidenav por bloqueios, tratamento de erro 422 no motorista.

### Fusão

- Fechamento PHP/JS: validações e IDs sem perder `motorista_origem_uuid`.
- `proposta.js`: sidebar + edição + `ativarModoNovaCotacao`.

---

## 9. Verificação final

- [x] Nenhum marcador `<<<<<<<` / `=======` / `>>>>>>>` em arquivos de código do merge.
- [x] Canais de log em `FechamentoController` não alterados neste merge.
- [x] Rotas/views órfãs: não avaliado em profundidade neste passo.

---

**Fim do relatório**
