Analisando propostas

Desenvolvimento de Algoritmo para Otimização de Compras

Publicado em 09 de Setembro de 2024 dias na TI e Programação

Sobre este projeto

Aberto

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.

Contexto Geral do Projeto

Sem detalhes adicionais, tudo se encontra na descrição do projeto.

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Alteração média
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho especificações
Disponibilidade requerida Conforme necessário
Funções necessárias Desenvolvedor, Outro
Outras funções necessárias Cientista de dados

Prazo de Entrega: Não estabelecido

Habilidades necessárias

Outro projetos publicados por M. S.