Skip to content

Latest commit

 

History

715 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Um projeto do Instituto de Tecnologia e Liderança
Inteli Logo

Parceiro do Módulo:
Suzano Logo


FireOFF - Sistema de Alocação de Recursos para Combate a Incêndios Florestais

Grupo 04 - Turma 15 CC

Integrantes

Integrante Contato
Davi Duarte Rodrigues LinkedIn
Francisco de Araujo Ferreira Filho LinkedIn
Kethlen Martins da Silva LinkedIn
Leunam Sousa de Jesus LinkedIn
Luiz Felipe Paravatti Maciel Hinuy LinkedIn
Marcus Felipe Santos Valente LinkedIn
Rayssa Guedes França LinkedIn
Yuri Lessa Boczar LinkedIn

Descrição do Projeto

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.


Estrutura do Repositório

/
├── 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

Como Rodar

Resumo das opções

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

Pré-requisitos

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

Passo zero: copiar o arquivo de ambiente

Antes de qualquer fluxo:

cp apps/.env.example apps/.env

O 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.

Configurar variáveis de ambiente

Após copiar o .env.example, você precisa preencher três valores no arquivo apps/.env.

JWT Secret

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 32

Cole o resultado no apps/.env:

JWT_SECRET=resultado-do-comando-aqui

Se não tiver openssl, gere uma senha de 32+ caracteres em lastpass.com/pt/features/password-generator e converta para base64 em base64encode.org.

Google Maps API Key

Usada no frontend para exibir mapas, marcadores e busca de endereços.

  1. Acesse o Google Cloud Console.
  2. Crie um projeto (ou use um existente).
  3. No menu lateral, vá em APIs e Serviços > Biblioteca.
  4. Ative as seguintes APIs:
    • Maps JavaScript API
    • Places API (New)
  5. Vá em APIs e Serviços > Credenciais.
  6. Clique em Criar credenciais > Chave de API.
  7. Copie a chave gerada.
  8. (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-aqui

O Google oferece US$ 200/mês de crédito gratuito, suficiente para desenvolvimento local.

OpenWeather API Key

Usada no backend para obter dados meteorológicos (temperatura, umidade, vento) e calcular o Fire Weather Index (FWI).

  1. Crie uma conta em openweathermap.org.
  2. Após o login, vá em My API Keys (ou acesse home.openweathermap.org/api_keys).
  3. Copie a chave padrão ou crie uma nova.
  4. 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-aqui

A chave pode levar alguns minutos para ser ativada após a criação.

1. Docker Compose [Recomendado]

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 -d

Depois acesse:

  • frontend: http://localhost:3000
  • backend: http://localhost:8080

Comandos úteis:

cd apps
docker compose ps
docker compose logs -f
docker compose down

Observações:

  • o compose sobe db, backend e frontend
  • 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

2. Backend local + banco em Docker

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=true

Backend disponível em http://localhost:8080.

Observação:

  • o comando docker compose -f apps/docker-compose.yml up -d db sobe 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 db

3. Run da IDE

Backend + frontend com um clique

Abra FullStackLauncher.java e clique em Run.

Esse launcher:

  • inicia o frontend com npm run dev em apps/frontend
  • inicia o backend Spring Boot
  • não sobe outro frontend se a porta 3000 já estiver ocupada

Antes disso, instale as dependências do frontend:

cd apps/frontend
npm install

E 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

Só backend

Abra Application.java e clique em Run.

4. Sem Docker

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=postgres

Passos:

  1. Crie o banco suzano_fire.
  2. Habilite a extensão postgis nesse banco.
  3. Copie o template: cp apps/.env.example apps/.env.
  4. Ajuste DATABASE_URL, DATABASE_USERNAME e DATABASE_PASSWORD se necessário.
  5. Rode o backend:
mvn clean compile -f apps/pom.xml
mvn spring-boot:run -f apps/backend/pom.xml -Dmaven.test.skip=true

Se quiser rodar o frontend junto:

cd apps/frontend
npm install
npm run dev

Sem PostGIS local, o backend não sobe, porque as migrations do Flyway dependem de PostgreSQL/PostGIS.

5. Frontend isolado

Se quiser rodar apenas o frontend:

cd apps/frontend
npm install
npm run dev

Frontend disponível em http://localhost:3000.

6. Banco local do Docker

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 down não apaga os dados
  • docker compose down -v apaga 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ões recomendadas no VS Code

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

Execução de Testes

Testes Java (JUnit)

# 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.html

Testes E2E de API (Bruno)

Os 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 -r

Benchmarks de algoritmos

mvn test -f apps/pom.xml -pl graph -Dtest=FullBenchmarkTest

Corpo Docente

Função Nome Link
Orientador Tomaz Mikio Sasaki LinkedIn
Coordenadora Michele Bazana de Souza LinkedIn
Instrutora Bruna Mayer Costa LinkedIn
Instrutor Fillipe Manoel Xavier Resina LinkedIn
Instrutora Laiza Ribeiro Silva LinkedIn
Instrutora Maria Cristina Nogueira Gramani LinkedIn
Instrutora Natalia Varela da Rocha Kloeckner LinkedIn

Histórico de Lançamentos

  • 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

Licença

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 .

About

Development of FireOFF, a wildfire response decision-support system that optimizes resource allocation through minimum-cost flow. Built with Java, Spring Boot, Next.js, PostgreSQL, and Docker, it uses graph optimization algorithms validated with OR-Tools, achieving 100% equivalence with optimal solutions across 640 scenarios.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages