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

