Skip to content

O objetivo do Agente Explorador em Prolog para o Fast Coffe é fornecer um sistema inteligente de gerenciamento para um estabelecimento de fast food especializado em café.

License

Notifications You must be signed in to change notification settings

Eemiaa/IntelligentAgent-FastCoffe-Prolog-PROJECT

Repository files navigation

IntelligentAgent-FastCoffe-Prolog-PROJECT

☕ Fast Coffe

✔ lista de conteúdos

➥ O objetivo do Agente Explorador em Prolog para o Fast Coffe é fornecer um sistema inteligente de gerenciamento para um estabelecimento de fast food especializado em café. O agente será responsável por coordenar e automatizar diversas tarefas relacionadas ao fluxo de pedidos, prioridades de atendimento, processamento de pagamentos, gerenciamento da cozinha e controle financeiro.

Contextualização do Ambiente de Atuação

O agente inteligente atuará em um ambiente dinâmico do Fast Coffe, que consiste em uma lanchonete com foco em café. O estabelecimento recebe pedidos de bebidas e alimentos, atendendo a demanda dos clientes e oferecendo um serviço de qualidade e eficiência.

➥ O ambiente do Fast Coffe possui diferentes áreas e subdomínios que o agente explorador irá gerenciar:

  1. OrderFlowController.pl: O arquivo OrderFlowController.pl é responsável por controlar o fluxo dos pedidos no Fast Coffe. Ele gerencia o recebimento dos pedidos, a fila de espera e o direcionamento para a cozinha ou atendimento, dependendo das preferências dos clientes.

  2. fluxoDePagamento.pl: O arquivo fluxoDePagamento.pl lida com o processo de pagamento dos pedidos no Fast Coffe. Ele inclui a realização de compras, o cálculo de volor total de pedido, a emissão de recibos e cálculo de troco.

  3. cozinha.pl: O arquivo cozinha.pl controla as atividades da cozinha no Fast Coffe. Ele monitora o estoque de ingredientes, os itens do cardápio, coordena a preparação dos diversos tipos de café e registra o tempo de preparo para garantir a eficiência operacional.

  4. controleFinanceiro.pl: O arquivo controleFinanceiro.pl é responsável por controlar as finanças do Fast Coffe. Ele registra as receitas, despesas e lucros, oferece resumo do caixa, auxilia no controle de estoque podendo servir de auxílio na tomada de decisões estratégicas relacionadas aos aspectos financeiros do estabelecimento.

Essa documentação fornece uma visão geral do objetivo do agente explorador em Prolog para o Fast Coffe e contextualiza o ambiente em que ele irá interagir. A partir dessa contextualização, será possível detralhar os fatos e regras da base de conhecimento para dar suporte às funcionalidades do agente inteligente.

  • Esse arquivo, basicamente, é o controlador de fluxo de pedidos. Ele realiza atividades de gerência dos pedidos através de uma fila de prioridades, sendo que tais pedidos possuem uma prioridade, podendo ser true ou false. Nesse sentido, para que não ocorra um starvation de nenhum deles, são feitas mudanças na fila de prioridade após a finalização de cada 3 pedidos com prioridade true, colocando sempre o último da fila, cuja prioridade é false, na primeira posição, adiando os demais pedidos que estiverem atrás dele.

    Além disso, esse arquivo realiza a gerência das notificações dos pedidos, para emitir um aviso no sistema, mostrando que ele está pronto. Somado a isso, essa parte do programa também realiza todo o tratamento necessário para manipular a ordem de emissão dessas notificações.

    Fato/Regra Descrição
    itemCardapio/4 Fato que descreve um item do cardápio, contendo o número do item, preço, tempo de espera e descrição.
    1º termo: número do item
    2º termo: preço
    3º termo: tempo de espera
    4º termo: descrição/nome do item
    ⚙️ FATO AUXILIAR DINÂMICO
    criarMensagem/2 Regra que cria a mensagem de pedido que será exibida na notificação, com base na lista de itens passadas nas especificações do pedido.
    1º termo: Lista de itens e quantidade de cada item do pedido
    2º termo: Mensagem devolvida como resposta
    🔔GERÊNCIA DE NOTIFICAÇÕES
    ⚙️ REGRA AUXILIAR
    buscarPedidoPeloID/6 Regra que busca um pedido pelo seu ID na fila de prioridades [primeiro termo da regra] e retorna suas informações (preço, prioridade, itens e tempo de espera).
    1º termo: fila de prioridades
    2º termo: ID do pedido
    3º termo: Preço total do pedido
    4º termo: Prioridade do pedido
    5º termo: Itens e suas quantidade no pedido
    6º termo: Tempo de espera (considerando apenas os itens que vão ser preparados)
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    obterNumeroDoItemEQuantidade/3 Regra que obtém o número do item e a quantidade a partir de uma lista de itens.
    1º termo: lista do item [ Item, Quantidade]
    2º termo: Número do item
    3º termo: Quantidade do item
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    criarIDPedido/1 Regra que cria um ID único para um novo pedido. Esses IDs só vão até 10 (capacidade máxima de pedidos da cafeteria)
    1º termo: Variável de resposta contendo o ID do pedido
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    calcularPrecoEEsperaTotal/3 Regra que calcula o preço total e o tempo de espera total com base em uma lista de itens.
    1º termo: Lista do item [ Item, Quantidade]
    2º termo: Preço total3º termo: Espera total
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    calcularPrecoEEsperaTotal/5 Sobrecarga da regra calcularPrecoEEsperaTotal/3.
    1º termo: Lista do item [ Item, Quantidade]
    2º termo: Preço somador auxiliar
    3º termo: Espera somadora auxiliar
    4º termo: Preço total devolvido como resposta
    5º termo: Espera total devolvida como resposta
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    obterEsperasDosPedidosAFrente/2 Regra que obtém o somatório dos tempos de espera dos pedidos na frente de um pedido específico na fila de prioridades.
    1º termo: ID do pedido especíico
    2º termo: Soma das esperas
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    adiarEsperasDosPedidosDeTras/3 Regra que adia os tempos de espera dos pedidos que estão atrás de um pedido específico.
    1º termo: Fila de prioridades
    2º termo: ID do pedido específico
    3º termo: Quantidade em segundos que se deseja adiar
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    adiarEsperasDosPedidosDeTras/2 Sobrecarga da regra adiarEsperasDosPedidosDeTras/3 após achar o ID do pedido dentro da fila, adiando todos os demais de trás.
    1º termo: lista de pedidos restantes de atrás
    2º termo: Quantidade de segundos que se deseja adiar
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    contPedidosProntos/1 Fato dinâmico que armazena a quantidade de pedidos de prioridade true que já ficaram prontos.
    1º termo: quantidade de pedidos prontos
    ⚙️ FATO AUXILIAR DINÂMICO
    obterTempoAtualEmSegundos/1
    Regra que obtém o tempo atual do sistema em segundos.
    1º termo: tempo atual do sistema em segundos
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    lerVerificador/1 Regra que lê o valor do verificador (true ou false) do arquivo "verificador.txt". Esse arquivo fica sendo alterado dinamicamente para monitorar quando o processo de emissão de notificação morre (quando o pedido finaliza).
    1º termo: valor do verificador obtido como resposta (true ou false)
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    lerPid/1 Regra que lê o valor do PID do arquivo "pid.txt" e converte para um número. Esse arquivo fica sendo alterado dinamicamente para que se possa obter o PID do processo que cria uma emissão de notificação agendada.
    1º termo: valor do PID obtido como resposta
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    agendarNotificacao/2 Regra que agenda uma notificação para um tempo futuro em segundos.
    1º termo: Quantidade em segundos para agendar a notificação
    2º termo: ID do pedido para o qual a notificação será exibida
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    cancelarNotificacao/1 Regra que cancela a notificação de um pedido específico.
    1º termo: ID do pedido que se deseja cancelar
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    adiarNotificacao/2
    Regra que adia uma notificação em segundos para um pedido específico.
    1º termo: Quantidade de segundos que se deseja adiar a notificação
    2º termo: ID do pedido que se deseja adiar a notificação
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    gerenciarStarvation/1 Regra que gerencia o starvation de pedidos com base em sua prioridade.
    1º termo: prioridade do pedido tirado da fila (a cada 3 pedidos de prioridade true, um pedido false do fim da fila é colocado para frente com prioridade true e contPedidosProntos/1 é reiniciado com valor 0)
    🔔GERÊNCIA DE NOTIFICAÇÕES
    📝GERÊNCIA DE PEDIDOS
    ⚙️ REGRA AUXILIAR
    monitorarProcesso/2 Regra que monitora um processo de notificação em execução.
    1º termo: PID do processo que criou a notificação
    agendada
    2º termo: ID do pedido que vai emitir a notificação
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    repetirVerificacao/2 Regra que verifica repetidamente se um processo de notificação de um determinado pedido ainda está em execução.
    1º termo: PID do processo de notificação
    2º termo: ID do pedido
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    processoEstaEmExecucao/1
    Regra que verifica se um processo identificado pelo PID ainda está em execução..
    1º termo: PID do processo
    ⚙️ REGRA AUXILIAR
    🔔GERÊNCIA DE NOTIFICAÇÕES
    cardapio/0 Regra que exibe o cardápio na tela.
    👤 REGRA USADA PELO CLIENTE
    mostrarCardapio/1 Regra auxiliar de cardapio/0
    1º termo: lista com todos os itens do cardápio
    ⚙️ REGRA AUXILIAR
    fazerPedido/2 Regra que permite ao cliente fazer um pedido, recebendo como resposta o preço total e o ID do pedido.
    1º termo: Preço total do pedido
    2º termo: ID do pedido
    👤 REGRA USADA PELO CLIENTE
    verStatusDoPedido/1 Regra que permite ao cliente verificar o status do seu pedido, fornecendo o ID do pedido como entrada.
    1º termo: ID do pedido
    👤 REGRA USADA PELO CLIENTE
    cancelarPedido/1 Regra que permite ao cliente cancelar um pedido, fornecendo o ID do pedido como entrada.
    1º termo: ID do pedido
    👤 REGRA USADA PELO CLIENTE
    pegarPedido/1 Regra que permite ao cliente pegar o pedido pronto, fornecendo o ID do pedido como entrada.
    1º termo: ID do pedido
    👤 REGRA USADA PELO CLIENTE
    pedidoPronto/5 Fato dinâmico que serve para adicionar os pedidos que já estão prontos na base de conhecimento, contendo informações relevantes sobre eles:  ID, Preço, Prioridade Itens e o tempo de espera
    1º termo: ID do pedido
    2º termo: Preço total do pedido
    3º termo: Prioridade do pedido
    4º termo: Itens do pedido e a quantidade de cada um
    5º termo: Tempo de espera total do pedido, considerando o tempo de preparo de cada item
    ⚙️ FATO AUXILIAR DINÂMICO
    📝GERÊNCIA DE PEDIDOS
    notificacaoAgendada/3 Fato dinâmico que guarda o PID de um processo que criou uma notificação agendada, o ID do pedido cuja notificação será emitida e o tempo previsto para que essa notificação dispare
    1º termo: PID do processo que iniciou a notificação agendada
    2º termo: ID do pedido
    3º termo: tempo previsto para emitir a notificação
    ⚙️ FATO AUXILIAR DINÂMICO
    🔔GERÊNCIA DE NOTIFICAÇÕES
    idDoVerificador/2 Fato dinâmico que armazena o ID da thread que fica monitorando quando o processo de emissão de notificação agendada morre e o ID do pedido da notificação agendada para relacionar pedido e notificação.
    1º termo: ID do pedido
    2º termo: ID da thread 
    ⚙️ FATO AUXILIAR DINÂMICO
    🔔GERÊNCIA DE NOTIFICAÇÕES
    • Esse arquivo contém, basicamente, a fila de prioridades, bem como as suas funcionalidades, que foram construídas a partir de regras específicas, como: adicionar um pedido na fila, remover e alterar a prioridade. Além disso, outras regras auxiliares foram construídas, como a de comparar a prioridade de dois pedidos, para inseri-los na posição certa na fila, a de reordenar os itens da fila com base na nova prioridade adicionada a um outro pedido e, por fim, a de obter o último pedido sem prioridade da fila, a fim de inseri-lo no início da fila, para realizar a gerência de starvation com êxito.

      Fato/Regra Descrição
      fila_prioridades/1 Fato dinâmico que armazena a fila de prioridades.
      1º termo: fila de prioridades em forma de lista
      ⚙️ FATO AUXILIAR DINÂMICO
      📝GERÊNCIA DE PEDIDOS
      cont/1 Fato dinâmico que armazena o contador de pedidos para adicionar a ordem em que cada pedido foi inserido na fila.
      1º termo: quantidade de pedidos na fila
      ⚙️ FATO AUXILIAR DINÂMICO
      📝GERÊNCIA DE PEDIDOS
      adicionar_pedido/5 Regra que adiciona um pedido à fila de prioridades.
      1º termo: ID do pedido
      2º termo: Preço total do pedido
      3º termo: Prioridade do pedido
      4º termo: Descrição do pedido
      5º termo: Tempo de espera do pedido
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      remover_pedido/1 Regra que remove um pedido da fila de prioridades.
      1º termo: ID do pedido 
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      alterar_prioridade/2 Regra que altera a prioridade de um pedido na fila de prioridades e reordena a fila.
      1º termo: ID do pedido que se deseja mudar a prioridade
      2º termo: Nova prioridade que se deseja colocar no pedido
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      inserir_pedido/3 Regra auxiliar da adicionar_pedido/5 que insere um pedido na fila de prioridades.
      1º termo: Fila de prioridades na forma de lista
      2º termo: pedido, na forma de termo complexo: pedido(ID, Preco, Prioridade, Ordem de Inserção, Descrição, Espera)
      3º termo: Nova fila que será dada como resposta, com o novo pedido já inserido
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      remover_pedido/3 Regra auxiliar da remover_pedido/1 que remove um pedido da fila de prioridades.
      1º termo: Fila de prioridades em forma de lista
      2º termo: ID do pedido que se deseja remover
      3º termo: Nova fila obtida como resposta, com o pedido já removido
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      alterar_prioridade/4 Regra auxiliar da alterar_prioridade/2 que altera a prioridade de um pedido na fila de prioridades.
      1º termo: Fila de prioridades em forma de lista
      2º termo: ID do pedido que se deseja alterar a prioridade
      3º termo: Nova prioridade que se deseja colocar no pedido
      4º termo: Nova fila resultante da alteração da prioridade do pedido na lista e da reordenação dele nela
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      compara_prioridades/2 Regra que compara as prioridades entre dois pedidos. Caso seja um true e um false, ele considera o true com maior prioridade. Caso seja dois true ou dois false, ele considera quem entrou primeiro, considerando que cada pedido tem um contador de ordem de chegada.
      1º termo: Pedido 1
      2º termo: Pedido 2
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      reordenar_fila_prioridades/2 Regra que reordena a fila de prioridades com base nas novas prioridades, quando se usa a regra alterar_prioridade/2.
      1º termo: Fila de prioridades
      2º termo: Fila reordenada obtida como resposta
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      pegar_ultimo_false_da_fila/1 Regra que obtém o ID do último pedido sem prioridade na fila.
      1º termo: ID do pedido obtido como resposta
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS
      pegar_ultimo_false_da_fila/2 Sobrecarga da regra pegar_ultimo_false_da_fila/1 com o ID do pedido como argumento inicial.
      1º termo: Fila de prioridades em forma de lista
      2º termo: ID do pedido obtido como resposta 
      ⚙️ REGRA AUXILIAR
      📝GERÊNCIA DE PEDIDOS

    Exemplos de Uso

    • inicializeCaixa/0
    ?- inicializeCaixa.
    Caixa inicializado com sucesso!
    true.
    
    • A base de conhecimento recebe dinamicamente os fatos receita_diaria(DataDoSistema,0) e despesa_diaria(DataDoSistema,0).

    • cardapio/0
    ?- cardapio.
     =================== ☕ CARDAPIO ☕ ====================
    1. Americano                                      R$3.00
    2. Cappuccino                                     R$2.00
    3. Double Expresso                                R$4.00
    4. Latte                                          R$3.00
    5. Macchiato                                      R$5.00
    6. Mint chocolate                                 R$6.50
    7. Expresso                                       R$8.00
     =======================================================
    
    true.
    
    • Mostra os itens do cardápio em uma tabela
    • Esses itens são inseridos dinamicamente na base de conhecimento

    • fazerPedido/2
    ?- fazerPedido(Preco, ID).
    Insira seu pedido em uma lista de listas: 
    [[< Numero do item >, < Quantidade >], ...]
    |: [[1,1]].
    
    Prioridade [true/false]: 
    |: true.
    
    Compra realizada com sucesso!Ingrediente usado com sucesso!Compra realizada com sucesso!Ingrediente usado com sucesso!Alimento cozinhado com sucesso
    Preco = 3,
    ID = 9.
    
    ?- listing(pedidoPronto).
    :- dynamic pedidoPronto/5.
    
    pedidoPronto(9, 3, true, [[1, 1]], 1).
    
    true.
    
    • Realiza um pedido através de uma lista de listas: [[< Numero do item >, < Quantidade >], ...]
    • Em seguida, é definida a prioridade do pedido
    • Por fim, é devolvido ao cliente o preço total e o ID do pedido.

    • verStatusDoPedido/1
    ?- verStatusDoPedido(ID).
    O Pedido 3 já está pronto. O valor total deu R$3.00
    true. 
    
    • Verifica o status do pedido, que pode ser: pronto, ainda não está pronto e inexistente, caso um ID inválido seja passado

    • cancelarPedido/1
    ?- cancelarPedido(ID).
    Pedido cancelado com sucesso!
    
    true.
    
    • Cancela um pedido em andamento pelo ID dele

    • pegarPedido/1
    ?- pegarPedido(ID).
    Está aqui o seu pedido, volte sempre :)
    
    true.
    
    • Obtem o pedido quando ele está pronto

    • Caso ele não esteja pronto, vai ser exibido um false

    • Caso ele esteja pronto, acontece o mesmo caso do exemplo acima.

    • 💵 fluxoDePagamento.pl

    Esse módulo especifica as diretivas de pagamento de cada cliente, recebendo uma determinada quantia, calculando o troco e emitindo um recibo. Utiliza a API disponibilizada pelo orderFlowController.pl para receber os valores.

    Fato/Regra Descrição
    realizar_compra/2 Simula a compra de uma lista de produtos por um cliente no café. Chama o predicado fornecer_recibo/2 e recebaPagamento/1
    1º termo: ID do Pedido
    2º termo: Recebimento em dinheiro do caixa
    💰 Fluxo de Pagamento
    fornecer_recibo/2 Gera o recibo com todos os produtos comprados pelo cliente, além do troco e do valor total. Utiliza a API disponibilizada por orderFlowController.pl para encontrar os itens atrelados ao pedido e o seu valor total.
    1º Termo: ID do pedido.
    2º Termo: Quantia em dinheiro recebida pelo caixa
    💰 Fluxo de Pagamento
    calcular_troco/3 Calcula o troco do pedido, baseado em seu valor total.
    1º Termo: ID do pedido
    2º Termo: Quantia recebida pelo caixa
    3º Termo: Valor de retorno do troco.
    💰 Fluxo de Pagamento
    imprimir_produto_recibo/1 Imprime um produto no recibo. Ele age de forma recursiva até imprimir todos os pedidos na lista recebida.
    1º Termo: Uma lista de listas que contenham, em cada item da lista primária, uma sublista contendo [Número do Pedido no Cardápio, Quantidade deste pedido].
    💰 Fluxo de Pagamento

    Exemplos de Uso

    ?- realizar_compra(ID, Recebimento).

    Cria-se um pedido com fazer_pedido(ID, Preco).

    ? - fazer_pedido(ID, Preco).

    Depois de realizado um pedido, e retornado o ID, neste exemplo, 4. Podemos utilizar o predicado com o ID do pedido e com a quantia que o caixa recebeu.

    ?- realizar_compra(4, 20).

    Caso a quantia seja suficiente, a saída sera o recibo do pedido atrelado ao ID.

    --- Fast Cofee (TM) ---
    2 Double Expresso : 8.00
    2 Cappuccino    : 4.00
    -----------------------
    Total Pedido   : 12.00
    Troco          : 8.00
    -----------------------
    

    Se a quantia for insuficiente false será retornado.

    • fornecer_recibo/2
    ?- fornecer_recibo(ID, Recebimento).

    Fornece o recibo baseado no ID do pedido, avaliando a quantia recebida pelo caixa. Se chamado sozinho, o predicado recebaPagamento/1 não será chamado, não registrando o valor recebido.

    --- Fast Cofee (TM) ---
    2 Double Expresso : 8.00
    2 Cappuccino    : 4.00
    -----------------------
    Total Pedido   : 20.00
    Troco          : 8.00
    -----------------------
    
    • calcular_troco/3
    ?- calcular_troco(ID, Recebimento, Troco).

    Pega o valor total do pedido relacionado ao ID, a partir do predicado pedido_pronto(ID, ValorTotal, _, _, _). Depois calcular o valor recebido pelo caixa e retorna o troco.

    • imprimir_produto_recibo/1
    ?- imprimir_produto_recibo([[Numero, Quantidade] | RestoLista])

    Pega as informações do cardápio e calcula o preço total. Assim, é imprimido um item do recibo neste formato. Essa função é utilizada recursivamente até não haver mais nenhum produto.

  • O presente módulo é responsável por gerenciar os fatos dinâmicos que dizem respeito à cozinha, tais como item da loja e item do cardapio, entre outros. Além disso, também é responsável pela gerência de consumo e preparo do alimentos, assim como gerencia de itens no cardápio e estoque de ingredientes.
    Fato/Regra Descrição
    itemLoja/2 Fato que descreve um item da loja de ingredientes, contendo o nome do ingrediente e o preço.
    1º termo: nome do ingrediente.
    2º termo: preço.
    ⚙️ FATO AUXILIAR DINÂMICO
    👩‍🍳 Cozinha
    estoque/2 Fato que descreve o estoque da cafeteria, contendo o nome do ingrediente e a quantidade.
    1º termo: nome do ingrediente.
    2º termo: quantidade.
    ⚙️ FATO AUXILIAR DINÂMICO
    👩‍🍳 Cozinha
    itemCardapio/4 Fato que descreve os itens do cardapio, contendo o id, preço, tempo de preparo e nome do produto da cafeteria.
    1º termo: id.
    2º termo: preço.
    3º termo: tempo de preparo.
    4º termo: nome do produto da cafeteria.
    ⚙️ FATO AUXILIAR DINÂMICO
    👩‍🍳 Cozinha
    livroReceitas/2 Fato que descreve as receitas disponíveis, contendo o nome e ingredientes da receita.
    1º termo: nome.
    2º termo: lista de ingredientes.
    ⚙️ FATO AUXILIAR DINÂMICO
    👩‍🍳 Cozinha
    infoCozinha/0 Regra que descreve informações importantes de estados do livro de receitas, estoque e itens da loja.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    comprarIngrediente/2 Regra solicita a compra de ingredientes na loja, utiliza a regra registreDespesa para registrar o log da compra realizada.
    1º termo: nome do ingrediente.
    2º termo: quantidade de ingredientes que deseja comprar.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    usarIngrediente/2 Essa regra faz a "utilização" de um determinado ingrediente, ou seja, remove esse ingrediente do estoque, caso não tenham ingrediente necessários também faz a compra para assim utilizar.
    1º termo: nome do ingrediente.
    2º termo: quantidade de ingredientes que deseja utilizar.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    addReceita/2 Regra adiciona receita no livro de receitas.
    1º termo: nome da receita.
    2º termo: lista de ingredientes da receita.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    addItemCardapio/4 Regra adiciona item no cardapio a partir das receitas disponíveis no livro de receitas.
    1º termo: id
    2º termo: preco.
    3º termo: tempo de preparo.
    4º termo: nome do produto.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    cozinhar/2 Regra responsável por cozinhar por item no cardapio.
    1º termo: id do cardapio.
    2º termo: quantidade que foi solicitada desse mesmo produto.
    ⚙️ REGRA
    👩‍🍳 Cozinha
    cozinharPedido/2 Regra responsável por cozinhar todo o pedido, utiliza a regra cozinhar como auxiliar.
    1º termo: lista de listas [Id, Qtd].
    ⚙️ REGRA
    👩‍🍳 Cozinha

    Exemplos de Uso

    • inicializeCaixa/0
    ?- inicializeCaixa.
    • Acrescenta na base de conhecimento os fatos dinâmicos receita_diaria(Data,0) e despesa_diaria(Data,0) com a Data do dia e o valor zero.

    • comprarIngrediente/2

    ?- comprarIngrediente('Chocolate',3).
    Compra realizada com sucesso!
    true.
    • usarIngrediente/2
    ?- usarIngrediente('Chocolate',2).
    Ingrediente usado com sucesso!
    true 
    • addReceita/2
    ?- addReceita('Cafe simples',['Cafe','Acucar']).
    Receita adicionada com sucesso!
    true.
    • addItemCardapio/4
    ?- addItemCardapio(1,2,2,'Cafe simples').
    Item adicionado com sucesso no cardapio!
    true.
    • cozinhar/2
    ?- cozinhar(1,3).
    Compra realizada com sucesso!
    Ingrediente usado com sucesso!
    Compra realizada com sucesso!
    Ingrediente usado com sucesso!
    true.
    • cozinharPedido/1
    ?- cozinharPedido([[1,2]]).
    Compra realizada com sucesso!
    Ingrediente usado com sucesso!
    Compra realizada com sucesso!
    Ingrediente usado com sucesso!
    true.
    • infoCozinha/0
    ?- infoCozinha.
     Livro de Receitas:
    :- dynamic livroReceitas/2.
    
    livroReceitas('Cafe simples', ['Cafe', 'Acucar']).
    
     Estoque:
    :- dynamic estoque/2.
    
    estoque('Chocolate', 1).
    estoque('Cafe', 0).
    estoque('Acucar', 0).
    
     Itens da Loja:
    :- dynamic itemLoja/2.
    
    itemLoja('Acucar', 1).
    itemLoja('Cafe', 1).
    itemLoja('Leite', 1).
    itemLoja('Canela', 2).
    itemLoja('Chocolate', 2).
    itemLoja('Ortela', 2).
    
    true.
  • O arquivo controleFinanceiro.pl desempenha um papel crucial no gerenciamento das finanças do Fast Coffe, fornecendo um sistema para registrar e analisar as receitas, despesas, lucros e prejuízos diários. Ele contém as seguintes regras e funcionalidades:
    Fato/Regra Descrição
    receita_diaria/2. Fato indica a receita diária do Fast Coffe.
    1º termo: Data do sistema
    2º termo: Valor da Receita atual.
    despesa_diaria/2. Fato indica a receita despesa diária do Fast Coffe.
    1º termo: Data do sistema
    2º termo: Valor da despesa atual.
    receita/3. Fato relaciona uma receita com o a data e hora do seu recebimento bem como o id do pedido a que gerou.
    1º termo: Data e hora do sistema
    2º termo: Valor da receita.
    3º termo: Id do pedido relacionado a receita
    despesa/2. Fato registra na base de conhecimento a data e hora de uma despesa.
    1º termo: Data e hora do sistema
    2º termo: Valor da despesa.
    data/2 Essa regra retorna a data e hora formatadas. Ela utiliza o predicado get_time/1 para obter a data e hora atuais e o predicado format_time/3 para formatá-las de acordo com o padrão desejado.
    1º termo: Retorna data do sistema
    2º termo: retorna a data e hora do sistema
    ⚙️ REGRA AUXILIAR
    inicializeCaixa/0 Fato indica que o caixa do Fast Coffe é inicializado diariamente. Ele adiciona na base de dados os fatos dinâmicos receita_diaria/2. e despesa_diaria/2 com a data atual com o valor 0, servindo como ponto de partida para registrar as transações financeiras ao longo do dia.
    totalRecebido/0 Regra tem o objetivo exibir o valor total recebido no dia.
    totalDespesas/0 Regra tem o objetivo exibir o valor total de despesas do dia.*
    recebaPagamento/1 Regra responsável por registrar o valor de um pedido como receita ao receber um pagamento.
    1º termo: Variável contendo o ID do pedido
    registreDespesa/4 Regra que permite registrar um valor como despesa no sistema. Recebe como parâmetro nome do produto adquirido, seu valor e quantidade, e registra essas informações como despesa.
    1º termo: Recebe o nome do produto comprado que gerou a despesa
    2º termo: Recebe o valor gasto com o produto comprado
    3º termo: Recebe a quantidade do produto comprado
    calculeLucro/1 Regra que calcula o lucro obtido na data atual, o resultado do cálculo é atribuído à variável Lucro. Ela utiliza os predicados data/2, receita_diaria/2 e despesa_diaria/2 para obter os valores necessários. O lucro é calculado subtraindo o total de despesas da receita total do dia.
    1º termo: Variável usada como retorno da consulta com o valor do lucro atual
    ⚙️ REGRA AUXILIAR
    calculeDeficit/1 Regra que calcula o déficit obtido na data atual. Utiliza os predicados data/2, receita_diaria/2 e despesa_diaria/2 para obter os valores necessários. O déficit é calculado subtraindo a receita total do dia pelo total de despesas.
    1º termo: Variável usada como retorno da consulta com o valor do déficit atual
    ⚙️ REGRA AUXILIAR
    listeEntradas/0 Regra que lista a data e hora, o valor e o ID de todos os pedidos recebidos. Ela utiliza o predicado listing/1 para exibir as informações armazenadas no fato receita/3.
    listeSaidas/0 Regra que lista a data e hora e o valor de todas as saídas registradas, ou seja, as despesas realizadas durante o dia. Utiliza o predicado listing/1 para exibir as informações armazenadas no fato despesa/2.
    resumaCaixa/0 Regra que mostra um resumo do caixa, exibindo o total recebido, o total gasto e o lucro ou prejuízo do dia. Utiliza os predicados data/2, receita_diaria/2 e despesa_diaria/2 para obter as informações necessárias e as exibe na tela formatadas de acordo com o resultado obtido.

    Exemplos de Uso

    • inicializeCaixa/0
    ?- inicializeCaixa.
    • Acrescenta na base de conhecimento os fatos dinâmicos receita_diaria(Data,0) e despesa_diaria(Data,0) com a Data do dia e o valor zero.

    • totalRecebido/0

    ?- totalRecebido.
    Total recebido em 03 Jul 2023: R$140.0 .
    true.
    • totalDespesas/0
    ?- totalDespesas.
    Total de despesas em 03 Jul 2023 : R$51 .
    true.
    • recebaPagamento/1
    ?- recebaPagamento(2).
    - Busca o valor recebido pelo pedido de ID 2 e registra como valor de receita.
    
    • registreDespesa/4
    ?- registreDespesa('acucar', 6.99,1).
    - Atualiza o valor da despesa diária e registra na base de conhecimento a despesas e as informações do nome e da quantidade do produto que a gerou relacionando-as com a data e hora da despesa realizada. 
    
    • calculeLucro/1
    ?- calculeLucro(Lucro).
    Lucro = 89.0.
    • calculeDeficit/1
    ?- calculeDeficit(Deficit).
    Deficit = 9.0.
    • listeEntradas./0
    ?- listeEntradas.
    receita("03 Jul 2023 00:07:29", 96.0, 10).
    receita("03 Jul 2023 00:08:10", 44.0, 1).
    true.
    • listeSaidas./0
    ?- listeSaidas.
    :- dynamic despesa/4.
    
    despesa("03 Jul 2023 00:06:46", 5, 'Acucar', 5).
    despesa("03 Jul 2023 00:06:46", 5, 'Cafe', 5).
    despesa("03 Jul 2023 00:06:46", 5, 'Canela', 10).
    despesa("03 Jul 2023 00:06:46", 1, 'Acucar', 1).
    despesa("03 Jul 2023 00:06:46", 1, 'Cafe', 1).
    despesa("03 Jul 2023 00:06:46", 1, 'Leite', 1).
    despesa("03 Jul 2023 00:06:46", 3, 'Leite', 3).
    despesa("03 Jul 2023 00:06:46", 3, 'Cafe', 3).
    despesa("03 Jul 2023 00:06:46", 3, 'Canela', 6).
    despesa("03 Jul 2023 00:07:11", 2, 'Acucar', 2).
    despesa("03 Jul 2023 00:07:11", 2, 'Cafe', 2).
    despesa("03 Jul 2023 00:07:11", 2, 'Chocolate', 4).
    despesa("03 Jul 2023 00:07:11", 2, 'Cafe', 2).
    despesa("03 Jul 2023 00:07:11", 2, 'Canela', 4).
    despesa("03 Jul 2023 00:07:11", 2, 'Acucar', 2).
    
    true.
    • resumaCaixa/0
    ?- resumaCaixa.
    ######## Resumo do Caixa  03 Jul 2023 #########
    Total Recebido: R$140.0
    Total Gasto: R$51
    Lucro: R$89.0
    true.
  • 👤 Aimeê Miranda Ribeiro
  • 👤 Luiz Jordany de Sousa Silva
  • 👤 Thiago P.
  • 👤 Syanne Karoline Moreira Tavares

About

O objetivo do Agente Explorador em Prolog para o Fast Coffe é fornecer um sistema inteligente de gerenciamento para um estabelecimento de fast food especializado em café.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages