[{"data":1,"prerenderedAt":1688},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-01-gestao-estacionamentos":252,"-projetos-integradores-pi-01-gestao-estacionamentos-surround":1684},[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":198,"body":254,"description":881,"extension":1679,"links":1680,"meta":1681,"navigation":909,"path":199,"seo":1682,"stem":200,"__hash__":1683},"docs\u002F3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002Findex.md",{"type":255,"value":256,"toc":1641},"minimark",[257,311,314,344,355,358,374,379,381,385,549,551,555,563,571,575,579,582,586,601,605,616,620,639,641,645,649,685,689,709,713,720,783,787,811,816,846,852,854,858,861,865,875,1179,1183,1190,1310,1327,1329,1333,1337,1340,1345,1376,1381,1419,1423,1426,1448,1452,1455,1574,1576,1580,1583,1587,1590,1594,1599,1605,1609,1616,1619,1623,1626,1629,1632,1637],[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-gestão-de-estacionamentos","PROJETO INTEGRADOR: GESTÃO DE ESTACIONAMENTOS",[288,289,291],"h2",{"id":290},"sistema-de-controle-de-pátio-precificação-dinâmica-e-auditoria-de-veículos","Sistema de Controle de Pátio, Precificação Dinâmica e Auditoria de Veículos",[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-gestão-de-estacionamentos-1",[288,338,291],{"id":339},"sistema-de-controle-de-pátio-precificação-dinâmica-e-auditoria-de-veículos-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-controle-manual-em-estacionamentos","O Problema do Controle Manual em Estacionamentos",[389,413,414,415],{},"2.2. ",[392,416,418],{"href":417},"#22-c%C3%A1lculos-temporais-e-toler%C3%A2ncia-de-fra%C3%A7%C3%B5es","Cálculos Temporais e Tolerância de Frações",[389,420,421,422],{},"2.3. ",[392,423,425],{"href":424},"#23-preven%C3%A7%C3%A3o-de-fraudes-e-evas%C3%A3o-de-receitas","Prevenção de Fraudes e Evasão de Receitas",[389,427,428,429],{},"2.4. ",[392,430,432],{"href":431},"#24-seguran%C3%A7a-no-armazenamento-de-dados-financeiros","Segurança no Armazenamento de Dados Financeiros",[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-relacional-e-script-ddl","Modelagem Relacional e Script DDL",[389,485,486,487],{},"4.2. ",[392,488,490],{"href":489},"#42-consultas-complexas-e-fechamento-de-caixa-dml","Consultas Complexas e Fechamento de Caixa (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],{},"A mobilidade urbana em centros comerciais e acadêmicos gerou uma alta demanda por pátios de estacionamento seguros e eficientes. A gestão desses espaços, no entanto, frequentemente sofre com processos defasados, como o uso de ",[559,560,561],"em",{},"tickets"," preenchidos à mão, que abrem margem para fraudes (cobranças indevidas), evasão de receitas e gargalos de atendimento no momento da saída dos veículos.",[352,564,565,566,570],{},"O Projeto Integrador ",[567,568,569],"strong",{},"Gestão de Estacionamentos",", desenvolvido como projeto acadêmico (2026), propõe uma arquitetura de software abrangente para solucionar essas vulnerabilidades. O sistema projetado automatiza o cálculo de tarifas baseado em tempo (frações e diárias), controla o cadastro de clientes mensalistas e assegura a criptografia e imutabilidade dos dados financeiros das transações. Este documento aborda com rigor técnico a engenharia por trás do sistema, os diagramas estruturais em UML e o embasamento do modelo de persistência relacional.",[288,572,574],{"id":573},"_2-fundamentação-teórica","2. Fundamentação Teórica",[263,576,578],{"id":577},"_21-o-problema-do-controle-manual-em-estacionamentos","2.1. O Problema do Controle Manual em Estacionamentos",[352,580,581],{},"Pátios de estacionamento que não possuem automação perdem a capacidade de metrificar sua taxa de ocupação em tempo real. O operador não sabe quantas vagas estão disponíveis sem realizar uma checagem visual, e a dependência do relógio de pulso ou de parede para calcular frações de hora resulta em imprecisões severas. Além do erro humano, há a questão da segurança: veículos podem ser liberados sem o pagamento correspondente caso exista conluio entre o cliente e o operador da cancela.",[263,583,585],{"id":584},"_22-cálculos-temporais-e-tolerância-de-frações","2.2. Cálculos Temporais e Tolerância de Frações",[352,587,588,589,593,594,597,598,600],{},"No desenvolvimento de sistemas de tarifação, o tratamento do domínio temporal (",[590,591,592],"code",{},"DateTime",") é complexo. A arquitetura exige a medição exata do intervalo entre o ",[559,595,596],{},"Timestamp"," de Entrada e o ",[559,599,596],{}," de Saída. Para garantir justiça ao consumidor (em respeito ao Código de Defesa do Consumidor) e rentabilidade à empresa, a lógica matemática do sistema precisa lidar com \"Janelas de Tolerância\" (ex: 15 minutos iniciais não pagam) e \"Arredondamentos de Fração\" (ex: passou 5 minutos da primeira hora, cobra-se uma nova fração de hora).",[263,602,604],{"id":603},"_23-prevenção-de-fraudes-e-evasão-de-receitas","2.3. Prevenção de Fraudes e Evasão de Receitas",[352,606,607,608,611,612,615],{},"A integridade do fluxo de caixa é mantida através de rigorosos controles transacionais. Uma vez que o sistema gera um ",[559,609,610],{},"Ticket"," de entrada, ele não pode ser excluído fisicamente (",[590,613,614],{},"DELETE"," bloqueado no banco de dados) sob nenhuma circunstância. Caso o cliente desista ou ocorra um erro de digitação de placa, o ticket é \"Cancelado\" (exclusão lógica), mas permanece no log de auditoria associado ao ID do operador logado, evitando \"cancelamentos fantasmas\" que acobertam desvios de dinheiro.",[263,617,619],{"id":618},"_24-segurança-no-armazenamento-de-dados-financeiros","2.4. Segurança no Armazenamento de Dados Financeiros",[352,621,622,623,626,627,630,631,634,635,638],{},"Para atender à exigência de auditoria acadêmica rigorosa deste projeto, os parâmetros tarifários e os totais financeiros arrecadados ao longo dos turnos não podem ser adulterados diretamente via SQL. O sistema implementa funções de ",[559,624,625],{},"hashing"," e encriptação (como o uso de ",[559,628,629],{},"AES-128"," em campos ",[590,632,633],{},"VARBINARY"," do MySQL e bibliotecas de criptografia no back-end) para os saldos de caixa, dificultando adulterações externas ao sistema. Adicionalmente, as senhas dos operadores (Administrador e Operador de Pátio) são armazenadas de forma segura através do algoritmo ",[559,636,637],{},"Bcrypt",", prevenindo ataques de força bruta.",[258,640],{"style":313},[288,642,644],{"id":643},"_3-engenharia-de-software","3. Engenharia de Software",[263,646,648],{"id":647},"_31-requisitos-funcionais-rf","3.1. Requisitos Funcionais (RF)",[386,650,651,657,663,669,679],{},[389,652,653,656],{},[567,654,655],{},"RF-001 | Registro de Entrada (Ticket):"," O sistema deve registrar a entrada de um veículo, capturando a placa, tipo de veículo (Moto, Carro, Van), data\u002Fhora automática do servidor e gerando um número de ticket único.",[389,658,659,662],{},[567,660,661],{},"RF-002 | Cálculo Automático de Tarifa (Saída):"," O sistema deve, ao ler o ticket, calcular automaticamente o valor devido com base na diferença temporal de permanência e na tabela de preços ativa.",[389,664,665,668],{},[567,666,667],{},"RF-003 | Gestão de Mensalistas:"," O sistema deve permitir o cadastro de clientes frequentes (Mensalistas), dispensando a cobrança de tickets avulsos e alertando o operador caso a mensalidade esteja vencida.",[389,670,671,674,675,678],{},[567,672,673],{},"RF-004 | Controle de Ocupação:"," O sistema deve exibir um ",[559,676,677],{},"Dashboard"," com a lotação atual do pátio, impedindo novas entradas se o limite máximo de vagas (ex: 100) for atingido.",[389,680,681,684],{},[567,682,683],{},"RF-005 | Fechamento de Caixa:"," O sistema deve prover ao administrador um relatório financeiro diário consolidando todos os tickets pagos e isentos.",[263,686,688],{"id":687},"_32-requisitos-não-funcionais-rnf","3.2. Requisitos Não Funcionais (RNF)",[386,690,691,697,703],{},[389,692,693,696],{},[567,694,695],{},"RNF-001 (Desempenho e Agilidade):"," A tela de registro de saída e recálculo não deve exceder 500ms de tempo de resposta para não gerar filas de carros na cancela.",[389,698,699,702],{},[567,700,701],{},"RNF-002 (Auditoria e Imutabilidade):"," Nenhuma transação financeira finalizada (ticket \"Pago\") pode ter seu valor ou horário de saída alterados nem pelo Administrador.",[389,704,705,708],{},[567,706,707],{},"RNF-003 (Confiabilidade):"," O cálculo de tempo deve depender exclusivamente da hora do banco de dados (servidor NTP), ignorando o relógio do navegador\u002Fsistema operacional local do operador para evitar adulterações.",[263,710,712],{"id":711},"_33-orientação-a-objetos-na-arquitetura-do-sistema","3.3. Orientação a Objetos na Arquitetura do Sistema",[352,714,715,716,719],{},"A modelagem de negócios (",[559,717,718],{},"Business Logic",") faz amplo uso de princípios de Orientação a Objetos para conferir extensibilidade tarifária:",[403,721,722,748],{},[389,723,724,727,728,731,732,735,736,739,740,743,744,747],{},[567,725,726],{},"Abstração e Polimorfismo:"," Existe uma classe base ",[590,729,730],{},"Veiculo"," que abstrai as informações essenciais (Placa, Cor). Através do polimorfismo e herança, as classes filhas ",[590,733,734],{},"Carro"," e ",[590,737,738],{},"Motocicleta"," interagem com a classe ",[590,741,742],{},"CalculadoraTarifa",". O método ",[590,745,746],{},"calcular(Veiculo v, tempo)"," comporta-se de maneira diferente no nível do polimorfismo, pois busca tarifas distintas na base dependendo se o objeto instanciado for um Carro ou uma Moto.",[389,749,750,753,754,756,757,735,760,763,764,767,768,770,771,774,775,778,779,782],{},[567,751,752],{},"Encapsulamento:"," Na classe ",[590,755,610],{},", os atributos ",[590,758,759],{},"horaEntrada",[590,761,762],{},"valorTotal"," são estritamente privados (",[590,765,766],{},"private","). O ",[590,769,762],{}," não pode ser definido (",[590,772,773],{},"setValorTotal",") de forma arbitrária pelo ",[559,776,777],{},"Controller","; ele só pode ser obtido (",[590,780,781],{},"getValorTotal",") como resultado do processamento dos métodos internos do objeto, garantindo a proteção e integridade do modelo matemático.",[263,784,786],{"id":785},"_34-caso-de-uso-principal-uc-01","3.4. Caso de Uso Principal (UC-01)",[352,788,789,792,793,795,798,799,801,804,805,807,810],{},[567,790,791],{},"Identificador:"," UC-01",[268,794],{},[567,796,797],{},"Nome:"," Registrar Saída\u002FPagamento do Veículo",[268,800],{},[567,802,803],{},"Ator Principal:"," Operador de Pátio",[268,806],{},[567,808,809],{},"Pré-condição:"," O veículo deve ter um registro de \"Ticket em Aberto\" no sistema.",[352,812,813],{},[567,814,815],{},"Fluxo Principal:",[386,817,818,821,824,827,830,833,836,843],{},[389,819,820],{},"O Operador insere a Placa do veículo no sistema ou realiza a leitura de código de barras do ticket.",[389,822,823],{},"O sistema recupera a entidade associada ao ticket em aberto.",[389,825,826],{},"O sistema invoca a função que checa a hora atual (NTP\u002FBD) e subtrai da hora de entrada, extraindo o total de minutos.",[389,828,829],{},"O sistema consulta a tabela de parâmetros (Tolerância, 1ª Hora, Demais Frações) e executa o algoritmo de cobrança.",[389,831,832],{},"O sistema exibe o tempo total e o Valor a Pagar na interface.",[389,834,835],{},"O Operador recebe o montante do cliente e clica em \"Confirmar Recebimento\".",[389,837,838,839,842],{},"O sistema faz a atualização transacional no Banco de Dados (",[590,840,841],{},"UPDATE tbl_tickets SET status = 'PAGO', hora_saida = NOW()",").",[389,844,845],{},"O sistema decrementa a métrica de \"Lotação Atual\" do pátio e libera a cancela virtual.",[352,847,848,851],{},[567,849,850],{},"Fluxo de Exceção (Mensalista):","\nSe no passo 2 o sistema identificar que a Placa pertence a um cliente Mensalista com o status \"Ativo\", ele pula o cálculo tarifário, exibe o valor \"R$ 0,00 (Mensalista Autorizado)\" e registra a saída como evento de auditoria simples.",[258,853],{"style":313},[288,855,857],{"id":856},"_4-banco-de-dados-mysql","4. Banco de Dados (MySQL)",[352,859,860],{},"Para garantir que informações de cobrança resistam a falhas de rede ou energia sem perdas de estado, o uso do modelo de dados relacional foi implementado seguindo estritas regras de normalização (3FN).",[263,862,864],{"id":863},"_41-modelagem-relacional-e-script-ddl","4.1. Modelagem Relacional e Script DDL",[352,866,867,868,871,872,874],{},"O script DDL (",[559,869,870],{},"Data Definition Language",") evidencia a criação da base central. Destaca-se o uso de cifragem (",[590,873,633],{},") para armazenar o log auditável da movimentação financeira.",[876,877,882],"pre",{"className":878,"code":879,"language":880,"meta":881,"style":881},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Criação do Banco de Dados\nCREATE DATABASE IF NOT EXISTS db_estacionamento_corporate\nCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\nUSE db_estacionamento_corporate;\n\n-- Tabela de Operadores (Hierarquia de Acesso)\nCREATE TABLE IF NOT EXISTS tbl_usuarios (\n    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n    nome_completo VARCHAR(100) NOT NULL,\n    login_acesso VARCHAR(50) NOT NULL UNIQUE,\n    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazena hash Bcrypt do Operador',\n    perfil_acesso ENUM('OPERADOR_PATIO', 'ADMINISTRADOR') NOT NULL,\n    status BOOLEAN DEFAULT TRUE\n);\n\n-- Tabela de Tarifário (Parâmetros Dinâmicos)\nCREATE TABLE IF NOT EXISTS tbl_tarifas (\n    id_tarifa INT AUTO_INCREMENT PRIMARY KEY,\n    tipo_veiculo ENUM('CARRO', 'MOTO', 'VAN') NOT NULL,\n    valor_primeira_hora DECIMAL(10,2) NOT NULL,\n    valor_fracao_adicional DECIMAL(10,2) NOT NULL,\n    minutos_tolerancia INT NOT NULL DEFAULT 15,\n    data_vigencia DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n-- Tabela de Mensalistas\nCREATE TABLE IF NOT EXISTS tbl_mensalistas (\n    id_mensalista INT AUTO_INCREMENT PRIMARY KEY,\n    placa_veiculo VARCHAR(10) NOT NULL UNIQUE,\n    nome_cliente VARCHAR(100) NOT NULL,\n    telefone_contato VARCHAR(20),\n    data_vencimento_plano DATE NOT NULL\n);\n\n-- Tabela Central (Tickets de Transação)\nCREATE TABLE IF NOT EXISTS tbl_tickets (\n    id_ticket BIGINT AUTO_INCREMENT PRIMARY KEY,\n    placa_veiculo VARCHAR(10) NOT NULL,\n    tipo_veiculo ENUM('CARRO', 'MOTO', 'VAN') NOT NULL,\n    hora_entrada DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,\n    hora_saida DATETIME NULL,\n    status_ticket ENUM('ABERTO', 'PAGO', 'ISENTO', 'CANCELADO') DEFAULT 'ABERTO',\n    valor_cobrado DECIMAL(10,2) DEFAULT 0.00,\n    assinatura_criptografica VARBINARY(256) COMMENT 'Selo de integridade financeira AES',\n    id_operador_entrada INT NOT NULL,\n    id_operador_saida INT NULL,\n    FOREIGN KEY (id_operador_entrada) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT,\n    FOREIGN KEY (id_operador_saida) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT\n);\n","sql","",[590,883,884,892,898,904,911,917,922,928,934,940,946,952,958,964,970,976,981,987,993,999,1005,1011,1017,1023,1029,1034,1039,1045,1051,1057,1063,1069,1075,1081,1086,1091,1097,1103,1109,1115,1120,1126,1132,1138,1144,1150,1156,1162,1168,1174],{"__ignoreMap":881},[885,886,889],"span",{"class":887,"line":888},"line",1,[885,890,891],{},"-- Criação do Banco de Dados\n",[885,893,895],{"class":887,"line":894},2,[885,896,897],{},"CREATE DATABASE IF NOT EXISTS db_estacionamento_corporate\n",[885,899,901],{"class":887,"line":900},3,[885,902,903],{},"CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n",[885,905,907],{"class":887,"line":906},4,[885,908,910],{"emptyLinePlaceholder":909},true,"\n",[885,912,914],{"class":887,"line":913},5,[885,915,916],{},"USE db_estacionamento_corporate;\n",[885,918,920],{"class":887,"line":919},6,[885,921,910],{"emptyLinePlaceholder":909},[885,923,925],{"class":887,"line":924},7,[885,926,927],{},"-- Tabela de Operadores (Hierarquia de Acesso)\n",[885,929,931],{"class":887,"line":930},8,[885,932,933],{},"CREATE TABLE IF NOT EXISTS tbl_usuarios (\n",[885,935,937],{"class":887,"line":936},9,[885,938,939],{},"    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n",[885,941,943],{"class":887,"line":942},10,[885,944,945],{},"    nome_completo VARCHAR(100) NOT NULL,\n",[885,947,949],{"class":887,"line":948},11,[885,950,951],{},"    login_acesso VARCHAR(50) NOT NULL UNIQUE,\n",[885,953,955],{"class":887,"line":954},12,[885,956,957],{},"    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazena hash Bcrypt do Operador',\n",[885,959,961],{"class":887,"line":960},13,[885,962,963],{},"    perfil_acesso ENUM('OPERADOR_PATIO', 'ADMINISTRADOR') NOT NULL,\n",[885,965,967],{"class":887,"line":966},14,[885,968,969],{},"    status BOOLEAN DEFAULT TRUE\n",[885,971,973],{"class":887,"line":972},15,[885,974,975],{},");\n",[885,977,979],{"class":887,"line":978},16,[885,980,910],{"emptyLinePlaceholder":909},[885,982,984],{"class":887,"line":983},17,[885,985,986],{},"-- Tabela de Tarifário (Parâmetros Dinâmicos)\n",[885,988,990],{"class":887,"line":989},18,[885,991,992],{},"CREATE TABLE IF NOT EXISTS tbl_tarifas (\n",[885,994,996],{"class":887,"line":995},19,[885,997,998],{},"    id_tarifa INT AUTO_INCREMENT PRIMARY KEY,\n",[885,1000,1002],{"class":887,"line":1001},20,[885,1003,1004],{},"    tipo_veiculo ENUM('CARRO', 'MOTO', 'VAN') NOT NULL,\n",[885,1006,1008],{"class":887,"line":1007},21,[885,1009,1010],{},"    valor_primeira_hora DECIMAL(10,2) NOT NULL,\n",[885,1012,1014],{"class":887,"line":1013},22,[885,1015,1016],{},"    valor_fracao_adicional DECIMAL(10,2) NOT NULL,\n",[885,1018,1020],{"class":887,"line":1019},23,[885,1021,1022],{},"    minutos_tolerancia INT NOT NULL DEFAULT 15,\n",[885,1024,1026],{"class":887,"line":1025},24,[885,1027,1028],{},"    data_vigencia DATETIME DEFAULT CURRENT_TIMESTAMP\n",[885,1030,1032],{"class":887,"line":1031},25,[885,1033,975],{},[885,1035,1037],{"class":887,"line":1036},26,[885,1038,910],{"emptyLinePlaceholder":909},[885,1040,1042],{"class":887,"line":1041},27,[885,1043,1044],{},"-- Tabela de Mensalistas\n",[885,1046,1048],{"class":887,"line":1047},28,[885,1049,1050],{},"CREATE TABLE IF NOT EXISTS tbl_mensalistas (\n",[885,1052,1054],{"class":887,"line":1053},29,[885,1055,1056],{},"    id_mensalista INT AUTO_INCREMENT PRIMARY KEY,\n",[885,1058,1060],{"class":887,"line":1059},30,[885,1061,1062],{},"    placa_veiculo VARCHAR(10) NOT NULL UNIQUE,\n",[885,1064,1066],{"class":887,"line":1065},31,[885,1067,1068],{},"    nome_cliente VARCHAR(100) NOT NULL,\n",[885,1070,1072],{"class":887,"line":1071},32,[885,1073,1074],{},"    telefone_contato VARCHAR(20),\n",[885,1076,1078],{"class":887,"line":1077},33,[885,1079,1080],{},"    data_vencimento_plano DATE NOT NULL\n",[885,1082,1084],{"class":887,"line":1083},34,[885,1085,975],{},[885,1087,1089],{"class":887,"line":1088},35,[885,1090,910],{"emptyLinePlaceholder":909},[885,1092,1094],{"class":887,"line":1093},36,[885,1095,1096],{},"-- Tabela Central (Tickets de Transação)\n",[885,1098,1100],{"class":887,"line":1099},37,[885,1101,1102],{},"CREATE TABLE IF NOT EXISTS tbl_tickets (\n",[885,1104,1106],{"class":887,"line":1105},38,[885,1107,1108],{},"    id_ticket BIGINT AUTO_INCREMENT PRIMARY KEY,\n",[885,1110,1112],{"class":887,"line":1111},39,[885,1113,1114],{},"    placa_veiculo VARCHAR(10) NOT NULL,\n",[885,1116,1118],{"class":887,"line":1117},40,[885,1119,1004],{},[885,1121,1123],{"class":887,"line":1122},41,[885,1124,1125],{},"    hora_entrada DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,\n",[885,1127,1129],{"class":887,"line":1128},42,[885,1130,1131],{},"    hora_saida DATETIME NULL,\n",[885,1133,1135],{"class":887,"line":1134},43,[885,1136,1137],{},"    status_ticket ENUM('ABERTO', 'PAGO', 'ISENTO', 'CANCELADO') DEFAULT 'ABERTO',\n",[885,1139,1141],{"class":887,"line":1140},44,[885,1142,1143],{},"    valor_cobrado DECIMAL(10,2) DEFAULT 0.00,\n",[885,1145,1147],{"class":887,"line":1146},45,[885,1148,1149],{},"    assinatura_criptografica VARBINARY(256) COMMENT 'Selo de integridade financeira AES',\n",[885,1151,1153],{"class":887,"line":1152},46,[885,1154,1155],{},"    id_operador_entrada INT NOT NULL,\n",[885,1157,1159],{"class":887,"line":1158},47,[885,1160,1161],{},"    id_operador_saida INT NULL,\n",[885,1163,1165],{"class":887,"line":1164},48,[885,1166,1167],{},"    FOREIGN KEY (id_operador_entrada) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT,\n",[885,1169,1171],{"class":887,"line":1170},49,[885,1172,1173],{},"    FOREIGN KEY (id_operador_saida) REFERENCES tbl_usuarios(id_usuario) ON DELETE RESTRICT\n",[885,1175,1177],{"class":887,"line":1176},50,[885,1178,975],{},[263,1180,1182],{"id":1181},"_42-consultas-complexas-e-relatórios-de-desempenho-dml","4.2. Consultas Complexas e Relatórios de Desempenho (DML)",[352,1184,1185,1186,1189],{},"Administradores dependem de ",[559,1187,1188],{},"Data Manipulation Language"," sofisticada para métricas gerenciais. A consulta abaixo gera o faturamento líquido, descontando takes isentos (como mensalistas), segmentado por tipo de veículo e filtrando a operação dos últimos 6 meses. O resultado ajuda o negócio a entender o fluxo sazonal.",[876,1191,1193],{"className":878,"code":1192,"language":880,"meta":881,"style":881},"-- Relatório Estratégico: Faturamento Semestral Consolidado por Tipo de Veículo\nSELECT \n    DATE_FORMAT(hora_saida, '%Y-%m') AS 'Mes_Referencia',\n    tipo_veiculo AS 'Categoria',\n    COUNT(id_ticket) AS 'Volume_Tickets_Emitidos',\n    SUM(valor_cobrado) AS 'Faturamento_Bruto',\n    (SELECT COUNT(*) FROM tbl_tickets T2 \n     WHERE T2.tipo_veiculo = tbl_tickets.tipo_veiculo \n       AND DATE_FORMAT(T2.hora_saida, '%Y-%m') = DATE_FORMAT(tbl_tickets.hora_saida, '%Y-%m') \n       AND T2.status_ticket = 'ISENTO') AS 'Volume_Isencoes_Mensalistas'\nFROM \n    tbl_tickets\nWHERE \n    status_ticket = 'PAGO'\n    AND hora_saida >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\nGROUP BY \n    DATE_FORMAT(hora_saida, '%Y-%m'), \n    tipo_veiculo\nHAVING \n    SUM(valor_cobrado) > 500\nORDER BY \n    'Mes_Referencia' DESC, \n    'Faturamento_Bruto' DESC;\n",[590,1194,1195,1200,1205,1210,1215,1220,1225,1230,1235,1240,1245,1250,1255,1260,1265,1270,1275,1280,1285,1290,1295,1300,1305],{"__ignoreMap":881},[885,1196,1197],{"class":887,"line":888},[885,1198,1199],{},"-- Relatório Estratégico: Faturamento Semestral Consolidado por Tipo de Veículo\n",[885,1201,1202],{"class":887,"line":894},[885,1203,1204],{},"SELECT \n",[885,1206,1207],{"class":887,"line":900},[885,1208,1209],{},"    DATE_FORMAT(hora_saida, '%Y-%m') AS 'Mes_Referencia',\n",[885,1211,1212],{"class":887,"line":906},[885,1213,1214],{},"    tipo_veiculo AS 'Categoria',\n",[885,1216,1217],{"class":887,"line":913},[885,1218,1219],{},"    COUNT(id_ticket) AS 'Volume_Tickets_Emitidos',\n",[885,1221,1222],{"class":887,"line":919},[885,1223,1224],{},"    SUM(valor_cobrado) AS 'Faturamento_Bruto',\n",[885,1226,1227],{"class":887,"line":924},[885,1228,1229],{},"    (SELECT COUNT(*) FROM tbl_tickets T2 \n",[885,1231,1232],{"class":887,"line":930},[885,1233,1234],{},"     WHERE T2.tipo_veiculo = tbl_tickets.tipo_veiculo \n",[885,1236,1237],{"class":887,"line":936},[885,1238,1239],{},"       AND DATE_FORMAT(T2.hora_saida, '%Y-%m') = DATE_FORMAT(tbl_tickets.hora_saida, '%Y-%m') \n",[885,1241,1242],{"class":887,"line":942},[885,1243,1244],{},"       AND T2.status_ticket = 'ISENTO') AS 'Volume_Isencoes_Mensalistas'\n",[885,1246,1247],{"class":887,"line":948},[885,1248,1249],{},"FROM \n",[885,1251,1252],{"class":887,"line":954},[885,1253,1254],{},"    tbl_tickets\n",[885,1256,1257],{"class":887,"line":960},[885,1258,1259],{},"WHERE \n",[885,1261,1262],{"class":887,"line":966},[885,1263,1264],{},"    status_ticket = 'PAGO'\n",[885,1266,1267],{"class":887,"line":972},[885,1268,1269],{},"    AND hora_saida >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n",[885,1271,1272],{"class":887,"line":978},[885,1273,1274],{},"GROUP BY \n",[885,1276,1277],{"class":887,"line":983},[885,1278,1279],{},"    DATE_FORMAT(hora_saida, '%Y-%m'), \n",[885,1281,1282],{"class":887,"line":989},[885,1283,1284],{},"    tipo_veiculo\n",[885,1286,1287],{"class":887,"line":995},[885,1288,1289],{},"HAVING \n",[885,1291,1292],{"class":887,"line":1001},[885,1293,1294],{},"    SUM(valor_cobrado) > 500\n",[885,1296,1297],{"class":887,"line":1007},[885,1298,1299],{},"ORDER BY \n",[885,1301,1302],{"class":887,"line":1013},[885,1303,1304],{},"    'Mes_Referencia' DESC, \n",[885,1306,1307],{"class":887,"line":1019},[885,1308,1309],{},"    'Faturamento_Bruto' DESC;\n",[352,1311,1312],{},[559,1313,1314,1315,1318,1319,1322,1323,1326],{},"Justificativa Técnica: A extração do mês com ",[590,1316,1317],{},"DATE_FORMAT"," e o agrupamento dinâmico (",[590,1320,1321],{},"GROUP BY",") em paridade com a cláusula ",[590,1324,1325],{},"HAVING"," isola dados inexpressivos. O uso de subquery garante a comparação direta entre o faturamento líquido contra o volume de passes livres (Mensalistas) num único relatório.",[258,1328],{"style":313},[288,1330,1332],{"id":1331},"_5-gestão-segurança-e-lgpd","5. Gestão, Segurança e LGPD",[263,1334,1336],{"id":1335},"_51-backlog-e-histórias-de-usuário-padrão-invest","5.1. Backlog e Histórias de Usuário (Padrão INVEST)",[352,1338,1339],{},"Utilizando a governança ágil, o sistema foi desenhado através de histórias concisas:",[352,1341,1342],{},[567,1343,1344],{},"História de Usuário 01 - Bloqueio Automático de Inadimplentes",[1346,1347,1348],"blockquote",{},[352,1349,1350,1353,1354,1356,1359,1360,1362,1365,1366,1368,1371,1372,1375],{},[567,1351,1352],{},"Como"," um Operador de Pátio,",[268,1355],{},[567,1357,1358],{},"Eu quero"," que o sistema notifique e exija a emissão de ticket normal quando a placa lida for de um mensalista com plano vencido,",[268,1361],{},[567,1363,1364],{},"Para que"," eu não libere indevidamente clientes inadimplentes.",[268,1367],{},[559,1369,1370],{},"Critérios de Aceite:"," Se ",[590,1373,1374],{},"data_vencimento_plano \u003C data_atual",", o sistema bloqueia o status \"Isento\"; a tela do operador deve exibir um alerta vermelho alertando a inadimplência; o fluxo segue obrigatoriamente para a cobrança comum.",[352,1377,1378],{},[567,1379,1380],{},"História de Usuário 02 - Dashboard Administrativo de Vagas",[1346,1382,1383],{},[352,1384,1385,1387,1388,1390,1392,1393,1395,1397,1398,1400,1402,1403,1406,1407,1410,1411,1414,1415,1418],{},[567,1386,1352],{}," um Administrador de Estacionamento,",[268,1389],{},[567,1391,1358],{}," visualizar um painel gráfico com a quantidade exata de veículos estacionados versus o número de vagas totais,",[268,1394],{},[567,1396,1364],{}," eu possa evitar superlotação do pátio físico e fechamento da entrada.",[268,1399],{},[559,1401,1370],{}," O cálculo baseia-se num ",[590,1404,1405],{},"COUNT"," de registros onde ",[590,1408,1409],{},"status_ticket = 'ABERTO'","; o painel deve ser atualizado via ",[559,1412,1413],{},"polling"," ou ",[559,1416,1417],{},"WebSockets"," a cada 5 segundos.",[263,1420,1422],{"id":1421},"_52-conformidade-com-a-lgpd-e-privacy-by-design","5.2. Conformidade com a LGPD e Privacy by Design",[352,1424,1425],{},"A lei geral de proteção de dados exige o cuidado extremo com a Tabela de Mensalistas, única área que cruza dados veiculares com identidade civil.",[403,1427,1428,1434],{},[389,1429,1430,1433],{},[567,1431,1432],{},"Transparência e Finalidade:"," A coleta de nomes completos e telefones (Art. 6º da LGPD) tem a finalidade exclusiva de gestão do contrato de mensalista.",[389,1435,1436,1439,1440,1443,1444,1447],{},[567,1437,1438],{},"Anonimização Protetiva:"," Caso o contrato de mensalista seja encerrado pelo cliente (Direito ao Esquecimento), o sistema prevê uma rotina de exclusão (",[559,1441,1442],{},"Soft Delete"," + ",[559,1445,1446],{},"Data Masking","), onde a placa histórica registrada na tabela de tickets permanece para contabilidade e auditoria (interesse legítimo fiscal), porém o vínculo civil com o CPF ou telefone associado é destruído criptograficamente de forma irrecuperável.",[263,1449,1451],{"id":1450},"_53-cronograma-do-projeto","5.3. Cronograma do Projeto",[352,1453,1454],{},"A estimativa para o Go-Live da aplicação foi programada para 6 semanas de esforço contínuo:",[1456,1457,1458,1478],"table",{},[1459,1460,1461],"thead",{},[1462,1463,1464,1468,1472,1475],"tr",{},[1465,1466,1467],"th",{"align":260},"Semana",[1465,1469,1471],{"align":1470},"left","Fase de Desenvolvimento",[1465,1473,1474],{"align":1470},"Responsabilidade",[1465,1476,1477],{"align":1470},"Status",[1479,1480,1481,1498,1513,1528,1543,1559],"tbody",{},[1462,1482,1483,1489,1492,1495],{},[1484,1485,1486],"td",{"align":260},[567,1487,1488],{},"01",[1484,1490,1491],{"align":1470},"Engenharia de Requisitos (Fluxo de Entrada\u002FSaída) e Documentação UML",[1484,1493,1494],{"align":1470},"Arquiteto de Software",[1484,1496,1497],{"align":1470},"Concluído",[1462,1499,1500,1505,1508,1511],{},[1484,1501,1502],{"align":260},[567,1503,1504],{},"02",[1484,1506,1507],{"align":1470},"Modelagem Lógica, Física e Deploy do MySQL Server",[1484,1509,1510],{"align":1470},"DBA Senior",[1484,1512,1497],{"align":1470},[1462,1514,1515,1520,1523,1526],{},[1484,1516,1517],{"align":260},[567,1518,1519],{},"03",[1484,1521,1522],{"align":1470},"Desenvolvimento Back-end (APIs, Cálculo Tarifário e Criptografia AES)",[1484,1524,1525],{"align":1470},"Desenvolvedor Backend",[1484,1527,1497],{"align":1470},[1462,1529,1530,1535,1538,1541],{},[1484,1531,1532],{"align":260},[567,1533,1534],{},"04",[1484,1536,1537],{"align":1470},"Construção das Interfaces de PDV (Ponto de Venda) do Operador",[1484,1539,1540],{"align":1470},"Desenvolvedor Front-End",[1484,1542,1497],{"align":1470},[1462,1544,1545,1550,1553,1556],{},[1484,1546,1547],{"align":260},[567,1548,1549],{},"05",[1484,1551,1552],{"align":1470},"Integração Sistêmica, Testes Unitários de Cobrança e Homologação",[1484,1554,1555],{"align":1470},"Analista QA",[1484,1557,1558],{"align":1470},"Em Andamento",[1462,1560,1561,1566,1569,1572],{},[1484,1562,1563],{"align":260},[567,1564,1565],{},"06",[1484,1567,1568],{"align":1470},"Compilação de Artefatos, Auditoria e Entrega Final",[1484,1570,1571],{"align":1470},"Toda a Equipe",[1484,1573,1558],{"align":1470},[258,1575],{"style":313},[288,1577,1579],{"id":1578},"_6-diagramas-de-visualização","6. Diagramas de Visualização",[352,1581,1582],{},"O emprego de diagramas Mermaid permite uma visualização exata do projeto de classes e comportamentos da arquitetura do estacionamento.",[263,1584,1586],{"id":1585},"_61-diagrama-de-casos-de-uso","6.1. Diagrama de Casos de Uso",[352,1588,1589],{},"Este diagrama descreve o controle de permissões e as ações disponíveis para o perfil Operacional vs. Administrativo.",[1591,1592],"mermaid",{"code":1593},"flowchart LR\n    Op((\"Operador de Pátio\"))\n    Admin((\"Administrador\"))\n    \n    subgraph Sistema [\"Sistema de Gestão de Estacionamento\"]\n        direction TB\n        UC1([\"Registrar Entrada de Veículo (UC1)\"])\n        UC2([\"Registrar Saída\u002FPagamento (UC2)\"])\n        UC3([\"Configurar Preços e Tarifas (UC3)\"])\n        UC4([\"Cadastrar\u002FVerificar Mensalista (UC4)\"])\n        UC5([\"Gerar Relatório de Fechamento (UC5)\"])\n        UC6([\"Estornar Pagamento Indevido (UC6)\"])\n    end\n\n    Op --> UC1\n    Op --> UC2\n    Op --> UC4\n    \n    Admin --> UC3\n    Admin --> UC5\n    Admin --> UC6\n    Admin -.->|herda de| Op\n",[352,1595,1596],{},[567,1597,1598],{},"Versão em Padrão UML (Boneco de Palito):",[352,1600,1601],{},[1602,1603],"img",{"alt":534,"src":1604},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Fusecase_estacionamento.svg",[263,1606,1608],{"id":1607},"_62-diagrama-de-classes-cálculo-financeiro","6.2. Diagrama de Classes (Cálculo Financeiro)",[352,1610,1611,1612,1615],{},"Mapeia a arquitetura lógica e os construtos orientados a objetos responsáveis pelo ",[559,1613,1614],{},"core"," de faturamento (Tarifador).",[1591,1617],{"code":1618},"classDiagram\n    class Usuario {\n        #String login\n        #String senhaHash\n        #String perfilAcesso\n        +autenticar(): boolean\n    }\n\n    class Veiculo {\n        \u003C\u003Cabstract>>\n        #String placa\n        +getPlaca(): String\n    }\n\n    class Carro {\n        -String categoriaAdicional\n    }\n    class Moto {\n        -boolean capaceteOpcional\n    }\n\n    class Ticket {\n        -String placa\n        -DateTime horaEntrada\n        -DateTime horaSaida\n        -BigDecimal valorTotal\n        -String status\n        +calcularTempoPermanencia(): int\n        +processarPagamento(t: Tarifario): void\n    }\n\n    class Tarifario {\n        -BigDecimal valorPrimeiraHora\n        -BigDecimal fracaoAdicional\n        -int toleranciaMinutos\n        +calcular(minutos: int): BigDecimal\n    }\n\n    Veiculo \u003C|-- Carro\n    Veiculo \u003C|-- Moto\n    Usuario \"1\" --> \"0..*\" Ticket : emite \u002F finaliza\n    Ticket ..> Tarifario : utiliza para calc\n",[263,1620,1622],{"id":1621},"_63-diagrama-de-entidade-relacionamento-der","6.3. Diagrama de Entidade-Relacionamento (DER)",[352,1624,1625],{},"A estrutura de dados que garante a persistência blindada contra perdas e suporta os relatórios de auditoria financeira.",[1591,1627],{"code":1628},"erDiagram\n    TBL_USUARIOS {\n        int id_usuario PK\n        string nome_completo\n        string login_acesso UK\n        string senha_hash \"Bcrypt\"\n        enum perfil_acesso\n    }\n\n    TBL_TARIFAS {\n        int id_tarifa PK\n        enum tipo_veiculo\n        decimal valor_primeira_hora\n        decimal valor_fracao\n        int tolerancia\n    }\n\n    TBL_MENSALISTAS {\n        int id_mensalista PK\n        string placa_veiculo UK\n        string nome_cliente\n        date data_vencimento_plano\n    }\n\n    TBL_TICKETS {\n        bigint id_ticket PK\n        string placa_veiculo\n        enum tipo_veiculo\n        datetime hora_entrada\n        datetime hora_saida\n        enum status_ticket\n        decimal valor_cobrado\n        varbinary assinatura_criptografica \"AES\"\n        int id_operador_entrada FK\n    }\n\n    TBL_USUARIOS ||--o{ TBL_TICKETS : \"registra fluxo (1:N)\"\n",[1630,1631],"hr",{},[352,1633,1634],{},[559,1635,1636],{},"Fim da Documentação do Projeto Integrador (2026). Este material certifica que a modelagem arquitetural e de dados do sistema de controle de estacionamentos foi desenhada com excelência, visando zero perdas financeiras e máxima eficiência transacional.",[1638,1639,1640],"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":881,"searchDepth":894,"depth":900,"links":1642},[1643,1644,1648,1651,1652,1653,1659,1665,1669,1674],{"id":265,"depth":900,"text":266},{"id":290,"depth":894,"text":291,"children":1645},[1646,1647],{"id":309,"depth":906,"text":310},{"id":318,"depth":900,"text":319},{"id":339,"depth":894,"text":291,"children":1649},[1650],{"id":378,"depth":906,"text":310},{"id":383,"depth":894,"text":384},{"id":553,"depth":894,"text":554},{"id":573,"depth":894,"text":574,"children":1654},[1655,1656,1657,1658],{"id":577,"depth":900,"text":578},{"id":584,"depth":900,"text":585},{"id":603,"depth":900,"text":604},{"id":618,"depth":900,"text":619},{"id":643,"depth":894,"text":644,"children":1660},[1661,1662,1663,1664],{"id":647,"depth":900,"text":648},{"id":687,"depth":900,"text":688},{"id":711,"depth":900,"text":712},{"id":785,"depth":900,"text":786},{"id":856,"depth":894,"text":857,"children":1666},[1667,1668],{"id":863,"depth":900,"text":864},{"id":1181,"depth":900,"text":1182},{"id":1331,"depth":894,"text":1332,"children":1670},[1671,1672,1673],{"id":1335,"depth":900,"text":1336},{"id":1421,"depth":900,"text":1422},{"id":1450,"depth":900,"text":1451},{"id":1578,"depth":894,"text":1579,"children":1675},[1676,1677,1678],{"id":1585,"depth":900,"text":1586},{"id":1607,"depth":900,"text":1608},{"id":1621,"depth":900,"text":1622},"md",null,{},{"title":198,"description":881},"yy5PtPZxWVuLyiqdZ-_Wpl3u4DVMz_79AykZVvKYSWk",[1685,1687],{"title":190,"path":192,"stem":196,"description":1686,"children":-1},"Exemplos completos de projetos integradores desenvolvidos como exercício de aplicação prática de Engenharia de Software e Banco de Dados, com documentação final e diagramas de casos de uso.",{"title":204,"path":205,"stem":206,"description":881,"children":-1},1788375146676]