[{"data":1,"prerenderedAt":1692},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-03-pedidos-restaurante":252,"-projetos-integradores-pi-03-pedidos-restaurante-surround":1687},[4,96,189],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"⚙️ Engenharia de Software","i-lucide-book-open","\u002Fengenharia-software","1.engenharia-software",[10,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":5,"path":7,"stem":11},"1.engenharia-software\u002Findex",{"title":13,"path":14,"stem":15},"📋 Plano de Ensino e Aplicações","\u002Fengenharia-software\u002Fengenharia-software-aplicacoes","1.engenharia-software\u002F01.engenharia-software-aplicacoes",{"title":17,"path":18,"stem":19},"Cap 01: Introdução e Natureza do Software","\u002Fengenharia-software\u002Fcap-01","1.engenharia-software\u002F02.cap-01",{"title":21,"path":22,"stem":23},"Cap 02: Modelos de Processo de Software","\u002Fengenharia-software\u002Fcap-02","1.engenharia-software\u002F03.cap-02",{"title":25,"path":26,"stem":27},"Cap 03: As Atividades do Processo","\u002Fengenharia-software\u002Fcap-03","1.engenharia-software\u002F04.cap-03",{"title":29,"path":30,"stem":31},"Cap 04: Metodologias Ágeis","\u002Fengenharia-software\u002Fcap-04","1.engenharia-software\u002F05.cap-04",{"title":33,"path":34,"stem":35},"Cap 05: Fundamentos de Requisitos","\u002Fengenharia-software\u002Fcap-05","1.engenharia-software\u002F06.cap-05",{"title":37,"path":38,"stem":39},"Cap 06: Elicitação e Levantamento","\u002Fengenharia-software\u002Fcap-06","1.engenharia-software\u002F07.cap-06",{"title":41,"path":42,"stem":43},"Cap 07: Especificação de Requisitos (ERS)","\u002Fengenharia-software\u002Fcap-07","1.engenharia-software\u002F08.cap-07",{"title":45,"path":46,"stem":47},"Cap 08: Validação e Gestão","\u002Fengenharia-software\u002Fcap-08","1.engenharia-software\u002F09.cap-08",{"title":49,"path":50,"stem":51},"Cap 09: Fundamentos da Modelagem","\u002Fengenharia-software\u002Fcap-09","1.engenharia-software\u002F10.cap-09",{"title":53,"path":54,"stem":55},"Cap 10: Diagrama de Casos de Uso (Conceitos)","\u002Fengenharia-software\u002Fcap-10","1.engenharia-software\u002F11.cap-10",{"title":57,"path":58,"stem":59},"Cap 11: Casos de Uso (Prática e Relações)","\u002Fengenharia-software\u002Fcap-11","1.engenharia-software\u002F12.cap-11",{"title":61,"path":62,"stem":63},"Cap 12: Diagrama de Classes (Conceitos)","\u002Fengenharia-software\u002Fcap-12","1.engenharia-software\u002F13.cap-12",{"title":65,"path":66,"stem":67},"Cap 13: Herança e Polimorfismo","\u002Fengenharia-software\u002Fcap-13","1.engenharia-software\u002F14.cap-13",{"title":69,"path":70,"stem":71},"Cap 14: Diagrama de Sequência","\u002Fengenharia-software\u002Fcap-14","1.engenharia-software\u002F15.cap-14",{"title":73,"path":74,"stem":75},"Cap 15: Diagramas Dinâmicos (Estados e Atividades)","\u002Fengenharia-software\u002Fcap-15","1.engenharia-software\u002F16.cap-15",{"title":77,"path":78,"stem":79},"Cap 16: Qualidade de Software (SQA)","\u002Fengenharia-software\u002Fcap-16","1.engenharia-software\u002F17.cap-16",{"title":81,"path":82,"stem":83},"Cap 17: Estratégias de Teste","\u002Fengenharia-software\u002Fcap-17","1.engenharia-software\u002F18.cap-17",{"title":85,"path":86,"stem":87},"Cap 18: Manutenção e Evolução","\u002Fengenharia-software\u002Fcap-18","1.engenharia-software\u002F19.cap-18",{"title":89,"path":90,"stem":91},"Cap 19: Gerência de Configuração (SCM)","\u002Fengenharia-software\u002Fcap-19","1.engenharia-software\u002F20.cap-19",{"title":93,"path":94,"stem":95},"Cap 20: Conclusão e Próximos Passos","\u002Fengenharia-software\u002Fcap-20","1.engenharia-software\u002F21.cap-20",{"title":97,"icon":98,"path":99,"stem":100,"children":101},"🛠️ Atividades","i-lucide-wrench","\u002Fatividades","2.atividades",[102,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185],{"title":103,"path":99,"stem":104},"📋 Orientações Gerais","2.atividades\u002Findex",{"title":106,"path":107,"stem":108},"📅 Cronograma","\u002Fatividades\u002Fcronograma","2.atividades\u002F01.cronograma",{"title":110,"path":111,"stem":112},"✏️ Atividade 01: Escopo e Personas","\u002Fatividades\u002Fatv-01-escopo","2.atividades\u002F02.atv-01-escopo",{"title":114,"path":115,"stem":116},"⚙️ Atividade 02: Processos de Software","\u002Fatividades\u002Fatv-02-processos","2.atividades\u002F03.atv-02-processos",{"title":118,"path":119,"stem":120},"📋 Atividade 03: Engenharia de Requisitos","\u002Fatividades\u002Fatv-03-requisitos","2.atividades\u002F04.atv-03-requisitos",{"title":122,"path":123,"stem":124},"📝 Atividade 04: User Stories e Backlog","\u002Fatividades\u002Fatv-04-backlog","2.atividades\u002F05.atv-04-backlog",{"title":126,"path":127,"stem":128},"🎭 Atividade 05: Casos de Uso (UML)","\u002Fatividades\u002Fatv-05-casos-uso","2.atividades\u002F06.atv-05-casos-uso",{"title":130,"path":131,"stem":132},"🖼️ Atividade 06: Prototipagem e Wireframes","\u002Fatividades\u002Fatv-06-prototipagem","2.atividades\u002F07.atv-06-prototipagem",{"title":134,"path":135,"stem":136},"🏛️ Atividade 07: Diagrama de Classes (UML)","\u002Fatividades\u002Fatv-07-classes","2.atividades\u002F08.atv-07-classes",{"title":138,"path":139,"stem":140},"🔀 Atividade 08: Diagrama de Sequência (UML)","\u002Fatividades\u002Fatv-08-sequencia","2.atividades\u002F09.atv-08-sequencia",{"title":142,"path":143,"stem":144},"🧪 Atividade 09: Qualidade e Testes","\u002Fatividades\u002Fatv-09-testes","2.atividades\u002F10.atv-09-testes",{"title":146,"path":147,"stem":148},"🏁 Atividade 10: Projeto Integrador Final","\u002Fatividades\u002Fatv-10-projeto-final","2.atividades\u002F11.atv-10-projeto-final",{"title":150,"path":151,"stem":152},"📊 Atividade 11: Diagrama de Atividades (UML)","\u002Fatividades\u002Fatv-11-atividades","2.atividades\u002F12.atv-11-atividades",{"title":154,"path":155,"stem":156},"🔄 Atividade 12: Diagrama de Transição de Estados (UML)","\u002Fatividades\u002Fatv-12-estados","2.atividades\u002F13.atv-12-estados",{"title":158,"path":159,"stem":160},"🏗️ Atividade 13: Arquitetura de Software e Padrões","\u002Fatividades\u002Fatv-13-arquitetura","2.atividades\u002F14.atv-13-arquitetura",{"title":162,"path":163,"stem":164},"🌐 Atividade 14: Modelagem de APIs REST e Swagger","\u002Fatividades\u002Fatv-14-apis-swagger","2.atividades\u002F15.atv-14-apis-swagger",{"title":166,"path":167,"stem":168},"🌿 Atividade 15: GitFlow e Trabalho Colaborativo","\u002Fatividades\u002Fatv-15-gitflow-colaboracao","2.atividades\u002F16.atv-15-gitflow-colaboracao",{"title":170,"path":171,"stem":172},"🚀 Atividade 16: Pipelines de CI\u002FCD com GitHub Actions","\u002Fatividades\u002Fatv-16-pipelines-cicd","2.atividades\u002F17.atv-16-pipelines-cicd",{"title":174,"path":175,"stem":176},"🐳 Atividade 17: Containerização de Ambientes com Docker","\u002Fatividades\u002Fatv-17-conteineres-docker","2.atividades\u002F18.atv-17-conteineres-docker",{"title":178,"path":179,"stem":180},"🔒 Atividade 18: Segurança no Desenvolvimento e OWASP","\u002Fatividades\u002Fatv-18-seguranca-devsecops","2.atividades\u002F19.atv-18-seguranca-devsecops",{"title":182,"path":183,"stem":184},"📈 Atividade 19: Métricas de Software, Estimativas e DORA","\u002Fatividades\u002Fatv-19-metricas-estimativas","2.atividades\u002F20.atv-19-metricas-estimativas",{"title":186,"path":187,"stem":188},"🏆 Atividade 20: Projeto Final Avançado (Fase 2)","\u002Fatividades\u002Fatv-20-projeto-final-avancado","2.atividades\u002F21.atv-20-projeto-final-avancado",{"title":190,"icon":191,"path":192,"stem":193,"children":194},"🖼️ Galeria de Projetos Integradores","i-lucide-image","\u002Fprojetos-integradores","3.projetos-integradores",[195,197,207,216,225,234,243],{"title":190,"path":192,"stem":196},"3.projetos-integradores\u002Findex",{"title":198,"path":199,"stem":200,"children":201},"🅿️ Projeto 01: Gestão de Estacionamentos","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002Findex",[202,203],{"title":198,"path":199,"stem":200},{"title":204,"path":205,"stem":206},"README","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Freadme","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002F2.readme",{"title":208,"path":209,"stem":210,"children":211},"🔐 Projeto 02: Gerador de Senhas","\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002Findex",[212,213],{"title":208,"path":209,"stem":210},{"title":204,"path":214,"stem":215},"\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Freadme","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002F2.readme",{"title":217,"path":218,"stem":219,"children":220},"🍣 Projeto 03: Pedidos Restaurante","\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002Findex",[221,222],{"title":217,"path":218,"stem":219},{"title":204,"path":223,"stem":224},"\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante\u002Freadme","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002F2.readme",{"title":226,"path":227,"stem":228,"children":229},"📱 Projeto 04: Empréstimos Dispositivos","\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002Findex",[230,231],{"title":226,"path":227,"stem":228},{"title":204,"path":232,"stem":233},"\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos\u002Freadme","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002F2.readme",{"title":235,"path":236,"stem":237,"children":238},"📦 Projeto 05: Gestão de Estoque","\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002Findex",[239,240],{"title":235,"path":236,"stem":237},{"title":204,"path":241,"stem":242},"\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque\u002Freadme","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002F2.readme",{"title":244,"path":245,"stem":246,"children":247},"🛵 Projeto 06: Aplicativo de Delivery","\u002Fprojetos-integradores\u002Fpi-06-delivery","3.projetos-integradores\u002F06.pi-06-delivery\u002Findex",[248,249],{"title":244,"path":245,"stem":246},{"title":204,"path":250,"stem":251},"\u002Fprojetos-integradores\u002Fpi-06-delivery\u002Freadme","3.projetos-integradores\u002F06.pi-06-delivery\u002F2.readme",{"id":253,"title":217,"body":254,"description":908,"extension":1682,"links":1683,"meta":1684,"navigation":936,"path":218,"seo":1685,"stem":219,"__hash__":1686},"docs\u002F3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002Findex.md",{"type":255,"value":256,"toc":1644},"minimark",[257,311,314,344,355,358,374,379,381,385,549,551,555,563,570,574,578,586,590,604,608,619,639,643,650,652,656,660,663,710,714,734,738,741,800,804,828,833,864,882,884,888,891,895,902,1183,1187,1197,1321,1334,1336,1340,1344,1347,1352,1386,1391,1421,1425,1428,1457,1461,1464,1583,1585,1589,1592,1596,1599,1603,1612,1616,1619,1622,1626,1629,1632,1635,1640],[258,259,261,262,261,267,270,272,274,276,278,280,261,282,261,287,261,292,294,296,298,300,302,304,261,306],"div",{"align":260},"center","\n  ",[263,264,266],"h3",{"id":265},"projeto-integrador","PROJETO INTEGRADOR",[268,269],"br",{},[268,271],{},[268,273],{},[268,275],{},[268,277],{},[268,279],{},[268,281],{},[283,284,286],"h1",{"id":285},"projeto-integrador-pedidos-dothi-sushi","PROJETO INTEGRADOR: PEDIDOS DOTHI SUSHI",[288,289,291],"h2",{"id":290},"sistema-web-sustentável-para-gerenciamento-de-pedidos-em-restaurantes","Sistema Web Sustentável para Gerenciamento de Pedidos em Restaurantes",[268,293],{},[268,295],{},[268,297],{},[268,299],{},[268,301],{},[268,303],{},[268,305],{},[307,308,310],"h4",{"id":309},"_2026","2026",[258,312],{"style":313},"page-break-after: always;",[258,315,261,316,261,320,322,324,326,328,330,332,261,334,261,337,261,340,342],{"align":260},[263,317,319],{"id":318},"autores-do-projeto","AUTORES DO PROJETO",[268,321],{},[268,323],{},[268,325],{},[268,327],{},[268,329],{},[268,331],{},[268,333],{},[283,335,286],{"id":336},"projeto-integrador-pedidos-dothi-sushi-1",[288,338,291],{"id":339},"sistema-web-sustentável-para-gerenciamento-de-pedidos-em-restaurantes-1",[268,341],{},[268,343],{},[258,345,261,347],{"align":346},"right",[258,348,350,351,261],{"style":349},"width: 50%; float: right; text-align: justify; font-size: 14px;","\n    ",[352,353,354],"p",{},"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.",[258,356],{"style":357},"clear: both;",[352,359,360,362,364,366,368,370,372],{},[268,361],{},[268,363],{},[268,365],{},[268,367],{},[268,369],{},[268,371],{},[268,373],{},[258,375,261,376],{"align":260},[307,377,310],{"id":378},"_2026-1",[258,380],{"style":313},[288,382,384],{"id":383},"sumário","Sumário",[386,387,388,396,433,469,491,520],"ol",{},[389,390,391],"li",{},[392,393,395],"a",{"href":394},"#1-introdu%C3%A7%C3%A3o","Introdução",[389,397,398,402],{},[392,399,401],{"href":400},"#2-fundamenta%C3%A7%C3%A3o-te%C3%B3rica","Fundamentação Teórica",[403,404,405,412,419,426],"ul",{},[389,406,407,408],{},"2.1. ",[392,409,411],{"href":410},"#21-o-problema-do-processo-manual-e-impacto-ambiental","O Problema do Processo Manual e Impacto Ambiental",[389,413,414,415],{},"2.2. ",[392,416,418],{"href":417},"#22-tecnologia-sustent%C3%A1vel-e-redu%C3%A7%C3%A3o-de-desperd%C3%ADcio","Tecnologia Sustentável e Redução de Desperdício",[389,420,421,422],{},"2.3. ",[392,423,425],{"href":424},"#23-arquitetura-web-em-java-e-padr%C3%A3o-mvc","Arquitetura Web em Java e Padrão MVC",[389,427,428,429],{},"2.4. ",[392,430,432],{"href":431},"#24-persist%C3%AAncia-de-dados-relacional-mysql","Persistência de Dados Relacional (MySQL)",[389,434,435,439],{},[392,436,438],{"href":437},"#3-engenharia-de-software","Engenharia de Software",[403,440,441,448,455,462],{},[389,442,443,444],{},"3.1. ",[392,445,447],{"href":446},"#31-requisitos-funcionais-rf","Requisitos Funcionais (RF)",[389,449,450,451],{},"3.2. ",[392,452,454],{"href":453},"#32-requisitos-n%C3%A3o-funcionais-rnf","Requisitos Não Funcionais (RNF)",[389,456,457,458],{},"3.3. ",[392,459,461],{"href":460},"#33-orienta%C3%A7%C3%A3o-a-objetos-na-arquitetura-do-sistema","Orientação a Objetos na Arquitetura do Sistema",[389,463,464,465],{},"3.4. ",[392,466,468],{"href":467},"#34-caso-de-uso-principal-uc-01","Caso de Uso Principal (UC-01)",[389,470,471,475],{},[392,472,474],{"href":473},"#4-banco-de-dados-mysql","Banco de Dados (MySQL)",[403,476,477,484],{},[389,478,479,480],{},"4.1. ",[392,481,483],{"href":482},"#41-modelagem-e-script-ddl","Modelagem e Script DDL",[389,485,486,487],{},"4.2. ",[392,488,490],{"href":489},"#42-consultas-complexas-e-relat%C3%B3rios-gerenciais-dml","Consultas Complexas e Relatórios Gerenciais (DML)",[389,492,493,497],{},[392,494,496],{"href":495},"#5-gest%C3%A3o-seguran%C3%A7a-e-lgpd","Gestão, Segurança e LGPD",[403,498,499,506,513],{},[389,500,501,502],{},"5.1. ",[392,503,505],{"href":504},"#51-backlog-e-hist%C3%B3rias-de-usu%C3%A1rio-padr%C3%A3o-invest","Backlog e Histórias de Usuário (Padrão INVEST)",[389,507,508,509],{},"5.2. ",[392,510,512],{"href":511},"#52-conformidade-com-a-lgpd-e-privacy-by-design","Conformidade com a LGPD e Privacy by Design",[389,514,515,516],{},"5.3. ",[392,517,519],{"href":518},"#53-cronograma-do-projeto","Cronograma do Projeto",[389,521,522,526],{},[392,523,525],{"href":524},"#6-diagramas-de-visualiza%C3%A7%C3%A3o","Diagramas de Visualização",[403,527,528,535,542],{},[389,529,530,531],{},"6.1. ",[392,532,534],{"href":533},"#61-diagrama-de-casos-de-uso","Diagrama de Casos de Uso",[389,536,537,538],{},"6.2. ",[392,539,541],{"href":540},"#62-diagrama-de-classes","Diagrama de Classes",[389,543,544,545],{},"6.3. ",[392,546,548],{"href":547},"#63-diagrama-de-entidade-relacionamento-der","Diagrama de Entidade-Relacionamento (DER)",[258,550],{"style":313},[288,552,554],{"id":553},"_1-introdução","1. Introdução",[352,556,557,558,562],{},"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 ",[559,560,561],"strong",{},"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.",[352,564,565,566,569],{},"Além da otimização operacional, o projeto carrega um forte viés de ",[559,567,568],{},"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.",[288,571,573],{"id":572},"_2-fundamentação-teórica","2. Fundamentação Teórica",[263,575,577],{"id":576},"_21-o-problema-do-processo-manual-e-impacto-ambiental","2.1. O Problema do Processo Manual e Impacto Ambiental",[352,579,580,581,585],{},"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 ",[582,583,584],"em",{},"lead time"," (tempo total do ciclo) do atendimento.\nAlé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).",[263,587,589],{"id":588},"_22-tecnologia-sustentável-e-redução-de-desperdício","2.2. Tecnologia Sustentável e Redução de Desperdício",[352,591,592,593,595,596,599,600,603],{},"A implementação do sistema DoThi Sushi substitui o meio físico pelo digital por meio de uma interface acessível (HTML5\u002FCSS3) a partir de dispositivos móveis ou terminais touch-screen. Essa digitalização não apenas garante a ",[559,594,568],{}," através do conceito ",[582,597,598],{},"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 ",[582,601,602],{},"Tecnologia Verde"," na TI agrega valor à marca do estabelecimento e reduz os custos operacionais (OpEx) associados à compra recorrente de material de escritório.",[263,605,607],{"id":606},"_23-arquitetura-web-em-java-e-padrão-mvc","2.3. Arquitetura Web em Java e Padrão MVC",[352,609,610,611,614,615,618],{},"Para garantir alta disponibilidade, segurança e escalabilidade, o back-end da aplicação foi arquitetado na linguagem ",[559,612,613],{},"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.\nA arquitetura de software fundamenta-se no padrão de projeto estrutural ",[559,616,617],{},"MVC (Model-View-Controller)",":",[403,620,621,627,633],{},[389,622,623,626],{},[559,624,625],{},"Model:"," Representa os objetos de negócio (Pedido, Cliente, Prato) e encapsula as regras de validação.",[389,628,629,632],{},[559,630,631],{},"View:"," Componentes em HTML\u002FCSS (com auxílio de frameworks front-end ou Servlets\u002FJSP) que fornecem a interface de usabilidade para o atendente.",[389,634,635,638],{},[559,636,637],{},"Controller:"," Intercepta as requisições HTTP, coordena a interação entre a View e o Model, e delega o processamento lógico.",[263,640,642],{"id":641},"_24-persistência-de-dados-relacional-mysql","2.4. Persistência de Dados Relacional (MySQL)",[352,644,645,646,649],{},"A escolha do ",[559,647,648],{},"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.",[258,651],{"style":313},[288,653,655],{"id":654},"_3-engenharia-de-software","3. Engenharia de Software",[263,657,659],{"id":658},"_31-requisitos-funcionais-rf","3.1. Requisitos Funcionais (RF)",[352,661,662],{},"O escopo do sistema abrange os seguintes requisitos funcionais essenciais para a operação:",[386,664,665,671,677,683,689],{},[389,666,667,670],{},[559,668,669],{},"RF-001 | Identificação do Cliente e Pedido:"," O sistema deve permitir o registro de um novo pedido, associando-o ao nome\u002Fidentificação do cliente (ou mesa) e os pratos\u002Fitens selecionados.",[389,672,673,676],{},[559,674,675],{},"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.",[389,678,679,682],{},[559,680,681],{},"RF-003 | Listagem e Visualização:"," O sistema deve exibir, em tempo real, uma listagem organizada de todos os pedidos ativos.",[389,684,685,688],{},[559,686,687],{},"RF-004 | Exclusão\u002FCancelamento:"," O sistema deve permitir que usuários autorizados cancelem ou excluam um pedido, exigindo uma justificativa.",[389,690,691,694,695,699,700,699,703,699,706,709],{},[559,692,693],{},"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: ",[696,697,698],"code",{},"Recebido"," → ",[696,701,702],{},"Em Preparo",[696,704,705],{},"Pronto",[696,707,708],{},"Entregue",").",[263,711,713],{"id":712},"_32-requisitos-não-funcionais-rnf","3.2. Requisitos Não Funcionais (RNF)",[386,715,716,722,728],{},[389,717,718,721],{},[559,719,720],{},"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).",[389,723,724,727],{},[559,725,726],{},"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.",[389,729,730,733],{},[559,731,732],{},"RNF-003 (Usabilidade):"," A interface web (HTML5\u002FCSS3) 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\u002Fcliques.",[263,735,737],{"id":736},"_33-orientação-a-objetos-na-arquitetura-do-sistema","3.3. Orientação a Objetos na Arquitetura do Sistema",[352,739,740],{},"A engenharia estrutural do projeto explora profundamente os preceitos da Orientação a Objetos no Java:",[403,742,743,753,775],{},[389,744,745,748,749,752],{},[559,746,747],{},"Abstração:"," O processo de negócio \"Pedido\" é abstraído em uma entidade ",[696,750,751],{},"PedidoDomain"," no 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.",[389,754,755,758,759,762,763,766,767,770,771,774],{},[559,756,757],{},"Encapsulamento:"," As variáveis de instância nas classes de entidade (ex: ",[696,760,761],{},"List\u003CItemPedido> itens",", ",[696,764,765],{},"BigDecimal valorTotal",") são estritamente ",[696,768,769],{},"private",". Modificações nesses valores ocorrem apenas através de métodos controlados (ex: ",[696,772,773],{},"adicionarItem(Item item)","), os quais recalculam automaticamente o total, protegendo o estado do objeto contra mutações indevidas.",[389,776,777,780,781,784,785,788,789,762,792,795,796,799],{},[559,778,779],{},"Polimorfismo:"," A aplicação do polimorfismo é visível na camada de pagamentos. Define-se uma interface ",[696,782,783],{},"PagamentoStrategy"," com o método ",[696,786,787],{},"processarPagamento()",". Classes concretas como ",[696,790,791],{},"PagamentoPix",[696,793,794],{},"PagamentoCartao"," e ",[696,797,798],{},"PagamentoDinheiro"," implementam essa interface, permitindo que o sistema adicione novas formas de recebimento sem alterar o código do controlador principal (aplicação do Open\u002FClosed Principle do SOLID).",[263,801,803],{"id":802},"_34-caso-de-uso-principal-uc-01","3.4. Caso de Uso Principal (UC-01)",[352,805,806,809,810,812,815,816,818,821,822,824,827],{},[559,807,808],{},"Identificador:"," UC-01",[268,811],{},[559,813,814],{},"Nome:"," Registrar Novo Pedido e Comanda",[268,817],{},[559,819,820],{},"Ator Principal:"," Atendente \u002F Garçom (Usuário Logado)",[268,823],{},[559,825,826],{},"Pré-condição:"," O Atendente deve estar autenticado e a conexão com o banco de dados ativa.",[352,829,830],{},[559,831,832],{},"Fluxo Principal:",[386,834,835,838,841,844,847,850,853,856,861],{},[389,836,837],{},"O Atendente seleciona a opção \"Novo Pedido\" na interface.",[389,839,840],{},"O sistema exibe o formulário de captura (Mesa\u002FCliente) e o catálogo de produtos (sushis, bebidas).",[389,842,843],{},"O Atendente seleciona os itens desejados e a quantidade.",[389,845,846],{},"O sistema calcula dinamicamente o subtotal e o valor total.",[389,848,849],{},"O Atendente seleciona a Forma de Pagamento e clica em \"Confirmar Pedido\".",[389,851,852],{},"O sistema valida os dados e envia as informações (via API\u002FController) para a camada de serviço (Java).",[389,854,855],{},"O sistema executa as rotinas SQL (INSERT nas tabelas de Pedido e Itens do Pedido).",[389,857,858,859,709],{},"O sistema atualiza o Dashboard da Cozinha (alterando o status para ",[696,860,702],{},[389,862,863],{},"O sistema exibe a mensagem de sucesso para o Atendente.",[352,865,866,869,870,873,874,877,878,881],{},[559,867,868],{},"Fluxo de Exceção 1 (Falha na Persistência):","\nSe, no passo 7, ocorrer uma exceção SQL (ex: banco offline ou falha de ",[582,871,872],{},"constraint","), o sistema intercepta o erro no Java (",[696,875,876],{},"SQLException","), realiza o ",[696,879,880],{},"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.\"",[258,883],{"style":313},[288,885,887],{"id":886},"_4-banco-de-dados-mysql","4. Banco de Dados (MySQL)",[352,889,890],{},"A arquitetura de dados relacional assegura a normalização e a consistência exigida por aplicações comerciais.",[263,892,894],{"id":893},"_41-modelagem-e-script-ddl","4.1. Modelagem e Script DDL",[352,896,897,898,901],{},"O ",[582,899,900],{},"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).",[903,904,909],"pre",{"className":905,"code":906,"language":907,"meta":908,"style":908},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Criação do Schema\nCREATE DATABASE IF NOT EXISTS db_dothi_sushi\nCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\nUSE db_dothi_sushi;\n\n-- Tabela de Produtos (Cardápio)\nCREATE TABLE IF NOT EXISTS tbl_produtos (\n    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n    nome_produto VARCHAR(100) NOT NULL,\n    descricao_produto TEXT,\n    preco_unitario DECIMAL(10,2) NOT NULL,\n    categoria ENUM('ENTRADA', 'SUSHI', 'TEMAKI', 'BEBIDA', 'SOBREMESA') NOT NULL,\n    disponivel BOOLEAN DEFAULT TRUE\n);\n\n-- Tabela de Clientes\nCREATE TABLE IF NOT EXISTS tbl_clientes (\n    id_cliente INT AUTO_INCREMENT PRIMARY KEY,\n    nome_cliente VARCHAR(100) NOT NULL,\n    telefone VARCHAR(15),\n    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Tabela Central de Pedidos (Comanda Eletrônica)\nCREATE TABLE IF NOT EXISTS tbl_pedidos (\n    id_pedido INT AUTO_INCREMENT PRIMARY KEY,\n    id_cliente INT NOT NULL,\n    status_pedido ENUM('RECEBIDO', 'EM_PREPARO', 'PRONTO', 'ENTREGUE', 'CANCELADO') DEFAULT 'RECEBIDO',\n    forma_pagamento ENUM('PIX', 'CARTAO_CREDITO', 'CARTAO_DEBITO', 'DINHEIRO') NOT NULL,\n    valor_total DECIMAL(10,2) NOT NULL DEFAULT 0.00,\n    data_pedido DATETIME DEFAULT CURRENT_TIMESTAMP,\n    observacao VARCHAR(255),\n    FOREIGN KEY (id_cliente) REFERENCES tbl_clientes(id_cliente) ON DELETE RESTRICT\n);\n\n-- Tabela de Itens do Pedido (Relacionamento N:M resolvido)\nCREATE TABLE IF NOT EXISTS tbl_itens_pedido (\n    id_item_pedido INT AUTO_INCREMENT PRIMARY KEY,\n    id_pedido INT NOT NULL,\n    id_produto INT NOT NULL,\n    quantidade INT NOT NULL DEFAULT 1,\n    preco_na_data DECIMAL(10,2) NOT NULL COMMENT 'Garante o histórico financeiro caso o produto mude de preço no futuro',\n    FOREIGN KEY (id_pedido) REFERENCES tbl_pedidos(id_pedido) ON DELETE CASCADE,\n    FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT\n);\n","sql","",[696,910,911,919,925,931,938,944,949,955,961,967,973,979,985,991,997,1003,1008,1014,1020,1026,1032,1038,1044,1049,1054,1060,1066,1072,1078,1084,1090,1096,1102,1108,1114,1119,1124,1130,1136,1142,1148,1154,1160,1166,1172,1178],{"__ignoreMap":908},[912,913,916],"span",{"class":914,"line":915},"line",1,[912,917,918],{},"-- Criação do Schema\n",[912,920,922],{"class":914,"line":921},2,[912,923,924],{},"CREATE DATABASE IF NOT EXISTS db_dothi_sushi\n",[912,926,928],{"class":914,"line":927},3,[912,929,930],{},"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n",[912,932,934],{"class":914,"line":933},4,[912,935,937],{"emptyLinePlaceholder":936},true,"\n",[912,939,941],{"class":914,"line":940},5,[912,942,943],{},"USE db_dothi_sushi;\n",[912,945,947],{"class":914,"line":946},6,[912,948,937],{"emptyLinePlaceholder":936},[912,950,952],{"class":914,"line":951},7,[912,953,954],{},"-- Tabela de Produtos (Cardápio)\n",[912,956,958],{"class":914,"line":957},8,[912,959,960],{},"CREATE TABLE IF NOT EXISTS tbl_produtos (\n",[912,962,964],{"class":914,"line":963},9,[912,965,966],{},"    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n",[912,968,970],{"class":914,"line":969},10,[912,971,972],{},"    nome_produto VARCHAR(100) NOT NULL,\n",[912,974,976],{"class":914,"line":975},11,[912,977,978],{},"    descricao_produto TEXT,\n",[912,980,982],{"class":914,"line":981},12,[912,983,984],{},"    preco_unitario DECIMAL(10,2) NOT NULL,\n",[912,986,988],{"class":914,"line":987},13,[912,989,990],{},"    categoria ENUM('ENTRADA', 'SUSHI', 'TEMAKI', 'BEBIDA', 'SOBREMESA') NOT NULL,\n",[912,992,994],{"class":914,"line":993},14,[912,995,996],{},"    disponivel BOOLEAN DEFAULT TRUE\n",[912,998,1000],{"class":914,"line":999},15,[912,1001,1002],{},");\n",[912,1004,1006],{"class":914,"line":1005},16,[912,1007,937],{"emptyLinePlaceholder":936},[912,1009,1011],{"class":914,"line":1010},17,[912,1012,1013],{},"-- Tabela de Clientes\n",[912,1015,1017],{"class":914,"line":1016},18,[912,1018,1019],{},"CREATE TABLE IF NOT EXISTS tbl_clientes (\n",[912,1021,1023],{"class":914,"line":1022},19,[912,1024,1025],{},"    id_cliente INT AUTO_INCREMENT PRIMARY KEY,\n",[912,1027,1029],{"class":914,"line":1028},20,[912,1030,1031],{},"    nome_cliente VARCHAR(100) NOT NULL,\n",[912,1033,1035],{"class":914,"line":1034},21,[912,1036,1037],{},"    telefone VARCHAR(15),\n",[912,1039,1041],{"class":914,"line":1040},22,[912,1042,1043],{},"    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP\n",[912,1045,1047],{"class":914,"line":1046},23,[912,1048,1002],{},[912,1050,1052],{"class":914,"line":1051},24,[912,1053,937],{"emptyLinePlaceholder":936},[912,1055,1057],{"class":914,"line":1056},25,[912,1058,1059],{},"-- Tabela Central de Pedidos (Comanda Eletrônica)\n",[912,1061,1063],{"class":914,"line":1062},26,[912,1064,1065],{},"CREATE TABLE IF NOT EXISTS tbl_pedidos (\n",[912,1067,1069],{"class":914,"line":1068},27,[912,1070,1071],{},"    id_pedido INT AUTO_INCREMENT PRIMARY KEY,\n",[912,1073,1075],{"class":914,"line":1074},28,[912,1076,1077],{},"    id_cliente INT NOT NULL,\n",[912,1079,1081],{"class":914,"line":1080},29,[912,1082,1083],{},"    status_pedido ENUM('RECEBIDO', 'EM_PREPARO', 'PRONTO', 'ENTREGUE', 'CANCELADO') DEFAULT 'RECEBIDO',\n",[912,1085,1087],{"class":914,"line":1086},30,[912,1088,1089],{},"    forma_pagamento ENUM('PIX', 'CARTAO_CREDITO', 'CARTAO_DEBITO', 'DINHEIRO') NOT NULL,\n",[912,1091,1093],{"class":914,"line":1092},31,[912,1094,1095],{},"    valor_total DECIMAL(10,2) NOT NULL DEFAULT 0.00,\n",[912,1097,1099],{"class":914,"line":1098},32,[912,1100,1101],{},"    data_pedido DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[912,1103,1105],{"class":914,"line":1104},33,[912,1106,1107],{},"    observacao VARCHAR(255),\n",[912,1109,1111],{"class":914,"line":1110},34,[912,1112,1113],{},"    FOREIGN KEY (id_cliente) REFERENCES tbl_clientes(id_cliente) ON DELETE RESTRICT\n",[912,1115,1117],{"class":914,"line":1116},35,[912,1118,1002],{},[912,1120,1122],{"class":914,"line":1121},36,[912,1123,937],{"emptyLinePlaceholder":936},[912,1125,1127],{"class":914,"line":1126},37,[912,1128,1129],{},"-- Tabela de Itens do Pedido (Relacionamento N:M resolvido)\n",[912,1131,1133],{"class":914,"line":1132},38,[912,1134,1135],{},"CREATE TABLE IF NOT EXISTS tbl_itens_pedido (\n",[912,1137,1139],{"class":914,"line":1138},39,[912,1140,1141],{},"    id_item_pedido INT AUTO_INCREMENT PRIMARY KEY,\n",[912,1143,1145],{"class":914,"line":1144},40,[912,1146,1147],{},"    id_pedido INT NOT NULL,\n",[912,1149,1151],{"class":914,"line":1150},41,[912,1152,1153],{},"    id_produto INT NOT NULL,\n",[912,1155,1157],{"class":914,"line":1156},42,[912,1158,1159],{},"    quantidade INT NOT NULL DEFAULT 1,\n",[912,1161,1163],{"class":914,"line":1162},43,[912,1164,1165],{},"    preco_na_data DECIMAL(10,2) NOT NULL COMMENT 'Garante o histórico financeiro caso o produto mude de preço no futuro',\n",[912,1167,1169],{"class":914,"line":1168},44,[912,1170,1171],{},"    FOREIGN KEY (id_pedido) REFERENCES tbl_pedidos(id_pedido) ON DELETE CASCADE,\n",[912,1173,1175],{"class":914,"line":1174},45,[912,1176,1177],{},"    FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT\n",[912,1179,1181],{"class":914,"line":1180},46,[912,1182,1002],{},[263,1184,1186],{"id":1185},"_42-consultas-complexas-e-relatórios-gerenciais-dml","4.2. Consultas Complexas e Relatórios Gerenciais (DML)",[352,1188,1189,1190,795,1193,1196],{},"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 ",[696,1191,1192],{},"INNER JOIN",[696,1194,1195],{},"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.",[903,1198,1200],{"className":905,"code":1199,"language":907,"meta":908,"style":908},"-- Relatório Gerencial: Faturamento e Volume de Vendas nos últimos 6 Meses\nSELECT \n    DATE_FORMAT(P.data_pedido, '%Y-%m') AS 'Mes_Referencia',\n    PR.categoria AS 'Categoria_Produto',\n    COUNT(DISTINCT P.id_pedido) AS 'Total_Pedidos_Executados',\n    SUM(IP.quantidade) AS 'Itens_Vendidos',\n    SUM(IP.quantidade * IP.preco_na_data) AS 'Receita_Bruta_Categoria'\nFROM \n    tbl_pedidos P\nINNER JOIN \n    tbl_itens_pedido IP ON P.id_pedido = IP.id_pedido\nINNER JOIN \n    tbl_produtos PR ON IP.id_produto = PR.id_produto\nWHERE \n    P.status_pedido IN ('ENTREGUE', 'PRONTO')\n    AND P.data_pedido >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\nGROUP BY \n    DATE_FORMAT(P.data_pedido, '%Y-%m'), \n    PR.categoria\nHAVING \n    SUM(IP.quantidade) > 20\nORDER BY \n    'Mes_Referencia' DESC, \n    'Receita_Bruta_Categoria' DESC;\n",[696,1201,1202,1207,1212,1217,1222,1227,1232,1237,1242,1247,1252,1257,1261,1266,1271,1276,1281,1286,1291,1296,1301,1306,1311,1316],{"__ignoreMap":908},[912,1203,1204],{"class":914,"line":915},[912,1205,1206],{},"-- Relatório Gerencial: Faturamento e Volume de Vendas nos últimos 6 Meses\n",[912,1208,1209],{"class":914,"line":921},[912,1210,1211],{},"SELECT \n",[912,1213,1214],{"class":914,"line":927},[912,1215,1216],{},"    DATE_FORMAT(P.data_pedido, '%Y-%m') AS 'Mes_Referencia',\n",[912,1218,1219],{"class":914,"line":933},[912,1220,1221],{},"    PR.categoria AS 'Categoria_Produto',\n",[912,1223,1224],{"class":914,"line":940},[912,1225,1226],{},"    COUNT(DISTINCT P.id_pedido) AS 'Total_Pedidos_Executados',\n",[912,1228,1229],{"class":914,"line":946},[912,1230,1231],{},"    SUM(IP.quantidade) AS 'Itens_Vendidos',\n",[912,1233,1234],{"class":914,"line":951},[912,1235,1236],{},"    SUM(IP.quantidade * IP.preco_na_data) AS 'Receita_Bruta_Categoria'\n",[912,1238,1239],{"class":914,"line":957},[912,1240,1241],{},"FROM \n",[912,1243,1244],{"class":914,"line":963},[912,1245,1246],{},"    tbl_pedidos P\n",[912,1248,1249],{"class":914,"line":969},[912,1250,1251],{},"INNER JOIN \n",[912,1253,1254],{"class":914,"line":975},[912,1255,1256],{},"    tbl_itens_pedido IP ON P.id_pedido = IP.id_pedido\n",[912,1258,1259],{"class":914,"line":981},[912,1260,1251],{},[912,1262,1263],{"class":914,"line":987},[912,1264,1265],{},"    tbl_produtos PR ON IP.id_produto = PR.id_produto\n",[912,1267,1268],{"class":914,"line":993},[912,1269,1270],{},"WHERE \n",[912,1272,1273],{"class":914,"line":999},[912,1274,1275],{},"    P.status_pedido IN ('ENTREGUE', 'PRONTO')\n",[912,1277,1278],{"class":914,"line":1005},[912,1279,1280],{},"    AND P.data_pedido >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n",[912,1282,1283],{"class":914,"line":1010},[912,1284,1285],{},"GROUP BY \n",[912,1287,1288],{"class":914,"line":1016},[912,1289,1290],{},"    DATE_FORMAT(P.data_pedido, '%Y-%m'), \n",[912,1292,1293],{"class":914,"line":1022},[912,1294,1295],{},"    PR.categoria\n",[912,1297,1298],{"class":914,"line":1028},[912,1299,1300],{},"HAVING \n",[912,1302,1303],{"class":914,"line":1034},[912,1304,1305],{},"    SUM(IP.quantidade) > 20\n",[912,1307,1308],{"class":914,"line":1040},[912,1309,1310],{},"ORDER BY \n",[912,1312,1313],{"class":914,"line":1046},[912,1314,1315],{},"    'Mes_Referencia' DESC, \n",[912,1317,1318],{"class":914,"line":1051},[912,1319,1320],{},"    'Receita_Bruta_Categoria' DESC;\n",[352,1322,1323],{},[582,1324,1325,1326,1329,1330,1333],{},"Justificativa Técnica: O uso do ",[696,1327,1328],{},"DATE_FORMAT"," permite criar agregações cronológicas. A manutenção de um histórico imutável (através de ",[696,1331,1332],{},"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.",[258,1335],{"style":313},[288,1337,1339],{"id":1338},"_5-gestão-segurança-e-lgpd","5. Gestão, Segurança e LGPD",[263,1341,1343],{"id":1342},"_51-backlog-e-histórias-de-usuário-padrão-invest","5.1. Backlog e Histórias de Usuário (Padrão INVEST)",[352,1345,1346],{},"O gerenciamento do projeto segue metodologias ágeis, com requisitos traduzidos em Histórias de Usuário de alto valor.",[352,1348,1349],{},[559,1350,1351],{},"História de Usuário 01 - Tela de Cozinha (KDS - Kitchen Display System)",[1353,1354,1355],"blockquote",{},[352,1356,1357,1360,1361,1363,1366,1367,1369,1372,1373,1375,1378,1379,1382,1383,1385],{},[559,1358,1359],{},"Como"," um Sushiman (operador da cozinha),",[268,1362],{},[559,1364,1365],{},"Eu quero"," um painel que exiba automaticamente os novos pedidos sem a necessidade de atualizar a página,",[268,1368],{},[559,1370,1371],{},"Para que"," eu possa iniciar o preparo imediatamente, reduzindo o tempo de espera do cliente e evitando impressões em papel.",[268,1374],{},[582,1376,1377],{},"Critérios de Aceite:"," A tela deve buscar novos pedidos no banco a cada 10 segundos ou via WebSockets; os pedidos ",[696,1380,1381],{},"Recebidos"," devem ser exibidos em ordem cronológica (FIFO); deve haver um botão claro para marcar o pedido como ",[696,1384,705],{},".",[352,1387,1388],{},[559,1389,1390],{},"História de Usuário 02 - Controle de Cancelamento",[1353,1392,1393],{},[352,1394,1395,1397,1398,1400,1402,1403,1405,1407,1408,1410,1412,1413,1416,1417,1420],{},[559,1396,1359],{}," um Gerente de Salão,",[268,1399],{},[559,1401,1365],{}," que o sistema bloqueie o cancelamento de pedidos que já estão \"Em Preparo\",",[268,1404],{},[559,1406,1371],{}," o restaurante não sofra perdas com insumos já utilizados.",[268,1409],{},[582,1411,1377],{}," O botão de exclusão\u002Fcancelamento deve ficar desabilitado caso o ",[696,1414,1415],{},"status_pedido"," seja diferente de ",[696,1418,1419],{},"RECEBIDO","; apenas um usuário com role de \"Administrador\" pode sobrepor essa regra registrando um motivo.",[263,1422,1424],{"id":1423},"_52-conformidade-com-a-lgpd-e-privacy-by-design","5.2. Conformidade com a LGPD e Privacy by Design",[352,1426,1427],{},"Sistemas comerciais lidam com informações identificáveis (PII) dos clientes, exigindo aderência à LGPD (Lei nº 13.709\u002F2018):",[403,1429,1430,1447],{},[389,1431,1432,1435,1436,1439,1440,1443,1444,1385],{},[559,1433,1434],{},"Transparência e Consentimento:"," Caso o sistema passe a integrar ",[582,1437,1438],{},"delivery",", a coleta de telefones (como na tabela ",[696,1441,1442],{},"tbl_clientes",") deve possuir finalidade declarada exclusivamente para comunicação operacional do pedido, evitando marketing sem ",[582,1445,1446],{},"opt-in",[389,1448,1449,1452,1453,1456],{},[559,1450,1451],{},"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\u002FTelefone) convertidos em hash irreversível ou strings genéricas (\"Cliente Anônimo\"), enquanto o valor financeiro do pedido (",[696,1454,1455],{},"tbl_pedidos",") é mantido para fins de conformidade fiscal e contábil, resolvendo o conflito entre o Direito ao Esquecimento e obrigações tributárias.",[263,1458,1460],{"id":1459},"_53-cronograma-do-projeto","5.3. Cronograma do Projeto",[352,1462,1463],{},"A estimativa para entrega de valor (MVP) engloba 6 semanas intensas:",[1465,1466,1467,1487],"table",{},[1468,1469,1470],"thead",{},[1471,1472,1473,1477,1481,1484],"tr",{},[1474,1475,1476],"th",{"align":260},"Semana",[1474,1478,1480],{"align":1479},"left","Fase de Desenvolvimento",[1474,1482,1483],{"align":1479},"Responsabilidade",[1474,1485,1486],{"align":1479},"Status",[1488,1489,1490,1507,1522,1537,1552,1568],"tbody",{},[1471,1491,1492,1498,1501,1504],{},[1493,1494,1495],"td",{"align":260},[559,1496,1497],{},"01",[1493,1499,1500],{"align":1479},"Engenharia de Requisitos, Documentação UML e Prototipagem",[1493,1502,1503],{"align":1479},"Arquiteto \u002F UX Designer",[1493,1505,1506],{"align":1479},"Concluído",[1471,1508,1509,1514,1517,1520],{},[1493,1510,1511],{"align":260},[559,1512,1513],{},"02",[1493,1515,1516],{"align":1479},"Modelagem SQL (DDL) e Configuração do Servidor MySQL",[1493,1518,1519],{"align":1479},"DBA",[1493,1521,1506],{"align":1479},[1471,1523,1524,1529,1532,1535],{},[1493,1525,1526],{"align":260},[559,1527,1528],{},"03",[1493,1530,1531],{"align":1479},"Configuração do Ambiente Java MVC, APIs e Conexão JDBC\u002FHibernate",[1493,1533,1534],{"align":1479},"Desenvolvedor Backend",[1493,1536,1506],{"align":1479},[1471,1538,1539,1544,1547,1550],{},[1493,1540,1541],{"align":260},[559,1542,1543],{},"04",[1493,1545,1546],{"align":1479},"Desenvolvimento das Views (HTML\u002FCSS) e Regras de Negócio (RFs)",[1493,1548,1549],{"align":1479},"Desenvolvedor Full-Stack",[1493,1551,1506],{"align":1479},[1471,1553,1554,1559,1562,1565],{},[1493,1555,1556],{"align":260},[559,1557,1558],{},"05",[1493,1560,1561],{"align":1479},"Integração Completa (Back e Front), Testes e Correções de Bugs",[1493,1563,1564],{"align":1479},"QA \u002F Desenvolvedores",[1493,1566,1567],{"align":1479},"Em Andamento",[1471,1569,1570,1575,1578,1581],{},[1493,1571,1572],{"align":260},[559,1573,1574],{},"06",[1493,1576,1577],{"align":1479},"Documentação Final, Treinamento de Usuários e Deploy",[1493,1579,1580],{"align":1479},"Toda a Equipe",[1493,1582,1567],{"align":1479},[258,1584],{"style":313},[288,1586,1588],{"id":1587},"_6-diagramas-de-visualização","6. Diagramas de Visualização",[352,1590,1591],{},"Os modelos abaixo utilizam Mermaid, garantindo uma representação diagramática clara e unificada como código.",[263,1593,1595],{"id":1594},"_61-diagrama-de-casos-de-uso","6.1. Diagrama de Casos de Uso",[352,1597,1598],{},"Apresenta as fronteiras e as interações primárias entre os colaboradores do restaurante e a aplicação.",[1600,1601],"mermaid",{"code":1602},"flowchart LR\n    GC((\"Garçom \u002F Atendente\"))\n    COZ((\"Sushiman (Cozinha)\"))\n    GER((\"Gerente\"))\n    \n    subgraph Sistema [\"Sistema DoThi Sushi\"]\n        direction TB\n        UC1([\"Registrar Pedido (RF-001)\"])\n        UC2([\"Selecionar Pagamento (RF-002)\"])\n        UC3([\"Listar\u002FVer Pedidos (RF-003)\"])\n        UC4([\"Atualizar Status\"])\n        UC5([\"Cancelar\u002FExcluir Pedido\"])\n        UC6([\"Gerar Relatório Gerencial\"])\n    end\n    \n    GC --> UC1\n    GC --> UC3\n    UC1 -.->|\"&lt;&lt;include&gt;&gt;\"| UC2\n    \n    COZ --> UC3\n    COZ --> UC4\n    \n    GER --> UC3\n    GER --> UC4\n    GER --> UC5\n    GER --> UC6\n",[352,1604,1605,1608],{},[559,1606,1607],{},"Versão em SVG (Diagrama de Casos de Uso):",[1609,1610],"img",{"alt":534,"src":1611},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante\u002Fusecase_dothi.svg",[263,1613,1615],{"id":1614},"_62-diagrama-de-classes-camada-de-domínio","6.2. Diagrama de Classes (Camada de Domínio)",[352,1617,1618],{},"Expõe as entidades e a arquitetura de encapsulamento no Java, demonstrando dependências estruturais.",[1600,1620],{"code":1621},"classDiagram\n    class Cliente {\n        -int idCliente\n        -String nomeCliente\n        -String telefone\n        +getId(): int\n        +getNome(): String\n    }\n\n    class Produto {\n        -int idProduto\n        -String nomeProduto\n        -BigDecimal precoUnitario\n        -String categoria\n        +getPreco(): BigDecimal\n    }\n\n    class Pedido {\n        -int idPedido\n        -Cliente cliente\n        -List~ItemPedido~ itens\n        -String status\n        -String formaPagamento\n        -BigDecimal valorTotal\n        +adicionarItem(produto: Produto, qtd: int): void\n        +calcularTotal(): BigDecimal\n        +atualizarStatus(novoStatus: String): void\n    }\n\n    class ItemPedido {\n        -Produto produto\n        -int quantidade\n        -BigDecimal precoNaData\n        +getSubtotal(): BigDecimal\n    }\n\n    class IPagamentoStrategy {\n        \u003C\u003Cinterface>>\n        +processar(valor: BigDecimal): boolean\n    }\n\n    Pedido \"1\" *-- \"1..*\" ItemPedido : contém\n    Pedido \"0..*\" --> \"1\" Cliente : pertence a\n    ItemPedido \"0..*\" --> \"1\" Produto : referencia\n    Pedido ..> IPagamentoStrategy : utiliza\n",[263,1623,1625],{"id":1624},"_63-diagrama-de-entidade-relacionamento-der","6.3. Diagrama de Entidade-Relacionamento (DER)",[352,1627,1628],{},"A modelagem lógica dos dados persistidos no banco de dados MySQL para rastreabilidade financeira e operacional.",[1600,1630],{"code":1631},"erDiagram\n    TBL_CLIENTES {\n        int id_cliente PK\n        string nome_cliente\n        string telefone\n        datetime data_cadastro\n    }\n\n    TBL_PRODUTOS {\n        int id_produto PK\n        string nome_produto\n        decimal preco_unitario\n        enum categoria\n        boolean disponivel\n    }\n\n    TBL_PEDIDOS {\n        int id_pedido PK\n        int id_cliente FK\n        enum status_pedido\n        enum forma_pagamento\n        decimal valor_total\n        datetime data_pedido\n    }\n\n    TBL_ITENS_PEDIDO {\n        int id_item_pedido PK\n        int id_pedido FK\n        int id_produto FK\n        int quantidade\n        decimal preco_na_data\n    }\n\n    TBL_CLIENTES ||--o{ TBL_PEDIDOS : \"faz (1:N)\"\n    TBL_PEDIDOS ||--|{ TBL_ITENS_PEDIDO : \"possui (1:N)\"\n    TBL_PRODUTOS ||--o{ TBL_ITENS_PEDIDO : \"consta em (1:N)\"\n",[1633,1634],"hr",{},[352,1636,1637],{},[582,1638,1639],{},"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.",[1641,1642,1643],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":908,"searchDepth":921,"depth":927,"links":1645},[1646,1647,1651,1654,1655,1656,1662,1668,1672,1677],{"id":265,"depth":927,"text":266},{"id":290,"depth":921,"text":291,"children":1648},[1649,1650],{"id":309,"depth":933,"text":310},{"id":318,"depth":927,"text":319},{"id":339,"depth":921,"text":291,"children":1652},[1653],{"id":378,"depth":933,"text":310},{"id":383,"depth":921,"text":384},{"id":553,"depth":921,"text":554},{"id":572,"depth":921,"text":573,"children":1657},[1658,1659,1660,1661],{"id":576,"depth":927,"text":577},{"id":588,"depth":927,"text":589},{"id":606,"depth":927,"text":607},{"id":641,"depth":927,"text":642},{"id":654,"depth":921,"text":655,"children":1663},[1664,1665,1666,1667],{"id":658,"depth":927,"text":659},{"id":712,"depth":927,"text":713},{"id":736,"depth":927,"text":737},{"id":802,"depth":927,"text":803},{"id":886,"depth":921,"text":887,"children":1669},[1670,1671],{"id":893,"depth":927,"text":894},{"id":1185,"depth":927,"text":1186},{"id":1338,"depth":921,"text":1339,"children":1673},[1674,1675,1676],{"id":1342,"depth":927,"text":1343},{"id":1423,"depth":927,"text":1424},{"id":1459,"depth":927,"text":1460},{"id":1587,"depth":921,"text":1588,"children":1678},[1679,1680,1681],{"id":1594,"depth":927,"text":1595},{"id":1614,"depth":927,"text":1615},{"id":1624,"depth":927,"text":1625},"md",null,{},{"title":217,"description":908},"6wm4tsLQBdSYGh1WDDt6FrzTLr6AQOzXP_WOAOxd7_Q",[1688,1690],{"title":204,"path":214,"stem":215,"description":1689,"children":-1},"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).",{"title":204,"path":223,"stem":224,"description":1691,"children":-1},"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.",1788375147280]