Roda uma simulação de frete
POST/carrier/quotation
Roda uma cotação para o CEP destino + lista de volumes/produtos. Handler PHP.
Validações iniciais (BusinessException → 400):
ShippingPostalCodeprecisa estar preenchido.- Pelo menos 1 item em
QuotationscomWeight > 0. - CEP precisa existir na base de CEPs (caso contrário grava erro tipo
3emCarrierQuotationError).
Lógica:
- Peso total = soma dos
Weightde cada item. - Largura total = soma dos
Width. - Altura e comprimento totais = máximo entre os itens.
- Para cada transportadora ativa de leilão de frete (
Suppliers.CarrierAuction = 1):- Calcula cubagem usando
CarrierCubageKmM(padrão 167) e compara comCarrierCubageFreeWeightpara definirWeightSelected(peso real ou cubado). - Busca a faixa de CEP em
CarrierScope; se não atende, marcaAttended=0. - Busca preço em
CarrierRateporRateType+WeightFrom/WeightTo; quando o peso excede a maior faixa e existe entrada comWeightTo=-1, extrapola linearmente. - Soma componentes do frete (rate, gris, advalorem, pedágio, taxas de difícil acesso, despacho, etc.) → subtotal.
- Aplica ICMS interestadual (se origem e destino diferem de estado e transportadora não tem
CarrierICMSIncluded). - Aplica
CarrierAuctionPenaltyda transportadora e regras de Regras Simulação Frete (adição de dias e/ou valor).
- Calcula cubagem usando
- Persiste cabeçalho em
CarrierQuotatione linhas emCarrierQuotationRate.
Devolve um array com 1 item: o detalhe da simulação criada (mesmo formato do GET por id).
Request
Responses
- 200
- 400
- 500
Simulação criada.
Precisa enviar o CEP destino; Peso precisa ser maior que zero; Dados para cotação não enviados; CEP destino <postalcode> não existe; Empresa não localizada (2). (Mensagens vêm via BusinessException PHP — sem prefixo [BadRequest].)
Erro interno.