# SIGEFP - Sistema Integrado de Gestão do Estado

Sistema modular para gestão governamental desenvolvido em Java 21+ com Spring Boot 3.

## Estrutura do Projeto

O projeto segue uma arquitetura em camadas limpas (Clean Architecture) com separação clara de responsabilidades:

```
sigefp-parent/
├── sigefp-common/          # Utilitários e classes compartilhadas
├── sigefp-admin/           # Módulo de administração (utilizadores, perfis, auditoria)
├── sigefp-org/             # Módulo de organização (ministérios, unidades, posições)
├── sigefp-rh/              # Módulo de recursos humanos (agentes, contratos, folha)
├── sigefp-budget/          # Módulo de orçamento (exercícios, linhas, execução)
├── sigefp-treasury/        # Módulo de tesouraria (pagamentos)
└── sigefp-api/             # API REST principal
```

## Estrutura de Camadas

Cada módulo segue a seguinte estrutura:

```
src/main/java/br/gov/sigefp/{modulo}/
├── domain/                 # Entidades JPA, Value Objects, Domain Services
├── application/            # DTOs, Application Services (use cases)
├── infrastructure/         # Repositories JPA, Configurações
└── api/                    # Controllers REST
```

## Tecnologias

- **Java 21+**
- **Spring Boot 3.2.0**
- **Spring Data JPA**
- **Spring Security**
- **PostgreSQL**
- **Maven**
- **Lombok**

## Boas Práticas Implementadas

### 1. Gestão de Datas
- ✅ Uso de `LocalDate` e `LocalDateTime` ao invés de strings
- ✅ Value Object `PeriodId` para períodos (ano-mês)
- ✅ Evita concatenação de strings para datas

### 2. Arquitetura
- ✅ Separação clara de camadas (Domain, Application, Infrastructure, API)
- ✅ DTOs para transferência de dados
- ✅ Repositories JPA na camada de infraestrutura
- ✅ Services na camada de aplicação

### 3. Entidades
- ✅ UUID como identificador (evita problemas em ambientes distribuídos)
- ✅ Auditoria automática (createdAt, updatedAt, createdBy, updatedBy)
- ✅ Versionamento otimista (@Version)
- ✅ Índices apropriados nas tabelas

## Configuração

### Pré-requisitos
- Java 21+
- Maven 3.8+
- PostgreSQL 12+

### Banco de Dados

Criar o banco de dados:

```sql
CREATE DATABASE sigefp;
CREATE USER sigefp_user WITH PASSWORD 'sigefp_password';
GRANT ALL PRIVILEGES ON DATABASE sigefp TO sigefp_user;
```

### Executar a Aplicação

```bash
# Compilar o projeto
mvn clean install

# Executar a aplicação
cd sigefp-api
mvn spring-boot:run

# Ou executar com perfil específico
mvn spring-boot:run -Dspring-boot.run.profiles=dev
```

A aplicação estará disponível em: `http://localhost:8080`

## Endpoints

### Admin
- `POST /api/admin/users` - Criar utilizador
- `GET /api/admin/users/{id}` - Buscar utilizador
- `GET /api/admin/users` - Listar utilizadores (paginação)
- `PUT /api/admin/users/{id}` - Atualizar utilizador
- `DELETE /api/admin/users/{id}` - Deletar utilizador

## Documentação

- **[STATUS_PROJETO.md](STATUS_PROJETO.md)** - Documentação completa do status do projeto, o que foi implementado e o que falta fazer
- **[ESTRUTURA_PROJETO.md](ESTRUTURA_PROJETO.md)** - Detalhamento da estrutura de pacotes e organização

## Endpoints Disponíveis

### Admin (`/api/admin`)
- **Users**: `GET`, `POST`, `PUT`, `GET /{id}`, `POST /{id}/roles`
- **Roles**: `GET`, `POST`, `PUT`, `GET /{id}`
- **Audit Logs**: `GET` (com filtros: userId, module, período)

### Org (`/api/org`)
- **Ministries**: `GET`, `POST`, `PUT`, `GET /{id}`
- **Org Units**: `GET`, `POST`, `PUT`, `GET /{id}`, `GET /tree/{ministryId}`
- **Positions**: `GET`, `POST`, `PUT`, `GET /{id}`

### RH (`/api/rh`)
- **Agents**: `GET`, `POST`, `PUT`, `GET /{id}`
- **Payroll Periods**: `GET`, `POST`
- **Payroll Runs**: `GET /{id}`, `POST`

### Budget (`/api/budget`)
- **Fiscal Years**: `GET`, `POST`, `GET /{id}`, `GET /current`, `POST /{id}/open`, `POST /{id}/close`
- **Budget Lines**: `GET`, `POST`, `PUT`, `GET /{id}`
- **Budget Execution**: `GET`, `POST`

### Treasury (`/api/treasury`)
- **Payment Batches**: `GET`, `POST`, `GET /{id}`, `POST /{id}/status`
- **Payment Orders**: `GET`, `POST`, `GET /{id}`, `POST /{id}/status`
- **Payments**: `GET`, `POST`

### Common (`/api/common`)
- **Banks**: `GET`, `POST`, `PUT`, `GET /{id}`

## Status do Projeto

✅ **Estrutura Base**: 100% Completo
✅ **Entidades JPA**: 100% Completo
✅ **Repositories**: 100% Completo
✅ **Services**: 100% Completo (CRUD básico)
✅ **Controllers REST**: 100% Completo
✅ **DTOs e Validações**: 100% Completo

⚠️ **Pendente**:
- Autenticação JWT completa
- Testes unitários e de integração
- Documentação Swagger/OpenAPI
- Integrações avançadas entre módulos

Para mais detalhes, consulte [STATUS_PROJETO.md](STATUS_PROJETO.md).

## Licença

Este é um projeto governamental.

