Documentação Técnica
O BP.PertCalc é uma aplicação de estimativa de projetos desenvolvida com arquitetura MVC simplificada, focada em performance e precisão matemática. Diferente de soluções "No-Code", este sistema foi codificado manualmente para garantir controle total sobre a lógica de negócios e segurança dos dados.
Esta documentação destina-se a desenvolvedores e avaliadores técnicos interessados na arquitetura interna do software.
Tech Stack
Backend Core
- PHP 8.2 (Vanilla)
- MySQL (InnoDB)
- PDO (Database Abstraction)
- FPDF / Dompdf (Reporting)
Frontend & UX
- HTML5 Semântico
- Tailwind CSS (Utility-first)
- Chart.js (Data Visualization)
- Lucide Icons
Modelagem de Dados
Utilizamos um banco relacional normalizado. Abaixo, o DDL da tabela principal de projetos, demonstrando o uso de chaves estrangeiras e tipos de dados otimizados.
CREATE TABLE projects (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
project_name VARCHAR(100),
methodology VARCHAR(50) DEFAULT 'Scrum',
hourly_rate DECIMAL(10, 2), -- Precisão financeira
estimated_hours DECIMAL(10, 2),
total_cost DECIMAL(10, 2),
complexity_level ENUM('Baixa', 'Média', 'Alta'),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Integridade Referencial (Cascade Delete)
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
O Algoritmo PERT
A precisão do sistema baseia-se na Média Ponderada (Beta Distribution). A lógica é aplicada tanto no Frontend (para feedback em tempo real) quanto validada no Backend.
// Trecho extraído de app/logic.php
function calculatePert($optimistic, $likely, $pessimistic) {
// Aplica peso 4 ao cenário mais provável
$weighted_avg = ($optimistic + (4 * $likely) + $pessimistic) / 6;
// Retorna com precisão de 1 casa decimal
return round($weighted_avg, 1);
}
// Exemplo de uso em loop de tarefas
$total_hours = 0;
foreach ($tasks as $task) {
$total_hours += calculatePert($task['opt'], $task['ml'], $task['pess']);
}
Segurança
A aplicação implementa camadas de defesa em profundidade, não confiando em inputs do usuário.
-
Prepared Statements (PDO)
Todas as queries utilizam binding de parâmetros para prevenir injeção de SQL (SQL Injection).
-
Password Hashing
Senhas nunca são salvas em texto puro. Utilizamos
password_hash()com algoritmo Bcrypt.