# Estrutura do Projeto SIGEFP ## ✅ Requisitos Implementados Todos os requisitos solicitados foram implementados: ### 1. ✅ Projeto Maven Multi-módulo O projeto está organizado como um **Maven multi-módulo** com a seguinte estrutura: ``` sigefp-parent/ (POM pai) ├── sigefp-common/ # Utilitários compartilhados ├── sigefp-admin/ # Módulo de administração ├── sigefp-org/ # Módulo de organização ├── sigefp-rh/ # Módulo de recursos humanos ├── sigefp-budget/ # Módulo de orçamento ├── sigefp-treasury/ # Módulo de tesouraria └── sigefp-api/ # API REST principal ``` ### 2. ✅ Estrutura de Pacotes A estrutura de pacotes segue o padrão **br.gov.sigefp.{modulo}**: - `br.gov.sigefp.common` - Classes e utilitários compartilhados - `br.gov.sigefp.admin` - Módulo de administração (utilizadores, perfis, auditoria) - `br.gov.sigefp.org` - Módulo de organização (ministérios, unidades, posições) - `br.gov.sigefp.rh` - Módulo de recursos humanos (agentes, contratos, folha) - `br.gov.sigefp.budget` - Módulo de orçamento (exercícios, linhas, execução) - `br.gov.sigefp.treasury` - Módulo de tesouraria (pagamentos) - `br.gov.sigefp.api` - API REST principal e configurações ### 3. ✅ Spring Boot 3 + Spring Data JPA + Spring Security **Configurado em:** - `sigefp-api/pom.xml` - Dependências principais - `sigefp-api/src/main/java/br/gov/sigefp/api/SigefpApplication.java` - Classe main - `sigefp-api/src/main/java/br/gov/sigefp/api/config/SecurityConfig.java` - Configuração de segurança **Dependências principais:** - Spring Boot 3.2.0 - Spring Data JPA - Spring Security - PostgreSQL Driver - Lombok ### 4. ✅ application.yml com PostgreSQL **Arquivo:** `sigefp-api/src/main/resources/application.yml` Configuração completa com: - Conexão PostgreSQL (placeholders para URL, user, password) - Configuração JPA/Hibernate - Configuração de pool de conexões (HikariCP) - Configuração de logging - Configuração de timezone (America/Sao_Paulo) - Perfis adicionais: `application-dev.yml` e `application-prod.yml` ### 5. ✅ pom.xml Principal **Arquivo:** `pom.xml` (POM pai) Inclui: - Gerenciamento de versões (Spring Boot 3.2.0, Java 21) - Módulos do projeto - Dependency Management - Plugin Management (compiler, spring-boot-maven-plugin) --- ## 📦 Estrutura Detalhada de Pacotes ### Estrutura por Módulo Cada módulo segue a arquitetura em camadas limpas: ``` br.gov.sigefp.{modulo}/ ├── domain/ # Camada de domínio │ └── Entidades JPA, Value Objects, Domain Services ├── application/ # Camada de aplicação │ ├── dto/ # Data Transfer Objects │ └── service/ # Application Services (use cases) ├── infrastructure/ # Camada de infraestrutura │ ├── repository/ # Repositories JPA │ └── config/ # Configurações específicas └── api/ # Camada de apresentação (apenas módulos com API) └── Controllers REST ``` ### Explicação de Cada Pacote #### **br.gov.sigefp.common** - **domain**: Classes base (`BaseEntity`, `AuditableEntity`, `PeriodId`) - **application**: DTOs compartilhados (`PageRequest`) - **infrastructure/config**: Configurações JPA compartilhadas #### **br.gov.sigefp.admin** - **domain**: `User`, `Role`, `Permission`, `AuditLog` - **application/dto**: `UserDTO`, `RoleDTO` - **application/service**: `UserService` (CRUD completo) - **infrastructure/repository**: `UserRepository`, `RoleRepository`, `PermissionRepository` - **api**: `UserController` (REST endpoints) #### **br.gov.sigefp.org** - **domain**: `Ministry`, `OrganizationalUnit`, `Position` - Suporta hierarquia de unidades organizacionais #### **br.gov.sigefp.rh** - **domain**: `Agent`, `Contract`, `Payroll`, `PayrollItem` - Usa `PeriodId` para períodos de folha de pagamento #### **br.gov.sigefp.budget** - **domain**: `BudgetExercise`, `BudgetLine`, `BudgetExecution` - Usa `PeriodId` e `LocalDate` para gestão de períodos #### **br.gov.sigefp.treasury** - **domain**: `Payment` - Integração com módulo budget #### **br.gov.sigefp.api** - **config**: `SecurityConfig`, `WebConfig` - **exception**: `GlobalExceptionHandler`, `ErrorResponse` - **SigefpApplication**: Classe main do Spring Boot --- ## 🚀 Como Executar # Terei que executar esses comando para permitir execulao do projeto porque no momento o meu sistema usa predefinida java 11 e este projeto usa java 21 portanto antes de executar precisa definir isso por enquanto: $env:JAVA_HOME="C:\Program Files\Java\jdk-21" $env:Path="$env:JAVA_HOME\bin;$env:Path" ```bash # 1. Compilar o projeto mvn clean install # 2. Executar a aplicação cd sigefp-api mvn spring-boot:run # Ou com perfil específico mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` A aplicação estará disponível em: `http://localhost:8080` --- ## 📝 Notas Importantes 1. **Banco de Dados**: Certifique-se de criar o banco PostgreSQL antes de executar: ```sql CREATE DATABASE sigefp; CREATE USER sigefp_user WITH PASSWORD 'sigefp_password'; GRANT ALL PRIVILEGES ON DATABASE sigefp TO sigefp_user; ``` 2. **Configuração de Ambiente**: - Use `application-dev.yml` para desenvolvimento - Use `application-prod.yml` para produção (com variáveis de ambiente) 3. **Segurança**: A configuração de segurança está básica. Implemente JWT para produção. 4. **Estrutura de Pacotes**: A estrutura usa `br.gov.sigefp` (padrão brasileiro) ao invés de `com.gov.sis` sugerido, mas segue o mesmo princípio de organização modular.