[Nome da Instituição de Ensino]
Curso: [Nome do Curso]
[Nome da Disciplina / Projeto]
Documentação Técnica: Sistema de Gestão de Estacionamentos (ParkFlow)
Autores: [Nome dos Alunos]
Professor Orientador: [Nome do Professor]
Trabalho apresentado à [Nome da Instituição] como requisito para a disciplina de [Nome da Disciplina].
Data: [Mês/Ano]
Resumo
O projeto 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.
Sumário
- Introdução
- Requisitos de Gestão
- Engenharia de Software
- Banco de Dados
- Lógica de Negócio e Algoritmo de Cobrança
1. Introdução
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 ParkFlow 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).
2. Requisitos do Sistema
2.1 Requisitos Funcionais (RF)
| ID | Descrição | Prioridade |
|---|---|---|
| RF01 | O sistema deve permitir o registro de entrada de veículos, capturando a placa, modelo e cor. | Alta |
| RF02 | O sistema deve calcular automaticamente o valor devido no momento da saída com base na tabela de preços ativa. | Alta |
| RF03 | O sistema deve permitir o cadastro, edição e renovação de clientes mensalistas. | Alta |
| RF04 | O sistema deve gerar relatórios financeiros (faturamento rotativo vs. mensalista) diários e mensais. | Média |
| RF05 | O administrador deve poder configurar os valores de fração inicial, hora adicional e tolerância. | Média |
2.2 Requisitos Não Funcionais (RNF)
| ID | Descrição | Categoria |
|---|---|---|
| RNF01 | O sistema deve ser desenvolvido em arquitetura Web utilizando Spring Boot e Thymeleaf. | Arquitetura |
| RNF02 | O banco de dados relacional (PostgreSQL) deve estar na 3ª Forma Normal (3FN). | Banco de Dados |
| RNF03 | Segurança e Auditoria: Toda ação de cancelamento de ticket deve registrar um log de acesso imutável. | Segurança |
| RNF04 | 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. | Legal |
3. Engenharia de Software
3.1 Diagrama de Casos de Uso (UML)
Este diagrama ilustra as interações dos atores (Operador e Administrador) com as funcionalidades centrais do sistema.
flowchart LR
Op((Operador de Pátio))
Admin((Administrador))
subgraph Sistema ["Sistema ParkFlow"]
direction TB
UC1([Registrar Entrada Ticket])
UC2([Registrar Saída/Pagamento])
UC3([Gerenciar Mensalistas])
UC4([Consultar Vagas Disponíveis])
UC5([Gerar Relatórios Financeiros])
UC6([Configurar Tarifário])
end
Op --> UC1
Op --> UC2
Op --> UC4
Admin --> UC3
Admin --> UC5
Admin --> UC6
Admin -.->|herda de| Op
Versão em SVG (Diagrama de Casos de Uso):
Descrição Textual dos Casos de Uso:
- Atores:
- Operador de Pátio: Focado nas operações diárias da catraca (entradas, saídas e controle de vagas).
- Administrador: Possui as mesmas permissões do Operador (por herança
Admin --|> Op), somadas às funções gerenciais.
- 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.
Detalhamento de Caso de Uso: Registrar Saída/Pagamento (UC2)
- Ator Principal: Operador de Pátio.
- Fluxo Principal:
- O Operador insere a placa do veículo no sistema ou faz a leitura do ticket.
- O sistema busca o ticket em aberto associado à placa.
- O sistema calcula o tempo de permanência e o valor total com base na Tabela de Preços vigente.
- O sistema exibe o valor na tela.
- O Operador confirma o recebimento do pagamento e encerra o ticket.
- O sistema atualiza o status do ticket para “Pago” e registra a data/hora exata da saída.
- Fluxo Alternativo (Isenção/Tolerâ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.
3.2 Diagrama de Classes
A estrutura de classes foca na separação de responsabilidades e nos princípios de Orientação a Objetos como herança e encapsulamento.
classDiagram
class Veiculo {
+String placa
+String modelo
+String cor
+registrar()
}
class Ticket {
+DateTime entrada
+DateTime saida
+Double valorTotal
+String status
+calcularValor()
+encerrar()
}
class Cliente {
+String nome
+String documento
+String contato
}
class Mensalista {
+DateTime dataVencimento
+Double valorMensalidade
+renovar()
}
Veiculo "1" -- "0..*" Ticket : possui
Cliente <|-- Mensalista : herança
Mensalista "1" -- "1" Veiculo : vincula
Ticket "0..*" -- "1" Operador : processado por
Descrição Textual do Diagrama de Classes:
- Relacionamentos: Identifica-se que um
Veiculopode possuir múltiplosTickets (histórico de passagens), mas um ticket pertence estritamente a um veículo (relação 1 para 0..*). - Herança: A classe
Mensalistaherda atributos deCliente, adicionando comportamentos específicos comorenovar()e atributos contratuais. - Processamento: Cada
Ticketguarda a referência do operador que o emitiu/processou, essencial para a auditoria de caixa.
4. Banco de Dados
4.1 Modelo Entidade-Relacionamento (MER - Mermaid)
O modelo relacional foi desenhado na Terceira Forma Normal (3FN) para garantir a integridade dos dados e o histórico de transações.
erDiagram
USUARIO ||--o{ LOG_ACESSO : "gera"
VEICULO ||--o{ TICKET : "possui"
CLIENTE ||--o{ VEICULO : "cadastra"
TABELA_PRECO ||--o{ TICKET : "define valor"
USUARIO {
int id_usuario PK
string nome
string email
string senha_hash
enum perfil
}
VEICULO {
int id_veiculo PK
string placa
string modelo
string cor
int id_cliente FK
}
TICKET {
int id_ticket PK
int id_veiculo FK
datetime dt_entrada
datetime dt_saida
decimal valor_total
string status
int id_tabela_preco FK
}
CLIENTE {
int id_cliente PK
string nome
string cpf_cnpj
boolean eh_mensalista
}
LOG_ACESSO {
int id_log PK
int id_usuario FK
string acao
datetime quando
string ip
}
TABELA_PRECO {
int id_tabela PK
decimal valor_fracao
decimal valor_hora
int minutos_tolerancia
boolean ativa
}
Descrição Textual do MER:
- Tabela de Preços Ativa: Uma entidade
TABELA_PRECOfoi 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. - Log de Acesso: A tabela
LOG_ACESSOregistra cada ação relevante vinculada aoUSUARIOque a executou, com data, hora e IP, atendendo à necessidade de rastreabilidade e segurança.
4.2 Scripts SQL (DDL e DML)
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.
Estrutura de Criação (DDL - PostgreSQL/H2):
CREATE TABLE TABELA_PRECO (
id_tabela SERIAL PRIMARY KEY,
valor_fracao DECIMAL(10,2) NOT NULL,
valor_hora DECIMAL(10,2) NOT NULL,
minutos_tolerancia INT NOT NULL,
ativa BOOLEAN DEFAULT TRUE
);
CREATE TABLE CLIENTE (
id_cliente SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
cpf_cnpj VARCHAR(20) UNIQUE NOT NULL,
eh_mensalista BOOLEAN DEFAULT FALSE
);
CREATE TABLE VEICULO (
id_veiculo SERIAL PRIMARY KEY,
placa VARCHAR(10) UNIQUE NOT NULL,
modelo VARCHAR(50),
cor VARCHAR(30),
id_cliente INT REFERENCES CLIENTE(id_cliente)
);
CREATE TABLE TICKET (
id_ticket SERIAL PRIMARY KEY,
id_veiculo INT NOT NULL REFERENCES VEICULO(id_veiculo),
id_tabela_preco INT NOT NULL REFERENCES TABELA_PRECO(id_tabela),
dt_entrada TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
dt_saida TIMESTAMP,
valor_total DECIMAL(10,2),
status VARCHAR(20) DEFAULT 'ABERTO'
);
Exemplo de Consulta (JOIN) - Relatório de Tickets com Dados do Veículo:
SELECT
t.id_ticket,
v.placa,
c.nome AS cliente,
t.dt_entrada,
t.dt_saida,
t.valor_total
FROM TICKET t
INNER JOIN VEICULO v ON t.id_veiculo = v.id_veiculo
LEFT JOIN CLIENTE c ON v.id_cliente = c.id_cliente
WHERE t.status = 'FECHADO'
ORDER BY t.dt_saida DESC;
5. Lógica de Negócio e Algoritmo de Cobrança
Conforme os requisitos de desempenho (RNF), a lógica de cálculo foi concebida para ser eficiente e precisa.
- Fração Inicial: Cobrança mínima correspondente a um período pré-definido (ex: 15 ou 30 minutos).
- Hora Adicional: Valor fixo somado após a primeira hora de permanência.
- 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.
- 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.
6. Planejamento e Cronograma
O desenvolvimento foi organizado em um ciclo ágil adaptado de 6 semanas para a entrega do Projeto:
| Semana | Fase do Projeto | Entregáveis e Atividades (Backlog) |
|---|---|---|
| Semana 1 | Levantamento e Requisitos | Reuniões, Definição de RF/RNF, Casos de Uso. |
| Semana 2 | Modelagem de Dados | Diagramas de Classes, MER, Scripts DDL iniciais. |
| Semana 3 | Setup e Prototipagem | Geração do projeto Spring Boot, telas Thymeleaf base. |
| Semana 4 | Codificação Backend | Implementação de Controllers, Repositórios e Serviços (Cobrança). |
| Semana 5 | Integração e Relatórios | Conexão Front-Back, Consultas JOIN, Trilha de Auditoria. |
| Semana 6 | Testes e Entrega | Testes de fluxo, validação de LGPD, defesa do projeto. |