[{"data":1,"prerenderedAt":1252},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-01-gestao-estacionamentos-readme":252,"-projetos-integradores-pi-01-gestao-estacionamentos-readme-surround":1249},[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":204,"body":254,"description":816,"extension":1244,"links":1245,"meta":1246,"navigation":867,"path":205,"seo":1247,"stem":206,"__hash__":1248},"docs\u002F3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002F2.readme.md",{"type":255,"value":256,"toc":1221},"minimark",[257,266,272,277,297,311,319,322,326,333,335,339,403,405,409,415,417,421,425,510,514,586,588,592,596,599,603,612,617,649,654,693,697,700,703,708,751,753,757,761,764,767,772,798,802,805,810,1008,1013,1078,1080,1084,1087,1113,1115,1119,1122,1217],[258,259,261,262],"h3",{"id":260},"curso-nome-do-curso","Curso: ",[263,264,265],"span",{},"Nome do Curso",[258,267,269],{"id":268},"nome-da-disciplina-projeto",[263,270,271],{},"Nome da Disciplina \u002F Projeto",[273,274,276],"h2",{"id":275},"documentação-técnica-sistema-de-gestão-de-estacionamentos-parkflow","Documentação Técnica: Sistema de Gestão de Estacionamentos (ParkFlow)",[278,279,280,284,285,288,291,284,294],"p",{},[281,282,283],"strong",{},"Autores:"," ",[263,286,287],{},"Nome dos Alunos",[289,290],"br",{},[281,292,293],{},"Professor Orientador:",[263,295,296],{},"Nome do Professor",[278,298,299],{},[300,301,302,303,306,307,310],"em",{},"Trabalho apresentado à ",[263,304,305],{},"Nome da Instituição"," como requisito para a disciplina de ",[263,308,309],{},"Nome da Disciplina",".",[278,312,313,284,316],{},[281,314,315],{},"Data:",[263,317,318],{},"Mês\u002FAno",[320,321],"hr",{},[273,323,325],{"id":324},"resumo","Resumo",[278,327,328,329,332],{},"O projeto ",[281,330,331],{},"ParkFlow"," é uma solução para gestão de pátios de estacionamento. O sistema visa informatizar os processos de controle de entrada e saída de veículos rotativos e mensalistas, automatizando o cálculo de tarifas com base no tempo de permanência e nas tabelas de preços vigentes, além de fornecer recursos de gestão e auditoria essenciais para a administração financeira e controle de acesso.",[320,334],{},[273,336,338],{"id":337},"sumário","Sumário",[340,341,342,350,356,377,397],"ol",{},[343,344,345],"li",{},[346,347,349],"a",{"href":348},"#1-introdu%C3%A7%C3%A3o","Introdução",[343,351,352],{},[346,353,355],{"href":354},"#2-requisitos-de-gest%C3%A3o","Requisitos de Gestão",[343,357,358,362],{},[346,359,361],{"href":360},"#3-engenharia-de-software","Engenharia de Software",[363,364,365,371],"ul",{},[343,366,367],{},[346,368,370],{"href":369},"#31-diagrama-de-casos-de-uso-uml","Diagrama de Casos de Uso",[343,372,373],{},[346,374,376],{"href":375},"#32-diagrama-de-classes","Diagrama de Classes",[343,378,379,383],{},[346,380,382],{"href":381},"#4-banco-de-dados","Banco de Dados",[363,384,385,391],{},[343,386,387],{},[346,388,390],{"href":389},"#41-modelo-entidade-relacionamento-mer","Modelo Entidade-Relacionamento",[343,392,393],{},[346,394,396],{"href":395},"#42-scripts-sql-ddl-e-dml","Scripts SQL (DDL e DML)",[343,398,399],{},[346,400,402],{"href":401},"#5-l%C3%B3gica-de-neg%C3%B3cio-e-algoritmo-de-cobran%C3%A7a","Lógica de Negócio e Algoritmo de Cobrança",[320,404],{},[273,406,408],{"id":407},"_1-introdução","1. Introdução",[278,410,411,412,414],{},"O controle de veículos em estacionamentos é frequentemente realizado de forma manual ou por sistemas defasados, o que pode gerar inconsistências financeiras e de segurança. O ",[281,413,331],{}," propõe uma abordagem moderna, oferecendo painéis tanto para o operador de pátio (focado em agilidade) quanto para o administrador (focado em gestão e relatórios).",[320,416],{},[273,418,420],{"id":419},"_2-requisitos-do-sistema","2. Requisitos do Sistema",[258,422,424],{"id":423},"_21-requisitos-funcionais-rf","2.1 Requisitos Funcionais (RF)",[426,427,428,444],"table",{},[429,430,431],"thead",{},[432,433,434,438,441],"tr",{},[435,436,437],"th",{},"ID",[435,439,440],{},"Descrição",[435,442,443],{},"Prioridade",[445,446,447,461,473,485,498],"tbody",{},[432,448,449,455,458],{},[450,451,452],"td",{},[281,453,454],{},"RF01",[450,456,457],{},"O sistema deve permitir o registro de entrada de veículos, capturando a placa, modelo e cor.",[450,459,460],{},"Alta",[432,462,463,468,471],{},[450,464,465],{},[281,466,467],{},"RF02",[450,469,470],{},"O sistema deve calcular automaticamente o valor devido no momento da saída com base na tabela de preços ativa.",[450,472,460],{},[432,474,475,480,483],{},[450,476,477],{},[281,478,479],{},"RF03",[450,481,482],{},"O sistema deve permitir o cadastro, edição e renovação de clientes mensalistas.",[450,484,460],{},[432,486,487,492,495],{},[450,488,489],{},[281,490,491],{},"RF04",[450,493,494],{},"O sistema deve gerar relatórios financeiros (faturamento rotativo vs. mensalista) diários e mensais.",[450,496,497],{},"Média",[432,499,500,505,508],{},[450,501,502],{},[281,503,504],{},"RF05",[450,506,507],{},"O administrador deve poder configurar os valores de fração inicial, hora adicional e tolerância.",[450,509,497],{},[258,511,513],{"id":512},"_22-requisitos-não-funcionais-rnf","2.2 Requisitos Não Funcionais (RNF)",[426,515,516,527],{},[429,517,518],{},[432,519,520,522,524],{},[435,521,437],{},[435,523,440],{},[435,525,526],{},"Categoria",[445,528,529,542,554,570],{},[432,530,531,536,539],{},[450,532,533],{},[281,534,535],{},"RNF01",[450,537,538],{},"O sistema deve ser desenvolvido em arquitetura Web utilizando Spring Boot e Thymeleaf.",[450,540,541],{},"Arquitetura",[432,543,544,549,552],{},[450,545,546],{},[281,547,548],{},"RNF02",[450,550,551],{},"O banco de dados relacional (PostgreSQL) deve estar na 3ª Forma Normal (3FN).",[450,553,382],{},[432,555,556,561,567],{},[450,557,558],{},[281,559,560],{},"RNF03",[450,562,563,566],{},[281,564,565],{},"Segurança e Auditoria:"," Toda ação de cancelamento de ticket deve registrar um log de acesso imutável.",[450,568,569],{},"Segurança",[432,571,572,577,583],{},[450,573,574],{},[281,575,576],{},"RNF04",[450,578,579,582],{},[281,580,581],{},"Conformidade com a LGPD:"," O armazenamento das placas e CPFs dos clientes deve possuir controle de acesso estrito e mascaramento em telas não administrativas.",[450,584,585],{},"Legal",[320,587],{},[273,589,591],{"id":590},"_3-engenharia-de-software","3. Engenharia de Software",[258,593,595],{"id":594},"_31-diagrama-de-casos-de-uso-uml","3.1 Diagrama de Casos de Uso (UML)",[278,597,598],{},"Este diagrama ilustra as interações dos atores (Operador e Administrador) com as funcionalidades centrais do sistema.",[600,601],"mermaid",{"code":602},"flowchart LR\n    Op((Operador de Pátio))\n    Admin((Administrador))\n\n    subgraph Sistema [\"Sistema ParkFlow\"]\n        direction TB\n        UC1([Registrar Entrada Ticket])\n        UC2([Registrar Saída\u002FPagamento])\n        UC3([Gerenciar Mensalistas])\n        UC4([Consultar Vagas Disponíveis])\n        UC5([Gerar Relatórios Financeiros])\n        UC6([Configurar Tarifário])\n    end\n\n    Op --> UC1\n    Op --> UC2\n    Op --> UC4\n    Admin --> UC3\n    Admin --> UC5\n    Admin --> UC6\n    Admin -.->|herda de| Op\n",[278,604,605,608],{},[281,606,607],{},"Versão em SVG (Diagrama de Casos de Uso):",[609,610],"img",{"alt":370,"src":611},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Fusecase_estacionamento.svg",[278,613,614],{},[281,615,616],{},"Descrição Textual dos Casos de Uso:",[363,618,619,643],{},[343,620,621,624],{},[281,622,623],{},"Atores:",[363,625,626,632],{},[343,627,628,631],{},[281,629,630],{},"Operador de Pátio:"," Focado nas operações diárias da catraca (entradas, saídas e controle de vagas).",[343,633,634,637,638,642],{},[281,635,636],{},"Administrador:"," Possui as mesmas permissões do Operador (por herança ",[639,640,641],"code",{},"Admin --|> Op","), somadas às funções gerenciais.",[343,644,645,648],{},[281,646,647],{},"Casos Principais:"," O registro de entrada e saída são o core do negócio, demandando validação imediata da placa. A gestão de mensalistas permite o cadastro antecipado para liberação automática. A geração de relatórios e a configuração de tarifas são restritas ao painel administrativo.",[278,650,651],{},[281,652,653],{},"Detalhamento de Caso de Uso: Registrar Saída\u002FPagamento (UC2)",[363,655,656,662,687],{},[343,657,658,661],{},[281,659,660],{},"Ator Principal:"," Operador de Pátio.",[343,663,664,667],{},[281,665,666],{},"Fluxo Principal:",[340,668,669,672,675,678,681,684],{},[343,670,671],{},"O Operador insere a placa do veículo no sistema ou faz a leitura do ticket.",[343,673,674],{},"O sistema busca o ticket em aberto associado à placa.",[343,676,677],{},"O sistema calcula o tempo de permanência e o valor total com base na Tabela de Preços vigente.",[343,679,680],{},"O sistema exibe o valor na tela.",[343,682,683],{},"O Operador confirma o recebimento do pagamento e encerra o ticket.",[343,685,686],{},"O sistema atualiza o status do ticket para \"Pago\" e registra a data\u002Fhora exata da saída.",[343,688,689,692],{},[281,690,691],{},"Fluxo Alternativo (Isenção\u002FTolerância):"," No passo 3, se o tempo de permanência for menor que a tolerância configurada (ex: 15 min), o valor total é zero e o ticket é baixado sem cobrança.",[258,694,696],{"id":695},"_32-diagrama-de-classes","3.2 Diagrama de Classes",[278,698,699],{},"A estrutura de classes foca na separação de responsabilidades e nos princípios de Orientação a Objetos como herança e encapsulamento.",[600,701],{"code":702},"classDiagram\n    class Veiculo {\n        +String placa\n        +String modelo\n        +String cor\n        +registrar()\n    }\n    class Ticket {\n        +DateTime entrada\n        +DateTime saida\n        +Double valorTotal\n        +String status\n        +calcularValor()\n        +encerrar()\n    }\n    class Cliente {\n        +String nome\n        +String documento\n        +String contato\n    }\n    class Mensalista {\n        +DateTime dataVencimento\n        +Double valorMensalidade\n        +renovar()\n    }\n\n    Veiculo \"1\" -- \"0..*\" Ticket : possui\n    Cliente \u003C|-- Mensalista : herança\n    Mensalista \"1\" -- \"1\" Veiculo : vincula\n    Ticket \"0..*\" -- \"1\" Operador : processado por\n",[278,704,705],{},[281,706,707],{},"Descrição Textual do Diagrama de Classes:",[363,709,710,724,742],{},[343,711,712,715,716,719,720,723],{},[281,713,714],{},"Relacionamentos:"," Identifica-se que um ",[639,717,718],{},"Veiculo"," pode possuir múltiplos ",[639,721,722],{},"Ticket","s (histórico de passagens), mas um ticket pertence estritamente a um veículo (relação 1 para 0..*).",[343,725,726,729,730,733,734,737,738,741],{},[281,727,728],{},"Herança:"," A classe ",[639,731,732],{},"Mensalista"," herda atributos de ",[639,735,736],{},"Cliente",", adicionando comportamentos específicos como ",[639,739,740],{},"renovar()"," e atributos contratuais.",[343,743,744,747,748,750],{},[281,745,746],{},"Processamento:"," Cada ",[639,749,722],{}," guarda a referência do operador que o emitiu\u002Fprocessou, essencial para a auditoria de caixa.",[320,752],{},[273,754,756],{"id":755},"_4-banco-de-dados","4. Banco de Dados",[258,758,760],{"id":759},"_41-modelo-entidade-relacionamento-mer-mermaid","4.1 Modelo Entidade-Relacionamento (MER - Mermaid)",[278,762,763],{},"O modelo relacional foi desenhado na Terceira Forma Normal (3FN) para garantir a integridade dos dados e o histórico de transações.",[600,765],{"code":766},"erDiagram\n    USUARIO ||--o{ LOG_ACESSO : \"gera\"\n    VEICULO ||--o{ TICKET : \"possui\"\n    CLIENTE ||--o{ VEICULO : \"cadastra\"\n    TABELA_PRECO ||--o{ TICKET : \"define valor\"\n\n    USUARIO {\n        int id_usuario PK\n        string nome\n        string email\n        string senha_hash\n        enum perfil\n    }\n\n    VEICULO {\n        int id_veiculo PK\n        string placa\n        string modelo\n        string cor\n        int id_cliente FK\n    }\n\n    TICKET {\n        int id_ticket PK\n        int id_veiculo FK\n        datetime dt_entrada\n        datetime dt_saida\n        decimal valor_total\n        string status\n        int id_tabela_preco FK\n    }\n\n    CLIENTE {\n        int id_cliente PK\n        string nome\n        string cpf_cnpj\n        boolean eh_mensalista\n    }\n\n    LOG_ACESSO {\n        int id_log PK\n        int id_usuario FK\n        string acao\n        datetime quando\n        string ip\n    }\n\n    TABELA_PRECO {\n        int id_tabela PK\n        decimal valor_fracao\n        decimal valor_hora\n        int minutos_tolerancia\n        boolean ativa\n    }\n",[278,768,769],{},[281,770,771],{},"Descrição Textual do MER:",[363,773,774,784],{},[343,775,776,779,780,783],{},[281,777,778],{},"Tabela de Preços Ativa:"," Uma entidade ",[639,781,782],{},"TABELA_PRECO"," foi introduzida no modelo para satisfazer o requisito de controle gerencial. O ticket vincula-se a uma tabela (chave estrangeira), garantindo que alterações futuras nas tarifas não mudem o histórico de tickets já cobrados.",[343,785,786,789,790,793,794,797],{},[281,787,788],{},"Log de Acesso:"," A tabela ",[639,791,792],{},"LOG_ACESSO"," registra cada ação relevante vinculada ao ",[639,795,796],{},"USUARIO"," que a executou, com data, hora e IP, atendendo à necessidade de rastreabilidade e segurança.",[258,799,801],{"id":800},"_42-scripts-sql-ddl-e-dml","4.2 Scripts SQL (DDL e DML)",[278,803,804],{},"Conforme os padrões acadêmicos, abaixo apresentamos os scripts DDL de criação e um exemplo de consulta avançada para extração de relatórios.",[278,806,807],{},[281,808,809],{},"Estrutura de Criação (DDL - PostgreSQL\u002FH2):",[811,812,817],"pre",{"className":813,"code":814,"language":815,"meta":816,"style":816},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE TABLE TABELA_PRECO (\n    id_tabela SERIAL PRIMARY KEY,\n    valor_fracao DECIMAL(10,2) NOT NULL,\n    valor_hora DECIMAL(10,2) NOT NULL,\n    minutos_tolerancia INT NOT NULL,\n    ativa BOOLEAN DEFAULT TRUE\n);\n\nCREATE TABLE CLIENTE (\n    id_cliente SERIAL PRIMARY KEY,\n    nome VARCHAR(100) NOT NULL,\n    cpf_cnpj VARCHAR(20) UNIQUE NOT NULL,\n    eh_mensalista BOOLEAN DEFAULT FALSE\n);\n\nCREATE TABLE VEICULO (\n    id_veiculo SERIAL PRIMARY KEY,\n    placa VARCHAR(10) UNIQUE NOT NULL,\n    modelo VARCHAR(50),\n    cor VARCHAR(30),\n    id_cliente INT REFERENCES CLIENTE(id_cliente)\n);\n\nCREATE TABLE TICKET (\n    id_ticket SERIAL PRIMARY KEY,\n    id_veiculo INT NOT NULL REFERENCES VEICULO(id_veiculo),\n    id_tabela_preco INT NOT NULL REFERENCES TABELA_PRECO(id_tabela),\n    dt_entrada TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n    dt_saida TIMESTAMP,\n    valor_total DECIMAL(10,2),\n    status VARCHAR(20) DEFAULT 'ABERTO'\n);\n","sql","",[639,818,819,826,832,838,844,850,856,862,869,875,881,887,893,899,904,909,915,921,927,933,939,945,950,955,961,967,973,979,985,991,997,1003],{"__ignoreMap":816},[263,820,823],{"class":821,"line":822},"line",1,[263,824,825],{},"CREATE TABLE TABELA_PRECO (\n",[263,827,829],{"class":821,"line":828},2,[263,830,831],{},"    id_tabela SERIAL PRIMARY KEY,\n",[263,833,835],{"class":821,"line":834},3,[263,836,837],{},"    valor_fracao DECIMAL(10,2) NOT NULL,\n",[263,839,841],{"class":821,"line":840},4,[263,842,843],{},"    valor_hora DECIMAL(10,2) NOT NULL,\n",[263,845,847],{"class":821,"line":846},5,[263,848,849],{},"    minutos_tolerancia INT NOT NULL,\n",[263,851,853],{"class":821,"line":852},6,[263,854,855],{},"    ativa BOOLEAN DEFAULT TRUE\n",[263,857,859],{"class":821,"line":858},7,[263,860,861],{},");\n",[263,863,865],{"class":821,"line":864},8,[263,866,868],{"emptyLinePlaceholder":867},true,"\n",[263,870,872],{"class":821,"line":871},9,[263,873,874],{},"CREATE TABLE CLIENTE (\n",[263,876,878],{"class":821,"line":877},10,[263,879,880],{},"    id_cliente SERIAL PRIMARY KEY,\n",[263,882,884],{"class":821,"line":883},11,[263,885,886],{},"    nome VARCHAR(100) NOT NULL,\n",[263,888,890],{"class":821,"line":889},12,[263,891,892],{},"    cpf_cnpj VARCHAR(20) UNIQUE NOT NULL,\n",[263,894,896],{"class":821,"line":895},13,[263,897,898],{},"    eh_mensalista BOOLEAN DEFAULT FALSE\n",[263,900,902],{"class":821,"line":901},14,[263,903,861],{},[263,905,907],{"class":821,"line":906},15,[263,908,868],{"emptyLinePlaceholder":867},[263,910,912],{"class":821,"line":911},16,[263,913,914],{},"CREATE TABLE VEICULO (\n",[263,916,918],{"class":821,"line":917},17,[263,919,920],{},"    id_veiculo SERIAL PRIMARY KEY,\n",[263,922,924],{"class":821,"line":923},18,[263,925,926],{},"    placa VARCHAR(10) UNIQUE NOT NULL,\n",[263,928,930],{"class":821,"line":929},19,[263,931,932],{},"    modelo VARCHAR(50),\n",[263,934,936],{"class":821,"line":935},20,[263,937,938],{},"    cor VARCHAR(30),\n",[263,940,942],{"class":821,"line":941},21,[263,943,944],{},"    id_cliente INT REFERENCES CLIENTE(id_cliente)\n",[263,946,948],{"class":821,"line":947},22,[263,949,861],{},[263,951,953],{"class":821,"line":952},23,[263,954,868],{"emptyLinePlaceholder":867},[263,956,958],{"class":821,"line":957},24,[263,959,960],{},"CREATE TABLE TICKET (\n",[263,962,964],{"class":821,"line":963},25,[263,965,966],{},"    id_ticket SERIAL PRIMARY KEY,\n",[263,968,970],{"class":821,"line":969},26,[263,971,972],{},"    id_veiculo INT NOT NULL REFERENCES VEICULO(id_veiculo),\n",[263,974,976],{"class":821,"line":975},27,[263,977,978],{},"    id_tabela_preco INT NOT NULL REFERENCES TABELA_PRECO(id_tabela),\n",[263,980,982],{"class":821,"line":981},28,[263,983,984],{},"    dt_entrada TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n",[263,986,988],{"class":821,"line":987},29,[263,989,990],{},"    dt_saida TIMESTAMP,\n",[263,992,994],{"class":821,"line":993},30,[263,995,996],{},"    valor_total DECIMAL(10,2),\n",[263,998,1000],{"class":821,"line":999},31,[263,1001,1002],{},"    status VARCHAR(20) DEFAULT 'ABERTO'\n",[263,1004,1006],{"class":821,"line":1005},32,[263,1007,861],{},[278,1009,1010],{},[281,1011,1012],{},"Exemplo de Consulta (JOIN) - Relatório de Tickets com Dados do Veículo:",[811,1014,1016],{"className":813,"code":1015,"language":815,"meta":816,"style":816},"SELECT \n    t.id_ticket, \n    v.placa, \n    c.nome AS cliente, \n    t.dt_entrada, \n    t.dt_saida, \n    t.valor_total \nFROM TICKET t\nINNER JOIN VEICULO v ON t.id_veiculo = v.id_veiculo\nLEFT JOIN CLIENTE c ON v.id_cliente = c.id_cliente\nWHERE t.status = 'FECHADO'\nORDER BY t.dt_saida DESC;\n",[639,1017,1018,1023,1028,1033,1038,1043,1048,1053,1058,1063,1068,1073],{"__ignoreMap":816},[263,1019,1020],{"class":821,"line":822},[263,1021,1022],{},"SELECT \n",[263,1024,1025],{"class":821,"line":828},[263,1026,1027],{},"    t.id_ticket, \n",[263,1029,1030],{"class":821,"line":834},[263,1031,1032],{},"    v.placa, \n",[263,1034,1035],{"class":821,"line":840},[263,1036,1037],{},"    c.nome AS cliente, \n",[263,1039,1040],{"class":821,"line":846},[263,1041,1042],{},"    t.dt_entrada, \n",[263,1044,1045],{"class":821,"line":852},[263,1046,1047],{},"    t.dt_saida, \n",[263,1049,1050],{"class":821,"line":858},[263,1051,1052],{},"    t.valor_total \n",[263,1054,1055],{"class":821,"line":864},[263,1056,1057],{},"FROM TICKET t\n",[263,1059,1060],{"class":821,"line":871},[263,1061,1062],{},"INNER JOIN VEICULO v ON t.id_veiculo = v.id_veiculo\n",[263,1064,1065],{"class":821,"line":877},[263,1066,1067],{},"LEFT JOIN CLIENTE c ON v.id_cliente = c.id_cliente\n",[263,1069,1070],{"class":821,"line":883},[263,1071,1072],{},"WHERE t.status = 'FECHADO'\n",[263,1074,1075],{"class":821,"line":889},[263,1076,1077],{},"ORDER BY t.dt_saida DESC;\n",[320,1079],{},[273,1081,1083],{"id":1082},"_5-lógica-de-negócio-e-algoritmo-de-cobrança","5. Lógica de Negócio e Algoritmo de Cobrança",[278,1085,1086],{},"Conforme os requisitos de desempenho (RNF), a lógica de cálculo foi concebida para ser eficiente e precisa.",[363,1088,1089,1095,1101,1107],{},[343,1090,1091,1094],{},[281,1092,1093],{},"Fração Inicial:"," Cobrança mínima correspondente a um período pré-definido (ex: 15 ou 30 minutos).",[343,1096,1097,1100],{},[281,1098,1099],{},"Hora Adicional:"," Valor fixo somado após a primeira hora de permanência.",[343,1102,1103,1106],{},[281,1104,1105],{},"Tolerância:"," Período de 10 a 15 minutos (configurável pelo admin) sem cobrança para permitir desistências ou manobras após a entrada ou o pagamento.",[343,1108,1109,1112],{},[281,1110,1111],{},"Mensalistas:"," O sistema realiza uma validação automática na entrada. Se a placa pertencer a um mensalista ativo (adimplente), a cancela é liberada sem a geração de um ticket rotativo com cobrança.",[320,1114],{},[273,1116,1118],{"id":1117},"_6-planejamento-e-cronograma","6. Planejamento e Cronograma",[278,1120,1121],{},"O desenvolvimento foi organizado em um ciclo ágil adaptado de 6 semanas para a entrega do Projeto:",[426,1123,1124,1137],{},[429,1125,1126],{},[432,1127,1128,1131,1134],{},[435,1129,1130],{},"Semana",[435,1132,1133],{},"Fase do Projeto",[435,1135,1136],{},"Entregáveis e Atividades (Backlog)",[445,1138,1139,1152,1165,1178,1191,1204],{},[432,1140,1141,1146,1149],{},[450,1142,1143],{},[281,1144,1145],{},"Semana 1",[450,1147,1148],{},"Levantamento e Requisitos",[450,1150,1151],{},"Reuniões, Definição de RF\u002FRNF, Casos de Uso.",[432,1153,1154,1159,1162],{},[450,1155,1156],{},[281,1157,1158],{},"Semana 2",[450,1160,1161],{},"Modelagem de Dados",[450,1163,1164],{},"Diagramas de Classes, MER, Scripts DDL iniciais.",[432,1166,1167,1172,1175],{},[450,1168,1169],{},[281,1170,1171],{},"Semana 3",[450,1173,1174],{},"Setup e Prototipagem",[450,1176,1177],{},"Geração do projeto Spring Boot, telas Thymeleaf base.",[432,1179,1180,1185,1188],{},[450,1181,1182],{},[281,1183,1184],{},"Semana 4",[450,1186,1187],{},"Codificação Backend",[450,1189,1190],{},"Implementação de Controllers, Repositórios e Serviços (Cobrança).",[432,1192,1193,1198,1201],{},[450,1194,1195],{},[281,1196,1197],{},"Semana 5",[450,1199,1200],{},"Integração e Relatórios",[450,1202,1203],{},"Conexão Front-Back, Consultas JOIN, Trilha de Auditoria.",[432,1205,1206,1211,1214],{},[450,1207,1208],{},[281,1209,1210],{},"Semana 6",[450,1212,1213],{},"Testes e Entrega",[450,1215,1216],{},"Testes de fluxo, validação de LGPD, defesa do projeto.",[1218,1219,1220],"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":816,"searchDepth":828,"depth":834,"links":1222},[1223,1225,1226,1227,1228,1229,1230,1234,1238,1242,1243],{"id":260,"depth":834,"text":1224},"Curso: Nome do Curso",{"id":268,"depth":834,"text":271},{"id":275,"depth":828,"text":276},{"id":324,"depth":828,"text":325},{"id":337,"depth":828,"text":338},{"id":407,"depth":828,"text":408},{"id":419,"depth":828,"text":420,"children":1231},[1232,1233],{"id":423,"depth":834,"text":424},{"id":512,"depth":834,"text":513},{"id":590,"depth":828,"text":591,"children":1235},[1236,1237],{"id":594,"depth":834,"text":595},{"id":695,"depth":834,"text":696},{"id":755,"depth":828,"text":756,"children":1239},[1240,1241],{"id":759,"depth":834,"text":760},{"id":800,"depth":834,"text":801},{"id":1082,"depth":828,"text":1083},{"id":1117,"depth":828,"text":1118},"md",null,{},{"title":204,"description":816},"Ny0SIkZJokSqOWzdGAjMab7XmtK1udty8hnBsvksRvQ",[1250,1251],{"title":198,"path":199,"stem":200,"description":816,"children":-1},{"title":208,"path":209,"stem":210,"description":816,"children":-1},1788375146874]