Código para calcular a melhor combinação entre fornecedores para uma lista de produtos, respeitando o pedido mínimo de cada fornecedor, levando em consideração descontos em % de cada fornecedor para compras de maior valor, preferências do cliente por determinados itens ou classe de itens a serem adquiridos com um ou distribuidores mais específicos (ex.: Verduras sempre com distribuidor A ou B, entre distribuidores preferidos), entre outras regras abaixo.
Regras:
1. Regra de exclusividade: Cada item deve ir com apenas 1 fornecedor, ou seja, não é possível comprar 2 caixas de banana com um fornecedor e 1 caixa de banana com outro.
2. Regra do menor preço: O resultado a ser fornecido será a alternativa mais barata considerando as restrições do usuário, podendo ser um único distribuidor ou uma combinação de 2 ou mais distribuidores. O número máximo de distribuidores que serão permitidos na combinação será indicado pela Conéctar no momento da solicitação.
3. Regra de preferência: O usuário pode definir preferências de itens ou classes, como “Frutas” com distribuidor A ou B, Manga com distribuidor C.
4. Regra de prioridade de preferência: todas as preferências do usuário são classificadas em ordem de prioridade. No input enviado pelo Conéctar, a ordem de prioridade considera o índice [0] da lista como de maior prioridade e os índices [1], [2], [3], etc.
5. Regra de essencialidade de preferência: Caso não seja possível atender a todas as preferências do usuário, algumas prioridades podem ser ignoradas e outras não, resultando em um aviso de que a combinação está indisponível, pois não atendeu uma prioridade “essencial”.
6. Regra de pedido mínimo: Todas as combinações deverão obedecer ao pedido mínimo de cada distribuidor.
7. Regra de desconto por volume: Podem ser aplicados descontos percentuais baseados no volume do pedido de acordo com o percentual indicado pelo distribuidor. O valor total do pedido a ser analisado para cálculo do desconto não considera a taxa da Conéctar; é calculado apenas com base na soma dos preços da distribuidora.
8. Regra de taxa zero: Algumas distribuidoras não cobram taxa Conéctar aplicada ao preço dos produtos para determinados clientes. Isto deve ser levado em consideração no cálculo da combinação com o menor valor total.
Solicitações:
A solução receberá solicitações feitas através da api rest, método post, seguindo o input mencionado, sem autenticação.
Input Conéctar:
Múltiplas solicitações poderão ser feitas simultaneamente e a Conéctar enviará os dados no seguinte formato:
//
request.ts em anexo
Output:
Entregue dados para cada solicitação no seguinte formato e em no máximo 10 segundos:
//
response.ts em anexo
Exemplos:
Exemplo 1:
Quero comprar 1 kg de maçã, três caixas de banana, 2 sacos de laranja, 10 kg de batata doce, 10 kg de tomate, 5 rúculas, 10 espinafres.
Tenho 4 fornecedores com preços diferentes e as seguintes regras:
Fornecedor A = Pedido mínimo de R$ 40,00 e descontos de 5% para pedidos acima de R$ 300,00, 6% acima de R$ 500,00 e 10% acima de R$ 1.000,00.
Fornecedor B = Pedido mínimo de R$ 100,00 e descontos de 5% para pedidos acima de R$ 300,00, 6% acima de R$ 500,00 e 10% acima de R$ 1.000,00.
Fornecedor C = Pedido mínimo de R$ 80,00 e descontos de 0% para pedidos acima de R$ 300,00, 6% acima de R$ 500,00 e 6% acima de R$ 1.000,00.
Fornecedor D = Pedido mínimo de R$ 80,00 e descontos de 0% para pedidos acima de R$ 300,00, 6% para pedidos acima de R$ 500,00 e 6% para pedidos acima de R$ 1.000,00.
Fornecedor E = Pedido mínimo de R$ 60,00 e descontos de 5% para pedidos acima de R$ 300,00, 6% para pedidos acima de R$ 500,00 e 6% para pedidos acima de R$ 1.000,00.
Preciso saber a combinação mais barata entre 1, 2 ou 3 fornecedores para realizar a compra.
Exemplo 2:
A mesma compra acima, mas com a seguinte preferência do cliente: todas as frutas com distribuidor A ou C (condição essencial, ou seja, se indisponível marcar a combinação como indisponível)
Exemplo 3:
A mesma compra acima, mas com a seguinte preferência do cliente: Quero que a maçã venha do distribuidor B. (Condição não essencial, ou seja, se não estiver disponível, basta ignorar)
Exemplo 4:
A mesma compra acima, mas com a seguinte preferência do cliente: comparar preços apenas entre A, B e C (prioridade 1, condição não essencial); a maçã deve vir do distribuidor B (prioridade 2, condição essencial).
- Embora esse exemplo possa não parecer fazer sentido, pois se o cliente marcou como essencial, então automaticamente deveria ser prioridade 1, mas para facilitar algumas questões internas deixaremos assim.
Exemplo 5:
A mesma compra acima, mas com a seguinte preferência do cliente: todas as verduras com o distribuidor A (prioridade 1) e bananas com o distribuidor B.
Sem detalhes adicionais, tudo se encontra na descrição do projeto.
Delivery term: Not specified