🍣 Projeto 03: Pedidos Restaurante
PROJETO INTEGRADOR
PROJETO INTEGRADOR: PEDIDOS DOTHI SUSHI
Sistema Web Sustentável para Gerenciamento de Pedidos em Restaurantes
2026
AUTORES DO PROJETO
PROJETO INTEGRADOR: PEDIDOS DOTHI SUSHI
Sistema Web Sustentável para Gerenciamento de Pedidos em Restaurantes
Documentação técnica do Projeto Integrador, desenvolvida como parte dos requisitos de avaliação nas disciplinas de Engenharia de Software e Banco de Dados.
Sumário
- Introdução
- Fundamentação Teórica
- Engenharia de Software
- Banco de Dados (MySQL)
- Gestão, Segurança e LGPD
- Diagramas de Visualização
1. Introdução
O setor de alimentação fora do lar (food service) tem enfrentado constantes desafios na modernização de seus processos internos. Muitos estabelecimentos, mesmo com alto volume de vendas, ainda dependem fortemente de comandas de papel e anotações manuais, resultando em gargalos de atendimento, falhas de comunicação entre salão e cozinha, e perdas financeiras. O Projeto Integrador Pedidos DoThi Sushi, desenvolvido como projeto acadêmico (2026), propõe uma solução arquitetônica robusta para digitalizar a gestão de comandas, empregando tecnologias consolidadas como Java e MySQL.
Além da otimização operacional, o projeto carrega um forte viés de Sustentabilidade. A eliminação da comanda física atua diretamente na redução do consumo de celulose e na diminuição do volume de lixo gerado pelo restaurante. Este documento consolida o escopo completo do projeto, desde os fundamentos teóricos até os diagramas de engenharia e scripts de banco de dados, atendendo a critérios de excelência acadêmica e alinhamento com metodologias ágeis de desenvolvimento.
2. Fundamentação Teórica
2.1. O Problema do Processo Manual e Impacto Ambiental
O uso de anotações em papel para registro de pedidos em restaurantes introduz diversas vulnerabilidades no fluxo de trabalho. A caligrafia ilegível de atendentes pode levar à preparação incorreta de pratos, gerando insatisfação no cliente e desperdício de insumos. Ademais, o trânsito físico da comanda entre a mesa, o caixa e a cozinha aumenta significativamente o lead time (tempo total do ciclo) do atendimento. Além das ineficiências operacionais, o uso intensivo de talões de pedidos representa um passivo ambiental. Restaurantes de médio porte podem descartar milhares de comandas de papel térmico (que frequentemente contém Bisfenol-A, dificultando sua reciclagem) mensalmente, contrariando os princípios ESG (Environmental, Social, and Governance).
2.2. Tecnologia Sustentável e Redução de Desperdício
A implementação do sistema DoThi Sushi substitui o meio físico pelo digital por meio de uma interface acessível (HTML5/CSS3) a partir de dispositivos móveis ou terminais touch-screen. Essa digitalização não apenas garante a Sustentabilidade através do conceito Paperless (Zero Papel), como também assegura que a informação trafegue de forma assíncrona e imediata para a área de preparo. A adoção de Tecnologia Verde na TI agrega valor à marca do estabelecimento e reduz os custos operacionais (OpEx) associados à compra recorrente de material de escritório.
2.3. Arquitetura Web em Java e Padrão MVC
Para garantir alta disponibilidade, segurança e escalabilidade, o back-end da aplicação foi arquitetado na linguagem Java. A robustez da Máquina Virtual Java (JVM) aliada ao gerenciamento automático de memória (Garbage Collector) proporciona uma estabilidade necessária para ambientes de missão crítica como o de restaurantes em horário de pico. A arquitetura de software fundamenta-se no padrão de projeto estrutural MVC (Model-View-Controller):
- Model: Representa os objetos de negócio (Pedido, Cliente, Prato) e encapsula as regras de validação.
- View: Componentes em HTML/CSS (com auxílio de frameworks front-end ou Servlets/JSP) que fornecem a interface de usabilidade para o atendente.
- Controller: Intercepta as requisições HTTP, coordena a interação entre a View e o Model, e delega o processamento lógico.
2.4. Persistência de Dados Relacional (MySQL)
A escolha do MySQL baseia-se na sua capacidade comprovada de gerenciar transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade). Para um sistema financeiro e de pedidos, a garantia de que as informações (o que foi pedido, qual o valor, qual o status) não sejam corrompidas durante quedas de energia ou falhas de rede é imprescindível. O mapeamento objeto-relacional (ORM) converte as classes Java em tabelas estruturadas, permitindo consultas complexas para auditoria e tomada de decisão.
3. Engenharia de Software
3.1. Requisitos Funcionais (RF)
O escopo do sistema abrange os seguintes requisitos funcionais essenciais para a operação:
- RF-001 | Identificação do Cliente e Pedido: O sistema deve permitir o registro de um novo pedido, associando-o ao nome/identificação do cliente (ou mesa) e os pratos/itens selecionados.
- RF-002 | Gestão de Pagamentos: O sistema deve permitir a seleção e o registro da forma de pagamento (Dinheiro, Cartão, PIX) vinculada ao pedido.
- RF-003 | Listagem e Visualização: O sistema deve exibir, em tempo real, uma listagem organizada de todos os pedidos ativos.
- RF-004 | Exclusão/Cancelamento: O sistema deve permitir que usuários autorizados cancelem ou excluam um pedido, exigindo uma justificativa.
- RF-005 | Gestão de Status (Workflow): O sistema deve fornecer botões de ação para alterar o fluxo de estado de um pedido (ex:
Recebido→Em Preparo→Pronto→Entregue).
3.2. Requisitos Não Funcionais (RNF)
- RNF-001 (Desempenho e Concorrência): O sistema deve processar a inserção de novos pedidos em menos de 1 segundo (tempo de resposta), permitindo acessos concorrentes de múltiplos garçons simultaneamente sem travamento de tabelas (deadlocks).
- RNF-002 (Integridade Transacional): Todas as gravações no banco de dados devem ocorrer sob transações seguras, prevenindo que um pedido seja cobrado sem que os itens tenham sido devidamente salvos.
- RNF-003 (Usabilidade): A interface web (HTML5/CSS3) deve possuir design responsivo e elementos visuais de alto contraste, garantindo que o fluxo de inserção de pedidos seja efetuado com no máximo 3 toques/cliques.
3.3. Orientação a Objetos na Arquitetura do Sistema
A engenharia estrutural do projeto explora profundamente os preceitos da Orientação a Objetos no Java:
- Abstração: O processo de negócio "Pedido" é abstraído em uma entidade
PedidoDomainno Java. Aspectos irrelevantes para o software são ignorados, enquanto atributos cruciais (data, total, itens, status) são modelados em código. A persistência é isolada em classes do tipo DAO (Data Access Object) ou repositórios, ocultando o SQL da lógica de negócio. - Encapsulamento: As variáveis de instância nas classes de entidade (ex:
List<ItemPedido> itens,BigDecimal valorTotal) são estritamenteprivate. Modificações nesses valores ocorrem apenas através de métodos controlados (ex:adicionarItem(Item item)), os quais recalculam automaticamente o total, protegendo o estado do objeto contra mutações indevidas. - Polimorfismo: A aplicação do polimorfismo é visível na camada de pagamentos. Define-se uma interface
PagamentoStrategycom o métodoprocessarPagamento(). Classes concretas comoPagamentoPix,PagamentoCartaoePagamentoDinheiroimplementam essa interface, permitindo que o sistema adicione novas formas de recebimento sem alterar o código do controlador principal (aplicação do Open/Closed Principle do SOLID).
3.4. Caso de Uso Principal (UC-01)
Identificador: UC-01
Nome: Registrar Novo Pedido e Comanda
Ator Principal: Atendente / Garçom (Usuário Logado)
Pré-condição: O Atendente deve estar autenticado e a conexão com o banco de dados ativa.
Fluxo Principal:
- O Atendente seleciona a opção "Novo Pedido" na interface.
- O sistema exibe o formulário de captura (Mesa/Cliente) e o catálogo de produtos (sushis, bebidas).
- O Atendente seleciona os itens desejados e a quantidade.
- O sistema calcula dinamicamente o subtotal e o valor total.
- O Atendente seleciona a Forma de Pagamento e clica em "Confirmar Pedido".
- O sistema valida os dados e envia as informações (via API/Controller) para a camada de serviço (Java).
- O sistema executa as rotinas SQL (INSERT nas tabelas de Pedido e Itens do Pedido).
- O sistema atualiza o Dashboard da Cozinha (alterando o status para
Em Preparo). - O sistema exibe a mensagem de sucesso para o Atendente.
Fluxo de Exceção 1 (Falha na Persistência):
Se, no passo 7, ocorrer uma exceção SQL (ex: banco offline ou falha de constraint), o sistema intercepta o erro no Java (SQLException), realiza o rollback da transação para evitar inconsistências e informa o Atendente: "Erro de Comunicação com o Servidor. O pedido não foi salvo. Tente novamente."
4. Banco de Dados (MySQL)
A arquitetura de dados relacional assegura a normalização e a consistência exigida por aplicações comerciais.
4.1. Modelagem e Script DDL
O Data Definition Language define o schema, tabelas e a integridade referencial essencial para não haver orfandade de dados (ex: Itens pertencentes a um Pedido inexistente).
-- Criação do Schema
CREATE DATABASE IF NOT EXISTS db_dothi_sushi
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_dothi_sushi;
-- Tabela de Produtos (Cardápio)
CREATE TABLE IF NOT EXISTS tbl_produtos (
id_produto INT AUTO_INCREMENT PRIMARY KEY,
nome_produto VARCHAR(100) NOT NULL,
descricao_produto TEXT,
preco_unitario DECIMAL(10,2) NOT NULL,
categoria ENUM('ENTRADA', 'SUSHI', 'TEMAKI', 'BEBIDA', 'SOBREMESA') NOT NULL,
disponivel BOOLEAN DEFAULT TRUE
);
-- Tabela de Clientes
CREATE TABLE IF NOT EXISTS tbl_clientes (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
nome_cliente VARCHAR(100) NOT NULL,
telefone VARCHAR(15),
data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Tabela Central de Pedidos (Comanda Eletrônica)
CREATE TABLE IF NOT EXISTS tbl_pedidos (
id_pedido INT AUTO_INCREMENT PRIMARY KEY,
id_cliente INT NOT NULL,
status_pedido ENUM('RECEBIDO', 'EM_PREPARO', 'PRONTO', 'ENTREGUE', 'CANCELADO') DEFAULT 'RECEBIDO',
forma_pagamento ENUM('PIX', 'CARTAO_CREDITO', 'CARTAO_DEBITO', 'DINHEIRO') NOT NULL,
valor_total DECIMAL(10,2) NOT NULL DEFAULT 0.00,
data_pedido DATETIME DEFAULT CURRENT_TIMESTAMP,
observacao VARCHAR(255),
FOREIGN KEY (id_cliente) REFERENCES tbl_clientes(id_cliente) ON DELETE RESTRICT
);
-- Tabela de Itens do Pedido (Relacionamento N:M resolvido)
CREATE TABLE IF NOT EXISTS tbl_itens_pedido (
id_item_pedido INT AUTO_INCREMENT PRIMARY KEY,
id_pedido INT NOT NULL,
id_produto INT NOT NULL,
quantidade INT NOT NULL DEFAULT 1,
preco_na_data DECIMAL(10,2) NOT NULL COMMENT 'Garante o histórico financeiro caso o produto mude de preço no futuro',
FOREIGN KEY (id_pedido) REFERENCES tbl_pedidos(id_pedido) ON DELETE CASCADE,
FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT
);
4.2. Consultas Complexas e Relatórios Gerenciais (DML)
A tomada de decisão em um restaurante depende de análises de inteligência de negócios. A instrução DML abaixo consolida dados de múltiplos pontos (com INNER JOIN e GROUP BY) para formar um relatório de auditoria e desempenho dos últimos 6 meses, essencial para a gestão identificar os produtos mais rentáveis e o fluxo de caixa agregado.
-- Relatório Gerencial: Faturamento e Volume de Vendas nos últimos 6 Meses
SELECT
DATE_FORMAT(P.data_pedido, '%Y-%m') AS 'Mes_Referencia',
PR.categoria AS 'Categoria_Produto',
COUNT(DISTINCT P.id_pedido) AS 'Total_Pedidos_Executados',
SUM(IP.quantidade) AS 'Itens_Vendidos',
SUM(IP.quantidade * IP.preco_na_data) AS 'Receita_Bruta_Categoria'
FROM
tbl_pedidos P
INNER JOIN
tbl_itens_pedido IP ON P.id_pedido = IP.id_pedido
INNER JOIN
tbl_produtos PR ON IP.id_produto = PR.id_produto
WHERE
P.status_pedido IN ('ENTREGUE', 'PRONTO')
AND P.data_pedido >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)
GROUP BY
DATE_FORMAT(P.data_pedido, '%Y-%m'),
PR.categoria
HAVING
SUM(IP.quantidade) > 20
ORDER BY
'Mes_Referencia' DESC,
'Receita_Bruta_Categoria' DESC;
Justificativa Técnica: O uso do DATE_FORMAT permite criar agregações cronológicas. A manutenção de um histórico imutável (através de preco_na_data) assegura que o relatório financeiro permaneça preciso independentemente de reajustes tarifários futuros no catálogo. A filtragem restringe os cálculos apenas a pedidos validados, excluindo cancelamentos.
5. Gestão, Segurança e LGPD
5.1. Backlog e Histórias de Usuário (Padrão INVEST)
O gerenciamento do projeto segue metodologias ágeis, com requisitos traduzidos em Histórias de Usuário de alto valor.
História de Usuário 01 - Tela de Cozinha (KDS - Kitchen Display System)
Como um Sushiman (operador da cozinha),
Eu quero um painel que exiba automaticamente os novos pedidos sem a necessidade de atualizar a página,
Para que eu possa iniciar o preparo imediatamente, reduzindo o tempo de espera do cliente e evitando impressões em papel.
Critérios de Aceite: A tela deve buscar novos pedidos no banco a cada 10 segundos ou via WebSockets; os pedidosRecebidosdevem ser exibidos em ordem cronológica (FIFO); deve haver um botão claro para marcar o pedido comoPronto.
História de Usuário 02 - Controle de Cancelamento
Como um Gerente de Salão,
Eu quero que o sistema bloqueie o cancelamento de pedidos que já estão "Em Preparo",
Para que o restaurante não sofra perdas com insumos já utilizados.
Critérios de Aceite: O botão de exclusão/cancelamento deve ficar desabilitado caso ostatus_pedidoseja diferente deRECEBIDO; apenas um usuário com role de "Administrador" pode sobrepor essa regra registrando um motivo.
5.2. Conformidade com a LGPD e Privacy by Design
Sistemas comerciais lidam com informações identificáveis (PII) dos clientes, exigindo aderência à LGPD (Lei nº 13.709/2018):
- Transparência e Consentimento: Caso o sistema passe a integrar delivery, a coleta de telefones (como na tabela
tbl_clientes) deve possuir finalidade declarada exclusivamente para comunicação operacional do pedido, evitando marketing sem opt-in. - Retenção de Dados: O sistema deve incorporar rotinas de anonimização. Um cliente esporádico que solicite exclusão deve ter seus dados cadastrais (Nome/Telefone) convertidos em hash irreversível ou strings genéricas ("Cliente Anônimo"), enquanto o valor financeiro do pedido (
tbl_pedidos) é mantido para fins de conformidade fiscal e contábil, resolvendo o conflito entre o Direito ao Esquecimento e obrigações tributárias.
5.3. Cronograma do Projeto
A estimativa para entrega de valor (MVP) engloba 6 semanas intensas:
| Semana | Fase de Desenvolvimento | Responsabilidade | Status |
|---|---|---|---|
| 01 | Engenharia de Requisitos, Documentação UML e Prototipagem | Arquiteto / UX Designer | Concluído |
| 02 | Modelagem SQL (DDL) e Configuração do Servidor MySQL | DBA | Concluído |
| 03 | Configuração do Ambiente Java MVC, APIs e Conexão JDBC/Hibernate | Desenvolvedor Backend | Concluído |
| 04 | Desenvolvimento das Views (HTML/CSS) e Regras de Negócio (RFs) | Desenvolvedor Full-Stack | Concluído |
| 05 | Integração Completa (Back e Front), Testes e Correções de Bugs | QA / Desenvolvedores | Em Andamento |
| 06 | Documentação Final, Treinamento de Usuários e Deploy | Toda a Equipe | Em Andamento |
6. Diagramas de Visualização
Os modelos abaixo utilizam Mermaid, garantindo uma representação diagramática clara e unificada como código.
6.1. Diagrama de Casos de Uso
Apresenta as fronteiras e as interações primárias entre os colaboradores do restaurante e a aplicação.
Versão em SVG (Diagrama de Casos de Uso):
6.2. Diagrama de Classes (Camada de Domínio)
Expõe as entidades e a arquitetura de encapsulamento no Java, demonstrando dependências estruturais.
6.3. Diagrama de Entidade-Relacionamento (DER)
A modelagem lógica dos dados persistidos no banco de dados MySQL para rastreabilidade financeira e operacional.
Fim da Documentação do Projeto Integrador (2026). Este documento foi concebido para certificar as habilidades de Engenharia de Software e Banco de Dados, aliando rigor metodológico, tecnologia sustentável e melhores práticas do mercado de desenvolvimento corporativo.
README
Este é um excelente tema para um Projeto Integrador, pois une a lógica de programação de algoritmos de segurança com a persistência de dados e o desenvolvimento web, seguindo o padrão de stacks que você costuma lecionar e desenvolver (Python, Flask e MySQL).
README
Este novo projeto, intitulado Pedidos DoThi Sushi, alinha-se perfeitamente com sua experiência acadêmica e técnica, utilizando uma stack robusta baseada em Java e MySQL.