Grupo 04 - Turma 15 CC
| Integrante | Contato |
|---|---|
| Davi Duarte Rodrigues | |
| Francisco de Araujo Ferreira Filho | |
| Kethlen Martins da Silva | |
| Leunam Sousa de Jesus | |
| Luiz Felipe Paravatti Maciel Hinuy | |
| Marcus Felipe Santos Valente | |
| Rayssa Guedes França | |
| Yuri Lessa Boczar |
Este projeto, desenvolvido em parceria com a Suzano Papel e Celulose, visa otimizar o combate a incêndios florestais através de algoritmos de teoria dos grafos. A solução utiliza Min-Cost Flow para recomendar automaticamente a melhor alocação de recursos (caminhões, aeronaves e brigadas) para focos de incêndio, considerando variáveis como distância, disponibilidade, intensidade do fogo e segurança das equipes. O sistema reduz o tempo de resposta e maximiza a eficiência operacional.
/
├── README.md # Documentação principal
├── .gitignore # Regras de arquivos locais e gerados
├── assets/ # Logos, telas e materiais visuais
├── artefatos/ # Documentação acadêmica e técnica
│ ├── Entendimento_negocio.md
│ ├── entendimento_ux.md
│ ├── modelagem_matematica.md
│ ├── alg_complexidade.md
│ └── classes_dominio.md
└── apps/ # Código-fonte, automação e execução
├── pom.xml # Parent Maven
├── .env.example # Template de variáveis de ambiente
├── docker-compose.yml # Stack completa: frontend + backend + banco
├── docker-compose.backend.yml # Stack do backend + banco
├── core/ # Domínio compartilhado
├── graph/ # Algoritmos de otimização
├── risk/ # Integração climática e FWI
├── backend/ # API Spring Boot
│ └── src/main/java/com/suzano/backend/
├── frontend/ # Aplicação Next.js
│ ├── public/
│ └── src/
└── tests/
└── bruno/ # Coleção Bruno para smoke e testes de API
| Opção | Quando usar | O que sobe | Requisitos |
|---|---|---|---|
| Docker Compose [Recomendado] | Quer rodar tudo no menor número de passos | frontend + backend + banco | Docker |
| Backend local + banco em Docker | Quer desenvolver a API localmente | backend + banco | Java, Maven, Docker |
| Run da IDE | Quer usar o botão Run do IntelliJ ou VS Code | backend ou backend + frontend | Java, Maven, Node, banco acessível |
| Sem Docker | Já tem PostgreSQL + PostGIS instalado | backend e/ou frontend | Java, Maven, Node, PostgreSQL, PostGIS |
| Ferramenta | Versão mínima | Obrigatória para |
|---|---|---|
| Java JDK | 21 | backend |
| Maven | 3.9+ | backend |
| Node.js | 18+ | frontend |
| Docker + Docker Compose | Docker 24+, Compose v2 | fluxos com Docker |
| PostgreSQL + PostGIS | compatível com PostgreSQL 16 | fluxos sem banco em Docker |
Antes de qualquer fluxo:
cp apps/.env.example apps/.envO arquivo apps/.env controla:
- conexão com o banco
- segredo JWT
- CORS
- chave do OpenWeather
- URL da API usada pelo frontend
O template já vem pronto para o fluxo com Docker Compose. Se quiser usar Supabase ou outro PostgreSQL externo, ajuste DATABASE_URL, DATABASE_USERNAME e DATABASE_PASSWORD.
Após copiar o .env.example, você precisa preencher três valores no arquivo apps/.env.
O backend usa um segredo JWT para assinar tokens de autenticação. O valor precisa ser uma string codificada em base64 com pelo menos 256 bits (32 bytes).
Gere um valor seguro no terminal:
openssl rand -base64 32Cole o resultado no apps/.env:
JWT_SECRET=resultado-do-comando-aquiSe não tiver
openssl, gere uma senha de 32+ caracteres em lastpass.com/pt/features/password-generator e converta para base64 em base64encode.org.
Usada no frontend para exibir mapas, marcadores e busca de endereços.
- Acesse o Google Cloud Console.
- Crie um projeto (ou use um existente).
- No menu lateral, vá em APIs e Serviços > Biblioteca.
- Ative as seguintes APIs:
- Maps JavaScript API
- Places API (New)
- Vá em APIs e Serviços > Credenciais.
- Clique em Criar credenciais > Chave de API.
- Copie a chave gerada.
- (Recomendado) Clique em Restringir chave e limite para as APIs acima e para o domínio
localhost.
Cole a chave no arquivo apps/.env:
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=AIzaSy...sua-chave-aquiO Google oferece US$ 200/mês de crédito gratuito, suficiente para desenvolvimento local.
Usada no backend para obter dados meteorológicos (temperatura, umidade, vento) e calcular o Fire Weather Index (FWI).
- Crie uma conta em openweathermap.org.
- Após o login, vá em My API Keys (ou acesse home.openweathermap.org/api_keys).
- Copie a chave padrão ou crie uma nova.
- A API usada é a One Call API 3.0 — é necessário assinar o plano (o plano gratuito permite 1.000 chamadas/dia). Para ativar:
- Vá em Subscriptions no menu.
- Assine o plano One Call API 3.0 (gratuito até 1.000 chamadas/dia).
Cole a chave no arquivo apps/.env:
OPENWEATHER_API_KEY=abc123...sua-chave-aquiA chave pode levar alguns minutos para ser ativada após a criação.
Esse é o caminho mais simples para rodar o projeto em qualquer máquina com Docker.
git clone https://git.inteli.edu.br/graduacao/2026-1a/t15/g04.git
cd g04
cp apps/.env.example apps/.env
cd apps
docker compose up --build -dDepois acesse:
- frontend:
http://localhost:3000 - backend:
http://localhost:8080
Comandos úteis:
cd apps
docker compose ps
docker compose logs -f
docker compose downObservações:
- o compose sobe
db,backendefrontend - o banco local usa PostgreSQL com PostGIS
- o backend só libera o frontend depois do healthcheck
- o serviço
dbé independente e pode ficar rodando mesmo sem o backend
Use esse fluxo quando quiser rodar a API localmente, mas sem instalar PostgreSQL/PostGIS na máquina.
git clone https://git.inteli.edu.br/graduacao/2026-1a/t15/g04.git
cd g04
cp apps/.env.example apps/.env
docker compose -f apps/docker-compose.yml up -d db
mvn clean compile -f apps/pom.xml
mvn spring-boot:run -f apps/backend/pom.xml -Dmaven.test.skip=trueBackend disponível em http://localhost:8080.
Observação:
- o comando
docker compose -f apps/docker-compose.yml up -d dbsobe apenas o banco local; ele pode continuar rodando mesmo se o backend não estiver iniciado
Para parar o banco:
docker compose -f apps/docker-compose.yml stop dbAbra FullStackLauncher.java e clique em Run.
Esse launcher:
- inicia o frontend com
npm run devemapps/frontend - inicia o backend Spring Boot
- não sobe outro frontend se a porta
3000já estiver ocupada
Antes disso, instale as dependências do frontend:
cd apps/frontend
npm installE garanta que exista um banco acessível:
- PostgreSQL + PostGIS local
- ou banco em Docker com
docker compose -f apps/docker-compose.yml up -d db - ou Supabase/instância externa configurada no
apps/.env
Abra Application.java e clique em Run.
Use esse fluxo se você já tem PostgreSQL com PostGIS instalado localmente.
Exemplo de apps/.env:
POSTGRES_DB=suzano_fire
DATABASE_URL=jdbc:postgresql://localhost:5432/suzano_fire
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=postgresPassos:
- Crie o banco
suzano_fire. - Habilite a extensão
postgisnesse banco. - Copie o template:
cp apps/.env.example apps/.env. - Ajuste
DATABASE_URL,DATABASE_USERNAMEeDATABASE_PASSWORDse necessário. - Rode o backend:
mvn clean compile -f apps/pom.xml
mvn spring-boot:run -f apps/backend/pom.xml -Dmaven.test.skip=trueSe quiser rodar o frontend junto:
cd apps/frontend
npm install
npm run devSem PostGIS local, o backend não sobe, porque as migrations do Flyway dependem de PostgreSQL/PostGIS.
Se quiser rodar apenas o frontend:
cd apps/frontend
npm install
npm run devFrontend disponível em http://localhost:3000.
Os dados do banco local não ficam na imagem. Eles ficam no volume Docker suzano_db_data, declarado em docker-compose.yml.
Comportamento:
- apagar a imagem não apaga os dados
- apagar o container não apaga os dados
docker compose downnão apaga os dadosdocker compose down -vapaga os dados- o banco pode ficar ligado sozinho, sem backend e sem frontend
Comandos úteis:
docker volume ls
docker exec -it suzano-db psql -U postgres -d suzano_fire
docker compose -f apps/docker-compose.yml stop db
docker compose -f apps/docker-compose.yml down
docker compose -f apps/docker-compose.yml down -v| Extensão | ID | Descrição |
|---|---|---|
| Extension Pack for Java | vscjava.vscode-java-pack |
suporte Java |
| Maven for Java | vscjava.vscode-maven |
integração Maven |
| GitLens | eamodio.gitlens |
histórico e diff |
Instalação:
code --install-extension vscjava.vscode-java-pack
code --install-extension vscjava.vscode-maven
code --install-extension eamodio.gitlens# Todos os módulos
mvn test -f apps/pom.xml
# Módulo específico
mvn test -f apps/pom.xml -pl core
mvn test -f apps/pom.xml -pl graph
mvn test -f apps/pom.xml -pl backend
# Relatório de cobertura (JaCoCo)
mvn clean test -f apps/pom.xml -pl core
# O relatório fica em: apps/core/target/site/jacoco/index.htmlOs testes de API usam o Bruno. Localização: apps/tests/bruno/
# Instalar Bruno CLI
npm install -g @usebruno/cli
# Executar testes
cd apps/tests/bruno
bru run -rmvn test -f apps/pom.xml -pl graph -Dtest=FullBenchmarkTest| Função | Nome | Link |
|---|---|---|
| Orientador | Tomaz Mikio Sasaki | |
| Coordenadora | Michele Bazana de Souza | |
| Instrutora | Bruna Mayer Costa | |
| Instrutor | Fillipe Manoel Xavier Resina | |
| Instrutora | Laiza Ribeiro Silva | |
| Instrutora | Maria Cristina Nogueira Gramani | |
| Instrutora | Natalia Varela da Rocha Kloeckner |
- SPRINT4: 16/03~27/03 2026
- Landing page e tela de configuração de conta
- Backend Spring Boot com API REST completa
- Análise de complexidade e performance dos algoritmos
- Integração frontend-backend para ocorrências e recursos
- Testes E2E de API com Bruno (136 cenários)
- SPRINT3: 02/03~13/03 2026
- Implementação do algoritmo Successive Shortest Path (SSP)
- Implementação do algoritmo Network Simplex
- Benchmarks de algoritmos (640 instâncias validadas contra OR-Tools)
- Evolução do artigo científico com seções de metodologia
- SPRINT2: 19/02~27/02 2026
- Estruturação do repositório e módulos Java (Domain Driven Design)
- Refinamento da modelagem matemática do problema de alocação
- Versão inicial do artigo científico com revisão bibliográfica
- Protótipo de baixa e alta no figma (Wireframe e Mockup)
- SPRINT1: 02/02~13/02 2026
FireOFF by Inteli, Davi Duarte, Francisco Filho, Kethlen Martins, Leunam Sousa de Jesus, Luiz Hinuy, Marcus Valente, Rayssa Guedes, Yuri Boczar is licensed under Attribution 4.0 International .