[{"data":1,"prerenderedAt":1992},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-06-delivery":252,"-projetos-integradores-pi-06-delivery-surround":1987},[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":244,"body":254,"description":951,"extension":1982,"links":1983,"meta":1984,"navigation":979,"path":245,"seo":1985,"stem":246,"__hash__":1986},"docs\u002F3.projetos-integradores\u002F06.pi-06-delivery\u002Findex.md",{"type":255,"value":256,"toc":1944},"minimark",[257,311,314,344,355,358,374,379,381,385,549,551,555,558,566,569,573,577,580,601,604,608,616,623,627,630,655,659,666,668,672,675,679,719,723,751,755,758,826,830,857,862,915,925,927,931,934,938,945,1467,1471,1482,1607,1632,1634,1638,1641,1645,1652,1657,1684,1689,1711,1715,1722,1753,1757,1760,1879,1881,1885,1892,1896,1899,1903,1912,1916,1919,1922,1926,1929,1932,1935,1940],[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-deliveryexpress","PROJETO INTEGRADOR: DELIVERYEXPRESS",[288,289,291],"h2",{"id":290},"plataforma-multi-acesso-de-gestão-de-pedidos-e-roteamento-logístico","Plataforma Multi-Acesso de Gestão de Pedidos e Roteamento Logístico",[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-deliveryexpress-1",[288,338,291],{"id":339},"plataforma-multi-acesso-de-gestão-de-pedidos-e-roteamento-logístico-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-a-complexidade-log%C3%ADstica-e-o-desafio-da-intermedia%C3%A7%C3%A3o-multi-acesso","A Complexidade Logística e o Desafio da Intermediação Multi-Acesso",[389,413,414,415],{},"2.2. ",[392,416,418],{"href":417},"#22-geolocaliza%C3%A7%C3%A3o-trilatera%C3%A7%C3%A3o-e-apis-de-mapeamento","Geolocalização, Trilateração e APIs de Mapeamento",[389,420,421,422],{},"2.3. ",[392,423,425],{"href":424},"#23-arquitetura-de-sistemas-h%C3%ADbridos-e-padr%C3%A3o-mvc-em-tempo-real","Arquitetura de Sistemas Híbridos e Padrão MVC em Tempo Real",[389,427,428,429],{},"2.4. ",[392,430,432],{"href":431},"#24-persist%C3%AAncia-em-alta-disponibilidade-com-mysql","Persistência em Alta Disponibilidade com 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-anal%C3%ADticos-dml","Consultas Complexas e Relatórios Analíticos (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],{},"O setor de alimentação e entregas (food delivery) vivenciou um crescimento exponencial, exigindo que estabelecimentos gastronômicos adotassem a transformação digital para se manterem competitivos. No entanto, a dependência excessiva de canais informais (como aplicativos de mensagens instantâneas) resulta em gargalos operacionais: perda de pedidos, erros na transcrição de endereços e ausência de feedback sobre o tempo estimado de entrega (ETA).",[352,559,560,561,565],{},"O Projeto Integrador ",[562,563,564],"strong",{},"DeliveryExpress",", desenvolvido como projeto acadêmico (2026), emerge como uma solução corporativa para orquestrar a tríade do ecossistema de delivery: Cliente, Restaurante e Entregador. Este projeto consolida as disciplinas de Engenharia de Software e Banco de Dados, propondo uma arquitetura de software escalável, fundamentada em orientação a objetos, design patterns e um banco de dados relacional (MySQL) projetado para suportar transações críticas com máxima integridade.",[352,567,568],{},"A documentação a seguir expõe, com denso rigor acadêmico, as justificativas técnicas, as modelagens de caso de uso, as estratégias de conformidade com a LGPD e os scripts de implementação do sistema.",[288,570,572],{"id":571},"_2-fundamentação-teórica","2. Fundamentação Teórica",[263,574,576],{"id":575},"_21-a-complexidade-logística-e-o-desafio-da-intermediação-multi-acesso","2.1. A Complexidade Logística e o Desafio da Intermediação Multi-Acesso",[352,578,579],{},"O gerenciamento de plataformas de delivery envolve a resolução de problemas assíncronos. Diferente de um sistema de vendas tradicional, onde a compra e a entrega de um produto digital ocorrem instantaneamente, o delivery de bens perecíveis insere a variável do tempo físico e da infraestrutura viária. A arquitetura Multi-Acesso exige que a mesma infraestrutura de banco de dados sirva a três perfis distintos com latências imperceptíveis:",[403,581,582,589,595],{},[389,583,584,585,588],{},"O ",[562,586,587],{},"Cliente"," requer uma interface rica (Front-end) voltada para usabilidade, exibição de cardápios com imagens e fluxo de checkout ágil (conversão).",[389,590,584,591,594],{},[562,592,593],{},"Restaurante"," necessita de um painel de retaguarda (Back-office) em tempo real, assemelhando-se a um KDS (Kitchen Display System), onde pedidos novos acionem alertas sonoros e visuais sem a necessidade de recarregar a página.",[389,596,584,597,600],{},[562,598,599],{},"Entregador"," depende de um aplicativo móvel enxuto, altamente dependente da API de geolocalização e projetado para poupar a vida útil da bateria do dispositivo.",[352,602,603],{},"Esses requisitos divergentes demandam uma API RESTful centralizada que funcione como o único ponto de verdade (Single Source of Truth) para o negócio.",[263,605,607],{"id":606},"_22-geolocalização-trilateração-e-apis-de-mapeamento","2.2. Geolocalização, Trilateração e APIs de Mapeamento",[352,609,610,611,615],{},"Um dos diferenciais do DeliveryExpress é o cálculo de rotas e o acompanhamento de frota. O sistema fundamenta-se nos princípios de Sistemas de Informações Geográficas (GIS). Através da integração com APIs de mapas e roteamento, o sistema converte coordenadas de Latitude e Longitude dos entregadores para determinar o ",[612,613,614],"em",{},"Estimated Time of Arrival"," (ETA).",[352,617,618,619,622],{},"No ",[612,620,621],{},"backend",", são armazenados polígonos geográficos que definem as \"Zonas de Entrega\" dos restaurantes. A validação espacial é processada para impedir que um cliente solicite pedidos fora do raio de atuação do estabelecimento, o que reduz substancialmente cancelamentos operacionais e otimiza a frota.",[263,624,626],{"id":625},"_23-arquitetura-de-sistemas-híbridos-e-padrão-mvc-em-tempo-real","2.3. Arquitetura de Sistemas Híbridos e Padrão MVC em Tempo Real",[352,628,629],{},"A sustentação lógica do projeto obedece ao padrão arquitetural MVC (Model-View-Controller).",[403,631,632,638,645],{},[389,633,584,634,637],{},[562,635,636],{},"Model"," não apenas mapeia tabelas, mas encapsula as regras de validação logísticas (ex: um pedido não pode transitar para \"Entregue\" se o status anterior não for \"Saiu para Entrega\").",[389,639,640,641,644],{},"A ",[562,642,643],{},"View"," varia conforme o ator (Mobile para o Entregador, Web responsiva para o Cliente, Dashboard Desktop para o Restaurante).",[389,646,584,647,650,651,654],{},[562,648,649],{},"Controller"," gerencia a injeção de dependências e os protocolos HTTP\u002FWebSocket, garantindo o envio de ",[612,652,653],{},"Push Notifications"," entre os vértices da operação sempre que o estado transacional do banco de dados for alterado.",[263,656,658],{"id":657},"_24-persistência-em-alta-disponibilidade-com-mysql","2.4. Persistência em Alta Disponibilidade com MySQL",[352,660,661,662,665],{},"Para orquestrar milhares de transações simultâneas e lidar com picos de acesso (ex: horário de almoço ou jantar), o MySQL é utilizado com a engine InnoDB. Essa engine garante o cumprimento total das propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade). A aplicação utiliza ",[612,663,664],{},"Pessimistic Locking"," (bloqueio pessimista) quando um entregador aceita uma corrida: o registro daquele \"Pedido em Transporte\" é bloqueado transacionalmente, impedindo que outro entregador tente aceitar a mesma corrida nos mesmos milissegundos, evitando concorrência desleal e anomalias de banco de dados.",[258,667],{"style":313},[288,669,671],{"id":670},"_3-engenharia-de-software","3. Engenharia de Software",[352,673,674],{},"A metodologia adotada para o levantamento e modelagem do DeliveryExpress focou-se em garantir que a arquitetura suportasse crescimento escalar e blindagem contra falhas sistêmicas.",[263,676,678],{"id":677},"_31-requisitos-funcionais-rf","3.1. Requisitos Funcionais (RF)",[386,680,681,687,693,699,709],{},[389,682,683,686],{},[562,684,685],{},"RF-001 | Autenticação e Perfis Multi-Acesso:"," O sistema deve suportar o registro e login com diferenciação estrita de perfis e permissões: Cliente (comprador), Restaurante (fornecedor) e Entregador (logística).",[389,688,689,692],{},[562,690,691],{},"RF-002 | Gestão de Cardápio e Estoque:"," O sistema deve permitir que restaurantes cadastrem produtos, organizem por categorias (ex: Lanches, Bebidas) e alterem a disponibilidade temporária de itens.",[389,694,695,698],{},[562,696,697],{},"RF-003 | Carrinho e Checkout Parametrizado:"," O usuário (Cliente) deve conseguir agrupar produtos, inserir cupons promocionais e concluir o pedido, escolhendo o endereço de entrega e a forma de pagamento (Dinheiro ou Pagamento Eletrônico).",[389,700,701,704,705,708],{},[562,702,703],{},"RF-004 | Acompanhamento Georreferenciado:"," O sistema deve exibir para o cliente uma ",[612,706,707],{},"Timeline"," do status do pedido e, durante a fase de entrega, fornecer as atualizações do entregador.",[389,710,711,714,715,718],{},[562,712,713],{},"RF-005 | Aceite e Atribuição de Entregador:"," O sistema deve listar pedidos pendentes de entrega em um painel (",[612,716,717],{},"Dispatch",") para os entregadores ativos aceitarem a corrida de forma concorrencial.",[263,720,722],{"id":721},"_32-requisitos-não-funcionais-rnf","3.2. Requisitos Não Funcionais (RNF)",[386,724,725,735,745],{},[389,726,727,730,731,734],{},[562,728,729],{},"RNF-001 | Segurança de Dados Sensíveis:"," Todo armazenamento de senhas deve utilizar algoritmos de ",[612,732,733],{},"Hashing"," de alta entropia (como o Bcrypt). Adicionalmente, dados bancários ou de geolocalização não devem ser exibidos em logs em texto plano.",[389,736,737,740,741,744],{},[562,738,739],{},"RNF-002 | Disponibilidade e Tolerância a Falhas:"," O sistema backend deve apresentar um ",[612,742,743],{},"uptime"," superior a 99%, utilizando estratégias de balanceamento de carga e reconexão automática ao banco de dados em caso de perda de pacote.",[389,746,747,750],{},[562,748,749],{},"RNF-003 | Desempenho (Latência de Requisição):"," A pesquisa de restaurantes e o carregamento do cardápio devem retornar resultados à camada de visão em um tempo de resposta (RTT) não superior a 300 milissegundos sob carga normal.",[263,752,754],{"id":753},"_33-orientação-a-objetos-na-arquitetura-do-sistema","3.3. Orientação a Objetos na Arquitetura do Sistema",[352,756,757],{},"A construção do código-fonte abraça os pilares da Programação Orientada a Objetos (POO), garantindo um ecossistema manutenível e extensível.",[403,759,760,771,801],{},[389,761,762,765,766,770],{},[562,763,764],{},"Abstração:"," O conceito de ",[767,768,769],"code",{},"Usuario"," atua como uma classe base abstrata que abstrai as propriedades comuns (ID, Nome, E-mail, SenhaHash, DataCadastro). As regras inerentes ao ecossistema de cada tipo de usuário ficam nas subclasses.",[389,772,773,776,777,780,781,784,785,788,789,792,793,796,797,800],{},[562,774,775],{},"Encapsulamento:"," Em entidades críticas como ",[767,778,779],{},"Pedido",", os atributos ",[767,782,783],{},"status"," e ",[767,786,787],{},"valorTotal"," são estritamente privados (",[767,790,791],{},"private","). Nenhuma classe de visão ou controller pode sobrescrever o valor total arbitrariamente; ela deve invocar o método ",[767,794,795],{},"adicionarItem(Produto p, int qtd)",", que recalcula internamente o total com base no preço cadastrado do produto. Isso blinda o núcleo da aplicação contra ataques de adulteração de preços (",[612,798,799],{},"parameter tampering",").",[389,802,803,806,807,810,811,814,815,818,819,784,822,825],{},[562,804,805],{},"Polimorfismo:"," A interface ",[767,808,809],{},"IEstrategiaPagamento"," declara o método ",[767,812,813],{},"processarTransacao()",". As classes derivadas ",[767,816,817],{},"PagamentoPix",", ",[767,820,821],{},"PagamentoCartao",[767,823,824],{},"PagamentoEspecie"," sobrescrevem este método. Quando o controlador invoca a finalização do pedido, ele executa polimorficamente o pagamento, permitindo que a plataforma inclua novas bandeiras ou carteiras digitais no futuro sem modificar a lógica central do carrinho.",[263,827,829],{"id":828},"_34-caso-de-uso-principal-uc-01","3.4. Caso de Uso Principal (UC-01)",[352,831,832,835,836,838,841,842,844,847,848,850,853,854,856],{},[562,833,834],{},"Identificador:"," UC-01",[268,837],{},[562,839,840],{},"Nome:"," Realizar Checkout de Pedido (Comprar)",[268,843],{},[562,845,846],{},"Ator Principal:"," Cliente Autenticado",[268,849],{},[562,851,852],{},"Pré-condição:"," O cliente deve possuir itens válidos no carrinho de compras e o restaurante selecionado deve estar com o ",[612,855,783],{}," \"Aberto\".",[352,858,859],{},[562,860,861],{},"Fluxo Principal:",[386,863,864,867,874,877,880,883,890,908],{},[389,865,866],{},"O Cliente clica em \"Finalizar Pedido\" na visualização do Carrinho.",[389,868,869,870,873],{},"O sistema exibe a tela de ",[612,871,872],{},"Checkout",", recuperando o endereço padrão do perfil e listando os métodos de pagamento suportados pelo restaurante.",[389,875,876],{},"O Cliente confirma o Endereço de Entrega ou cadastra um novo.",[389,878,879],{},"O Cliente seleciona a Forma de Pagamento e clica em \"Confirmar Compra\".",[389,881,882],{},"O sistema encapsula os dados da transação e despacha para a camada de serviço.",[389,884,885,886,889],{},"A lógica de negócios valida o subtotal e verifica a integridade de todos os itens em relação à tabela ",[767,887,888],{},"PRODUTO"," no MySQL.",[389,891,892,893,896,897,900,901,904,905,800],{},"O sistema executa os comandos DML ",[767,894,895],{},"INSERT INTO PEDIDO"," e múltiplos ",[767,898,899],{},"INSERT INTO ITEM_PEDIDO"," envoltos numa única transação (",[767,902,903],{},"BEGIN TRAN"," ... ",[767,906,907],{},"COMMIT",[389,909,910,911,914],{},"O sistema notifica o painel web do Restaurante (via ",[612,912,913],{},"WebSocket",") e exibe a tela de \"Acompanhamento\" ao Cliente.",[352,916,917,920,921,924],{},[562,918,919],{},"Fluxo de Exceção (Restaurante Fechado no Ato):","\nSe, entre o tempo de montagem do carrinho e o passo 5, o restaurante alterar seu expediente para \"Fechado\", a camada de negócios intercepta a requisição, realiza o ",[767,922,923],{},"ROLLBACK"," da transação (para evitar cobranças) e alerta o cliente na interface: \"Desculpe, o restaurante acaba de fechar e não pode receber novos pedidos.\"",[258,926],{"style":313},[288,928,930],{"id":929},"_4-banco-de-dados-mysql","4. Banco de Dados (MySQL)",[352,932,933],{},"O coração do DeliveryExpress reside em um banco de dados relacional desenhado na 3ª Forma Normal (3FN), garantindo que dados estruturados não sofram anomalias de atualização e deleção.",[263,935,937],{"id":936},"_41-modelagem-e-script-ddl","4.1. Modelagem e Script DDL",[352,939,940,941,944],{},"O script de ",[612,942,943],{},"Data Definition Language"," evidencia o uso de integridade referencial estrita e o tratamento de dados de alta granularidade (como a separação de logradouros em chaves independentes).",[946,947,952],"pre",{"className":948,"code":949,"language":950,"meta":951,"style":951},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Criação do Banco de Dados DeliveryExpress\nCREATE DATABASE IF NOT EXISTS db_delivery_express\nCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\nUSE db_delivery_express;\n\n-- Tabela Central de Usuários (Autenticação Unificada)\nCREATE TABLE IF NOT EXISTS tbl_usuarios (\n    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n    tipo_usuario ENUM('CLIENTE', 'RESTAURANTE', 'ENTREGADOR', 'ADMIN') NOT NULL,\n    nome_completo VARCHAR(150) NOT NULL,\n    email VARCHAR(150) NOT NULL UNIQUE,\n    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazenamento de Hashing Bcrypt',\n    telefone VARCHAR(20),\n    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP,\n    status_conta BOOLEAN DEFAULT TRUE\n);\n\n-- Tabela de Endereços (Permite múltiplos endereços por Cliente)\nCREATE TABLE IF NOT EXISTS tbl_enderecos (\n    id_endereco INT AUTO_INCREMENT PRIMARY KEY,\n    id_usuario INT NOT NULL,\n    cep VARCHAR(10) NOT NULL,\n    logradouro VARCHAR(150) NOT NULL,\n    numero VARCHAR(10) NOT NULL,\n    complemento VARCHAR(100),\n    bairro VARCHAR(100) NOT NULL,\n    cidade VARCHAR(100) NOT NULL,\n    latitude DECIMAL(10,8),\n    longitude DECIMAL(11,8),\n    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario) ON DELETE CASCADE\n);\n\n-- Tabela Específica de Restaurantes (Dados Cadastrais)\nCREATE TABLE IF NOT EXISTS tbl_restaurantes (\n    id_restaurante INT PRIMARY KEY,\n    razao_social VARCHAR(150) NOT NULL,\n    cnpj VARCHAR(18) NOT NULL UNIQUE,\n    especialidade_gastronomica VARCHAR(50),\n    taxa_entrega_base DECIMAL(10,2) DEFAULT 0.00,\n    aberto_agora BOOLEAN DEFAULT FALSE,\n    FOREIGN KEY (id_restaurante) REFERENCES tbl_usuarios(id_usuario) ON DELETE CASCADE\n);\n\n-- Catálogo de Produtos\nCREATE TABLE IF NOT EXISTS tbl_produtos (\n    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n    id_restaurante INT NOT NULL,\n    nome_produto VARCHAR(150) NOT NULL,\n    descricao_detalhada TEXT,\n    preco_venda DECIMAL(10,2) NOT NULL,\n    disponivel BOOLEAN DEFAULT TRUE,\n    url_imagem VARCHAR(255),\n    CONSTRAINT ck_preco_positivo CHECK (preco_venda >= 0),\n    FOREIGN KEY (id_restaurante) REFERENCES tbl_restaurantes(id_restaurante) ON DELETE CASCADE\n);\n\n-- Tabela Transacional de Pedidos\nCREATE TABLE IF NOT EXISTS tbl_pedidos (\n    id_pedido BIGINT AUTO_INCREMENT PRIMARY KEY,\n    id_cliente INT NOT NULL,\n    id_restaurante INT NOT NULL,\n    id_entregador INT NULL,\n    id_endereco_entrega INT NOT NULL,\n    valor_subtotal DECIMAL(10,2) NOT NULL,\n    valor_taxa_entrega DECIMAL(10,2) NOT NULL,\n    valor_total DECIMAL(10,2) NOT NULL,\n    status_pedido ENUM('AGUARDANDO_CONFIRMACAO', 'PREPARANDO', 'PRONTO_PARA_COLETA', 'EM_ROTA', 'ENTREGUE', 'CANCELADO') DEFAULT 'AGUARDANDO_CONFIRMACAO',\n    forma_pagamento ENUM('DINHEIRO', 'PIX', 'CARTAO_CREDITO', 'CARTAO_DEBITO') NOT NULL,\n    data_hora_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n    data_hora_conclusao DATETIME NULL,\n    FOREIGN KEY (id_cliente) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT,\n    FOREIGN KEY (id_restaurante) REFERENCES tbl_restaurantes(id_restaurante) ON DELETE RESTRICT,\n    FOREIGN KEY (id_entregador) REFERENCES tbl_usuarios(id_usuario) ON DELETE SET NULL,\n    FOREIGN KEY (id_endereco_entrega) REFERENCES tbl_enderecos(id_endereco) ON DELETE RESTRICT\n);\n\n-- Tabela N:M Resolvida (Itens do Pedido)\nCREATE TABLE IF NOT EXISTS tbl_itens_pedido (\n    id_item_pedido BIGINT AUTO_INCREMENT PRIMARY KEY,\n    id_pedido BIGINT NOT NULL,\n    id_produto INT NOT NULL,\n    quantidade INT NOT NULL DEFAULT 1,\n    preco_unitario_historico DECIMAL(10,2) NOT NULL COMMENT 'Congela o preço no ato da compra',\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","",[767,953,954,962,968,974,981,987,992,998,1004,1010,1016,1022,1028,1034,1040,1046,1052,1058,1063,1069,1075,1081,1087,1093,1099,1105,1111,1117,1123,1129,1135,1141,1146,1151,1157,1163,1169,1175,1181,1187,1193,1199,1205,1210,1215,1221,1227,1233,1239,1245,1251,1257,1263,1269,1275,1281,1286,1291,1297,1303,1309,1315,1320,1326,1332,1338,1344,1350,1356,1362,1368,1374,1380,1386,1392,1398,1403,1408,1414,1420,1426,1432,1438,1444,1450,1456,1462],{"__ignoreMap":951},[955,956,959],"span",{"class":957,"line":958},"line",1,[955,960,961],{},"-- Criação do Banco de Dados DeliveryExpress\n",[955,963,965],{"class":957,"line":964},2,[955,966,967],{},"CREATE DATABASE IF NOT EXISTS db_delivery_express\n",[955,969,971],{"class":957,"line":970},3,[955,972,973],{},"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n",[955,975,977],{"class":957,"line":976},4,[955,978,980],{"emptyLinePlaceholder":979},true,"\n",[955,982,984],{"class":957,"line":983},5,[955,985,986],{},"USE db_delivery_express;\n",[955,988,990],{"class":957,"line":989},6,[955,991,980],{"emptyLinePlaceholder":979},[955,993,995],{"class":957,"line":994},7,[955,996,997],{},"-- Tabela Central de Usuários (Autenticação Unificada)\n",[955,999,1001],{"class":957,"line":1000},8,[955,1002,1003],{},"CREATE TABLE IF NOT EXISTS tbl_usuarios (\n",[955,1005,1007],{"class":957,"line":1006},9,[955,1008,1009],{},"    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n",[955,1011,1013],{"class":957,"line":1012},10,[955,1014,1015],{},"    tipo_usuario ENUM('CLIENTE', 'RESTAURANTE', 'ENTREGADOR', 'ADMIN') NOT NULL,\n",[955,1017,1019],{"class":957,"line":1018},11,[955,1020,1021],{},"    nome_completo VARCHAR(150) NOT NULL,\n",[955,1023,1025],{"class":957,"line":1024},12,[955,1026,1027],{},"    email VARCHAR(150) NOT NULL UNIQUE,\n",[955,1029,1031],{"class":957,"line":1030},13,[955,1032,1033],{},"    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazenamento de Hashing Bcrypt',\n",[955,1035,1037],{"class":957,"line":1036},14,[955,1038,1039],{},"    telefone VARCHAR(20),\n",[955,1041,1043],{"class":957,"line":1042},15,[955,1044,1045],{},"    data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[955,1047,1049],{"class":957,"line":1048},16,[955,1050,1051],{},"    status_conta BOOLEAN DEFAULT TRUE\n",[955,1053,1055],{"class":957,"line":1054},17,[955,1056,1057],{},");\n",[955,1059,1061],{"class":957,"line":1060},18,[955,1062,980],{"emptyLinePlaceholder":979},[955,1064,1066],{"class":957,"line":1065},19,[955,1067,1068],{},"-- Tabela de Endereços (Permite múltiplos endereços por Cliente)\n",[955,1070,1072],{"class":957,"line":1071},20,[955,1073,1074],{},"CREATE TABLE IF NOT EXISTS tbl_enderecos (\n",[955,1076,1078],{"class":957,"line":1077},21,[955,1079,1080],{},"    id_endereco INT AUTO_INCREMENT PRIMARY KEY,\n",[955,1082,1084],{"class":957,"line":1083},22,[955,1085,1086],{},"    id_usuario INT NOT NULL,\n",[955,1088,1090],{"class":957,"line":1089},23,[955,1091,1092],{},"    cep VARCHAR(10) NOT NULL,\n",[955,1094,1096],{"class":957,"line":1095},24,[955,1097,1098],{},"    logradouro VARCHAR(150) NOT NULL,\n",[955,1100,1102],{"class":957,"line":1101},25,[955,1103,1104],{},"    numero VARCHAR(10) NOT NULL,\n",[955,1106,1108],{"class":957,"line":1107},26,[955,1109,1110],{},"    complemento VARCHAR(100),\n",[955,1112,1114],{"class":957,"line":1113},27,[955,1115,1116],{},"    bairro VARCHAR(100) NOT NULL,\n",[955,1118,1120],{"class":957,"line":1119},28,[955,1121,1122],{},"    cidade VARCHAR(100) NOT NULL,\n",[955,1124,1126],{"class":957,"line":1125},29,[955,1127,1128],{},"    latitude DECIMAL(10,8),\n",[955,1130,1132],{"class":957,"line":1131},30,[955,1133,1134],{},"    longitude DECIMAL(11,8),\n",[955,1136,1138],{"class":957,"line":1137},31,[955,1139,1140],{},"    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario) ON DELETE CASCADE\n",[955,1142,1144],{"class":957,"line":1143},32,[955,1145,1057],{},[955,1147,1149],{"class":957,"line":1148},33,[955,1150,980],{"emptyLinePlaceholder":979},[955,1152,1154],{"class":957,"line":1153},34,[955,1155,1156],{},"-- Tabela Específica de Restaurantes (Dados Cadastrais)\n",[955,1158,1160],{"class":957,"line":1159},35,[955,1161,1162],{},"CREATE TABLE IF NOT EXISTS tbl_restaurantes (\n",[955,1164,1166],{"class":957,"line":1165},36,[955,1167,1168],{},"    id_restaurante INT PRIMARY KEY,\n",[955,1170,1172],{"class":957,"line":1171},37,[955,1173,1174],{},"    razao_social VARCHAR(150) NOT NULL,\n",[955,1176,1178],{"class":957,"line":1177},38,[955,1179,1180],{},"    cnpj VARCHAR(18) NOT NULL UNIQUE,\n",[955,1182,1184],{"class":957,"line":1183},39,[955,1185,1186],{},"    especialidade_gastronomica VARCHAR(50),\n",[955,1188,1190],{"class":957,"line":1189},40,[955,1191,1192],{},"    taxa_entrega_base DECIMAL(10,2) DEFAULT 0.00,\n",[955,1194,1196],{"class":957,"line":1195},41,[955,1197,1198],{},"    aberto_agora BOOLEAN DEFAULT FALSE,\n",[955,1200,1202],{"class":957,"line":1201},42,[955,1203,1204],{},"    FOREIGN KEY (id_restaurante) REFERENCES tbl_usuarios(id_usuario) ON DELETE CASCADE\n",[955,1206,1208],{"class":957,"line":1207},43,[955,1209,1057],{},[955,1211,1213],{"class":957,"line":1212},44,[955,1214,980],{"emptyLinePlaceholder":979},[955,1216,1218],{"class":957,"line":1217},45,[955,1219,1220],{},"-- Catálogo de Produtos\n",[955,1222,1224],{"class":957,"line":1223},46,[955,1225,1226],{},"CREATE TABLE IF NOT EXISTS tbl_produtos (\n",[955,1228,1230],{"class":957,"line":1229},47,[955,1231,1232],{},"    id_produto INT AUTO_INCREMENT PRIMARY KEY,\n",[955,1234,1236],{"class":957,"line":1235},48,[955,1237,1238],{},"    id_restaurante INT NOT NULL,\n",[955,1240,1242],{"class":957,"line":1241},49,[955,1243,1244],{},"    nome_produto VARCHAR(150) NOT NULL,\n",[955,1246,1248],{"class":957,"line":1247},50,[955,1249,1250],{},"    descricao_detalhada TEXT,\n",[955,1252,1254],{"class":957,"line":1253},51,[955,1255,1256],{},"    preco_venda DECIMAL(10,2) NOT NULL,\n",[955,1258,1260],{"class":957,"line":1259},52,[955,1261,1262],{},"    disponivel BOOLEAN DEFAULT TRUE,\n",[955,1264,1266],{"class":957,"line":1265},53,[955,1267,1268],{},"    url_imagem VARCHAR(255),\n",[955,1270,1272],{"class":957,"line":1271},54,[955,1273,1274],{},"    CONSTRAINT ck_preco_positivo CHECK (preco_venda >= 0),\n",[955,1276,1278],{"class":957,"line":1277},55,[955,1279,1280],{},"    FOREIGN KEY (id_restaurante) REFERENCES tbl_restaurantes(id_restaurante) ON DELETE CASCADE\n",[955,1282,1284],{"class":957,"line":1283},56,[955,1285,1057],{},[955,1287,1289],{"class":957,"line":1288},57,[955,1290,980],{"emptyLinePlaceholder":979},[955,1292,1294],{"class":957,"line":1293},58,[955,1295,1296],{},"-- Tabela Transacional de Pedidos\n",[955,1298,1300],{"class":957,"line":1299},59,[955,1301,1302],{},"CREATE TABLE IF NOT EXISTS tbl_pedidos (\n",[955,1304,1306],{"class":957,"line":1305},60,[955,1307,1308],{},"    id_pedido BIGINT AUTO_INCREMENT PRIMARY KEY,\n",[955,1310,1312],{"class":957,"line":1311},61,[955,1313,1314],{},"    id_cliente INT NOT NULL,\n",[955,1316,1318],{"class":957,"line":1317},62,[955,1319,1238],{},[955,1321,1323],{"class":957,"line":1322},63,[955,1324,1325],{},"    id_entregador INT NULL,\n",[955,1327,1329],{"class":957,"line":1328},64,[955,1330,1331],{},"    id_endereco_entrega INT NOT NULL,\n",[955,1333,1335],{"class":957,"line":1334},65,[955,1336,1337],{},"    valor_subtotal DECIMAL(10,2) NOT NULL,\n",[955,1339,1341],{"class":957,"line":1340},66,[955,1342,1343],{},"    valor_taxa_entrega DECIMAL(10,2) NOT NULL,\n",[955,1345,1347],{"class":957,"line":1346},67,[955,1348,1349],{},"    valor_total DECIMAL(10,2) NOT NULL,\n",[955,1351,1353],{"class":957,"line":1352},68,[955,1354,1355],{},"    status_pedido ENUM('AGUARDANDO_CONFIRMACAO', 'PREPARANDO', 'PRONTO_PARA_COLETA', 'EM_ROTA', 'ENTREGUE', 'CANCELADO') DEFAULT 'AGUARDANDO_CONFIRMACAO',\n",[955,1357,1359],{"class":957,"line":1358},69,[955,1360,1361],{},"    forma_pagamento ENUM('DINHEIRO', 'PIX', 'CARTAO_CREDITO', 'CARTAO_DEBITO') NOT NULL,\n",[955,1363,1365],{"class":957,"line":1364},70,[955,1366,1367],{},"    data_hora_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[955,1369,1371],{"class":957,"line":1370},71,[955,1372,1373],{},"    data_hora_conclusao DATETIME NULL,\n",[955,1375,1377],{"class":957,"line":1376},72,[955,1378,1379],{},"    FOREIGN KEY (id_cliente) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT,\n",[955,1381,1383],{"class":957,"line":1382},73,[955,1384,1385],{},"    FOREIGN KEY (id_restaurante) REFERENCES tbl_restaurantes(id_restaurante) ON DELETE RESTRICT,\n",[955,1387,1389],{"class":957,"line":1388},74,[955,1390,1391],{},"    FOREIGN KEY (id_entregador) REFERENCES tbl_usuarios(id_usuario) ON DELETE SET NULL,\n",[955,1393,1395],{"class":957,"line":1394},75,[955,1396,1397],{},"    FOREIGN KEY (id_endereco_entrega) REFERENCES tbl_enderecos(id_endereco) ON DELETE RESTRICT\n",[955,1399,1401],{"class":957,"line":1400},76,[955,1402,1057],{},[955,1404,1406],{"class":957,"line":1405},77,[955,1407,980],{"emptyLinePlaceholder":979},[955,1409,1411],{"class":957,"line":1410},78,[955,1412,1413],{},"-- Tabela N:M Resolvida (Itens do Pedido)\n",[955,1415,1417],{"class":957,"line":1416},79,[955,1418,1419],{},"CREATE TABLE IF NOT EXISTS tbl_itens_pedido (\n",[955,1421,1423],{"class":957,"line":1422},80,[955,1424,1425],{},"    id_item_pedido BIGINT AUTO_INCREMENT PRIMARY KEY,\n",[955,1427,1429],{"class":957,"line":1428},81,[955,1430,1431],{},"    id_pedido BIGINT NOT NULL,\n",[955,1433,1435],{"class":957,"line":1434},82,[955,1436,1437],{},"    id_produto INT NOT NULL,\n",[955,1439,1441],{"class":957,"line":1440},83,[955,1442,1443],{},"    quantidade INT NOT NULL DEFAULT 1,\n",[955,1445,1447],{"class":957,"line":1446},84,[955,1448,1449],{},"    preco_unitario_historico DECIMAL(10,2) NOT NULL COMMENT 'Congela o preço no ato da compra',\n",[955,1451,1453],{"class":957,"line":1452},85,[955,1454,1455],{},"    FOREIGN KEY (id_pedido) REFERENCES tbl_pedidos(id_pedido) ON DELETE CASCADE,\n",[955,1457,1459],{"class":957,"line":1458},86,[955,1460,1461],{},"    FOREIGN KEY (id_produto) REFERENCES tbl_produtos(id_produto) ON DELETE RESTRICT\n",[955,1463,1465],{"class":957,"line":1464},87,[955,1466,1057],{},[263,1468,1470],{"id":1469},"_42-consultas-complexas-e-relatórios-analíticos-dml","4.2. Consultas Complexas e Relatórios Analíticos (DML)",[352,1472,1473,1474,1477,1478,1481],{},"Para fins de inteligência de negócios e auditoria de parceiros logísticos, elaborou-se uma instrução SQL avançada (",[612,1475,1476],{},"Data Manipulation Language",") que atua como o motor do relatório gerencial da diretoria. A ",[612,1479,1480],{},"query"," abaixo extrai a volumetria de vendas e o desempenho da frota de entregadores nos últimos 6 meses, agregando resultados cruciais para campanhas de marketing ou cortes de repasses financeiros.",[946,1483,1485],{"className":948,"code":1484,"language":950,"meta":951,"style":951},"-- Relatório Executivo: Desempenho Semestral de Entregadores e Ticket Médio\nSELECT \n    U.nome_completo AS 'Nome_Entregador',\n    COUNT(P.id_pedido) AS 'Total_Corridas_Concluidas',\n    SUM(P.valor_taxa_entrega) AS 'Total_Repasse_Frete',\n    AVG(P.valor_subtotal) AS 'Ticket_Medio_Transportado',\n    MAX(P.data_hora_conclusao) AS 'Ultima_Corrida_Realizada',\n    -- Calcula a média do tempo de entrega em minutos usando a diferença de timestamps\n    ROUND(AVG(TIMESTAMPDIFF(MINUTE, P.data_hora_criacao, P.data_hora_conclusao)), 1) AS 'Tempo_Medio_Entrega_Minutos'\nFROM \n    tbl_usuarios U\nINNER JOIN \n    tbl_pedidos P ON U.id_usuario = P.id_entregador\nWHERE \n    U.tipo_usuario = 'ENTREGADOR'\n    AND P.status_pedido = 'ENTREGUE'\n    AND P.data_hora_criacao >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\nGROUP BY \n    U.id_usuario, U.nome_completo\nHAVING \n    COUNT(P.id_pedido) > 20 -- Isola amostras irrelevantes de entregadores esporádicos\nORDER BY \n    'Total_Corridas_Concluidas' DESC, \n    'Tempo_Medio_Entrega_Minutos' ASC;\n",[767,1486,1487,1492,1497,1502,1507,1512,1517,1522,1527,1532,1537,1542,1547,1552,1557,1562,1567,1572,1577,1582,1587,1592,1597,1602],{"__ignoreMap":951},[955,1488,1489],{"class":957,"line":958},[955,1490,1491],{},"-- Relatório Executivo: Desempenho Semestral de Entregadores e Ticket Médio\n",[955,1493,1494],{"class":957,"line":964},[955,1495,1496],{},"SELECT \n",[955,1498,1499],{"class":957,"line":970},[955,1500,1501],{},"    U.nome_completo AS 'Nome_Entregador',\n",[955,1503,1504],{"class":957,"line":976},[955,1505,1506],{},"    COUNT(P.id_pedido) AS 'Total_Corridas_Concluidas',\n",[955,1508,1509],{"class":957,"line":983},[955,1510,1511],{},"    SUM(P.valor_taxa_entrega) AS 'Total_Repasse_Frete',\n",[955,1513,1514],{"class":957,"line":989},[955,1515,1516],{},"    AVG(P.valor_subtotal) AS 'Ticket_Medio_Transportado',\n",[955,1518,1519],{"class":957,"line":994},[955,1520,1521],{},"    MAX(P.data_hora_conclusao) AS 'Ultima_Corrida_Realizada',\n",[955,1523,1524],{"class":957,"line":1000},[955,1525,1526],{},"    -- Calcula a média do tempo de entrega em minutos usando a diferença de timestamps\n",[955,1528,1529],{"class":957,"line":1006},[955,1530,1531],{},"    ROUND(AVG(TIMESTAMPDIFF(MINUTE, P.data_hora_criacao, P.data_hora_conclusao)), 1) AS 'Tempo_Medio_Entrega_Minutos'\n",[955,1533,1534],{"class":957,"line":1012},[955,1535,1536],{},"FROM \n",[955,1538,1539],{"class":957,"line":1018},[955,1540,1541],{},"    tbl_usuarios U\n",[955,1543,1544],{"class":957,"line":1024},[955,1545,1546],{},"INNER JOIN \n",[955,1548,1549],{"class":957,"line":1030},[955,1550,1551],{},"    tbl_pedidos P ON U.id_usuario = P.id_entregador\n",[955,1553,1554],{"class":957,"line":1036},[955,1555,1556],{},"WHERE \n",[955,1558,1559],{"class":957,"line":1042},[955,1560,1561],{},"    U.tipo_usuario = 'ENTREGADOR'\n",[955,1563,1564],{"class":957,"line":1048},[955,1565,1566],{},"    AND P.status_pedido = 'ENTREGUE'\n",[955,1568,1569],{"class":957,"line":1054},[955,1570,1571],{},"    AND P.data_hora_criacao >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n",[955,1573,1574],{"class":957,"line":1060},[955,1575,1576],{},"GROUP BY \n",[955,1578,1579],{"class":957,"line":1065},[955,1580,1581],{},"    U.id_usuario, U.nome_completo\n",[955,1583,1584],{"class":957,"line":1071},[955,1585,1586],{},"HAVING \n",[955,1588,1589],{"class":957,"line":1077},[955,1590,1591],{},"    COUNT(P.id_pedido) > 20 -- Isola amostras irrelevantes de entregadores esporádicos\n",[955,1593,1594],{"class":957,"line":1083},[955,1595,1596],{},"ORDER BY \n",[955,1598,1599],{"class":957,"line":1089},[955,1600,1601],{},"    'Total_Corridas_Concluidas' DESC, \n",[955,1603,1604],{"class":957,"line":1095},[955,1605,1606],{},"    'Tempo_Medio_Entrega_Minutos' ASC;\n",[352,1608,1609],{},[612,1610,1611,1612,1615,1616,1619,1620,1623,1624,1627,1628,1631],{},"Justificativa Técnica: O uso imperativo do ",[767,1613,1614],{},"INNER JOIN"," correlaciona o ator ao evento concluído. A instrução ",[767,1617,1618],{},"DATE_SUB"," dinamicamente amarra o período analítico, mitigando o uso de hardcoding de datas. A função ",[767,1621,1622],{},"TIMESTAMPDIFF"," aliada à agregação ",[767,1625,1626],{},"AVG"," extrai do banco dados valiosos sobre eficiência logística (SLA), enquanto a cláusula ",[767,1629,1630],{},"HAVING"," atua como pós-filtro estatístico.",[258,1633],{"style":313},[288,1635,1637],{"id":1636},"_5-gestão-segurança-e-lgpd","5. Gestão, Segurança e LGPD",[352,1639,1640],{},"O DeliveryExpress foi idealizado seguindo as cerimónias do framework Scrum, priorizando as entregas por geração de valor de negócio e alinhamento normativo de privacidade.",[263,1642,1644],{"id":1643},"_51-backlog-e-histórias-de-usuário-padrão-invest","5.1. Backlog e Histórias de Usuário (Padrão INVEST)",[352,1646,1647,1648,1651],{},"O mapeamento ágil do projeto fracionou as funcionalidades em histórias que atendem à heurística ",[562,1649,1650],{},"INVEST"," (Independente, Negociável, Valiosa, Estimável, Pequena e Testável).",[352,1653,1654],{},[562,1655,1656],{},"História de Usuário 01 - Rastreamento por Geolocalização (GPS)",[1658,1659,1660],"blockquote",{},[352,1661,1662,1665,1666,1668,1671,1672,1674,1677,1678,1680,1683],{},[562,1663,1664],{},"Como"," um Cliente que acabou de solicitar o jantar,",[268,1667],{},[562,1669,1670],{},"Eu quero"," visualizar num mapa o trajeto e a localização exata do entregador em tempo real,",[268,1673],{},[562,1675,1676],{},"Para que"," eu possa me preparar para a recepção e tenha segurança sobre o prazo de chegada.",[268,1679],{},[612,1681,1682],{},"Critérios de Aceite:"," O ícone do veículo deve ser atualizado na interface do cliente a cada 10 segundos utilizando WebSockets ou Polling; se a conexão GPS do entregador for perdida, o sistema deve exibir a última posição conhecida em coloração cinza.",[352,1685,1686],{},[562,1687,1688],{},"História de Usuário 02 - Gestão de Aceite Concorrente",[1658,1690,1691],{},[352,1692,1693,1695,1696,1698,1700,1701,1703,1705,1706,1708,1710],{},[562,1694,1664],{}," um Entregador Parceiro disponível na região,",[268,1697],{},[562,1699,1670],{}," receber notificações de novos despachos e poder aceitá-los em um toque único na tela,",[268,1702],{},[562,1704,1676],{}," eu possa otimizar minha rota de ganhos sem precisar navegar por menus complexos enquanto conduzo a moto.",[268,1707],{},[612,1709,1682],{}," O aplicativo mobile deve acionar a vibração e um sinal sonoro; a corrida deve sumir do painel geral (Dispatch) instantaneamente caso outro entregador clique em \"Aceitar\" milissegundos antes, evitando colisão de atribuições no banco de dados.",[263,1712,1714],{"id":1713},"_52-conformidade-com-a-lgpd-e-privacy-by-design","5.2. Conformidade com a LGPD e Privacy by Design",[352,1716,1717,1718,1721],{},"A plataforma DeliveryExpress lida com metadados sensíveis que englobam a vida privada do indivíduo, como endereços residenciais e hábitos de consumo alimentar. A arquitetura foi desenhada sobre a premissa de ",[612,1719,1720],{},"Privacy by Design"," (Art. 46, Lei nº 13.709\u002F2018):",[403,1723,1724,1730,1747],{},[389,1725,1726,1729],{},[562,1727,1728],{},"Consentimento Explícito (Art. 8º):"," A coleta de informações de geolocalização deve, obrigatoriamente, ser precedida por um modal (Checkbox não pré-preenchido) com finalidade explícita de operação logística.",[389,1731,1732,1735,1736,1738,1739,1742,1743,1746],{},[562,1733,1734],{},"Minimização e Temporalidade:"," O número de telefone e o endereço exato do cliente são mascarados na interface do Entregador. Tão logo o ",[612,1737,783],{}," do pedido transite para ",[767,1740,1741],{},"ENTREGUE",", o aplicativo móvel do entregador perde acesso irrecuperável aos detalhes daquela corrida, obliterando riscos de assédio, perseguição (",[612,1744,1745],{},"stalking",") ou mau uso de dados de terceiros.",[389,1748,1749,1752],{},[562,1750,1751],{},"Anonimização Protetiva:"," Caso o usuário acione seu Direito de Eliminação, os registros financeiros vinculados aos seus antigos pedidos têm a Foreign Key de Cliente substituída por um ID pseudo-anônimo de \"Conta Excluída\", preservando a coerência contábil (DRE) da empresa sem reter a identidade civil do ex-cliente.",[263,1754,1756],{"id":1755},"_53-cronograma-do-projeto","5.3. Cronograma do Projeto",[352,1758,1759],{},"A execução acadêmica e técnica foi parametrizada para um escopo intenso de 6 semanas, visando a homologação final na banca avaliadora.",[1761,1762,1763,1783],"table",{},[1764,1765,1766],"thead",{},[1767,1768,1769,1773,1777,1780],"tr",{},[1770,1771,1772],"th",{"align":260},"Semana",[1770,1774,1776],{"align":1775},"left","Sprint e Entregáveis",[1770,1778,1779],{"align":1775},"Responsabilidade",[1770,1781,1782],{"align":1775},"Status",[1784,1785,1786,1803,1818,1833,1848,1864],"tbody",{},[1767,1787,1788,1794,1797,1800],{},[1789,1790,1791],"td",{"align":260},[562,1792,1793],{},"01",[1789,1795,1796],{"align":1775},"Engenharia de Requisitos (RF\u002FRNF), Modelagem UML e Prototipagem UX",[1789,1798,1799],{"align":1775},"Arquiteto de Software",[1789,1801,1802],{"align":1775},"Concluído",[1767,1804,1805,1810,1813,1816],{},[1789,1806,1807],{"align":260},[562,1808,1809],{},"02",[1789,1811,1812],{"align":1775},"Modelagem Física de Dados, Criação DDL\u002FDML e Deploy de Infra (MySQL)",[1789,1814,1815],{"align":1775},"DBA Sênior",[1789,1817,1802],{"align":1775},[1767,1819,1820,1825,1828,1831],{},[1789,1821,1822],{"align":260},[562,1823,1824],{},"03",[1789,1826,1827],{"align":1775},"Desenvolvimento Back-end (APIs RESTful, Autenticação, WebSockets)",[1789,1829,1830],{"align":1775},"Eng. de Backend",[1789,1832,1802],{"align":1775},[1767,1834,1835,1840,1843,1846],{},[1789,1836,1837],{"align":260},[562,1838,1839],{},"04",[1789,1841,1842],{"align":1775},"Desenvolvimento Front-end (Portal do Restaurante e Checkout do Cliente)",[1789,1844,1845],{"align":1775},"Eng. Full-Stack",[1789,1847,1802],{"align":1775},[1767,1849,1850,1855,1858,1861],{},[1789,1851,1852],{"align":260},[562,1853,1854],{},"05",[1789,1856,1857],{"align":1775},"Integração Mobile (Painel do Entregador, Geolocalização, Testes ACID)",[1789,1859,1860],{"align":1775},"Equipe de Testes (QA)",[1789,1862,1863],{"align":1775},"Em Andamento",[1767,1865,1866,1871,1874,1877],{},[1789,1867,1868],{"align":260},[562,1869,1870],{},"06",[1789,1872,1873],{"align":1775},"Produção dos Relatórios Finais, Auditoria de Segurança e Banca Avaliadora",[1789,1875,1876],{"align":1775},"Toda a Equipe",[1789,1878,1863],{"align":1775},[258,1880],{"style":313},[288,1882,1884],{"id":1883},"_6-diagramas-de-visualização","6. Diagramas de Visualização",[352,1886,1887,1888,1891],{},"A adoção da linguagem declarativa ",[612,1889,1890],{},"Mermaid"," permite incorporar a modelagem visual das entidades diretamente na infraestrutura de documentação como código (Docs-as-Code).",[263,1893,1895],{"id":1894},"_61-diagrama-de-casos-de-uso","6.1. Diagrama de Casos de Uso",[352,1897,1898],{},"Mapeia a interação entre a tríade de atores logísticos e as fronteiras do subsistema de intermediação.",[1900,1901],"mermaid",{"code":1902},"flowchart LR\n    C((\"Cliente\"))\n    R((\"Restaurante\"))\n    E((\"Entregador\"))\n    \n    subgraph Sistema [\"DeliveryExpress System\"]\n        direction TB\n        UC1([\"Visualizar Cardápio e Buscar\"])\n        UC2([\"Montar Carrinho e Checkout\"])\n        UC3([\"Acompanhar Status (ETA)\"])\n        UC4([\"Gerenciar Menu e Categorias\"])\n        UC5([\"Aceitar Pedido \u002F Alterar Fluxo\"])\n        UC6([\"Visualizar Painel de Corridas (Dispatch)\"])\n        UC7([\"Aceitar Corrida de Entrega\"])\n        UC8([\"Atualizar GPS em Tempo Real\"])\n    end\n    \n    C --> UC1\n    C --> UC2\n    C --> UC3\n    \n    R --> UC4\n    R --> UC5\n    \n    E --> UC6\n    E --> UC7\n    E --> UC8\n    \n    UC3 -.->|\u003C\u003Cobserva atualizações de>>| UC5\n    UC3 -.->|\u003C\u003Cobserva atualizações de>>| UC8\n",[352,1904,1905,1908],{},[562,1906,1907],{},"Versão em SVG (Diagrama de Casos de Uso):",[1909,1910],"img",{"alt":534,"src":1911},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-06-delivery\u002Fusecase_delivery.svg",[263,1913,1915],{"id":1914},"_62-diagrama-de-classes-domínio-lógico","6.2. Diagrama de Classes (Domínio Lógico)",[352,1917,1918],{},"A abstração da lógica de domínio central, evidenciando herança e associações estritas da orientação a objetos antes da persistência no banco.",[1900,1920],{"code":1921},"classDiagram\n    class Usuario {\n        \u003C\u003Cabstract>>\n        #int idUsuario\n        #String nomeCompleto\n        #String email\n        #String senhaHash\n        +autenticar(credenciais): boolean\n    }\n\n    class Cliente {\n        -List~Endereco~ enderecosSalvos\n        +adicionarEndereco(end: Endereco): void\n        +realizarPedido(p: Pedido): boolean\n    }\n\n    class Restaurante {\n        -String razaoSocial\n        -String cnpj\n        -boolean abertoAgora\n        +atualizarExpediente(aberto: boolean): void\n    }\n\n    class Entregador {\n        -String veiculoPlaca\n        -Coordenada ultimaPosicaoGps\n        +aceitarCorrida(p: Pedido): boolean\n        +atualizarPosicao(lat: float, lng: float): void\n    }\n\n    class Pedido {\n        -long idPedido\n        -List~ItemPedido~ itens\n        -BigDecimal valorSubtotal\n        -BigDecimal valorTotal\n        -String status\n        +adicionarItem(prod: Produto, qtd: int): void\n        +calcularTotal(): BigDecimal\n        +transitarStatus(novoStatus: String): void\n    }\n\n    Usuario \u003C|-- Cliente\n    Usuario \u003C|-- Restaurante\n    Usuario \u003C|-- Entregador\n    Cliente \"1\" --> \"0..*\" Pedido : origina\n    Restaurante \"1\" --> \"0..*\" Pedido : atende\n    Entregador \"0..1\" --> \"0..*\" Pedido : transporta\n",[263,1923,1925],{"id":1924},"_63-diagrama-de-entidade-relacionamento-der","6.3. Diagrama de Entidade-Relacionamento (DER)",[352,1927,1928],{},"Este modelo lógico espelha fielmente o script DDL da seção 4.1, blindando o negócio por meio de chaves estrangeiras rígidas.",[1900,1930],{"code":1931},"erDiagram\n    TBL_USUARIOS {\n        int id_usuario PK\n        enum tipo_usuario \"CLIENTE\u002FRESTAURANTE\u002FENTREGADOR\"\n        string nome_completo\n        string email UK\n        string senha_hash \"Bcrypt\"\n    }\n\n    TBL_ENDERECOS {\n        int id_endereco PK\n        int id_usuario FK\n        string cep\n        string logradouro\n        string bairro\n    }\n\n    TBL_RESTAURANTES {\n        int id_restaurante PK \"Referência id_usuario\"\n        string razao_social\n        string cnpj UK\n        decimal taxa_entrega_base\n    }\n\n    TBL_PRODUTOS {\n        int id_produto PK\n        int id_restaurante FK\n        string nome_produto\n        decimal preco_venda \"CK: >= 0\"\n        boolean disponivel\n    }\n\n    TBL_PEDIDOS {\n        bigint id_pedido PK\n        int id_cliente FK\n        int id_restaurante FK\n        int id_entregador FK\n        enum status_pedido\n        decimal valor_total\n        datetime data_hora_criacao\n    }\n\n    TBL_ITENS_PEDIDO {\n        bigint id_item_pedido PK\n        bigint id_pedido FK\n        int id_produto FK\n        int quantidade\n        decimal preco_unitario_historico\n    }\n\n    TBL_USUARIOS ||--o{ TBL_ENDERECOS : \"possui (1:N)\"\n    TBL_USUARIOS ||--o{ TBL_PEDIDOS : \"solicita (1:N)\"\n    TBL_USUARIOS ||--o{ TBL_PEDIDOS : \"entrega (1:N)\"\n    TBL_RESTAURANTES ||--o{ TBL_PRODUTOS : \"anuncia (1:N)\"\n    TBL_RESTAURANTES ||--o{ TBL_PEDIDOS : \"prepara (1:N)\"\n    TBL_PEDIDOS ||--|{ TBL_ITENS_PEDIDO : \"engloba (1:N)\"\n    TBL_PRODUTOS ||--o{ TBL_ITENS_PEDIDO : \"compõe (1:N)\"\n",[1933,1934],"hr",{},[352,1936,1937],{},[612,1938,1939],{},"Fim da Documentação do Projeto Integrador (2026). A extensa concepção deste artefato assegura não apenas a aplicabilidade prática no disputado mercado de aplicativos de entrega, mas certifica a fluência dos autores na tríade da engenharia moderna: modelagem de software, persistência relacional de alta concorrência e conformidade regulatória (LGPD).",[1941,1942,1943],"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":951,"searchDepth":964,"depth":970,"links":1945},[1946,1947,1951,1954,1955,1956,1962,1968,1972,1977],{"id":265,"depth":970,"text":266},{"id":290,"depth":964,"text":291,"children":1948},[1949,1950],{"id":309,"depth":976,"text":310},{"id":318,"depth":970,"text":319},{"id":339,"depth":964,"text":291,"children":1952},[1953],{"id":378,"depth":976,"text":310},{"id":383,"depth":964,"text":384},{"id":553,"depth":964,"text":554},{"id":571,"depth":964,"text":572,"children":1957},[1958,1959,1960,1961],{"id":575,"depth":970,"text":576},{"id":606,"depth":970,"text":607},{"id":625,"depth":970,"text":626},{"id":657,"depth":970,"text":658},{"id":670,"depth":964,"text":671,"children":1963},[1964,1965,1966,1967],{"id":677,"depth":970,"text":678},{"id":721,"depth":970,"text":722},{"id":753,"depth":970,"text":754},{"id":828,"depth":970,"text":829},{"id":929,"depth":964,"text":930,"children":1969},[1970,1971],{"id":936,"depth":970,"text":937},{"id":1469,"depth":970,"text":1470},{"id":1636,"depth":964,"text":1637,"children":1973},[1974,1975,1976],{"id":1643,"depth":970,"text":1644},{"id":1713,"depth":970,"text":1714},{"id":1755,"depth":970,"text":1756},{"id":1883,"depth":964,"text":1884,"children":1978},[1979,1980,1981],{"id":1894,"depth":970,"text":1895},{"id":1914,"depth":970,"text":1915},{"id":1924,"depth":970,"text":1925},"md",null,{},{"title":244,"description":951},"1w3ZFLfKQwo46RambE1M2Izo49lYQRyxEmnT3BS3sRU",[1988,1990],{"title":204,"path":241,"stem":242,"description":1989,"children":-1},"Este novo projeto, intitulado Gerenciamento de Estoque, consolida sua experiência em sistemas de controle de fluxo e organização de dados estruturados.",{"title":204,"path":250,"stem":251,"description":1991,"children":-1},"Este novo projeto, intitulado Aplicativo de Delivery, segue a linha de sistemas de gestão de fluxo e atendimento que você desenvolve, como o \"Pedidos DoThi Sushi\" e o \"DeviceFlow\", mas com uma complexidade maior devido à integração de três atores principais: cliente, restaurante e entregador.",1788375148115]