# FAQ - Webservice Integração - Automatizador de Roteirização

### Validações do WebMethod `roteirizarPedidos`

O método `roteirizarPedidos` realiza as seguintes validações, retornando mensagens de erro específicas em caso de falha:

1. **Senha da central inválida**
2. **Cliente não localizado na central com CPF/CNPJ e senha**
3. **Roteirização anterior sincronizada em dispositivo móvel**
4. **Falha ao excluir roteirização anterior**
5. **Roteirização não encontrada pelo ID informado**
6. **Placa de veículo não cadastrada ou fora do formato válido**
7. **Motorista não cadastrado no sistema**
8. **Data e hora de início da rota nulas**
9. **Código de ponto de interesse de origem inválido ou não cadastrado**
10. **Código de ponto de interesse de destino inválido ou não cadastrado**
11. **Nenhum carregamento informado**
12. **Nenhum pedido encontrado nos carregamentos informados**
13. **Pedidos sem código de ponto de interesse quando agrupamento está ativo**
14. **Falha ao chamar API de roteirização (Google Directions API)**
15. **Erro ao inserir viagem ou itinerários na base de dados (com rollback)**

---

### Perguntas Frequentes – WebMethod `roteirizarPedidos`

**1. O que acontece se a senha da central estiver incorreta ao usar o `roteirizarPedidos`?**  
Será retornada a mensagem "Erro: Senha inválida."

**2. Como o sistema valida o cliente na chamada do `roteirizarPedidos`?**  
O cliente deve estar vinculado à central e ser identificado pelo CPF/CNPJ e senha informados.

**3. O que significa o erro “Essa rota já foi sincronizada em um dispositivo móvel”?**  
Indica que uma rota existente foi sincronizada e precisa ser removida manualmente para permitir nova roteirização.

**4. É obrigatório informar um ID de rota no `roteirizarPedidos`?**  
Não. Se informado, o sistema tenta excluir a roteirização anterior vinculada a esse ID.

**5. O que ocorre se o ID de rota não for encontrado?**  
Será retornada a mensagem “Roteirização não encontrada.”

**6. Como deve ser o formato da placa do veículo no método `roteirizarPedidos`?**  
A placa deve seguir o padrão `XXX-XXXX` e o veículo deve estar cadastrado.

**7. E se o nome do motorista estiver incorreto?**  
Será retornado erro dizendo que o motorista não está cadastrado.

**8. A data/hora de início da rota pode ser nula?**  
Não. É obrigatória. Caso contrário, será retornado "Data e Hora de Início da Rota Inválida."

**9. Como o sistema valida os pontos de interesse de origem e destino?**  
Verifica se os códigos estão cadastrados e, se houver geometria, utiliza o centróide para coordenadas.

**10. O que acontece se não houver carregamentos informados?**  
Erro: “Nenhum carregamento informado.”

**11. E se nenhum pedido for localizado nos carregamentos informados?**  
Erro: “Nenhum pedido cadastrado nos carregamentos informados.”

**12. Quando é necessário o código de ponto de interesse no pedido?**  
Se a opção `agruparPedidosMesmoCliente` estiver ativada, todos os pedidos devem conter o código PoI.

**13. O método pode agrupar pedidos por zona ou cliente?**  
Sim. Ele agrupa por zona automaticamente e, se configurado, também por cliente com base no código PoI.

**14. A roteirização pode falhar por limitações externas?**  
Sim. A comunicação com a API do Google pode falhar e retornar "Não é possível roteirizar os pedidos."

**15. O que acontece em caso de falha na gravação da viagem ou itinerários?**  
O sistema realiza `rollback` na transação e retorna “Erro na inserção da viagem e/ou itinerários.”

### Validações do WebMethod `listarMotoristas`

1. Validação da senha da central
2. Validação do cliente (CPF/CNPJ + senha do cliente)
3. Captura de erro geral caso ocorra falha durante a execução

---

### Perguntas Frequentes – WebMethod `listarMotoristas`

1. O que faz o método `listarMotoristas`?  
    Retorna a lista de motoristas cadastrados para o cliente autenticado.
2. A senha da central é obrigatória no `listarMotoristas`?  
    Sim, e será validada antes da execução.
3. O que acontece se a senha da central estiver errada?  
    Retorna erro informando "Senha inválida".
4. O cliente precisa estar cadastrado na central?  
    Sim. Caso contrário, retorna erro "cliente com CPF/CNPJ não cadastrado".
5. O método `listarMotoristas` retorna motoristas de outros clientes?  
    Não, somente os motoristas vinculados ao cliente autenticado.
6. Posso usar CPF ou CNPJ no `listarMotoristas`?  
    Sim, desde que esteja vinculado ao cliente e central.
7. O que acontece se houver um erro interno?  
    Será retornada mensagem "Erro ao consultar lista de motoristas".
8. Preciso informar a senha do cliente?  
    Sim, a autenticação do cliente é obrigatória.
9. Quantos motoristas o método pode retornar?  
    Todos os cadastrados para o cliente.
10. O método `listarMotoristas` retorna motoristas inativos?  
    A documentação não especifica; depende da lógica interna do DAO.
11. O método retorna lista vazia se não houver motoristas?  
    Sim, com mensagem de sucesso e lista vazia.
12. O método `listarMotoristas` exige parâmetros adicionais?  
    Não, apenas CPF/CNPJ, senha do cliente e senha da central.
13. Qual o formato da resposta?  
    Um objeto contendo sucesso, mensagem e lista de motoristas.
14. O método `listarMotoristas` pode ser consumido via SOAP?  
    Sim, pois está anotado com `@WebMethod`.
15. O que fazer se o método sempre retornar erro?  
    Verificar credenciais, conexão com banco e integridade dos dados.

---

### Validações do WebMethod `listarVeiculos`

1. Validação da senha da central
2. Validação do cliente (CPF/CNPJ + senha do cliente)
3. Tratamento de erro geral em caso de exceções

---

### Perguntas Frequentes – WebMethod `listarVeiculos`

1. O que retorna o método `listarVeiculos`?  
    Uma lista de veículos vinculados ao cliente autenticado.
2. A senha da central é obrigatória?  
    Sim. Sem ela, o método retorna erro.
3. E se a senha estiver incorreta?  
    Erro: "Senha inválida".
4. O cliente precisa estar vinculado à central?  
    Sim. Caso contrário, não será possível listar os veículos.
5. O método retorna veículos de outros clientes?  
    Não. Apenas do cliente autenticado.
6. O que é necessário para chamar `listarVeiculos`?  
    CPF/CNPJ, senha do cliente e senha da central.
7. O método retorna lista vazia se não houver veículos?  
    Sim, com mensagem de sucesso.
8. O método pode lançar erro interno?  
    Sim, com a mensagem "Erro ao consultar lista de veículos".
9. A resposta inclui todos os dados dos veículos?  
    Inclui os principais dados conforme definidos no DAO.
10. Pode ser usado em sistemas externos?  
    Sim, via SOAP.
11. O método exige permissão especial?  
    Apenas autenticação válida.
12. O método `listarVeiculos` valida os parâmetros?  
    Sim. Senha e cliente são obrigatórios.
13. Pode ser testado por ferramentas como SoapUI?  
    Sim.
14. Os veículos precisam estar ativos para aparecer?  
    Depende da implementação no DAO.
15. O método afeta o banco de dados?  
    Não. É apenas consulta.

---

### Validações do WebMethod `cadastrarZona`

1. Validação da senha da central
2. Validação do cliente (CPF/CNPJ + senha do cliente)
3. Nome da zona com no mínimo 3 caracteres
4. Código da zona obrigatório e não vazio
5. Verificação se a zona já existe: se sim, atualiza; se não, insere
6. Tratamento de erro geral

---

### Perguntas Frequentes – WebMethod `cadastrarZona`

1. O que faz o método `cadastrarZona`?  
    Cria ou atualiza zonas de roteirização para o cliente.
2. O nome da zona pode ter menos de 3 caracteres?  
    Não. Gera erro se for menor.
3. O código da zona pode ser vazio?  
    Não. O campo é obrigatório.
4. E se a zona já existir?  
    O sistema tenta atualizá-la.
5. O que é retornado se a zona for atualizada?  
    Mensagem de sucesso indicando atualização.
6. Como saber se a zona foi realmente modificada?  
    A resposta indica se houve alteração nos dados.
7. Pode-se cadastrar zonas repetidas?  
    Não com o mesmo código.
8. O método `cadastrarZona` exige autenticação?  
    Sim, tanto do cliente quanto da central.
9. É possível cadastrar múltiplas zonas de uma vez?  
    Não. Cada chamada cadastra uma zona.
10. E se ocorrer erro na conexão com o banco?  
    Será retornado erro geral.
11. Como saber se a zona foi inserida com sucesso?  
    A mensagem retorna "inserida com sucesso".
12. É permitido usar apenas o nome sem código?  
    Não. Ambos são obrigatórios.
13. O código da zona pode conter letras e números?  
    Sim, desde que seja válido e único.
14. O método pode ser usado via SOAP?  
    Sim.
15. Qual tipo de retorno esse método fornece?  
    Um objeto com sucesso, mensagem e ID, se aplicável.

---

### Validações do WebMethod `cadastrarLoja`

1. Validação da senha da central
2. Validação do cliente
3. Nome da loja com no mínimo 3 caracteres
4. Código da loja obrigatório
5. Verificação de existência para decidir entre inserir ou atualizar
6. Tratamento de erro geral

---

### Perguntas Frequentes – WebMethod `cadastrarLoja`

(Semelhantes ao `cadastrarZona`, adaptadas para "loja")

1. Posso cadastrar uma loja sem nome?  
    Não. Nome com pelo menos 3 caracteres é obrigatório.
2. E se o código estiver ausente?  
    Erro: "Informe o código da loja".
3. Posso atualizar uma loja existente?  
    Sim. Se o código existir, ela será atualizada.
4. Como saberei se a loja foi alterada ou inserida?  
    A mensagem informa o tipo de operação.
5. O método `cadastrarLoja` pode duplicar lojas?  
    Não com o mesmo código.
6. O nome da loja pode conter espaços?  
    Sim, sem problema.
7. O método exige CPF/CNPJ?  
    Sim. É necessário autenticar o cliente.
8. O código da loja deve seguir algum padrão?  
    Não, mas deve ser único.
9. Há limite de lojas por cliente?  
    Não especificado.
10. A chamada afeta outras lojas?  
    Não. Apenas a loja da requisição.
11. Posso usar esse método por integração externa?  
    Sim, via SOAP.
12. Como lidar com erro na inserção?  
    Verifique conexão, dados e permissões.
13. Posso cadastrar lojas com acentos?  
    Sim.
14. A loja precisa estar ativa?  
    Não há validação para isso.
15. O método retorna a loja criada?  
    Não diretamente. Retorna apenas mensagem de sucesso ou erro.

---

### Validações do WebMethod `cadastrarVendedor`

1. Nome com no mínimo 3 caracteres
2. Código do vendedor obrigatório
3. Cliente e central devem ser válidos
4. Se existir, atualiza; se não, insere
5. Tratamento de erros

---

### Perguntas Frequentes – WebMethod `cadastrarVendedor`

1. O nome do vendedor pode ser curto?  
    Não. Deve ter ao menos 3 caracteres.
2. E o código pode estar vazio?  
    Não. É obrigatório.
3. O que acontece se o vendedor já existir?  
    Ele será atualizado.
4. Como saber se foi inserido ou alterado?  
    A mensagem retorna essa informação.
5. E se não ocorrer nenhuma mudança?  
    Mensagem indicará que os dados são os mesmos.
6. Posso cadastrar vendedor com mesmo código e nome diferentes?  
    Não recomendado. Código deve ser único.
7. Pode-se usar esse método para integração externa?  
    Sim.
8. O método retorna ID?  
    Não explicitamente. Apenas mensagens.
9. O CPF do cliente é validado?  
    Sim, como em todos os métodos.
10. O nome do vendedor pode conter símbolos?  
    Sim, se for coerente com o negócio.
11. Há validações para e-mail ou telefone?  
    Não nesse método.
12. O que fazer em caso de erro?  
    Verificar logs e parâmetros informados.
13. Posso atualizar o código de um vendedor?  
    Não diretamente. É melhor excluir e recriar.
14. É possível cadastrar dois vendedores com mesmo nome?  
    Sim, desde que o código seja diferente.
15. O método pode ser testado em homologação?  
    Sim, se o ambiente estiver configurado.

---

### Validações do WebMethod `cadastrarMotorista`

1. Nome com no mínimo 3 caracteres
2. Obrigatório CPF com pelo menos 11 dígitos ou CNH com pelo menos 4
3. Cliente e central devem ser válidos
4. Se motorista já existe por CPF ou CNH, atualiza
5. Caso contrário, insere novo
6. Tratamento de erros e rollback

---

### Perguntas Frequentes – WebMethod `cadastrarMotorista`

1. É obrigatório CPF ou CNH no `cadastrarMotorista`?  
    Sim. Pelo menos um deles.
2. O nome precisa ter mínimo de caracteres?  
    Sim. Ao menos 3.
3. O método identifica duplicidade por CPF?  
    Sim. Verifica CPF e, se necessário, CNH.
4. O que ocorre se os dados forem os mesmos?  
    Mensagem indica que não houve alteração.
5. E se ocorrer erro no banco?  
    Retorna erro geral com log.
6. O método retorna o motorista inserido?  
    Não. Apenas mensagem de sucesso ou erro.
7. A CNH pode ser usada sem CPF?  
    Sim, desde que tenha ao menos 4 caracteres.
8. E se houver erro de autenticação?  
    O método falha com mensagem apropriada.
9. A operação é reversível?  
    Não diretamente. Requer nova chamada com dados corretos.
10. O código da operação é retornado?  
    Não. Apenas a mensagem.
11. O motorista pode ter o mesmo nome de outro?  
    Sim. Desde que CPF ou CNH sejam diferentes.
12. A inserção exige e-mail ou telefone?  
    Não obrigatoriamente.
13. Há verificação de duplicidade com outros clientes?  
    Não. A validação é dentro do cliente.
14. O método altera dados sensíveis?  
    Sim. Por isso requer autenticação completa.
15. Pode-se cadastrar via integração?  
    Sim. Ideal para automações.