Files
sigrhapf/Documents/sigfip/sigefp/DOCUMENTACAO_API.md
2026-05-19 11:41:28 +00:00

314 lines
10 KiB
Markdown

# 📚 Documentação da API SIGEFP
## 🌐 Acesso ao Swagger UI
Após iniciar a aplicação, acesse a documentação interativa do Swagger:
- **Swagger UI**: http://localhost:8081/swagger-ui.html
- **OpenAPI JSON**: http://localhost:8081/api-docs
- **OpenAPI YAML**: http://localhost:8081/api-docs.yaml
## 🔐 Autenticação
A API utiliza autenticação JWT (JSON Web Token). Para acessar os endpoints protegidos:
1. **Fazer login** em `/api/auth/login` para obter o token
2. **Incluir o token** no header `Authorization: Bearer {token}` em todas as requisições
### Exemplo de Login
```bash
POST /api/auth/login
Content-Type: application/json
{
"username": "usuario",
"password": "senha"
}
```
**Resposta:**
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"username": "usuario",
"fullName": "Nome Completo",
"email": "usuario@example.com",
"roles": ["ADMIN", "USER"]
}
```
### Usar o Token
```bash
GET /api/admin/users
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
```
## 📋 Endpoints Principais
### 🔑 Autenticação (`/api/auth`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| POST | `/api/auth/login` | Autenticar usuário | Não |
| POST | `/api/auth/refresh` | Renovar tokens | Não |
| POST | `/api/auth/logout` | Logout | Não |
### 👥 Administração (`/api/admin`)
#### Usuários (`/api/admin/users`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/admin/users` | Listar usuários (paginado) | Sim |
| GET | `/api/admin/users/{id}` | Buscar usuário por ID | Sim |
| POST | `/api/admin/users` | Criar usuário | Sim |
| PUT | `/api/admin/users/{id}` | Atualizar usuário | Sim |
| POST | `/api/admin/users/{id}/roles` | Associar roles ao usuário | Sim |
#### Roles (`/api/admin/roles`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/admin/roles` | Listar roles | Sim |
| GET | `/api/admin/roles/{id}` | Buscar role por ID | Sim |
| POST | `/api/admin/roles` | Criar role | Sim |
| PUT | `/api/admin/roles/{id}` | Atualizar role | Sim |
#### Auditoria (`/api/admin/audit-logs`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/admin/audit-logs` | Listar logs de auditoria (com filtros) | Sim |
### 🏛️ Organização (`/api/org`)
#### Ministérios (`/api/org/ministries`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/org/ministries` | Listar ministérios | Sim |
| GET | `/api/org/ministries/{id}` | Buscar ministério por ID | Sim |
| POST | `/api/org/ministries` | Criar ministério | Sim |
| PUT | `/api/org/ministries/{id}` | Atualizar ministério | Sim |
#### Unidades Organizacionais (`/api/org/org-units`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/org/org-units` | Listar unidades (com filtros) | Sim |
| GET | `/api/org/org-units/{id}` | Buscar unidade por ID | Sim |
| GET | `/api/org/org-units/tree/{ministryId}` | Árvore de unidades por ministério | Sim |
| POST | `/api/org/org-units` | Criar unidade | Sim |
| PUT | `/api/org/org-units/{id}` | Atualizar unidade | Sim |
#### Posições (`/api/org/positions`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/org/positions` | Listar posições (com filtros) | Sim |
| GET | `/api/org/positions/{id}` | Buscar posição por ID | Sim |
| POST | `/api/org/positions` | Criar posição | Sim |
| PUT | `/api/org/positions/{id}` | Atualizar posição | Sim |
### 👨‍💼 Recursos Humanos (`/api/rh`)
#### Agentes (`/api/rh/agents`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/rh/agents` | Listar agentes (paginado) | Sim |
| GET | `/api/rh/agents/{id}` | Buscar agente por ID | Sim |
| POST | `/api/rh/agents` | Criar agente | Sim |
| PUT | `/api/rh/agents/{id}` | Atualizar agente | Sim |
#### Folha de Pagamento (`/api/rh`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/rh/payroll-periods` | Listar períodos de folha | Sim |
| POST | `/api/rh/payroll-periods` | Criar período de folha | Sim |
| POST | `/api/rh/payroll-runs` | Criar execução de folha | Sim |
| GET | `/api/rh/payroll-runs/{id}` | Buscar execução de folha | Sim |
#### Transparência e Vida Laboral
A partir da versão de Dezembro/2024, o histórico de agentes foi substituído por uma **Linha do Tempo de Carreira** estruturada, conforme o Decreto 12-A/94.
| Método | Endpoint | Descrição | DTO de Resposta |
|--------|----------|-----------|-----------------|
| GET | `/api/rh/agents/{id}/history` | Linha do tempo profissional | `List<CareerTimelineDTO>` |
> [!NOTE]
> Para detalhes sobre a lógica de snapshots salariais (5/6 e 1/6) e regras de promoção, consulte a [Documentação Técnica da Vida Laboral](./DOCUMENTACAO_VIDA_LABORAL.md).
### 💰 Orçamento (`/api/budget`)
#### Exercícios Fiscais (`/api/budget/fiscal-years`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/budget/fiscal-years` | Listar exercícios fiscais | Sim |
| GET | `/api/budget/fiscal-years/{id}` | Buscar exercício por ID | Sim |
| GET | `/api/budget/fiscal-years/current` | Buscar exercício atual | Sim |
| POST | `/api/budget/fiscal-years` | Criar exercício fiscal | Sim |
| POST | `/api/budget/fiscal-years/{id}/open` | Abrir exercício fiscal | Sim |
| POST | `/api/budget/fiscal-years/{id}/close` | Fechar exercício fiscal | Sim |
#### Linhas Orçamentárias (`/api/budget/lines`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/budget/lines` | Listar linhas (com filtros) | Sim |
| GET | `/api/budget/lines/{id}` | Buscar linha por ID | Sim |
| POST | `/api/budget/lines` | Criar linha orçamentária | Sim |
| PUT | `/api/budget/lines/{id}` | Atualizar linha | Sim |
#### Execução Orçamentária (`/api/budget/execution`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/budget/execution` | Listar execuções (com filtros) | Sim |
| POST | `/api/budget/execution` | Registrar execução orçamentária | Sim |
### 💳 Tesouraria (`/api/treasury`)
#### Lotes de Pagamento (`/api/treasury/payment-batches`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/treasury/payment-batches` | Listar lotes (com filtros) | Sim |
| GET | `/api/treasury/payment-batches/{id}` | Buscar lote por ID | Sim |
| POST | `/api/treasury/payment-batches` | Criar lote | Sim |
| POST | `/api/treasury/payment-batches/{id}/status` | Atualizar status do lote | Sim |
#### Ordens de Pagamento (`/api/treasury/payment-orders`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/treasury/payment-orders` | Listar ordens (com filtros) | Sim |
| GET | `/api/treasury/payment-orders/{id}` | Buscar ordem por ID | Sim |
| POST | `/api/treasury/payment-orders` | Criar ordem de pagamento | Sim |
| POST | `/api/treasury/payment-orders/{id}/status` | Atualizar status da ordem | Sim |
#### Pagamentos (`/api/treasury/payments`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/treasury/payments` | Listar pagamentos (com filtros) | Sim |
| POST | `/api/treasury/payments` | Registrar pagamento | Sim |
### 🏦 Comum (`/api/common`)
#### Bancos (`/api/common/banks`)
| Método | Endpoint | Descrição | Autenticação |
|--------|----------|-----------|--------------|
| GET | `/api/common/banks` | Listar bancos (paginado) | Sim |
| GET | `/api/common/banks/{id}` | Buscar banco por ID | Sim |
| POST | `/api/common/banks` | Criar banco | Sim |
| PUT | `/api/common/banks/{id}` | Atualizar banco | Sim |
## 📦 Exemplos de Requisições
### Criar Usuário
```bash
POST /api/admin/users
Authorization: Bearer {token}
Content-Type: application/json
{
"username": "novousuario",
"fullName": "Novo Usuário",
"email": "novo@example.com",
"password": "senha123",
"isActive": true,
"roleIds": ["role-uuid-1", "role-uuid-2"]
}
```
### Criar Agente
```bash
POST /api/rh/agents
Authorization: Bearer {token}
Content-Type: application/json
{
"nationalId": "12345678901",
"fullName": "João Silva",
"email": "joao@example.com",
"hireDate": "2024-01-15",
"status": "ACTIVE",
"orgUnitId": "org-unit-uuid",
"positionId": "position-uuid"
}
```
### Criar Período de Folha
```bash
POST /api/rh/payroll-periods
Authorization: Bearer {token}
Content-Type: application/json
{
"year": 2024,
"month": 12,
"startDate": "2024-12-01",
"endDate": "2024-12-31"
}
```
## 🔄 Refresh Token
Quando o token de acesso expirar, use o refresh token para obter novos tokens:
```bash
POST /api/auth/refresh
Content-Type: application/json
{
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
```
## 📥 Exportar Coleção Postman
1. Acesse o Swagger UI: http://localhost:8081/swagger-ui.html
2. Clique em "Download" no topo da página
3. Selecione "OpenAPI 3.0 (JSON)"
4. Importe o arquivo no Postman ou Insomnia
## ⚠️ Códigos de Status HTTP
| Código | Descrição |
|--------|-----------|
| 200 | Sucesso |
| 201 | Criado com sucesso |
| 400 | Requisição inválida (validação falhou) |
| 401 | Não autenticado (token inválido ou ausente) |
| 403 | Não autorizado (sem permissão) |
| 404 | Recurso não encontrado |
| 500 | Erro interno do servidor |
## 🔒 Segurança
- Todos os endpoints (exceto `/api/auth/**` e `/actuator/**`) requerem autenticação JWT
- Tokens expiram em 24 horas
- Refresh tokens expiram em 7 dias
- Use HTTPS em produção
- Mantenha a chave secreta JWT segura
## 📝 Notas
- A paginação usa parâmetros `page` (padrão: 0) e `size` (padrão: 20)
- Ordenação usa `sortBy` e `sortDirection` (ASC/DESC)
- Datas devem estar no formato ISO 8601: `YYYY-MM-DD` ou `YYYY-MM-DDTHH:mm:ss`
- UUIDs devem estar no formato padrão UUID