O backend em backend/ expone APIs REST para:
- perfil epidemiologico,
- ranking municipal/estadual,
- previsao de risco,
- pressao operacional,
- encaminhamento hospitalar,
- triagem,
- busca inteligente com IA.
controller -> application(use cases) -> domain(policies/calculators)
| ^
v |
application.port -------- infrastructure.persistence
|
v
repository/model (JPA)
Tambem existe a camada service (compatibilidade/orquestracao) usada por parte dos controllers e adaptada para conviver com os novos use cases.
VigisusApplication.java: ponto de entrada Spring Boot.
BrasilController.javaBuscaController.javaCacheController.javaEncaminhamentoController.javaHospitalController.javaPerfilController.javaPressaoOperacionalController.javaPrevisaoRiscoController.javaRankingController.javaTriagemController.java
Responsabilidade: adaptacao HTTP (request/response), validacao de borda e delegacao para servicos/use cases.
application/busca/BuscaCompletaUseCase.java
application/encaminhamento/ConsultarEncaminhamentoUseCase.javaapplication/encaminhamento/ConsultarHospitaisCapitaisUseCase.javaapplication/encaminhamento/ConsultarHospitaisUseCase.javaapplication/encaminhamento/SelecionadorHospitaisProximos.java
application/epidemiologia/ConsultarBrasilEpidemiologicoUseCase.javaapplication/epidemiologia/ConsultarHistoricoEstadoUseCase.javaapplication/epidemiologia/ConsultarPerfilEpidemiologicoUseCase.javaapplication/epidemiologia/ConsultarRankingMunicipalUseCase.java
application/operacional/AvaliarPressaoOperacionalUseCase.javaapplication/operacional/ConstruirContextoEpidemiologicoOperacional.javaapplication/operacional/ConsultarProtocoloSurtoUseCase.javaapplication/operacional/MescladorHospitaisReferencia.javaapplication/operacional/MontadorContextoOperacional.javaapplication/operacional/MontadorPrevisaoOperacional.java
application/risco/ConsultarPrevisaoRiscoUseCase.javaapplication/risco/ConsultarRiscoAgregadoUseCase.java
application/triagem/AvaliarTriagemUseCase.javaapplication/triagem/ConsultarCatalogoTriagemUseCase.java
application/port/CasoDenguePort.javaapplication/port/ClimaPort.javaapplication/port/MunicipioPort.javaapplication/port/RedeAssistencialPort.java
domain/encaminhamento/ClassificacaoPressaoSusPolicy.javadomain/encaminhamento/NivelPressaoSus.java— Value Object imutaveldomain/encaminhamento/TipoLeito.java
domain/epidemiologia/CalculadoraTendenciaEpidemiologica.javadomain/epidemiologia/ClassificacaoEpidemiologicaPolicy.javadomain/epidemiologia/ComparativoHistoricoEpidemiologicoPolicy.javadomain/epidemiologia/IncidenciaPor100kHab.java— Value Object imutaveldomain/epidemiologia/JanelaEpidemiologicaQuatroSemanas.javadomain/epidemiologia/SemanaEpidemiologica.java
domain/geografia/CalculadoraDistanciaGeografica.javadomain/geografia/CatalogoGeograficoBrasil.javadomain/geografia/CoIbge.java
domain/operacional/CalculadoraNivelAtencaoOperacional.javadomain/operacional/CalculadoraTendenciaOperacional.javadomain/operacional/ChecklistOperacionalPolicy.java
domain/risco/CalculadoraRiscoClimatico.javadomain/risco/ClassificacaoRiscoAgregadoPolicy.javadomain/risco/ClassificacaoRiscoMunicipioPolicy.javadomain/risco/ClassificacaoRiscoPolicy.javadomain/risco/MetricasRiscoClimatico.javadomain/risco/RiscoAltoDetectadoEvent.java— Domain Eventdomain/risco/ScoreRisco.java— Value Object imutavel
domain/triagem/CalculadoraScoreTriagem.javadomain/triagem/PriorizacaoTriagemPolicy.java
CasoDengueJpaAdapter.javaMunicipioJpaAdapter.javaRedeAssistencialJpaAdapter.java
CasoDengueRepository.javaEstabelecimentoRepository.javaLeitoRepository.javaMunicipioRepository.javaServicoEspecializadoRepository.java
CasoDengue.javaEstabelecimento.javaLeito.javaMunicipio.javaServicoEspecializado.java
Principais contratos de API e integracoes:
- Busca:
BuscaRequest,BuscaResponse,BuscaCompletaResponse. - Epidemiologia:
PerfilEpidemiologicoResponse,RankingResponse,RankingMunicipioDTO,BrasilEpidemiologicoResponse,SemanaDTO. - Risco:
PrevisaoRiscoResponse,PrevisaoDiariaDTO,RiscoDiarioDTO. - Operacional:
PressaoOperacionalRequest,PressaoOperacionalResponse,EncaminhamentoResponse. - Triagem:
TriagemRequest,TriagemResponse. - Integracoes externas:
dto/openmeteo/*,dto/openai/*.
Camada de orquestracao/compatibilidade:
BrasilEpidemiologicoServiceClimaServiceEncaminhamentoServiceEstadoHistoricoServiceIaService,IaServiceImpl,IaServiceGeminiImpl,IaServiceFallbackMunicipioServicePerfilEpidemiologicoServicePressaoOperacionalServicePrevisaoRiscoServiceRankingServiceRiscoAgregadoServiceTextoAnaliticoHelperTriagemService
AppConfig.javaCacheConfig.javaCorsConfig.javaDataLoader.javaGeminiConfig.javaIaConfig.javaSecurityConfig.java
VigisusException.java— base abstrata de todas as excecoes do dominioRecursoNaoEncontradoException.java— HTTP 404 (recurso nao encontrado)MunicipioNotFoundException.java— HTTP 404 (especializacao para municipio)DadosInsuficientesException.java— HTTP 422 (dados insuficientes para calculo)ExternalApiException.java— HTTP 502 (falha em API externa: Gemini, Open-Meteo)GlobalExceptionHandler.java— handler centralizado com ErrorResponse record
- Regras complexas foram isoladas em classes de dominio para facilitar teste unitario.
- Casos de uso orquestram dependencias por interfaces (
port), reduzindo acoplamento. - Adaptadores concretos JPA conectam as portas ao banco relacional.
- Controllers ficam finos, priorizando responsabilidade unica.
- IA foi projetada com fallback/estrategia para manter disponibilidade.
Cobertura de testes em:
- dominio (
src/test/.../domain/*), - use cases (
src/test/.../application/*), - controllers (
src/test/.../controller/*), - services/config/exception.
Fonte: backend/target/site/jacoco/jacoco.csv
- line coverage: 91.87%
- branch coverage: 80% (apos exclusao de codigo gerado pelo Lombok via
lombok.config)
Nota: o branch coverage anterior de 23.16% incluia falsamente branches dos metodos
gerados pelo Lombok (equals/hashCode/toString/builder) em 60+ classes de DTOs e models.
Com lombok.addLombokGeneratedAnnotation = true, o JaCoCo exclui esses metodos
automaticamente, revelando a cobertura real das regras de negocio.
- separacao clara de camadas;
- regras de negocio testadas em unidade;
- arquitetura preparada para troca de adaptadores (DB/API externa);
- base pronta para evolucao incremental com baixo risco de regressao.